LoginSignup
2
0

More than 3 years have passed since last update.

大量のダミーデータを作ってみる

Posted at

ダミーデータを簡単に作りたいと思ったので、試しに作成してみました。
いわゆる売上データのようなタイプを想定しています。
この例では6万件程度のレコードができ、データモデルへのロードには10~20秒くらいかかります。

設定のいじり方

「複製数」の箇所を増やせば、件数が増えます。(変更後の件数は「目安」の箇所を見る)
「パターン」に入れている数値を変えると、発生パターンが変わり、各日付あたりの件数とその生成される値を変更することができます。
※Number.Random()を使わず、ロードするだけでは値が変わらないようにしたつもりです。

コード

サンプル生成
let
    //乱数生成のパターン指定。これを変えない限りは、同じ数になる。
    パターン =1,

    元の日付=List.Buffer(List.Generate(()=>#date(2000,1,1),each _<=#date(2019,9,30),each _+#duration(1,0,0,0))),

    複製数=15,
    目安 =List.Sum({1..複製数})/List.Count({1..複製数})*List.Count(元の日付),

    複製パターン=List.Transform( List.Random(List.Count(元の日付),パターン),
                                each Number.Round(
                                      (_+0.5/複製数)*複製数,0        //四捨五入で0にならないように調整。
                                     )
                ),
    複製後日付= List.Transform( List.Positions(元の日付),
                               each List.Repeat({元の日付{_}},複製パターン{_})
               ),

    //リストのリストになっているので、1重のリストに変換。
    日付リスト = List.Combine(複製後日付),

    //レコード数把握用にもステップを分けた。
    件数 = List.Count(日付リスト),

    //面倒なので、関数にまとめて同じ仕組みで生成。要件次第ではそれぞれ別内容で書くもよし。
    整数発生関数=(下限,上限)=>
                    [初期生成 =List.Transform(List.Random(件数,パターン),
                                             each [x =Number.Round(_*上限,0),y=if x>=下限 then x else null][y]
                              ),
                     null削除後=List.RemoveNulls(初期生成),
                     件数あわせ=null削除後 & List.FirstN(null削除後,件数-List.Count(null削除後))
                ][件数あわせ],

    IDリスト = 整数発生関数(1,1000),
    値リスト = 整数発生関数(100,100000),

    //リストをテーブルに変換する。
    テーブルへ合成 = Table.FromColumns({日付リスト,IDリスト,値リスト})
in
    テーブルへ合成
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0