目的
Pythonを学習して、いざ実装する際、
- seabornで使いたいメソッドが思い出せない。
- どんな引数が必要か分からない。
という経験はありませんか?
知識不足だった僕は、データ加工する際に、都度seabornメソッドの引数を調べ、設定しました。
本記事では、初学者でも理解しておく必要がある、seabornの頻出メソッドと、ぱっと確認するために必要な、最低限の引数について解説いたします。
大まかな流れ
-
今回使用するデータは、「Kaggle」の「HousePrice」のデータを利用します。
-
HousePriceのコンペを平たく説明すると、販売価格を、家の広さや立地などから予測するコンペです。
-
データを読み込み、その特徴量を理解するために、グラフ描画します。
注意事項
-
初学者の方でもメソッドの利用方法が分かりやすいよう、パラメータをできるだけ絞って説明しています。このため、グラフは割と汚いです。。僕自身が、様々なサイトで調べた際、「結局、最低限表示したいとき、どの必要が必要なの?」という疑問を感じたため、あえてパラメータは絞っております。
-
とは言え、グラフを表示する上で、必要な引数については、コメントで補足した上で、使用しています。
(他にも、できたら設定したほうが良いよ、というパラメータなどがありましたら、コメントをいただけると幸いです。)
対象者
このような方向けに書いています。
- これからKaggleを始めたい
- データの特徴を可視化できるようになりたい
- seabornを0から実装できるようになりたい
この記事で理解できること
Kaggleのチュートリアルなど、データ分析をはじめた際に、
「どんなデータが設定されているか?」
という点について、自力で可視化するためのseabornの基本的な概要を抑えることができるかと思います。
環境
- Windows10(バージョン1909)
- Python 3.7.6
- seaborn 0.10.0
- Pandas 1.0.1
- matplotlib 3.2.1
前提
- Pythonは軽く触ったことがある。
- 高校レベルの数学知識がある。
グラフ描画
ヒートマップ(heatmap)
ヒートマップを利用することで、総当たり表のような形式で、数字データの強弱を、色で視覚化します。
今回は、住宅の販売価格(SalePrice)に対する相関係数(絶対値)が0.5より大きい項目に絞ってグラフ描画します。
import seaborn as sns
# 相関係数を取得
corr_mat = house_price.corr()
# SalePriceとの相関係数(絶対値)が、0.5より大きい項目にしぼったDataFrameを作る
top_corr_features = corr_mat.index[abs(corr_mat["SalePrice"])>0.5]
# import matplotlib.pyplot as plt
# plt.figure(figsize=(11,11)) # とかやると、もっときれいに表示できる
# 相関関係をチェックする
sns.heatmap(data=house_price[top_corr_features].corr(),annot=True,cmap="RdYlGn")
引数の内容は、以下のとおりです。
引数 | 内容 |
---|---|
data | 対象データ |
annot | マトリックスに値を表示するか |
cmap | 色の種類 |
動作するかどうかの観点であれば、annnotやcmapの引数は除外できます。ただ、特徴を可視化する観点から考えると、
- それぞれの総当たり表のセルに数値(ここでは相関性係数)があったほうが、理解しやすい。
- 色合いは標準の赤系で統一せず、赤色と緑色のグラデーションのほうが直感的に理解できる。
という点から、このパラメータは最低限設定したほうが良いかと考えています。
SalePriceが0.5より大きい項目のみに絞った、総当たりの表となっています。今回、データ項目を絞った理由は、データ項目数が80件ほどあり、これの総当たり表にすると、可視化するメリットがなくなるため、項目数を減らしています。
今回の例ですと、緑色がより強い相関性があることがわかるのですが、特に以下の2つが相関性が強いことがわかります。
項目 | 相関係数 |
---|---|
OverallQual(住宅の総合評価) | 0.79 |
GrLivArea(居住面積) | 0.71 |
このように、ヒートマップでは、分析対象となるデータの相関性を判断する際に、使用できます。
補足
- 相関係数はABS関数を使うことで、絶対値で計算しています。
- 相関係数(絶対値)は、1.0に近づくにつれて相関性が高く、0に近づくにつれて相関性が低くなります。
- 元データの性質上、項目数が多いため、データを絞ってグラフ描画します。
棒グラフ(barplot)
barplotの棒グラフで、平均値とエラーバーを表示します。
[公式サイト:barplot]
(http://seaborn.pydata.org/generated/seaborn.barplot.html)
ヒートマップで、最も高い相関性が出ていた「OverallQual(住宅の総合評価)」の特徴を、表示します。
import seaborn as sns
sns.set()
sns.barplot(x=house_price.OverallQual,y=house_price.SalePrice)![distplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310367/f788ef75-d123-fb53-b721-ed7a329b2de6.png)
横軸は、OverallQual(住宅の総合評価)、縦軸はHousePrice(住宅価格)となっています。
住宅の総合評価が良いほど、住宅価格が高いという傾向がわかります。
棒グラフ(countplot)
countplotの棒グラフで、カテゴリ変数の件数を表示します。
import seaborn as sns
sns.set()
sns.countplot(x='MSSubClass', data=house_price)
横軸はHousePrice(住宅価格)、縦軸はその件数を表示します。
ヒストグラム(distplot)
データを区間で分け、どの区間が多いかどうかを表示します。
import seaborn as sns
sns.set()
sns.distplot(house_price['SalePrice'])
散布図(scatterplot)
シンプルな散布図です。
import seaborn as sns
sns.set()
sns.scatterplot(data=house_price, x='GrLivArea', y='SalePrice')
グラフの複数表示(pairplot)
散布図を一つずつでなく、一度に総当たりで表示できます。
相関性を網羅的に確認する際、重宝します。
import seaborn as sns
sns.set()
# SalePriceとの相関性が高めの項目にしぼり、グラフを表示する
sns.pairplot(data=house_price[top_corr_features])
最後に
-
他にも、ボックスプロット、バイオリンプロットなどがありますが、頻出という観点から、今回の説明からは除外しています。
-
今は、頻出メソッドと最低限の引数に絞っていますが、少し分かりにくいので、明示化しようと思います。
参考サイト
以下のサイトをベースに、公式サイトを確認しながら学習を進めました。
この記事では、本当に最低限の説明しかできていないので、もっと詳しく学習されたい方は、こちらをぜひご覧ください。