見出し画像

『Python実践データ分析100本ノック』 ノック1〜8

今回は、『Python実践データ分析100本ノック』を読んで学んだことをアウトプットします。

unzipコマンドで日本語が文字化けした際の文字コード指定

まずは、本書のサンプル(「sample_100knocks.zip」をダウンロードしました。
zipで圧縮されているので、unzipで展開してみると…

ありゃりゃ、展開したフォルダの名前が文字化けしてちゃいました。

画像1

こちらのサイトを参考に、-Oオプションを使って再度展開してみました。

unzip -O sjis hoge.zip

文字化けすることなく、展開することができました。

尚、今回使用したオプションは、-O(大文字の「オー」)であり、-o(小文字の「オー」)ではありませんので、ご注意を!

最初、-o(小文字の「オー」)を指定してエラーになってしまいました^^;

データを結合(ユニオン)

ユニオンは、データ数を行方向に増やす(縦に結合する)ことです。
ユニオンを行うには、pandasのconcatメソッドを用います。

データを結合(ジョイン)

ジョイン(横方向に結合)する場合、しっかりと主軸になるデータを考えつつ、どの列をキーにジョインするのかを考えていきます。今回の場合、主軸に置くデータは最も粒度が細かい transaction_detail になります。

次に、①足りない(付加したい)データ列は何か? ②共通するデータ列は何か? を考えます。

ジョインは、pandasのmergeメソッドを使って行います。

join_data = pd.merge(transaction_detail, transaction[['transaction_id', 
       'payment_date', 'customer_id']], on='transaction_id', how='left')
主軸にするtransaction_detail、結合するtransactionデータの必要な列のみを引数に渡して、ジョインキーとしてtransaction_idを、ジョインの種類としてレフトジョインを指定しています。
今回は、transaction_detailをメインに結合しているので、レフトジョインとなります。

欠損値の状況を確認

データ分析を進めていく上で、まずは大きく2つの数字を知る必要があります。
1つ目は欠損している値の状況、2つ目は全体の数字感です。

欠損値の数を出力するには、isnull()とsum()を組み合わせます。
isnull()を用いると、欠損値をTrue/Falseで返してくれて、そのTrueの数をそれぞれの列ごとにsum()で計算します。

2つ目の全体の数字感については、describe()で各種統計量を出力します。

年月日の文字列の列をdatetime型に変換

今回加工したいデータは、payment_dateでデータ型を確認すると、object型となっています。これをdatetime型に変更するには、pandasのto_datetime()を用います。

join_data['payment_date'] = pd.to_datetime(join_data['payment_date'])
join_data['payment_month'] = join_data['payment_date'].dt.strftime('%Y%m')

pandasのdatetime型は、dtを使うことで、年のみを抽出したりするなど、様々なことが可能です。今回は、strftimeを使用し、文字列として年月を作成しました。



サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪