SECTION 01データ分析(1)


データセットの基本情報を出力


read csv()関数を使用してデータを読み込む
'..'親フォルダを表示
# pandas 모듈 임포트
import pandas as pd
# read_csv() 함수로 데이터를 Dataframe 형태로 불러옵니다.
# pd.read_csv("파일경로를 포함한 파일명", sep="구분자")
# raw data를  상대 경로로 불러오기
file_path = '../1208data/chipotle.tsv'
chipo = pd.read_csv(file_path, sep='\t')
print(chipo.shape)
print("------------------------------")
print(chipo.info())
실행결과
(4622, 5)
------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4622 entries, 0 to 4621
Data columns (total 5 columns):
 #   Column              Non-Null Count  Dtype 
---  ------              --------------  ----- 
 0   order_id            4622 non-null   int64 
 1   quantity            4622 non-null   int64 
 2   item_name           4622 non-null   #object
 3   choice_description  3376 non-null   #object
 4   item_price          4622 non-null   #object
dtypes: int64(2), object(3)
memory usage: 180.7+ KB
None
shapeは、データ行と列のサイズを返します.
info()行と列の構成について

Chipotleデータの行と列およびデータの確認

# chipo라는 데이터 프레임에서 순서대로 10개의 데이터를 보여줍니다.
chipo.head(10)
print(chipo.columns)
print("-------------------------------")
print(chipo.index)
실행결과
Index(['order_id', 'quantity', 'item_name', 'choice_description',
       'item_price'],
      dtype='object')
--------------------------------
RangeIndex(start=0, stop=4622, step=1)
head(10)関数は上位10個のデータを表形式で出力する
columns(行のリスト)とindex(列のリスト)を呼び出すことで、データ行と列に関する情報を同時に出力できます.
  • order id:受注番号
  • 数量:物品注文数量
  • item name:注文品の名称
  • choice description:詳細選択注文品オプション
  • item price:注文品の価格情報
  • 数量とitem priceの数値フィーチャー


    quantityとitem priceの2つの特徴は連続型の特徴です
    連続的特徴は、身長や体重などの任意の値を有する連続的な数値形式である.
    次のコードの出力結果はdescribe()関数が表す特徴の基礎統計です.
    しかし、現在唯一存在する特徴は数量であるため、数量に関する情報のみが出力される.
    #order_id는 숫자의 의미를 가지지 않기 때문에 str으로 변환합니다.
    chipo['order_id'] = chipo['order_id'].astype(str)
    print(chipo.describe()) # chipo 데이터 프레임에서 수치형 피처들의 기초 통계량을 확인합니다.
    실행결과
              quantity
    count  4622.000000
    mean      1.075725
    std       0.410186
    min       1.000000
    25%       1.000000
    50%       1.000000
    75%       1.000000
    max      15.000000

    order-idとitem nameの個数


    order idとitem nameの2つの特徴はカテゴリ特徴である.
    ユニーク()関数を使用します.これにより、フィーチャーにいくつかのカテゴリが確保されます.
    #unique()함수로 범주형 피처의 개수 출력하기
    print(len(chipo['order_id'].unique())) # order_id의 개수를 출력합니다.
    print(len(chipo['item_name'].unique()))
    실행결과
    1834
    50

    一番多く注文したものの上位10位


    value counts()関数を用いてDataFrame['column']の形状を解析する
    DataFrame['column']は、シリーズという名前のオブジェクトを返します.
    value counts()関数は、これらのシリーズオブジェクトにのみ適用されます.
    #가장 많이 주문한 아이템 top 10 출력하기
    item_count = chipo['item_name'].value_counts()[:10]
    for idx, (val, cnt) in enumerate(item_count.iteritems(),1):
        print("Top", idx, ":", val, cnt)
    실행결과
    Top 1 : Chicken Bowl 726
    Top 2 : Chicken Burrito 553
    Top 3 : Chips and Guacamole 479
    Top 4 : Steak Burrito 368
    Top 5 : Canned Soft Drink 301
    Top 6 : Steak Bowl 211
    Top 7 : Chips 211
    Top 8 : Bottled Water 162
    Top 9 : Chicken Soft Tacos 115
    Top 10 : Chips and Fresh Tomato Salsa 110

    物品ごとの注文数量と総量


    Pandasのgroupby()関数は、データフレーム内の特定のフィーチャーに基づいてグループを作成します.
    これにより、パケット演算を適用できます.
    各品目の受注数と合計数を取得
    #아이템별 주문 개수를 출력합니다
    order_count = chipo.groupby('item_name')['order_id'].count()
    order_count[:10] #아이템별 주문 개수를 출력합니다.
    실행결과
    item_name
    6 Pack Soft Drink         54
    Barbacoa Bowl             66
    Barbacoa Burrito          91
    Barbacoa Crispy Tacos     11
    Barbacoa Salad Bowl       10
    Barbacoa Soft Tacos       25
    Bottled Water            162
    Bowl                       2
    Burrito                    6
    Canned Soda              104
    Name: order_id, dtype: int64
    #아이템별 주문 총량을 출력합니다
    item_quantity = chipo.groupby('item_name')['quantity'].sum()
    item_quantity[:10]
    실행결과
    item_name
    6 Pack Soft Drink         55
    Barbacoa Bowl             66
    Barbacoa Burrito          91
    Barbacoa Crispy Tacos     12
    Barbacoa Salad Bowl       10
    Barbacoa Soft Tacos       25
    Bottled Water            211
    Bowl                       4
    Burrito                    6
    Canned Soda              126
    Name: quantity, dtype: int64

    ビジュアル化


    tolist()とnumberfiのarange()関数を使用してx posを宣言し、0から50までの数値をグラフィックのx軸として使用します.
    y値(order cnt)は、受注総量のitem quantityに対応します.values.tolist()を入れる
    %matplotlib inline
    import numpy as np
    import matplotlib.pyplot as plt
    #아이템별 주문의 총량을 막대 그래프로 시각화
    item_name_list = item_quantity.index.tolist()
    #numpy.arange(시작, 끝, 간격)으로 배열 만들기
    x_pos = np.arange(len(item_name_list))
    order_cnt = item_quantity.values.tolist()
    #
    plt.bar(x_pos, order_cnt, align='center')
    plt.ylabel('ordered_item_count')
    plt.title('Distribution of all orderd item')
    #
    plt.show()