DataScience

【seaborn】サンプルデータを取得する方法

seabornから機械学習の練習やテストに使えるサンプルデータを取得できる。

sklearnからもサンプルデータを取得できるが、sklearnのサンプルデータは数値計算に重きを置いている。

seabornのサンプルデータは可視化も踏まえたデータ内容となっている。

サンプルデータ一覧の取得

get_dataset_names()を使うことで、取得可能なサンプルデータの一覧を取得できる。

import seaborn as sns

sample_data_list = sns.get_dataset_names()
print(sample_data_list)
>>
['anagrams',
 'anscombe',
 'attention',
 'brain_networks',
 'car_crashes',
 'diamonds',
 'dots',
 'exercise',
 'flights',
 'fmri',
 'gammas',
 'geyser',
 'iris',
 'mpg',
 'penguins',
 'planets',
 'taxis',
 'tips',
 'titanic']

githubからもデータ一覧をCSVを確認できる。

https://github.com/mwaskom/seaborn-data

分類用データ取得

タイタニック号の生存者データ

勉強用データとして有名なタイタニックのデータ。

df_titanic = sns.load_dataset("titanic")
print(df_titanic.head())
>>
   survived  pclass     sex   age  sibsp  parch     fare embarked  class  \
0         0       3    male  22.0      1      0   7.2500        S  Third   
1         1       1  female  38.0      1      0  71.2833        C  First   
2         1       3  female  26.0      0      0   7.9250        S  Third   
3         1       1  female  35.0      1      0  53.1000        S  First   
4         0       3    male  35.0      0      0   8.0500        S  Third   

     who  adult_male deck  embark_town alive  alone  
0    man        True  NaN  Southampton    no  False  
1  woman       False    C    Cherbourg   yes  False  
2  woman       False  NaN  Southampton   yes   True  
3  woman       False    C  Southampton   yes  False  
4    man        True  NaN  Southampton    no   True  

「class」列~「alive」列は「survived」列~「embarked」列とほぼ同じ内容になる(数値が文字列になっているだけだったりする)。

カテゴリーデータの基本的なエンコーディングについても学べるようになっている。

可視化の際には、カテゴリーデータの値を使うことで、意味も通じやすくなる。

あやめの分類データ

多クラス分類のための基本的なデータ。

df_iris = sns.load_dataset("iris")
print(df_iris.head())
>>
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

scikit-learnにもサンプルデータとして存在する。

scikit-learnのデータの場合、目的変数であるspeciesが0, 1, 2の数値になっている。

回帰用データ

チップ支払額データ

食事の際に支払われたチップの金額のデータ。

df_tips = sns.load_dataset("tips")
print(df_tips.head())
>>
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

dayには曜日が入っているため、日付の扱い方も少し必要になってくる。

時系列用データ取得

旅客機の乗客数データ

飛行機の乗客数の月次データ。

df_flights = sns.load_dataset("flights")
print(df_flights.head())
>>
   year month  passengers
0  1949   Jan         112
1  1949   Feb         118
2  1949   Mar         132
3  1949   Apr         129
4  1949   May         121

月次データなので、144行しかデータがないが、時系列データの基本を学習するには良いデータ。(144行といっても月次だと12年分のデータとなる。)

説明変数が一切ないからこそ、自分で移動平均や微分などを作成する練習になる。

scikit-learnからサンプルデータを取得する方法

scikit-learnからサンプルデータを取得する場合、以下の記事を参照。

scikit-learnのサンプルデータは全ての値が数値のため、カテゴリー項目のエンコーディングを気にせず、計算することが可能。

カテゴリーのエンコーディング以外の部分を練習、テストしたい場合などは、scikit-learnのサンプルデータを使う方が良いかもしれない。

まとめ

import seaborn as sns

# 取得可能なサンプルデータ一覧の取得
sample_data_list = sns.get_dataset_names()

# タイタニックデータ(2値分類)
df_titanic = sns.load_dataset("titanic")

# あやめデータ(多クラス分類)
df_iris = sns.load_dataset("iris")

# 旅客機データ(時系列データ)
df_flights = sns.load_dataset("flights")