@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Kaggle: Pandas のコースに着手: Lesson 3

このエクササイズはちょっとイマイチ消化不良だった。

1, 2, 3, 4, はレッスンに載ってたメソッドを呼ぶだけなので、簡単すぎる。

逆に 5 は、points-to-price の意味がよくわからなかったし、idxmax() も完全に new で、かつ idxmax() を使わない方法も思いつかないので厳しかった。 と書いてて、エレガントではない別解を思いついた。

reviews['points_to_price_ratio'] = reviews.points / reviews.price
max_points_to_price_ratio = reviews.points_to_price_ratio.max()
x_wine = reviews.loc[reviews.points_to_price_ratio == max_points_to_price_ratio]
bargain_wine = x_wine.iloc[0].title

全ての行について比率を計算し、その結果を DataFrame に新しい列として追加する。追加した列の値の最大値を得る。その最大値の列データを持つ行を得る。その行の title 属性が求めるデータ。

6 も正解できなかった。問題文の英語の意味を読解できてなかった。description.count('tropical') で単語の出現回数を数えたり、sum() が思いつかなくて values_count()[True] とか無理やりな形でデータを得たり、結果の数を足し合わせて int64 だけど Series とデータ型があってないというエラーで詰まり、結局解答を見た。求められていたのは、データが二行だけの Series オブジェクトを作れ、だった。元の DataFrame に列を足すのか?とまでは考えたが、それだと各行にどんな数字を入れるべきか不明だと思って思考停止してしまった。

7 これも問題読解が。。これは問題文が曖昧なのが悪い。apply() を使うことと適用する関数のアルゴリズムはあってて、'3 stars' みたいな文字列を返してるのが違っていた。正解は 3 とか数字だった。問題文に 3 stars とか書いてあるからその通りに読み取っただけなのに。

今回のエクササイズはだいぶ苦戦した。レッスンと同日にやらなかったから内容を忘れてたせいか、内容が難しくなってきてるのか、前のレッスンの内容と複合だからごっちゃになったのか。

Exercise: Summary Functions and Maps | Kaggle