【Python初心者】簡単なヒストグラムの描き方

スポンサーリンク
Python
【2021年】ゼロから統計学を独学したい人が読むべき書籍10冊
データサイエンスについて興味があり、統計学を学びたいけど、どんな学習方法がいいか分からない 統計学を独学するために必要な書籍が知りたい 統計...
【超初心者】Pythonおすすめ書籍
Pythonはプログラミング言語の中でも、1位2位を争う人気言語です。 その理由は 初心者でも学習しやすい(コードが理解しやすい) 業務の自動化ができる データ分析ができる 機械学習やA...

データ分析た統計解析をする前には、対象のデータがどのような分布になっているのかを確認する必要があります。
特に統計学では必須です。分布が前提となる解析方法があるからです。正規分布に従う必要がある、平均値・標準偏差、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で折れ線グラフを描いてみよう(データの可視化)

【Python初心者が知らない】ドットプロットでデータを可視化する簡単な方法



コメント

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