俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

エピソード3-4: KaggleでKickstarter Projectsに挑戦する。(データの前処理編)

前回、「Kaggle」のアカウントを作成したものの、何から手をつけていいかわからないので、まずは、知り合いの勧めで「Kickstarter Projects」に挑戦したいと思います。

0. まずは、「Kaggle」のホームページにアクセスする。

f:id:kanriyou_h004:20190430221539j:plain

 1.検索窓に「Kickstarter Projects」を入力して検索する。

f:id:kanriyou_h004:20190430221515j:plain

検索窓に「Kickstarter Projects」と入力すると候補にすぐ出てくるので選択します。

2.「Kickstarter Projects」にアクセスする。

f:id:kanriyou_h004:20190430222219j:plain

検索で選択した「Kickstarter Projects」が表示されます。

 3.何はともあれ、データCSVをダウンロードしてみる。

f:id:kanriyou_h004:20190430222725j:plain

まずは、メニューから「Data」を選択し、Data Sourcesから2つのファイルをダウンロードして解凍します。

4.データを読み込む準備として、もろもろライブラリをインポートする。

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import codecs as cd
from sklearn.preprocessing import LabelEncoder
from sklearn.linear_model import SGDClassifier
from sklearn.metrics import log_loss, confusion_matrix
import seaborn as sns
データを扱うためにpandas,もろもろ計算するためにnumpy,グラフを書くためmatplotlib,seaborn,コード変換のためにcodecs,各種機械学用にsklearnの各種モジュールをインポートします。

5.データを読み込んで、概要を確認する。

#201801のデータを読み込んでみる
df_f18 = pd.read_csv('ks-projects-201801.csv')
#最初の五行を表示してみる。 display(df_f18.head())

f:id:kanriyou_h004:20190504165126j:plain

最初の5行を表示して、おおよそどのような列があり、どのような値が入っているかを把握します。

 6.統計値と、欠損値、各列のデータタイプを確認する。

#統計値を表示してみる。
display(df_f18.describe())
#欠損値がある行数を数えてみる。
display(df_f18.isnull().sum())
#各列のデータタイプを確認してみる。
display(df_f18.dtypes)

f:id:kanriyou_h004:20190504165644j:plain

統計値から、データの個数や、平均、標準偏差、最大値、最小値など大まかなデータを把握します。カテゴリ変数の列は数値化されていないため表示されていません。
「usd pledged」には2373件の欠損があります、ほかの項目も欠損があります。
データタイプからは、数値データか、それ以外かの大まかな情報が得られます。数値データ以外は、何らかの方法で数値化する必要があります。

7欠損値がある行は、いったん除外してみる。

#1個でも欠損値がある行はとりあえず削除してみる。
df_f18_dna = df_f18.dropna(how='any')
#欠損値がある行数を数えてみる。
display(df_f18_dna.isnull().sum())

dropna()を利用して、引数にhow='any'を指定することで、1項目でも欠損がある行は除外します。なお、すべて欠損している場合にのみ除外する場合は、how='all'を指定します。

f:id:kanriyou_h004:20190504170848j:plain

無事、すべての列で欠損値がなくなりました。 

8.成功(successful)と失敗(failed)の行に絞って考えてみる。 

#stateの要素の個数を数えてみる。
df_f18_dna['state'].value_counts()

f:id:kanriyou_h004:20190504171647j:plain

8割以上が、失敗(failed)か成功(Successful)なので、成功と失敗の行に絞って考えてみることにします。

#成功だけを抽出したDFと失敗だけを抽出したDF
df_f18_success = df_f18_dna[df_f18_dna['state']=='successful']
df_f18_failed =  df_f18_dna[df_f18_dna['state']=='failed']
#両方を結合
df_f18_SorF = pd.concat([df_f18_success,df_f18_failed])
#stateの要素の個数を数えてみる。
df_f18_SorF['state'].value_counts()

成功の行を抽出したデータフレームと、失敗の行を抽出したデータフレームを抽出し、concat()の引数に、両方のデータフレームを渡すことで、結合したデータフレーム(df_f18_SorF)を取得します。

f:id:kanriyou_h004:20190504172316j:plain

無事、成功と失敗の行に絞ったデータフレームが作成できました。 

9.カテゴリ変数は、文字列から数値に変換してみる。

#LabelEncoderのインスタンスを生成
le = LabelEncoder()
#categoryに出てくるカテゴリを覚えて #categoryを数値に変換 le = le.fit(df_f18_SorF['category']) df_f18_SorF['category'] = le.transform(df_f18_SorF['category'])
#main_categoryに出てくるカテゴリを覚えて #main_categoryを数値に変換 le = le.fit(df_f18_SorF['main_category']) df_f18_SorF['main_category'] = le.transform(df_f18_SorF['main_category']) #currencyに出てくるカテゴリを覚えて #currencyを数値に変換 le = le.fit(df_f18_SorF['currency']) df_f18_SorF['currency'] = le.transform(df_f18_SorF['currency']) #stateに出てくるカテゴリを覚えて #stateを数値に変換 le = le.fit(df_f18_SorF['state']) df_f18_SorF['state'] = le.transform(df_f18_SorF['state']) #countryに出てくるカテゴリを覚えて #countryを数値に変換 le = le.fit(df_f18_SorF['country']) df_f18_SorF['country'] = le.transform(df_f18_SorF['country']) df_f18_SorF.head()

f:id:kanriyou_h004:20190504171647j:plain

sklearnのLabelEncoderのインスタンスを作成して、fit()の引数にカテゴリ変数となっている列を渡すことで、その列に出てくる変数の種類を覚えさせて、transform()の引数に当該カテゴリ変数の列を渡すことで、カテゴリ変数の文字列を数値に更新します。(特定の列だけ更新するなといったような警告がでますが、今回は、無視しました。)

f:id:kanriyou_h004:20190504173852j:plain

最初の五行を表示させたところ、無事にカテゴリ変数が数値化されていることが確認できました。 

これで、データを整理したりグラフ化するために、データの前処理ができました。

このデータを使って、引き続き分析を進めていきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com