4
6

More than 3 years have passed since last update.

よく使うseabornのメソッドを、できるだけ最低限の引数で使ってみた

Last updated at Posted at 2020-04-27

目的

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)

公式サイト: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の引数は除外できます。ただ、特徴を可視化する観点から考えると、

  • それぞれの総当たり表のセルに数値(ここでは相関性係数)があったほうが、理解しやすい。
  • 色合いは標準の赤系で統一せず、赤色と緑色のグラデーションのほうが直感的に理解できる。

という点から、このパラメータは最低限設定したほうが良いかと考えています。

結果は以下のとおりです。
heatmap_simle2.png

SalePriceが0.5より大きい項目のみに絞った、総当たりの表となっています。今回、データ項目を絞った理由は、データ項目数が80件ほどあり、これの総当たり表にすると、可視化するメリットがなくなるため、項目数を減らしています。

今回の例ですと、緑色がより強い相関性があることがわかるのですが、特に以下の2つが相関性が強いことがわかります。

項目 相関係数
OverallQual(住宅の総合評価) 0.79
GrLivArea(居住面積) 0.71

このように、ヒートマップでは、分析対象となるデータの相関性を判断する際に、使用できます。

補足

  • 相関係数はABS関数を使うことで、絶対値で計算しています。
  • 相関係数(絶対値)は、1.0に近づくにつれて相関性が高く、0に近づくにつれて相関性が低くなります。
  • 元データの性質上、項目数が多いため、データを絞ってグラフ描画します。

棒グラフ(barplot)

barplotの棒グラフで、平均値とエラーバーを表示します。

公式サイト:barplot

ヒートマップで、最も高い相関性が出ていた「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)

結果は以下のとおりです。
barplot.png

横軸は、OverallQual(住宅の総合評価)、縦軸はHousePrice(住宅価格)となっています。

住宅の総合評価が良いほど、住宅価格が高いという傾向がわかります。

棒グラフ(countplot)

countplotの棒グラフで、カテゴリ変数の件数を表示します。

公式サイト:countplot

import seaborn as sns
sns.set()

sns.countplot(x='MSSubClass', data=house_price)

結果は以下のとおりです。
countplot.png

横軸はHousePrice(住宅価格)、縦軸はその件数を表示します。

ヒストグラム(distplot)

データを区間で分け、どの区間が多いかどうかを表示します。

import seaborn as sns
sns.set()

sns.distplot(house_price['SalePrice'])

結果は以下のとおりです。
distplot.png

公式サイト:distplot

散布図(scatterplot)

シンプルな散布図です。

import seaborn as sns
sns.set()

sns.scatterplot(data=house_price, x='GrLivArea', y='SalePrice')

結果は以下のとおりです。
scatterplot.png

公式サイト:scatterplot

グラフの複数表示(pairplot)

散布図を一つずつでなく、一度に総当たりで表示できます。
相関性を網羅的に確認する際、重宝します。

import seaborn as sns
sns.set()

# SalePriceとの相関性が高めの項目にしぼり、グラフを表示する
sns.pairplot(data=house_price[top_corr_features])

結果は以下のとおりです。
pairplot.png

公式サイト:pairplot

最後に

  • 他にも、ボックスプロット、バイオリンプロットなどがありますが、頻出という観点から、今回の説明からは除外しています。

  • 今は、頻出メソッドと最低限の引数に絞っていますが、少し分かりにくいので、明示化しようと思います。

参考サイト

以下のサイトをベースに、公式サイトを確認しながら学習を進めました。

この記事では、本当に最低限の説明しかできていないので、もっと詳しく学習されたい方は、こちらをぜひご覧ください。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6