【Python初心者】matplotlibとseabornで散布図を描いてみよう(データの可視化)

スポンサーリンク
Python
初心者に人気のプログラミング言語Pythonは独学可能か?
Pythonは非常に人気のあるプログラミング言語で、まったくの初心者でも独学が可能と言われています。 Pythonはさまざまな目的に使える、汎用性のあるプログラミング言語です。 プログラミングは「独学が難しい」と言われていま...

散布図とは、2つの変数の関係を表すために用いされる、データの可視化のひとつです。
X軸の変数、Y軸の変数に対応したデータがひとつの点で表されます。
X軸の変数とY軸の変数が関係ないのか(点がバラバラ)
関係しているのか(右上がり、右下がり、V字やシグモイド曲線など)
などが、グラフで確認できます。

環境設定はAnacondaからのJupyter Labとし、scikit-learnのボストン住宅価格で練習してみましょう。

【2021年最新】WindowsでAnacondaをインストールする方法

【2021年最新】M1 mac でanacondaをインストールする方法

必要なライブラリをインポート

import pandas as pd                # データの形を整えるのも
import matplotlib.pyplot as plt    # 図を描くためのもの1
import seaborn as sns              # 図を描くためのもの2
%matplotlib inline                 # jupyterで図を表示させる
plt.style.use('ggplot')            # 図のスタイルを決める、今回は「ggplot」
import japanize_matplotlib         # 図に日本語を表示させる
import warnings                    # 警告メッセージを表示させない
warnings.filterwarnings('ignore')  # 上と同じ

print(sns.__version__)             # seabornのバージョンを確認

出力:
0.11.0

seabornのバージョンは、0.11.0 です。

図のスタイルは過去記事を参照して下さい。

【Python】matplotlib.styleでいろんなグラフを描く(棒グラフ編)

【Python】matplotlib.styleでいろんなグラフを描く(ヒストグラム編)

データをデータフレームに形を整える

from sklearn.datasets import load_boston

boston = load_boston()

df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['PRICE'] = boston.target
df

出力:

簡単な散布図を描く

plt.scatter(df['PRICE'], df['RM'])

plt.show()

出力:

簡単なコードで散布図が描画されました。右上がりになっているように見えます。

では、コードを見ていきましょう。

解説

このグラフでは少し分かりずらいので、グラフをカスタマイズしてみましょう。

散布図をカスタマイズする

plt.figure(figsize=(8,5),dpi=150)
plt.scatter(df['PRICE'], df['RM'], s=30, alpha=0.5, c='black',edgecolors="w")
plt.title('散布図', fontsize=30)
plt.xlabel('PRICE', fontsize=20)
plt.ylabel('RM', fontsize=20)

plt.show()

出力:

解説

これは、例としただけなので、みなさんも解説をもとに、カスタマイズしてみて下さい。

プレゼン資料にする場合は、図を高解像にしたほうが見た目が良くなります(dpi)。

データ数が多くなると、点の大きさを小さく(s)、点を透過させる(alpha)、などの対処が必要です。

searbornで散布図を描く

sns.jointplot(x='PRICE', y='RM', data=df, kind='reg', size=7)
plt.xlabel('PRICE', fontsize=20)
plt.ylabel('RM', fontsize=20)

出力:

解説

この少ないコードで、散布図だけでなく、X軸とY軸のデータのヒストグラムも描画されます。

非常に便利ですね。わたしはよく使います。

散布図で回帰線を描く

plt.figure(figsize=(12,8))
sns.regplot(x='PRICE', y='RM', data=df, ci=99)
plt.title('回帰線', fontsize=30)
plt.xlabel('PRICE', fontsize=20)
plt.ylabel('RM', fontsize=20)

出力:

解説

上のjointplotでも回帰線は描画できますが、こちらの方がシンプルでいいかもしれません。

信頼区間は好みやデータの性質で判断して、数値を指定して下さい。

散布図をたくさん描く

sns.pairplot(data=df, vars=["INDUS","NOX","RM","AGE","LSTAT","PRICE"], corner=True)

出力:

解説

vars=以下のコードはなくでもいいですが、このコードは処理が遅いので、図にしたい変数の指定と、重複した図は非表示にしたほうがいいでしょう。

タイタニックのデータで散布図を描く

df = sns.load_dataset('titanic')    # タイタニックのデータを df に入れる
sns.set(style="darkgrid")

plt.figure(figsize=(10,7))
sns.scatterplot(data=df, x='fare', y='age')

出力:

群分けした散布図を描く

2行目のコードにある、style= で群分けしたい変数(特徴量)を指定する。

plt.figure(figsize=(10,7))
sns.scatterplot(data=df, x='fare', y='age',style='survived')


出力:

点の形が変わる。0は●、1は×になった。

2行目のコードにある、size= で群分けしたい変数(特徴量)を指定する。

plt.figure(figsize=(10,7))
sns.scatterplot(data=df, x='fare', y='age', size='survived')
plt.show()


出力:

点の大きさが変わった。0は大きい●、1は小さい●になった。

2行目のコードにある、hue= で群分けしたい変数(特徴量)を指定する。

plt.figure(figsize=(10,7))
sns.scatterplot(data=df, x='fare', y='age', hue='survived')
plt.show()

出力:

点の色が変わった。0は青色、1オレンジ色になった。

いろいろな群分けをいっぺんにしてみる。

plt.figure(figsize=(10,7))
sns.scatterplot(data=df, x='fare', y='age', hue='survived', style='pclass', size='sex')
plt.show()

出力:

少し複雑だが、さまざまな群分けでデータの可視化ができる。

群分けを2つの散布図で描く

col= で群分けしたい変数(特徴量)を指定する。

sns.relplot(data=df, x='fare', y='age', col='survived', kind='scatter')
plt.show()


出力:

2群に別れたグラフが2つ作成される。

さらに、群分けができる。

sns.relplot(data=df, x='fare', y='age', col='survived', hue='sex', kind='scatter')
plt.show()


出力:

このあたりまでグラフを作成できれば、散布図は問題なく使いこなせるでしょう。細かいカスタマイズは、まだまだできるが、次の機会にしておきます。




探索的データ解析(回帰問題)

初心者のための回帰問題の評価指標

【初心者】matplotlibによる図の作成方法_1

コメント

タイトルとURLをコピーしました