syun_nissi
@syun_nissi (syun nissi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python実践データ分析100本ノックの質問

解決したいこと

秀和システム社の表題の本に取り組んでいます。
ノック36のコードで一部不明点があり、お分かりの方がいたらご教示いただけますと幸いです。

該当するソースコード

year_months=list(uselog_months["年月"].unique())
['201804', '201805', '201806', '201807', '201808', '201809', '201810', 
'201811', '201812', '201901', '201902', '201903']


predict_data=pd.DataFrame()
for i in range(6,len(year_months)):
    tmp=uselog_months.loc[uselog_months["年月"]==year_months[i]]
    tmp.rename(columns={"count":"count_pred"},inplace=True)  
    for j in range(1,7):
        tmp_before=uselog_months.loc[uselog_months["年月"]==year_months[i-j]]
        del tmp_before["年月"]
        tmp_before.rename(columns={"count":"count_{}".format(j-1)},inplace=True)
        tmp=pd.merge(tmp,tmp_before,on="customer_id",how="left")
    predict_data=pd.concat([predict_data,tmp],ignore_index=True)
print(predict_data.head())

出力結果

       年月 customer_id  count_pred  count_0  count_1  count_2  count_3  count_4  count_5
0  201810    AS002855           3      7.0      3.0      5.0      5.0      5.0      4.0
1  201810    AS008805           2      2.0      5.0      7.0      8.0      NaN      NaN
2  201810    AS009373           5      6.0      6.0      7.0      4.0      4.0      3.0
3  201810    AS015233           7      9.0     11.0      5.0      7.0      7.0      NaN
4  201810    AS015315           4      7.0      3.0      6.0      3.0      3.0      6.0

上記コードの不明点

①4行目の「predict_data=pd.DataFrame()」は空のデータフレームを作成しているのでしょうか。その意図はなぜでしょうか?

②10行目で「 del tmp_before["年月"]」とdeleteをしているのはなぜでしょうか。

③12、13行目でtmpとtmp_beforeをマージしてtmpとし、空のデータフレーム「predict_data」と結合しているということでしょうか?
 また、「ignore_index=True」としているのはなぜでしょうか?

細かい点で恐縮ですが、よろしくお願いいたします。

0

1Answer

課題への回答ではなくて恐縮です。

出版社の下記のページにて、サンプルコードのダウンロード、正誤表、補足情報が提供されています。
Python実践データ分析100本ノック > サポート
課題のコードは、サンプルコード_20201021/4章/4章_顧客の行動を予測する10本ノック_answer.ipynbの996行辺りの記載に基づいているものと思われます。

0Like

Comments

  1. @syun_nissi

    Questioner

    どうもありがとうございます。プログラム自体は動くので間違ってはいません。

    また質問②についてはよく考えたらわかりました。
    →別の年月の情報をセットしているので、あとでマージする際には年月columnは不要だからです。

  2. `predict_data = pd.DataFrame()`は、その後の`for`ループの最後で、`predict_data = pd.concat()`するからではないでしょうか。
    最初に空にしておいて、繰り返し毎に付け足していっているのだと思います。

    (リンク先をご紹介させていただいたのは、「他に回答される方が引用外のコードを見たいと思われた際に入手できるように」というお節介です。コードが同じであることを確認した上で書かせていただきました。出過ぎたことをして申し訳ありません。)
  3. @syun_nissi

    Questioner

    なるほど、お気遣いいただきありがとうございます。
    確かに掲載コードだけでは全貌がわかりませんね。
    わざわざありがとうございました。

    predict_data = pd.DataFrame()のところも空のリストを作るように、空のデータフレームを作成しているのでは、と私も感じています。

Your answer might help someone💌