Python
 Computer >> コンピューター >  >> プログラミング >> Python

MatplotlibとPandasで日付データのカーネル密度推定(KDE)プロットを作成する方法

Matplotlibを使用して、Pandasの日付データからカーネル密度推定(KDE)プロットを作成する方法を解説します。KDEプロットはデータの分布を滑らかな曲線で可視化できる便利な手法ですが、日付型はそのままでは数値演算ができないため、序数(ordinal)に変換してからプロットするのがポイントです。

実装の手順

  • 図のサイズを設定し、サブプロット周辺の余白(パディング)を調整します。
  • Pandasのデータフレームを作成します。
  • 日付列を序数(ordinal)形式に変換します。
  • 序数値に対してカーネル密度推定(kind='kde')でプロットします。
  • set_xticklabels()メソッドを使って、x軸の目盛りラベルを読みやすい日付形式に戻します。
  • 図を表示するにはshow()メソッドを使用します。

コード例

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

dates = pd.date_range('2010-01-01', periods=31, freq='D')

df = pd.DataFrame(np.random.choice(dates, 100), columns=['dates'])
df['ordinal'] = [x.toordinal() for x in df.dates]

ax = df['ordinal'].plot(kind='kde')

x_ticks = ax.get_xticks()
ax.set_xticks(x_ticks[::2])

xlabels = [datetime.datetime.fromordinal(int(x))
           .strftime('%Y-%m-%d') for x in x_ticks[::2]]
ax.set_xticklabels(xlabels)

plt.show()

出力結果

MatplotlibとPandasで日付データのカーネル密度推定(KDE)プロットを作成する方法

コードのポイント解説

pd.date_range('2010-01-01', periods=31, freq='D') により、2010年1月1日を起点とした31日分の日付範囲を生成しています。次に np.random.choice(dates, 100) でその中からランダムに100個の日付を選択し、データフレームを作成します。

KDEの計算には数値が必要なため、toordinal() メソッドで各日付を序数(西暦1年1月1日を1とする連続した整数値)に変換した新しい列「ordinal」を追加しています。

x軸の目盛りは get_xticks() で取得し、スライス [::2] を使って1つおきに表示することで、ラベル同士の重なりを防いでいます。最後に fromordinal() で序数を日付オブジェクトへ戻し、strftime('%Y-%m-%d') によって「年-月-日」形式の文字列に整形してラベルとして設定すれば、直感的に読み取れるグラフが完成します。

  1. Python Matplotlibで密度マップをプロットする方法を徹底解説

    PythonのMatplotlibを使って密度マップ(ヒートマップ)をプロットするには、pcolormesh()メソッドを利用するのが便利です。この記事では、NumPyでデータを生成し、擬似カラープロットとして可視化するまでの手順をコード例とともに解説します。 密度マップを描く基本の手順 NumPyを使ってside(軸の範囲)、x、y、zのデータを作成します。NumPyのlinspace関数を使うと、指定した区間を任意の分割数で等間隔にサンプリングしたデータを簡単に生成できます。 meshgrid()関数にsideのデータを渡し、1次元の座標ベクトルから2次元の座標行列(メッシュグリッド)

  2. Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説

    MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元