【Python実践データ分析100本ノック】ノック1-5

python実践データ分析100本ノック解説 python データ分析
スポンサーリンク

本記事では学習のアウトプットとして、『Python実践データ分析100本ノック』に書かれている各ノックのコードのうち、難解と思われる部分の意味を解説していきます。「本に書かれている解説だけでは理解が難しい(;一_一)」と感じた方、この記事を読んで理解の一助となれば幸いです。

Python実戦データ分析100本ノックは、データの集計や分析のためのpandasや、グラフ描画に使用するmatplotlib、機械学習を行うためのscikit-learnなど、データ分析に欠かせない要素を実際に自分で手を動かしながら学ぶことができる本です。

今回は第1回として、ノック1-5をやっていきます。

 

追記現在第二版が2022年6月に出版されています

本記事は第1版の内容の解説です

第二版の解説記事もいずれ書かせていただこうと思っていますので今しばしお待ちください!

スポンサーリンク

第1章 ウェブからの注文数を分析する10本ノック

この章では、データファイルが一元管理されておらず、さまざまなファイルに分散しているデータを読み込むことから始まり、分散していたデータ同士を結合、必要な列を抽出する、といった加工処理を施していきます。最終的には、加工したデータから月別・商品別といったグループの分け方でそれぞれのデータの集計を行い、グラフを描きます。

ノック1:データを読み込んでみよう

#PythonライブラリのPandasの読み込み
import pandas as pd
#pandasのread_csvを使用したcsvファイルの読み込み
#読み込んだファイルを格納するための変数(customer_master)宣言
customer_master = pd.read_csv("customer_master.csv")
#先頭五行の表示
customer_master.head()

pandasをpdという名前をつけてインポートし、”customer_master.csv”というファイルを読み込んで、customer_masterという名前の変数に代入しています。

ノック2:データを結合(ユニオン)してみよう

#Pandasのconcatというメソッドを使用して、([])内に指定したオブジェクトの結合
#指定したオブジェクト(今回は、ノック1でインポートしたtransaction_1, transaction_2)
#ignore_index=True:「結合時に付与されていたindexを無視して新たに連番を振る」
transaction = pd.concat([transaction_1, transaction_2], ignore_index=True)
transaction.head()

Pandasのconcatメソッドを使用して、二つのデータを縦方向(行数を増やす)に結合しています。

ノック3:売上データを結合(ジョイン)してみよう

#Pandasのmergeメソッドは結合したいデータを指定し結合します。
#結合時に重複が出ないようにtransactionのうち、列を指定しています。
#指定したデータ(今回は、transaction_detail,とtransaction)
#on="transaction_id"で、二つの結合対象のデータの中にある共通キーをtransaction_id"として結合します。
join_data =pd.merge(transaction_detail, transaction[["transaction_id", "payment_date", "customer_id"]], on="transaction_id", how="left")
joined_transaction.head()

ノック2のconcatとは違うmergeを使用して、結合したいデータのうち、共通キーとなる列を指定して、二つのデータを横方向(列数を増やす)に結合しています。横方向に結合するとき、結合対象のデータの内容によっては、同じ列を持っている場合があるので、共通キーを指定したり、ベースとなるデータがどちらかを指定しています。

ノック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()

こちらは、ノック3と同じ要領でjoin_dataをベースにcustomer_master,item_masterをさらに結合しています。ここまでのノックを通してバラバラだったデータを1つに結合しています。

ノック5:必要なデータ列を作ろう

#join_dataのquantity列とitem_price列を指定し、それらを*で掛け算し、price列という列に格納しています。
join_data["price"] = join_data["quantity"] * join_data["item_price"]
join_data[["quantity", "item_price", "price"]].head() 

join_dataの中にあるquantity,item_priceという二つの列を用いてpriceという名前の売上列を新しく作っています。

ここまでで、ノック1~5は完了です。お疲れ様でした。いきなりグラフを書いたりするようなことはできませんが、手動でグラフを書くときにも同じような下準備が必要だったりしますよね。今回のノックではその部分を行うことができました。次回のノックからは、実際にデータ分析を行っていきます。引き続きよろしくお願いいたします(^^)/。