
はじめに
問40~問41のコードの説明を初心者や初学者でもわかるような方法でまとめました。
データサイエンス100本ノックのはじめ方は、以下のブログ記事を参考にしてください。
>>【Google Colabはじめ方】データサイエンス100本ノックーデータサイエンティスト協会
問40 全ての店舗と全ての商品を組み合わせると何件のデータとなるか調査したい。店舗(df_store)と商品(df_product)を直積した件数を計算せよ。
df_storeとdf_productの和なら、pd.concat()で行方向に連結すればよいですが、今回は直積なので、すべての組み合わせの結合、つまり、行の積となります。
今回、df_storeが52件、df_productは10030件のデータがあるので、直積した件数は、53 ×100030 = 531590です。これをコードで求めていきます。
その方法としては、df_storeとdf_productのデータフレームを外部結合します。
まず、2つのデータフレームの共通カラムがあるか探します。探し方は問37でやりました、setを用います。
df_store_columns = df_store.columns
df_product_columns = df_product.columns
df_and = set(df_store_columns) & set(df_product_columns)
df_and
しかし、共通カラムがありませんでした。
そこで、共通カラムを作ってしまいましょう。
df_store_tmp = df_store.copy()
df_product_tmp = df_product.copy()
df_store_tmp['key'] = 0
df_product_tmp['key'] = 0
これで、keyという共通カラムを作りましたので、これを外部結合し、lenで件数をはかります。
len(pd.merge(df_store_tmp,df_product_tmp,how='outer',on='key'))
なお、単純に両者の件数をかけるという方法もあります。
len(df_store) * len(df_product)
問41 レシート明細データフレーム(df_receipt)の売上金額(amount)を日付(sales_ymd)ごとに集計し、前日からの売上金額増減を計算せよ。なお、計算結果は10件表示すればよい。
まず、「(df_receipt)の売上金額(amount)を日付(sales_ymd)ごとに集計」します。
df_sales_amount_by_date = df_receipt[['sales_ymd','amount']].groupby('sales_ymd').sum().reset_index()
次に、「前日からの売上金額増減」を計算するには、当日の売上金額 ー 前日の売上金額をする必要があります。
これは、df_sales_amount_by_dateと同じデータフレームを1行下にずらしたデータフレームを列方向に結合し、両者のデータフレームの差分を取ることで、求めていきます。
列方向の結合は、pd.concat()で引数にaxis=1を使用します。
データフレームの行をずらすにはshift()を使用します。引数に数値を指定しなかった場合は、下方向に1行ずれるのがデフォルトです。なお、最後の行のデータは削除されます。
df_sales_amount_by_date = pd.concat([df_sales_amount_by_date,df_sales_amount_by_date.shift()],axis=1)
カラム名を以下のように変えましょう。
df_sales_amount_by_date.columns = ['sales_ymd','amount','lag_ymd','lag_amount']
最後に、diff_amountというカラム名をいれて、そこに差分の計算結果を表示しましょう。
df_sales_amount_by_date['diff_amount'] = df_sales_amount_by_date['amount'] - df_sales_amount_by_date['lag_amount']
これを10件表示します。
Pythonのコードやライブラリーについて知りたい場合
Pythonはデータ分析でよく使われている言語です。
この機会にPythonのコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。
データ分析入門・データサイエンス初心者・初学者向けにデータ分析でよく使うPythonをまとめました。
>>【データ分析初心者】Python構文~if文、format記法とf文字列~
>>【データ分析初心者】Python構文~for文、range関数、zip関数、enumerate関数~
>>【データ分析初心者】Python構文~無名関数lambda式、内包表記、map関数~
>>【データ分析初心者】Pandas~loc[]、iloc[]、スライス、drop()、isin()~
>>【データ分析初心者】Matplotlib、Seabornーscatter、hist、countplot 、barplot
独学でデータ分析をしている方へ
機械学習やデータサイエンス・データ分析を独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。