[データ解析]データ加工1


本明細書で使用する関数:pd.concat, pd.merge, isnull().sum(), describe(), groupby, pivot_table

学習データ加工プロセス


1.データの取得


pd.read csv(「データ位置」,index col=0):csvファイルを取得する関数を表し、index col=0は0列目をインデックスとして指定します.
ダウンロード
  • データ:https://github.com/wikibook/pyda1002
  • # customer_master : 고객 데이터, item_master : 취급 상품 데이터, transaction_1 : 구매내역 데이터, transaction_detail_1 : 구매내역 상세 데이터 
    customer_master = pd.read_csv('pyda100-master/1장/customer_master.csv')
    item_master = pd.read_csv('pyda100-master/1장/item_master.csv')
    transaction_1 = pd.read_csv('pyda100-master/1장/transaction_1.csv')
    transaction_detail_1 = pd.read_csv('pyda100-master/1장/transaction_detail_1.csv')
    transaction_2 = pd.read_csv('pyda100-master/1장/transaction_2.csv')
    transaction_detail_2 = pd.read_csv('pyda100-master/1장/transaction_detail_2.csv')

    2.連結データ(縦)


    pd.concat([連結データ1,連結データ2],ignore index=True):垂直単純連結データの関数
    pd.concat : 데이터프레임의 세로 방향 결합
    transaction = pd.concat([transaction_1, transaction_2], ignore_index=True)
    transaction_detail = pd.concat([transaction_detail_1, transaction_detail_2], ignore_index=True)
    transaction.head()

    3.販売データ間の結合(連結)


    pd.merge(データ1、データ2、on=「データムキー」、how=「結合方式」):データムデータを決定し、これに基づいてデータ(横方向)をマージします.
    join_data = pd.merge(transaction_detail, transaction[["transaction_id",'payment_date', 'customer_id']], on='transaction_id', how='left')
    join_data.head()

    4.マスターデータのマージ

    join_data = pd.merge(join_data, customer_master, on='customer_id', how='left')
    join_data = pd.merge(join_data, item_master, on='item_id', how='left')
    join_data.head()

    5.必要なデータ列の作成


    df[[新しいカラム名]=値
    上記の形式で新しい列を作成できます.
    join_data['price'] = join_data['quantity'] * join_data['item_price']
    join_data[['quantity', 'item_price', 'price']].head()

    6.毎月の統計


    dataframe.dtypes:データ変数のタイプを通知する
    pd.to datetime():datetime形式に変換
    groupby(「集計したいコラム」).統計方法.表示する列:データを必要なグループごとに統計およびレポートする関数
    join_data.dtypes
    
    join_data['payment_date'] = pd.to_datetime(join_data['payment_date']) # datetime 형으로 변환 
    join_data['payment_month'] = join_data['payment_date'].dt.strftime("%Y%m") # payment_month를 연월 단위로 작성. strftime --> 년, 월의 추출이 가능
    join_data[['payment_date', 'payment_month']].head()
    
    # 그룹별로 집계하기 
    join_data.groupby('payment_month').sum()['price']   # groupby('집계하고 싶은 칼럼').집계 방법.표시할 컬럼

    7.月別商品統計データ


    groupby():パケットデータ処理
    pivot table():データの再加工
  • groupbyに出力したいコラムが複数ある場合は、リスト形式に指定できます.
  • pivot table:行と列を指定できます.pivot table(データ,index="指定行",columns="指定列",value="統計したい列",aggfunc="統計")

  • 8.各商品の販売傾向を示す

    graph_data = pd.pivot_table(join_data, index='payment_month', columns='item_name', values='price', aggfunc='sum')
    graph_data.head()
    
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    plt.plot(list(graph_data.index), graph_data['PC-A'], label='PC-A')
    plt.plot(list(graph_data.index), graph_data['PC-B'], label='PC-B')
    plt.plot(list(graph_data.index), graph_data['PC-C'], label='PC-C')
    plt.plot(list(graph_data.index), graph_data['PC-D'], label='PC-D')
    plt.plot(list(graph_data.index), graph_data['PC-E'], label='PC-E')
    plt.legend()