やはりコンペでスコアが伸びないとやる気は削がれるもので、Discussion を眺めて同様の想いを打ち明ける人々と、それに対する玄人たちのアドバイスを読んで自分を慰めるなどした。
https://www.kaggle.com/c/30-days-of-ml/discussion/267237#1487797
First, don't be frustrated. Keep in mind the following:
Notice the difference between the results in the Public Leaderboard. It's minimal! That means that your solution is great!
In a real-life production system, that difference will hardly matter. This is competitive machine learning, but that final squeeze is often not necessary outside of Kaggle.
The most important thing: You learned a ton to get to a real, functioning model!
とはいえコンペではこれ以上何をしろと?という感もある。ハイパーパラメータのチューニング、クロスバリデーション、カテゴリデータの変換方法の工夫、あたりだろうか。
いずれにしても、ほぼコピペでないと動くコードが書けないのでは、できることの幅が狭すぎると感じる。Python というよりはデータ処理に特有のもののような気もする。
競争より学習を、とのアドバイスに従い、Kaggle の他の学習コースを(今回の 30 日チャレンジのカリキュラムには含まれていないが)やってみることにする。Pandas と Data Visualization のどちらから先にやろうかと考え、データ分析スキルを上げるために Data Visualization を先にやろうと一度は考えたものの、それより先にデータ処理のコーディングスキルを上げる方が先決かなと思ったので Pandas をやることにする。とにかくコードをもう少し流暢に書けるようにならないと、分析もおぼつかない。
というわけで Pandas のコース、Lesson 1。Pandas は去年少し使い方を学んだけど、何度やり直しても構わない。
Tutorial
Creating, Reading and Writing | Kaggle
pd.DataFrame()
の引数は dict (key = 列名、value = list)
デフォルトだと行にラベルがつかない(0, 1, ... と数字になる)。行ラベルをつけたい場合は pd.DataFrame(dict, index=list)
で指定する。
DataFrame がテーブル(表)だとしたら Series は値のリスト。pd.Series(list)
で作る。
pd.Series()
も index=list で行ラベルをつけられる。Series は DataFrame の列に相当する。ただし、 Series は「列名」は持たない。Series 自体の「名前(name)」は持つ。
pd.Series([30, 35, 40], index=['2015 Sales', '2016 Sales', '2017 Sales'], name='Product A')
pd.read_csv(file_path)
で CSV を DataFrame に読み込める。
df.shape
属性で(行数、列数)という tuple を得られる(関数呼び出しではない)。
df.head()
で先頭 5 行を見る(こちらは関数呼び出し)。
read_csv
に index_col=列番号
をつけて、行ラベルを指定する。
pd.read_csv(file_path, index_col=0)
Exercise
https://www.kaggle.com/kyanny/exercise-creating-reading-and-writing/edit
# Q1 fruits = pd.DataFrame({'Apples': [30], 'Bananas': [21]}) # Q2 fruit_sales = pd.DataFrame({'Apples': [35, 41], 'Bananas': [21, 34]}, index=['2017 Sales', '2018 Sales']) # Q3 ingredients = pd.Series(['4 cups', '1 cup', '2 large', '1 can'], index=['Flour', 'Milk', 'Eggs', 'Spam'], name='Dinner') # Q4 reviews = pd.read_csv('../input/wine-reviews/winemag-data_first150k.csv', index_col=0) # Q5 animals.to_csv('cows_and_goats.csv')
やはりコードを書いてると気持ちいい。
演習だけだとあまり身につかない感じがしたので、空の notebook を作っておさらいをした。
今気づいたけど、はてなブログ、Jupyter Notebook の内容を埋め込み(展開して貼り付けること)ができるのか。すごい。Jupyter Notebook 全般ではなく Kaggle の URL だから可能なのだろうか?