

データ分析た統計解析をする前には、対象のデータがどのような分布になっているのかを確認する必要があります。
特に統計学では必須です。分布が前提となる解析方法があるからです。正規分布に従う必要がある、平均値・標準偏差、T検定、分散分析などがあります。
データの分布を確認するためには、データの可視化、つまりグラフにすると直感的に理解しやすいです。
グラフはヒストグラムが有効でしょう。ヒストグラムとは、X軸の数値に何個のデータがあるか(頻度)を示します。y軸がデータの個数です。
Pythonの環境設定は、以下の記事を参照して下さい。
【2021年最新】M1 mac でanacondaをインストールする方法
【2021年最新】WindowsでAnacondaをインストールする方法
必要なライブラリをインポート
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline # 警告メッセージを表示しない import warnings warnings.filterwarnings('ignore')
アイリスデータを読み込む
scikit-learnにあるアイリスデータセットを使いましょう。
from sklearn.datasets import load_iris iris = load_iris() df = pd.DataFrame(iris.data, columns=iris.feature_names) df['species']=iris.target df
この「df」のデータフレームにある「sepal length (cm)」というデータのヒストグラムを描く方法をコードと一緒に確認してみましょう。
ヒストグラムを描く
Pythonでヒストグラム
df["sepal length (cm)"].hist()
簡単ですね。もととなるデータフレーム(df)にある変数([“sepal length(cm)”])を指定して、.hist()と描くだけです。
matplotlibでヒストグラム
plt.hist(df["sepal length (cm)"])
当然matplotlibでも描けます。というよりカスタマイズしやすいmatplotlibで描くことが多いと思います。
seabornでヒストグラム ①
sns.histplot(df["sepal length (cm)"])
seabornでヒストグラム ②
sns.distplot(df["sepal length (cm)"])
seabornでヒストグラム ③
sns.kdeplot(data=df, # グラフにしたいデータを指定 x="sepal length (cm)") # グラフにしたい変数を指定
③はヒストグラムではないですが、seabornにはさまざまなグラフが簡単に描けます。
seabornのヒストグラムでは形が違いことに気が付いたでしょうか。同じデータを使用しているのに、不思議ですね。これば、棒の幅が一定ではないからです。以下でカスタマイズすることで、一定にできます。
ヒストグラムをカスタマイズする
もう少し分かりやすいグラフにカスタマイズしていきましょう。
matplotlibでヒストグラム
plt.style.use("ggplot") # グラフのスタイルを「ggplot」に変更 plt.hist(df["sepal length (cm)"], # グラフにしたいデータの変数を指定 bins=20, # 分割数を指定(データを何個の棒にするか) rwidth=.9) # 棒幅を指定(1は隙間なし、0に近づくほど隙間が広い)
seabornでヒストグラム ①
sns.histplot(df["sepal length (cm)"], # グラフにしたいデータの変数を指定 bins=20) # 分割数を指定(データを何個の棒にするか)
seabornでヒストグラム ②
sns.distplot(df["sepal length (cm)"], # グラフにしたいデータの変数を指定 bins=20) # 分割数を指定(データを何個の棒にするか)
seabornでヒストグラム ③
sns.kdeplot(data=df, # グラフにしたいデータを指定 x="sepal length (cm)", # グラフにしたい変数を指定 shade=True) # 塗りつぶす
こんな感じで、ある程度カスタマイズできます。
実際には、いっぺんにヒストグラムを描いて、分布を確認することが多いです。
ヒストグラムをまとめて表示させる
matplotlibでヒストグラム
for i in range(3): plt.hist(df[df["species"]==i]["sepal length (cm)"], # species別のsepal length (cm) bins=20, # bins= で分割数を指定 label=iris.target_names[i], # speciesの名前を指定 alpha=.7) # 透明度を指定、1が塗りつぶしで0に近づくと透明になる plt.legend() # species別のラベルを表示 plt.show()
seabornでヒストグラム ①
color=["r","b","k"] # 色を指定する(r:赤、b:青、k:黒) for i in range(3): sns.histplot(df[df["species"]==i]["sepal length (cm)"], # species別のsepal length (cm) bins=20, # bins= で分割数を指定 label=iris.target_names[i], # speciesの名前を指定 color=color[i], # 指定した色を指定する alpha=.7) # 透明度を指定、1が塗りつぶしで0に近づくと透明になる plt.legend() # species別のラベルを表示 plt.show()
seabornでヒストグラム ③
for i in range(3): sns.kdeplot(data=df[df["species"]==i], # species別のデータを指定 x="sepal length (cm)", # グラフにしたい変数を指定 shade=True, # 塗りつぶす label=iris.target_names[i]) # speciesの名前を指定 plt.legend() # species別のラベルを表示 plt.show()
種類別に3つのヒストグラムを別に描く
fig = plt.figure(figsize=(8,10)) for i in range(3): plt.subplot(3,1,i+1) # 縦に3つのグラフを描く plt.hist(df[df["species"]==i]["sepal length (cm)"], # species別のデータを指定 bins=20, # 分割数 label=iris.target_names[i], # 各変数名を指定 alpha=.7, # 透明度 rwidth=.9) # 棒の幅を狭くする plt.legend() # 各変数のラベルを表示 plt.show()
ヒストグラムに関しては、といりあえずこんな感じですね。
【Python初心者】matplotlibとseabornで箱ひげ図を描いてみる(データの可視化)
【Python初心者】matplotlibで棒グラフと円グラフを描いてみよう(データの可視化)
【Python初心者】matplotlibとseabornで散布図を描いてみよう(データの可視化)
【Python初心者】matplotlibとseabornで折れ線グラフを描いてみよう(データの可視化)
コメント