【Python】テスト用にランダムな時系列データを作成する

スポンサーリンク

Pythonでmatplotlibやaltairなどのグラフ作成ライブラリを試したいときに、テストデータを作って試すことはよくあると思います。

今までscikit-learnのサンプルデータやネットに転がっているサンプルデータでやっていましたが、
いまいちしっくりこないので自分で作ってみようと思いました。

今回は、pythonである特定の商品の日別売り上げ件数のテストデータを作ってみたいと思います。
ポイントは、大量の件数のデータにも対応できるようにテストデータの値は、numpyrondomを使用してランダムな数値をセットしています。

サンプルデータはこんな感じです。

サンプルデータ作成のコード

以下がコードです。
コードに記載された基準日付からテストデータの件数分の日付を遡って、日別の商品の売り上げ件数をランダムにセットしています。セットされる値は最小値:vmin = 0最大値:vmax = 4でこの範囲内のデータをランダムにセットしています。

以下のサンプルコードでは、基準日(lastdate)が6/1なので5/22~5/31までの10日間分のダミーデータを作成しています。ランダムにセットする値は0(vmin)~4(vmax)までの値をセットします。
今回は、件数をセットするので必ず整数がセットされるようにしています。

セットする商品はtpl_colname = (‘商品A’,’商品B’,’商品C’,’商品D’)で指定した4製品になります。

import numpy as np
import pandas as pd
from datetime import date,timedelta

#ここで設定した基準日付から行数分の日付をさかのぼる
lastdate = date(2022,6,1)
#ランダムにセットする値の最小値
vmin = 0
#ランダムにセットする値の最小値
vmax = 4
#行数
rowcount = 10
#列名と列数
tpl_colname = ('商品A','商品B','商品C','商品D')

colcount = len(tpl_colname)

#ランダムデータ生成
data = np.random.randint(vmin,vmax + 1,(rowcount,colcount))
rdate = pd.date_range(lastdate-timedelta(days=rowcount), periods=rowcount)
df = pd.DataFrame(data, index=rdate,columns=tpl_colname)

ポイント

randint関数

randint関数はある区間内からランダムに整数を取り出す関数です。

np.random.randint(最小値, 最大値, (行, 列))
引数設定値
第1引数ランダムにセットする値の範囲の最小値整数でセット
第2引数ランダムにセットする値の範囲の最大値整数でセット
※最大値にセットした値未満の整数となる
第3引数複数行、複数列の場合に配列を行列の配列を渡す

pd.date_range

pd.date_rangeは、第1引数の開始日からperiods分の連続した日数分のデータを取得します。

pd.date_range(開始日, periods=日数)

大量のテストデータを作成する

テストデータの件数を増やす

例えば基準日から過去1年分のテストデータを作成したい場合は、行数を指定しているrowcount = 10をrowcount = 365などにすれば取得できます。

テストデータの列数を増やす

出力する商品(列数)が増えたときは、tpl_colname = (‘商品A’,’商品B’,’商品C’,’商品D’.’商品E’)のようにタプルの項目を増やすことで対応できます。

作成したテストデータは、df = pd.DataFrame(data, index=rdate,columns=tpl_colname)で作成した日付をインデックスに指定してdataframe形式にしています。

dataframeができたら、csv出力やExcel出力も可能ですしそのままグラフにしてしまうこともできます。

今回はrandint関数で整数のデータをセットするようにしましたが、他にもrand関数などnumpyにはいろいろな関数があるのでぜひ試してみてください。

まとめ

  • randint関数は、ある区間内からランダムに整数を取り出す関数
  • pd.date_rangeメソッドで連続した日付のデータを取得することができる
  • テストデータのような無作為なデータを作成するときはnumpyrondomを使う

上述のソースコードをコピーして設定を変えるだけで簡単にテストデータが大量に作れるので便利です。

コメント

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