📊
データ分析 python 基本のグラフ -散布図-
データ分析で使用するグラフを簡単にまとめていきます
python + google colaboratory で 実行しています
散布図とは
散布図とは、2つの数値データの関係を視覚的に表すためのグラフです。
- 右肩上がり:正の相関(xが増えるとyも増える)
- 右下下がり:負の相関(xが増えるとyは減る)
- ばらばら:無相関(xとyに関係がない)
散布図を表示
matplotlib の scatter メソッド で表示します
基本的な散布図の表示
# 基本的な散布図
import matplotlib.pyplot as plt
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [10, 11, 9, 12, 8]
# 散布図を描画
plt.scatter(x, y)
seabornで見やすくする
seabornを使用するとグラフが見やすくなります
# seabornで
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('seaborn') #他にもいろいろなスタイルがある
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [10, 11, 9, 12, 8]
# 散布図を描画
plt.scatter(x, y)
ラベルやタイトルを付ける
ラベルに日本語を使用しないのであれば、以下のコードのようにラベル、グラフタイトルを付けます。
ラベルを日本語で付ける場合は、このままでは文字化けします。
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('seaborn')
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [10, 11, 9, 12, 8]
# ラベルを表示
plt.xlabel('X軸ラベル')
plt.ylabel('Y軸ラベル')
# グラフタイトルを表示
plt.title('グラフタイトル')
# 散布図を描画
plt.scatter(x, y)
日本語ラベルを付けるには japanize_matplotlib をインストールし、rcParams で日本語フォントを指定します。
!pip install -q japanize_matplotlib # 日本語対応
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib # 日本語対応
plt.style.use('seaborn')
plt.rcParams['font.family'] = 'IPAexGothic' # 日本語フォント
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [10, 11, 9, 12, 8]
# ラベルを表示
plt.xlabel('X軸ラベル')
plt.ylabel('Y軸ラベル')
# グラフタイトルを表示
plt.title('グラフタイトル')
# 散布図を描画
plt.scatter(x, y)
各データポイントにラベルを付ける
散布図の点にテキストラベル(アノテーション)を付けることができます。
!pip install -q japanize-matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
plt.style.use('seaborn')
plt.rcParams['font.family'] = 'IPAexGothic'
# サンプルデータ
x = [1, 2, 3, 4, 5]
y = [10, 11, 9, 12, 8]
no = ['A', 'B', 'C', 'D', 'E']
# ラベルを表示
plt.xlabel('X軸ラベル')
plt.ylabel('Y軸ラベル')
# グラフタイトルを表示
plt.title('グラフタイトル')
# テキストを描画
for _x, _y, label in zip(x, y, no):
plt.text(_x, _y, label)
# 散布図を描画
plt.scatter(x, y, alpha=0.6)
データポイントの色を変える
scatterメソッドの cパラメータを指定することで、各データポイントの色を変えることができます
!pip install -q japanize-matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
import numpy as np
plt.style.use('seaborn')
plt.rcParams['font.family'] = 'IPAexGothic'
# サンプルデータ
x = np.arange(1, 2001)
y = np.random.normal(loc=915, scale=5, size=2000)
# ラベルを表示
plt.xlabel('X軸ラベル')
plt.ylabel('Y軸ラベル')
# グラフタイトルを表示
plt.title('グラフタイトル')
# 散布図を描画
plt.scatter(x, y, alpha=0.8, c='red')
データポイントに合わせてカラーで表示
scatterメソッドのcmapパラメータを指定することで散布図を色付きで表示できます。
plasma
以外にもいろいろあります。
cパラメータに色付けのための基準を指定します。
c=list(range(len(x)))
を指定することで、X軸のインデックスに基づいて各点に色を付けています。
!pip install -q japanize-matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
import numpy as np
plt.style.use('seaborn')
plt.rcParams['font.family'] = 'IPAexGothic'
# サンプルデータ
x = np.arange(1, 2001)
y = np.random.normal(loc=915, scale=5, size=2000)
# ラベルを表示
plt.xlabel('X軸ラベル')
plt.ylabel('Y軸ラベル')
# グラフタイトルを表示
plt.title('グラフタイトル')
# 散布図を描画
plt.scatter(x, y, alpha=0.8, c=list(range(len(x))), cmap='plasma')
3Dで散布図を表示
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# サンプルデータを作成
np.random.seed(0)
x = np.random.rand(100) * 100 # X軸データ
y = np.random.rand(100) * 100 # Y軸データ
z = np.random.rand(100) * 100 # Z軸データ
colors = np.random.rand(100) # 各点の色をランダムに設定
sizes = 100 * np.random.rand(100) # 各点のサイズをランダムに設定
# Figureと3Dプロットを作成
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d') # 3Dプロットを指定
# 3D散布図を描画
sc = ax.scatter(x, y, z, c=colors, s=sizes, cmap='viridis', alpha=0.8)
# カラーバーを表示
fig.colorbar(sc)
# 軸ラベルの設定
ax.set_xlabel('X軸')
ax.set_ylabel('Y軸')
ax.set_zlabel('Z軸')
# タイトルを設定
plt.title('3D 散布図のサンプル')
# ラベルが見切れるので余白を自動調整
plt.tight_layout()
# プロットを表示
plt.show()
データフレームをグラフ化する
データフレームをグラフ化します
!pip install -q japanize-matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
plt.style.use('seaborn')
plt.rcParams['font.family'] = 'IPAexGothic'
df = pd.read_csv('/content/drive/MyDrive/correlation_analysis_testdata.csv')
df.head(3)
plt.scatter(df['運動時間'], df['支出'])
plt.xlabel('運動時間')
plt.ylabel('支出')
データフレーム全体をまとめてグラフ化する
seabornのpairplotを使用するとデータフレーム全体を散布図で表示してくれます
!pip install -q japanize-matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
plt.style.use('seaboran') #グラフのスタイル 他にも bmh, ggplot, などいろいろある
plt.rcParams['font.family'] = 'IPAexGothic' #日本語フォント
df = pd.read_csv('/content/drive/MyDrive/correlation_analysis_testdata.csv')
df.head(3)
sns.pairplot(df)
Discussion