今回はKaggleのつづき!
データの可視化を重点的にやっていきます。
前回特徴選択して選ばれたのは、
main_categoryの[ Art, Comics, Film & Video, Games, Music, Theater] でした。
どうしてこの変数が選ばれたのか??
データを隅々まで見ていこうと思います。
これって一番最初にやることじゃ...?
'main_category'の可視化
まずはmain_categoryのユニークな要素を表示します。df['main_category'].unique()
結果は
['Publishing' 'Film & Video' 'Music' 'Food' 'Design' 'Crafts' 'Games'
'Comics' 'Fashion' 'Theater' 'Art' 'Photography' 'Technology' 'Dance'
'Journalism']
これらの数が知りたい場合は、uniqueの前にnを追記するだけ。
df['main_category'].nunique()
そうすると、[15]と表示されました。
数の多さランキング
次にこれを多い順でグラフに表示させてみます。グラフの種類は'barh' : 横向き棒グラフ、図の大きさfigsizeは自由に決めます。
df['main_category'].value_counts().plot(kind='barh', figsize=(10,6), title='Main Categories')
上位から[ Film & Video, Music, Publishing, Games, Technology, Art ]でした。
選ばれた6つのうち4つが上位に入っていますが、Comicsなどは多くありません。
成功の多さランキング
数の多さはわかってもそのうちどれだけ成功しているかが大切!ということで、main_category毎の成功数を多い順に表示します。
まずはsuccessfulという変数に、全体のうち成功しているプロジェクトを入れます。
successful = df.loc[df.state=='successful']
続いてグラフ化します。
グラフの種類は棒グラフで、
x(軸)は、先程作ったsuccessful(つまり成功したプロジェクト)の中の
main_categoryのindex(項目)を設定します。
height(縦軸)は、successfulのmain_categoryのvalues(数)を設定します。
plt.setpの中ではx軸の名前部分が重ならないように、字の角度を60に設定しました。
plt.tight_layout()も同様に名前部分の配列をきれいにしてくれます。
ax = plt.subplot()
plt.bar(x=successful.main_category.value_counts().index,
height=successful.main_category.value_counts().values,
)
plt.setp(ax.get_xticklabels(), rotation=60)
plt.tight_layout()
plt.show()
結果を見ると[Music]が一番多いのか!!
と
だまされてはいけません^^
元々のプロジェクト数に違いがあるので成功数ではなく、成功率を見ないといけませんねー
そこで各main_categoryの数で成功数を割ります。
heightの値の/ から後ろを追加しました。
DataFrameの中のmain_categoryの数で割るという意味です。
ax = plt.subplot()
plt.bar(x=successful.main_category.value_counts().index,
height=successful.main_category.value_counts().values / df.main_category.value_counts().values
)
plt.setp(ax.get_xticklabels(), rotation=60)
plt.tight_layout()
plt.show()
結果はこのようになりました!
並べ替えの方法がわからず、少し見辛いですが...
[Film & Video, Technology, Fashion, Crafts, Music, Games] の順番で成功率が高いです。
特徴選択された6つのうち3つが上位に入りました。
因みに失敗率の多さランキングは下図のようになりました。
成功率に比べ、失敗率はあまりバラつきがありません。
そこで成功率と失敗率の平均と標準偏差と変動係数を求め、バラつきを比較してみます。
必要なライブラリをインポートします。
from statistics import mean, stdev
sucという変数にグラフ化の時と同様に、成功したプロジェクトの中にあるmain_categoryの要素を入れます。
それをmeanとstdevに渡すと、平均と標準偏差の値を返してくれます。
変動係数は標準偏差を平均で割って求める数値で、バラつき度合いを比較できる数値です。
suc = successful.main_category.value_counts().values
mean_suc = mean(suc)
stdev_suc = stdev(suc)
cv_suc = stdev_suc / mean_suc
print(cv_suc)
同様に失敗率の変動係数も求めます。
成功率の変動係数は、[0.8481]
失敗率の変動係数は、[0.7103]
数値からも見てわかるように、成功率にはバラつきが大きくありました。
成功するかを予測するためには、
main_categoryの違いが影響する可能性が高そうです。
まとめ
以上の結果から特徴選択にmain_categoryの[ Art, Comics, Film & Video, Games, Music, Theater] が
なぜ選ばれたのか??を完全に解明することはできませんでしたが、
そもそも前回の学習結果の精度は正答率が61.9%程度なので、上記の特徴選択も正しいとは言えません。
今回のデータの可視化で全貌の一欠片くらいは見えたのではないでしょうか?
見えたよね?
次回もデータの可視化を続けてやってみたいと思います!
隠されしデータの全貌を求めて!!