tropicbirdのブログ

備忘録です。

【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)が必要となる。

11.データ型を確認する。

・上記の.info()によると、トレーニング用データセットでは7つの属性は整数か浮動小数、テスト用では6つ。
・文字列(string→object)は5つ。
・これらの情報は変換(Converting)目標で役に立つ

【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