BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Python】データ分析:表の結合からグラフ化まで

データ分析,DataAnalytics,Python,Study,Programing こんにちは!BFT名古屋支店の猫です。
最近Pythonを使ってデータ分析の勉強をしているので、
学んだことを少しずつ記事にしていきたいと思います。

実行環境

f:id:bftnagoya:20210520184428p:plain:h150

やりたいこと

今回は、ECサイトの売り上げを例に

  • データの結合
  • ピボットテーブルの作成
  • グラフの作成

のやり方について説明したいと思います。
以下の4種類6個のデータを整理して、簡単な分析を行います。
f:id:bftnagoya:20210520171336j:plain

データを整理し始める前に、データの中身を見てみましょう。
csvファイルを読み込む際には、pandasというライブラリを使用します。

  • 購入記録

    購入記録(konyu_data_1.csv)

  • 詳細購入記録

    詳細購入記録 (konyu_detail_1.csv)

  • 顧客情報

    顧客情報 (kokyaku_data.csv)

  • 商品情報

    商品情報 (item_data.csv)

各ファイルにどのようなデータが入っているかを確認できましたので、
さっそくデータの整理をしていきます。

データの結合(ユニオン・ジョイン)

まずはデータの結合を行います。
ユニオンとジョインのやり方について説明します。

ユニオン

ユニオンとは、複数データを行方向に結合(縦結合)させることを言います。

f:id:bftnagoya:20210520182504j:plain:h200
ユニオンのイメージ

2つの購入記録データをユニオンしてみます。
ユニオンの処理にはpandasのconcatという関数を使用します。
変数transaction_1とtransaction_2にはそれぞれ購入記録①と②のデータが格納されています。
f:id:bftnagoya:20210520183828p:plain:h40

きちんとユニオンできているか、行数を表示させて確認してみます。

5000+1786=6786 となっているのでユニオンできていることが確認できました。

続いて、2つの詳細購入記録についても、同じようにユニオンしていきます。
変数transaction_detail_1とtransaction_detail_2には、それぞれ詳細購入記録①と②のデータが格納されています。

5000+2144=7144となっているので、購入詳細記録もユニオンできたことが分かります。

ジョイン

ジョインとは、複数データを列方向に結合(横結合)させることを言います。

f:id:bftnagoya:20210604094901j:plain:h230
ジョインのイメージ

では、購入記録①+②と、詳細購入記録①+②をジョインしてみます。
ジョインの処理にはpandasのmergeという関数を使用します。
一つ目と二つ目の引数では結合するテーブルを、三つ目と四つ目の引数では結合の仕方を指定しています。
(結合の仕方について、詳しくはpandas.DataFrame.merge — pandas 1.2.4 documentation をご覧ください。)
変数transaction_detailとtransactionはそれぞれ、詳細購入記録①と②を縦結合(ユニオン)したデータと、購入記録①と②を縦結合したデータが格納されています。
f:id:bftnagoya:20210608155250p:plain:h230

transaction_detailのテーブルに"payment_date"列と"customer_id"列が追加され、無事にジョインできたことが確認できました。

同様に、顧客情報と商品情報もジョインしていきます。
print(join_data.columns)で列名のリストを表示させています。
f:id:bftnagoya:20210608155125p:plain:h120 f:id:bftnagoya:20210608155140p:plain:h120

テーブルにさらに"item_name_y"列、"itam_price_y"列、"item_name"列、"item_price"列が追加されています。
こちらも無事にジョインできました。

ピボットテーブルの作成

続いてピボットテーブルの作成を行います。
例として、月ごとの各商品の売り上げをまとめてみます。

月ごとにまとめるためには、各データが何年何月のものかが分からないといけません。
そのため、"payment_date"列の情報をもとに"payment_month"列を作成します。
panadasのto_datetimeという関数でdatetime型に揃えた後、df.strftimeでYYYYMMのフォーマットに変換しています。
f:id:bftnagoya:20210609160050p:plain:h250

情報が揃ったので、ピボットテーブルを作成します。
ピボットテーブルの作成には、pandasのpivot_tableという関数を使います。
f:id:bftnagoya:20210608154948p:plain:h250
これだけでも、各商品がいつどれだけ売れたのかを確認するには十分です。

グラフの作成

最後に、先ほど作成したピボットテーブルをグラフにします。
グラフの作成には、matplotlibというライブラリのplotという関数を使用します。
まずは一つの商品について出力させてみます。
f:id:bftnagoya:20210608150712p:plain:h300
グラフが出てきました。
先ほど作成したピボットテーブルと照らし合わせても、正しく描画できていそうです。

同じように、他の4種類についても出力させてみます。
線が多いのでplt.legend()で凡例を追加しています。
f:id:bftnagoya:20210608151255p:plain:h350

商品ごとの売り上げ金額をグラフで確認することができました。
グラフにすると、ピボットテーブルでは分かりにくかった特徴が見えることもあります。
今回は、”PC-E”という商品が売り上げを牽引していることが一目瞭然になりました。

おわりに

今回はデータの整理を中心にご説明しました。
なんやかんやで立派なグラフができましたね。

データに手を加える際には、狙った処理がなされているかどうか、弊害が起きていないかどうかなど、慎重にチェックを行いながら進めることが重要です。
そちらについても追々ご紹介していきたいと思います。


参考文献

Python実践データ分析100本ノック
株式会社 秀和システム
下山輝昌 / 松田雄馬 / 三木孝行
p16-35 www.shuwasystem.co.jp