13
11

More than 3 years have passed since last update.

【Python】seabornでのグラフの書き方まとめ

Posted at

はじめに

KaggleのCoursesにて、seabornを使ったデータの可視化について学びました。Data Visualization
復習と後から確認できるように各グラフの使い方を一覧にまとめます。

ライブラリのimport

import pandas as pd
# pandas+Matplotlibでdatetime型のデータを扱う場合、以下を実行しないと警告が出る。
# 扱うデータにdatetimeが無いのであればいらない。
pd.plotting.register_matplotlib_converters()
# notebook上で出力行にグラフを表示するためのおまじない。
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

折れ線グラフ(Line Chart)

折線グラフはlineplot()にて定義します。引数dataに表示対象のデータを指定します。
列指定することで、その列だけをプロットして表示可能です。

# データを読み込みします。
# 使用するデータ:https://www.kaggle.com/varpit94/dogecoin-data
# 大きすぎるので最初の10行だけ。
coin_data = pd.read_csv("./DOGE-USD.csv", index_col="Date")[:10]

# グラフ描画時のサイズを指定します。
plt.figure(figsize=(10,6))

# 折線グラフを描画
# 今回の例では"Volume"列を対象に先頭10行だけを表示しています。
sns.lineplot(data=coin_data["Volume"])

output_4_1.png

# 2列以上表示したい場合の例
plt.figure(figsize=(10,6))

sns.lineplot(data=coin_data["Open"])
sns.lineplot(data=coin_data["High"])

output_5_1.png

棒グラフ(Bar Chart)

棒グラフはbarplot()を使用します。
xにx軸となる列のデータを、yにy軸になる列のデータを指定します。

# グラフ描画時のサイズを指定します。
plt.figure(figsize=(10,6))

sns.barplot(x=coin_data.index, y=coin_data.Volume)

output_7_1.png

ヒートマップ(Heatmap)

ヒートマップの表示にはheatmap()を使用します。
引数dataに対象のデータを指定します。
引数annotTrueを指定したとき、マップ上に数値を表示します。

plt.figure(figsize=(10,6))

# ヒートマップ
sns.heatmap(data=coin_data, annot=True)

output_9_1.png

散布図(Scatter Plot)

散布図はscatterplot()を使用します。
X軸にはx、Y軸にはyの各引数にデータを指定します。

# データを変えます。
# 使用するデータ:https://www.kaggle.com/adityakadiwal/water-potability
water_data = pd.read_csv('./water_potability.csv')

plt.figure(figsize=(10, 6))
sns.scatterplot(x=water_data['ph'], y=water_data['Hardness'])

output_11_1.png

回帰直線を表示したい場合、regplot()を使用します。

plt.figure(figsize=(10, 6))
sns.regplot(x=water_data['ph'], y=water_data['Hardness'])

output_13_1.png

引数hueに別変数を指定することで、色によるプロットができます。

sns.scatterplot(x=water_data['ph'], y=water_data['Hardness'], hue=water_data['Potability'])

output_15_1.png

回帰線を表示したい場合、lmplot()という関数も使用できます。
引数について、先のscatterplot()と異なりdataに対象のデータを指定します。
また、xyhueには列名を指定します。

sns.lmplot(x='ph', y='Hardness', hue='Potability', data=water_data)

output_17_1.png

また、swarmplot()を使用することでカテゴリカル散布図を図示できます。

sns.swarmplot(x=water_data['Potability'],
              y=water_data['Hardness'])

output_19_2.png

ヒストグラム(Histogram)

ヒストグラムを表示する際はdistplot()を使用します。
引数aに対象のデータを指定します。
kdeはカーネル密度推定のプロットを表示させるかどうかの設定になります。

sns.distplot(a=water_data['ph'], kde=False)

output_21_1.png

# kde=Trueの場合
sns.distplot(a=water_data['ph'], kde=True)

output_22_1.png

密度プロット(Density plot)

カーネル密度推定プロット(KDE)を作成するにはkdeplot()を使用します。
引数dataに対象のデータを指定します。
shadeはプロットした線の下部分を色塗りするかどうかの設定です。

sns.kdeplot(data=water_data['ph'], shade=True)

output_24_1.png

2次元のKDEプロット

2次元でのKDEプロットもできます。
引数xにX軸となるデータ、yにY軸となるデータを指定します。

# 2次元でも書ける
sns.kdeplot(x=water_data['ph'], y=water_data["Hardness"])

output_26_1.png

各グラフの用途

データを可視化する際、見たい物によって使用するグラフが決まります。
引用元:Choosing Plot Types and Custom Styles

  • 傾向 - 変化の傾向を見たい時。
    • sns.lineplot - 折れ線グラフは一定期間の傾向を表示することに適している。
  • 関係 - データ内の変数間の関係を理解するために使用できる、さまざまな種類のチャートがあります。
    • sns.barplot - 棒グラフは、異なるグループに対応する量を比較するのに便利です。
    • sns.heatmap - ヒートマップは、数値の表に色分けされたパターンを見つけるのに使用できます。
    • sns.scatterplot - 散布図は、2つの連続変数の関係を示します。色分けされていれば、3つ目のカテゴリー変数との関係も示すことができます。
    • sns.regplot - 回帰線を散布図に含めることで、2つの変数間の線形関係を簡単に見ることができます。
    • sns.lmplot - このコマンドは、散布図に色分けされた複数のグループが含まれている場合、重回帰線を描くのに便利です。
    • sns.swarmplot - カテゴリー散布図は、連続変数とカテゴリー変数の関係を表示します。
  • 分布 - 分布を視覚化して、変数に見られる可能性のある値と、その可能性を示します。
    • sns.distplot - ヒストグラムは、1つの数値変数の分布を表示します。
    • sns.kdeplot - KDEプロット(または2D KDEプロット)は、1つの数値変数(または2つの数値変数)の推定された滑らかな分布を表示します。

参考

13
11
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
13
11