こんにちは、JS2IIUです。
この記事では、データ分析に欠かせないPythonのPandasライブラリを使って、様々な種類のグラフを作成する方法を紹介します。Pandasはデータ操作や分析に強力な機能を提供してくれるライブラリですが、その中にはデータの可視化に役立つグラフ描画機能も含まれています。
本記事では、.plot系メソッドを使って、積み上げグラフ、棒グラフ、水平棒グラフ、箱ひげ図、カーネル密度推定プロット、ビニングプロット、ヒストグラム、KDEプロット、折れ線グラフ、円グラフ、散布図など、多様なグラフを作成するサンプルプログラムと解説を提供します。それぞれのグラフの特徴を理解し、データ分析に活用するためのヒントにしていただければ幸いです。
.plot.areaで積み上げグラフを作成する
積み上げグラフは、複数のデータ系列の推移を積み重ねて表示することで、全体の傾向と各系列の寄与を把握するのに役立ちます。例えば、各製品の売上推移を積み上げて全体の売上推移を見る、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (各製品の月別売上データ)
np.random.seed(0)
df = pd.DataFrame({
'Month': pd.date_range('2024-01-01', periods=12, freq='MS'),
'Product A': np.random.randint(100, 200, 12),
'Product B': np.random.randint(50, 150, 12),
'Product C': np.random.randint(30, 80, 12)
})
df.set_index('Month', inplace=True)
# 積み上げグラフの作成
df.plot.area(stacked=True)
plt.title('Monthly Sales by Product')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()
解説:
pd.date_range('2024-01-01', periods=12, freq='MS')で、2024年1月1日から始まる12ヶ月分の月初のDatetimeIndexを生成し、’Month’列に代入しています。np.random.randint(100, 200, 12)等で、各製品の月別売上をランダムに生成しています。df.set_index('Month', inplace=True)で、’Month’列をインデックスに設定しています。df.plot.area(stacked=True)で積み上げグラフを作成します。stacked=Trueは、各系列の値を積み上げて表示することを指定します。Falseにすると、各系列が独立して表示されます。
plt.title(),plt.xlabel(),plt.ylabel()で、グラフのタイトル、X軸ラベル、Y軸ラベルを設定します。
.plot.barで棒グラフを作成する
棒グラフは、カテゴリごとの値を比較するのに適しています。例えば、各地域の顧客数を比較する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (各地域の顧客数)
df = pd.DataFrame({
'Region': ['North', 'East', 'South', 'West'],
'Customers': [350, 280, 420, 310]
})
# 棒グラフの作成
df.plot.bar(x='Region', y='Customers', rot=0)
plt.title('Number of Customers by Region')
plt.xlabel('Region')
plt.ylabel('Customers')
plt.show()
解説:
df.plot.bar(x='Region', y='Customers', rot=0)で棒グラフを作成します。xは、X軸に使用する列を指定します。yは、Y軸に使用する列を指定します。rotは、X軸のラベルの回転角度を指定します。0 は水平に表示することを意味します。
plt.title(),plt.xlabel(),plt.ylabel()で、グラフのタイトル、X軸ラベル、Y軸ラベルを設定します。
.plot.barhで水平の棒グラフを作成する
水平棒グラフは、カテゴリ名が多い場合や、値の大小を横方向で比較したい場合に便利です。例えば、各商品の売上ランキングを表示する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (各商品の売上)
df = pd.DataFrame({
'Product': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'],
'Sales': np.random.randint(50, 200, 10)
})
# 水平棒グラフの作成
df.plot.barh(x='Product', y='Sales')
plt.title('Sales by Product')
plt.xlabel('Sales')
plt.ylabel('Product')
plt.show()
解説:
df.plot.barh(x='Product', y='Sales')で水平棒グラフを作成します。
.plot.boxで箱ひげ図を作成する
箱ひげ図は、データの分布(中央値、四分位数、外れ値など)を視覚的に把握するのに役立ちます。例えば、複数のグループのテストの点数分布を比較する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (各グループのテストの点数)
np.random.seed(0)
df = pd.DataFrame({
'Group A': np.random.normal(70, 10, 100),
'Group B': np.random.normal(80, 12, 100),
'Group C': np.random.normal(75, 8, 100)
})
# 箱ひげ図の作成
df.plot.box()
plt.title('Test Scores by Group')
plt.xlabel('Group')
plt.ylabel('Score')
plt.show()
解説:
np.random.normal(70, 10, 100)等で、各グループのテストの点数を正規分布に従ってランダムに生成しています。df.plot.box()で箱ひげ図を作成します。
.plot.densityでカーネル密度推定プロットを作成する
カーネル密度推定プロットは、データの分布を滑らかな曲線で表現するのに使用されます。例えば、顧客の年齢分布を滑らかに表示する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (顧客の年齢)
np.random.seed(0)
df = pd.DataFrame({'Age': np.random.randint(20, 60, 500)})
# カーネル密度推定プロットの作成
df.plot.density()
plt.title('Customer Age Distribution')
plt.xlabel('Age')
plt.ylabel('Density')
plt.show()
解説:
df.plot.density()でカーネル密度推定プロットを作成します。
.plot.hexbinでビニングプロットを作成する
ビニングプロットは、2つの変数の関係を、平面を六角形のビンに分割して表現するのに使用されます。例えば、気温とアイスクリームの売上個数の関係を見る、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (気温とアイスクリームの売上個数)
np.random.seed(0)
df = pd.DataFrame({
'Temperature': np.random.randint(20, 35, 100),
'Ice Cream Sales': np.random.randint(100, 300, 100)
})
# ビニングプロットの作成
df.plot.hexbin(x='Temperature', y='Ice Cream Sales', gridsize=10)
plt.title('Temperature vs. Ice Cream Sales')
plt.xlabel('Temperature')
plt.ylabel('Ice Cream Sales')
plt.show()
解説:
df.plot.hexbin(x='Temperature', y='Ice Cream Sales', gridsize=10)でビニングプロットを作成します。gridsizeは、六角形のビンの数を指定します。
.plot.histでヒストグラムを作成する
ヒストグラムは、データの分布を棒グラフで表現するのに使用されます。例えば、テストの点数分布を表示する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (テストの点数)
np.random.seed(0)
df = pd.DataFrame({'Score': np.random.normal(70, 10, 500)})
# ヒストグラムの作成
df.plot.hist(bins=20)
plt.title('Test Score Distribution')
plt.xlabel('Score')
plt.ylabel('Frequency')
plt.show()
解説:
df.plot.hist(bins=20)でヒストグラムを作成します。binsは、ビンの数を指定します。
.plot.kdeでKDEプロットを作成する
.plot.kde は .plot.density のエイリアスであり、カーネル密度推定プロットを作成します。使い方は .plot.density と同じです。
.plot.lineで折れ線グラフを作成する
折れ線グラフは、データの推移を線で表現するのに使用されます。例えば、株価の推移を表示する、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (株価の推移)
np.random.seed(0)
df = pd.DataFrame({
'Date': pd.date_range('2024-01-01', periods=100, freq='D'),
'Price': 100 + np.random.randn(100).cumsum()
})
df.set_index('Date', inplace=True)
# 折れ線グラフの作成
df.plot.line()
plt.title('Stock Price Trend')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()
解説:
pd.date_range('2024-01-01', periods=100, freq='D')で、2024年1月1日から始まる100日分のDatetimeIndexを生成し、’Date’列に代入しています。100 + np.random.randn(100).cumsum()で、ランダムな値の累積和を計算し、株価の推移をシミュレートしています。df.set_index('Date', inplace=True)で、’Date’列をインデックスに設定しています。df.plot.line()で折れ線グラフを作成します。
.plot.pieで円グラフを作成する
円グラフは、各カテゴリの割合を視覚的に表現するのに適しています。例えば、各製品の売上構成比を表示する、といった使い方ができます。
import pandas as pd
import matplotlib.pyplot as plt
# サンプルデータの作成 (各製品の売上)
df = pd.DataFrame({
'Product': ['A', 'B', 'C', 'D'],
'Sales': [30, 25, 20, 25]
})
# 円グラフの作成
df.plot.pie(y='Sales', labels=df['Product'], autopct='%1.1f%%', startangle=90)
plt.title('Sales Composition Ratio')
plt.ylabel('') # Y軸ラベルを非表示にする
plt.show()
解説:
df.plot.pie(y='Sales', labels=df['Product'], autopct='%1.1f%%', startangle=90)で円グラフを作成します。yは、円グラフの値に使用する列を指定します。labelsは、各円弧のラベルを指定します。autopctは、円弧内にパーセンテージを表示するフォーマットを指定します。startangleは、円グラフの開始角度を指定します。
plt.ylabel('')でY軸ラベルを非表示にします。
.plot.scatterで散布図を作成する
散布図は、2つの変数の関係をプロットすることで、相関関係などを把握するのに役立ちます。例えば、広告費と売上高の関係を見る、といった使い方ができます。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# サンプルデータの作成 (広告費と売上高)
np.random.seed(0)
df = pd.DataFrame({
'Advertising Expenses': np.random.randint(10, 50, 100),
'Sales': np.random.randint(100, 500, 100) + 20 * np.random.randint(10, 50, 100)
})
# 散布図の作成
df.plot.scatter(x='Advertising Expenses', y='Sales')
plt.title('Advertising Expenses vs. Sales')
plt.xlabel('Advertising Expenses')
plt.ylabel('Sales')
plt.show()
解説:
df.plot.scatter(x='Advertising Expenses', y='Sales')で散布図を作成します。xは、X軸に使用する列を指定します。yは、Y軸に使用する列を指定します。
参考になるWEBサイト
この記事が、Pandasを使ったグラフ作成の参考になれば幸いです。
今回も少しだけPRです。
Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。
「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。
最後まで読んでいただきありがとうございます。73


コメント