【第4回】pythonデータ分析100本ノックをやってみた (ノック16-20)

Python 機械学習

Python実戦データ分析100本ノックを、データサイエンス初心者の私と一緒にやっていきませんか?

今回は第4回、ノック16〜ノック20までをやっていきたいと思います。
Python実戦データ分析100本ノックは、pandas の使い方やデータサイエンスを実戦的に学べる書籍なのでぜひ手に取ってみてください。

Python実践データ分析100本ノック レビューでも実用的と高評価ですね。

ノック16:顧客名の揺れを補正しよう

kokyaku_data[“顧客名”].head()

 

uriage_data[“customer_name”].head()

まず、そのまま表示させてみましょう。

顧客台帳はスペースが含まれるが、売り上げ履歴の顧客名には

スペースが含まれていません。

kokyaku_data[“顧客名”] = kokyaku_data[“顧客名”].str.replace(“ ”, “”)

 

kokyaku_data[“顧客名”] = kokyaku_data[“顧客名”].str.replace(” “, “”)

 

kokyaku_data[“顧客名”].head()

ノック14 でやったように、半角、全角スペースを除去します。

 

ノック17:日付の揺れを補正しよう

まず、日付の形式と数値の形式が混在しているので、数値のものを抽出します。

str.isdigit(): 全ての文字が数字なら真、そうでなければ偽。

2行目:flg.is_serial.sum() は数値として書いてある行数を数えています。

flg_is_serial = kokyaku_data[“登録日”].astype(“str”).str.isdigit()

 

flg_is_serial.sum()

次に数値やスラッシュ区切りで取り込まれている数値を日付表記に変えます。

fromSerial = pd.to_timedelta(kokyaku_data.loc[flg_is_serial, “登録日”].astype(“float”), unit=”D”) + pd.to_datetime(“1900/01/01”)

 

fromSerial

fromString = pd.to_datetime(kokyaku_data.loc[~flg_is_serial, “登録日”])

 

fromString

concat で結合してデータを見てましょう。

kokyaku_data["登録日"] = pd.concat([fromSerial, fromString])
kokyaku_data

いい感じですね。

次は、登録年月と顧客数をgroupby で並べて集計しましょう。

そして、データ数も len でカウントします。

kokyaku_data[“登録年月”] = kokyaku_data[“登録日”].dt.strftime(“%Y%m”)

 

rslt = kokyaku_data.groupby(“登録年月”).count()[“顧客名”]

 

print(rslt)

 

print(len(kokyaku_data))

登録日に数値データが残っていないか確認しましょう。

flg_is_serial.sum() が 0になっていればOKです。

flg_is_serial = kokyaku_data[“登録日”].astype(“str”).str.isdigit()
flg_is_serial.sum()

ノック18:顧客名をキーに2つのデータを結合(ジョイン)しよう

ノック3でやった内容を思い出して、マージさせてみましょう。

customer_name は消しましょう。

join_data = pd.merge(uriage_data, kokyaku_data, left_on=”customer_name”, right_on=”顧客名”, how=”left”)

 

join_data = join_data.drop(“customer_name”, axis=1)

 

join_data

ノック19:クレンジングしたデータをダンプ(ファイル出力)しよう

ファイル出力するまえにデータ列を再配置しましょう。

dump_data = join_data[[“purchase_date”, “purchase_month”, “item_name”, “item_price”, “顧客名”, “かな”, “地域”, “メールアドレス”, “登録日”]]

 

dump_data

最後にcsvファイルに出力しましょう。

dump_data.to_csv(“dump_data.csv”, index=False)

ノック20:データを集計しよう

まず、ファイルを読み込みます。

import_data = pd.read_csv(“dump_data.csv”) import_data

購入年月ー商品

購入年月ー売り上げ金額

購入年月ー各顧客への販売数

購入年月ー地域での販売数

byItem = import_data.pivot_table(index=”purchase_month”, columns=”item_name”, aggfunc=”size”, fill_value=0) byItem

byPrice = import_data.pivot_table(index=”purchase_month”, columns=”item_name”, values=”item_price”, aggfunc=”sum”, fill_value=0) byPrice
byCustomer = import_data.pivot_table(index=”purchase_month”, columns=”顧客名”, aggfunc=”size”, fill_value=0) byCustomer
byRegion = import_data.pivot_table(index=”purchase_month”, columns=”地域”, aggfunc=”size”, fill_value=0) byRegion

最後に集計期間で購入してないユーザーのチェックをします。

away_data = pd.merge(uriage_data, kokyaku_data, left_on=”customer_name”, right_on=”顧客名”, how=”right”)

 

away_data[away_data[“purchase_date”].isnull()][[“顧客名”, “メールアドレス”, “登録日”]]

 

お疲れ様でした。これで2章は終了です。

続きは【第5回】python 実戦データ分析100本ノック第3章前半のまとめでお会いしましょう!

目次に戻りたい方はこちら