【kaggle】タイタニックのコンペ(3)
Kaggleで定番のタイタニック号の生存者の分析をPythonで行う記録。
↓コンペのサイトはここです。
Titanic: Machine Learning from Disaster | Kaggle
Pythonによる分析の一例をManav Sehgalさんのカーネルを参考に(と言いうかこれに沿って)行います。
↓Manav Sehgalさんの分析手順はここで確認ができます。
Titanic Data Science Solutions | Kaggle
12.定量的属性データの特徴を確認する。
#describe()メソッドで定量的属性データの特徴が分かる。 In [25]: train_df.describe() Out[25]: PassengerId Survived Pclass Age SibSp \ count 891.000000 891.000000 891.000000 714.000000 891.000000 mean 446.000000 0.383838 2.308642 29.699118 0.523008 std 257.353842 0.486592 0.836071 14.526497 1.102743 min 1.000000 0.000000 1.000000 0.420000 0.000000 25% 223.500000 0.000000 2.000000 20.125000 0.000000 50% 446.000000 0.000000 3.000000 28.000000 0.000000 75% 668.500000 1.000000 3.000000 38.000000 1.000000 max 891.000000 1.000000 3.000000 80.000000 8.000000 Parch Fare count 891.000000 891.000000 mean 0.381594 32.204208 std 0.806057 49.693429 min 0.000000 0.000000 25% 0.000000 7.910400 50% 0.000000 14.454200 75% 0.000000 31.000000 max 6.000000 512.329200 #トレーニングデータセットの標本数は891名である。全体の標本(クルーと乗客の合計)2,224名のうち、約40%の標本であたる。 #生死に関する属性データは1と0である。 #トレーニングデータセットでは約38%が生き残ったが、実際の全体の生存率は約32%である。 #SibSp – タイタニックに同乗している兄弟/配偶者の数 #ほとんどの乗員乗客(75%以上)は親と子供が同乗していない。(parch – タイタニックに同乗している親/子供の数) #約30%の乗客には姉妹兄弟がいる。 #運賃は乗客によって大きく異なる。50%が14ドル以下だが、最高は512ドル。 #高齢者も少数含まれる。 #パーセンタイルを設定することで、任意の区切りが可能。 In [27]: train_df.describe(percentiles=[.1, .2, .3, .4, .5, .6, .7, .8, .9, .99]) Out[27]: PassengerId Survived Pclass Age SibSp \ count 891.000000 891.000000 891.000000 714.000000 891.000000 mean 446.000000 0.383838 2.308642 29.699118 0.523008 std 257.353842 0.486592 0.836071 14.526497 1.102743 min 1.000000 0.000000 1.000000 0.420000 0.000000 10% 90.000000 0.000000 1.000000 14.000000 0.000000 20% 179.000000 0.000000 1.000000 19.000000 0.000000 30% 268.000000 0.000000 2.000000 22.000000 0.000000 40% 357.000000 0.000000 2.000000 25.000000 0.000000 50% 446.000000 0.000000 3.000000 28.000000 0.000000 60% 535.000000 0.000000 3.000000 31.800000 0.000000 70% 624.000000 1.000000 3.000000 36.000000 1.000000 80% 713.000000 1.000000 3.000000 41.000000 1.000000 90% 802.000000 1.000000 3.000000 50.000000 1.000000 99% 882.100000 1.000000 3.000000 65.870000 5.000000 max 891.000000 1.000000 3.000000 80.000000 8.000000 Parch Fare count 891.000000 891.000000 mean 0.381594 32.204208 std 0.806057 49.693429 min 0.000000 0.000000 10% 0.000000 7.550000 20% 0.000000 7.854200 30% 0.000000 8.050000 40% 0.000000 10.500000 50% 0.000000 14.454200 60% 0.000000 21.679200 70% 0.000000 27.000000 80% 1.000000 39.687500 90% 2.000000 77.958300 99% 4.000000 249.006220 max 6.000000 512.329200
13.定性的属性データの特徴を確認する。
#includeに対応するアルファベットをO(オー)にすれば、 #カテゴリカルデータの特徴を知ることができる。 In [32]: train_df.describe(include=["O"]) Out[32]: Name Sex Ticket Cabin Embarked count 891 891 891 204 889 unique 891 2 681 147 3 top Becker, Miss. Marion Louise male CA. 2343 G6 S freq 1 577 7 4 644 #全員異なる名前を持つ。 #男性は65%(577/891)。 #出港地は3種類あり、Sが最も使われた(644/889)。 #チケットの22%は重複した名称を持つ。
【kaggle】タイタニックのコンペ(2)
Kaggleで定番のタイタニック号の生存者の分析をPythonで行う記録。
↓コンペのサイトはここです。
Titanic: Machine Learning from Disaster | Kaggle
Pythonによる分析の一例をManav Sehgalさんのカーネルを参考に(と言いうかこれに沿って)行います。
↓Manav Sehgalさんの分析手順はここで確認ができます。
Titanic Data Science Solutions | Kaggle
4.必要なパッケージをインポートする。
#データの整理と分析用 In [1]: import pandas as pd In [2]: import numpy as np In [3]: import random as rnd #データの視覚化 In [4]: import seaborn as sns In [5]: %matplotlib Using matplotlib backend: TkAgg #IPythonでmatplotlibを使う場合に必要。Jupyter notebookなら%matplotlib inlineのマジックコマンドが必要 In [6]: import matplotlib.pyplot as plt #機械学習用 In [8]: from sklearn.linear_model import LogisticRegression In [9]: from sklearn.ensemble import RandomForestClassifier In [10]: from sklearn.neighbors import KNeighborsClassifier In [12]: from sklearn.naive_bayes import GaussianNB In [13]: from sklearn.linear_model import Perceptron In [14]: from sklearn.linear_model import SGDClassifier In [15]: from sklearn.tree import DecisionTreeClassifier
5.分析用のデータをPandasのデータフレームに読み込む。
In [21]: train_df=pd.read_csv('train.csv') In [22]: test_df=pd.read_csv('test.csv') In [26]: combine=[train_df, test_df] #変数のデータタイプを確認 In [31]: type(test_df) Out[31]: pandas.core.frame.DataFrame In [32]: type(combine) Out[32]: list
6.データセットの属性を確認する。
In [33]: print(train_df.columns.values) ['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch' 'Ticket' 'Fare' 'Cabin' 'Embarked'] #定性的属性(Categirucal feature)と定量的属性(Numerical feature)を見分ける。 #定性的属性は、名義尺度(norminal scale)、順序尺度(ordinal sclae)に、定量的属性は間隔尺度(interval scale)、比例尺度(ratio scale)に分類できる。
7.データセットの一部のデータを確認する。
In [36]: train_df.head() Out[36]: PassengerId Survived Pclass ... Fare Cabin Embarked 0 1 0 3 ... 7.2500 NaN S 1 2 1 1 ... 71.2833 C85 C 2 3 1 3 ... 7.9250 NaN S 3 4 1 1 ... 53.1000 C123 S 4 5 0 3 ... 8.0500 NaN S [5 rows x 12 columns] #データフレームの列数の表示を増やしたいとき In [38]: pd.set_option('display.max_columns', 100) #最大100列とする場合 In [39]: train_df.head() Out[39]: PassengerId Survived Pclass \ 0 1 0 3 1 2 1 1 2 3 1 3 3 4 1 1 4 5 0 3 Name Sex Age SibSp \ 0 Braund, Mr. Owen Harris male 22.0 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 2 Heikkinen, Miss. Laina female 26.0 0 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 4 Allen, Mr. William Henry male 35.0 0 Parch Ticket Fare Cabin Embarked 0 0 A/5 21171 7.2500 NaN S 1 0 PC 17599 71.2833 C85 C 2 0 STON/O2. 3101282 7.9250 NaN S 3 0 113803 53.1000 C123 S 4 0 373450 8.0500 NaN S In [43]: train_df.tail() Out[43]: PassengerId Survived Pclass Name \ 886 887 0 2 Montvila, Rev. Juozas 887 888 1 1 Graham, Miss. Margaret Edith 888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" 889 890 1 1 Behr, Mr. Karl Howell 890 891 0 3 Dooley, Mr. Patrick Sex Age SibSp Parch Ticket Fare Cabin Embarked 886 male 27.0 0 0 211536 13.00 NaN S 887 female 19.0 0 0 112053 30.00 B42 S 888 female NaN 1 2 W./C. 6607 23.45 NaN S 889 male 26.0 0 0 111369 30.00 C148 C 890 male 32.0 0 0 370376 7.75 NaN Q #データフレームの行数の表示を増やしたいとき In [40]: pd.set_option('display.max_rows', 10) #最大10行とする場合
8.混在データタイプの属性があるか確認する。
・チケット(Ticket):数字と英数字(例:A/5 21171、113803)
・客室(Cabin):英数字(例:C85、C123)
→これらのデータは補正(correcting)目標の対象となる。
9.誤字脱字等のデータのエラーがあるか確認する。
・データセットが大きい場合、誤字脱字を見つけることは大変だが、名前等はスペルの書き方や、肩書の有無等で表記方法が異なるため、エラーがある可能性がある。
10.空白やNull値の有無を確認する。
In [44]: train_df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): PassengerId 891 non-null int64 Survived 891 non-null int64 Pclass 891 non-null int64 Name 891 non-null object Sex 891 non-null object Age 714 non-null float64 SibSp 891 non-null int64 Parch 891 non-null int64 Ticket 891 non-null object Fare 891 non-null float64 Cabin 204 non-null object Embarked 889 non-null object dtypes: float64(2), int64(5), object(5) memory usage: 83.6+ KB In [45]: test_df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 418 entries, 0 to 417 Data columns (total 11 columns): PassengerId 418 non-null int64 Pclass 418 non-null int64 Name 418 non-null object Sex 418 non-null object Age 332 non-null float64 SibSp 418 non-null int64 Parch 418 non-null int64 Ticket 418 non-null object Fare 417 non-null float64 Cabin 91 non-null object Embarked 418 non-null object dtypes: float64(2), int64(4), object(5) memory usage: 36.0+ KB
・トレーニング用データセットでは客室(Cabin)、年齢(Age)、乗船した港(Embarked)の属性で空白やNull値が多い。
・テスト用データセットでは客室(Cabin)と年齢(Age)の属性で空白やNull値が多い。
・これらに対しては補正(correcting)が必要となる。
【kaggle】タイタニックのコンペ(1)
Kaggleで定番のタイタニック号の生存者の分析をPythonで行う記録。
↓コンペのサイトはここです。
Titanic: Machine Learning from Disaster | Kaggle
Pythonによる分析の一例をManav Sehgalさんのカーネルを参考に(と言いうかこれに沿って)行います。
↓Manav Sehgalさんの分析手順はここで確認ができます。
Titanic Data Science Solutions | Kaggle
1.Kaggleのコンペの一般的な分析手順
1.問題を確認する。
2.テストデータとトレーニングデータを入手する。
3.データを分析がしやすいカタチに整える。
4.データを分析し、データのパターンを読み取り、データを理解する。
5.適切な予測モデルを作成、適用し、問題を解決する。
6.視覚化やレポートの作成を行い、課題を解決するまでのステップ及び最終結果を整理する。
7.結果をKaggleのコンペに提出する。
※これらは一般的な手順ですが、臨機応変に分析手順を変更します。3.の前に視覚化を行うなど。
2.今回の問題を確認する。
・タイタニック号には2,224名の乗客とクルーがいたが、氷山との追突事後で、1,502名が亡くなった。
・性別や搭乗クラスなど属性と生存の有無が記されているトレーニングデータを使用し、テストデータの乗客の生存について予測すること。
3.データサイエンスによる課題解決へワークフローには次の7つのゴールがある。
・分類(Classifying):標本を属性を基に分類する。属性から相関の可能性などを考察する。
・相関(Correlating):属性(定量的データ、質的なデータ)と求めるゴール(今回の場合生存の有無)の相関について検証する。
・変換(Converting):適用するモデルに合わせて、定量的データを質的なデータに変換する(逆もしかり)。
・補完(Completing):欠損値の扱いを決める。(例:平均値で埋める)
・補正(Correcting):標本から異常値を補正または取り除く。
・作成(Creating):既存の属性からモデルに必要な属性を作成、追加する。
・作図(Charting):分析の結果を視覚的に分かるように示す。
Python備忘録(1)
ブロードキャストの方向。
・NumPyのブロードキャストは基本行方向
In [61]: A=np.random.randint(10,size=(3,4)) In [62]: A Out[62]: array([[2, 0, 2, 6], [6, 9, 1, 0], [5, 9, 4, 3]]) In [63]: A[0] Out[63]: array([2, 0, 2, 6]) In [64]: A-A[0] Out[64]: array([[ 0, 0, 0, 0], [ 4, 9, -1, -6], [ 3, 9, 2, -3]])
・NumPyのブロードキャストを列方向で行う時の注意点
In [65]: A[:,0] Out[65]: array([2, 6, 5]) In [66]: A-A[:,0] --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-66-8be286d6b379> in <module> ----> 1 A-A[:,0] ValueError: operands could not be broadcast together with shapes (3,4) (3,) #エラーになるのは、A[:,0]の構造が(3,)のため In [69]: A[:,0].shape Out[69]: (3,) #構造を(3,1)とすればよい。 In [67]: A[:,0].reshape((3,1)) Out[67]: array([[2], [6], [5]]) #や、 In [68]: np.reshape(A[:,0],(3,1)) Out[68]: array([[2], [6], [5]]) #そうすると、列方向のブロードキャストが可能となる。 In [71]: A-A[:,0].reshape((3,1)) Out[71]: array([[ 0, -2, 0, 4], [ 0, 3, -5, -6], [ 0, 4, -1, -2]])
・ポイント:(m,n)と(m,1)はブロードキャストできるが、(m,n)と(m,)はできない。
・参考にしたURL
stackoverflow.com
【備忘録】UNIXコマンド(1)
なかなか覚えられないUNIXコマンドのメモ
・コピー
コピーしたい文字を選択し、右クリックでコピーできる。
・ペースト
ターミナル内で右クリックでペーストできる。
・pwd
・cd
・ls
・cp
・mv
・rm
・mkdir
・touch
・ls
・chmod
・chown
・chgrp
・cat
・less
・find
・grep
techacademy.jp