2019年05月18日
ダミーデータが欲しい時、名前やメールアドレス、住所などがほしければ次のようなジェネレータを使うのが常套手段だろう。
上記で対応していないものについては自力で準備しなければならないが、EXCELを使えば、日付、文字列、数値からなるダミーデータを容易に生成できる。Using Excel's Random Functions to setup Dummy Dataではそのテクニックを網羅的に紹介している。ここではいくつか説明を付与して紹介したい。
ある範囲の日付を生成するには次のようなやり方がある。
ある範囲の日付を生成する場合には次のように記載すれば良い。
RANDBETWEEN関数に渡す2つの日付はDATE関数で生成する。表示形式を日付にするのを忘れずに。
日だけ変化させればよいのであれば、DATE関数で生成することもできる。
おおよそ2019/1/1から2019/12/31まで平均値2019/7/1、標準偏差2ヶ月で生成する。NORMINV(RAND(), 0,60)は±180日に99.7%が入る。
いくつかの単語の中から一つを選択させるのには次のようなやり方がある。
数式に書ける程度の量であればCHOOSE関数とRANDBETWEEN関数を組み合わせて利用するのが早い。
アイテムの数は任意に設定できる。アイテムの出現頻度に偏りをつけたければ重複して設定すれば良い。たとえば男女比2:1の性別を生成したい場合には次のようにする。
A型39%、O型29%、B型22%、AB型10%の血液型を生成する場合は、RAND関数をA列に配置し、B列に次のように記載する。
VLOOKUP関数とRANDBETWEEN関数を組み合わせて使えばテーブルを参照してピックアップできる。
たとえば次のような星座テーブルが用意されているとする。

このテーブルをランダムに参照するには次のように記載する。
INDEX関数を使えばよりシンプルに書くことも可能だ。ソート番号を用意する必要がない。
先程の星座を参照するには次のように記載する。
ある条件に基づいた数値を出力にするには次のような方法がある。
文字列と同じ方法が利用できる。
整数に関してはRANDBETWEEN関数が便利に利用できる。
RAND関数は0以上1未満の乱数を生成する。
aとbの範囲で乱数を生成するには次のようにする。
INT関数でくくれば整数になる。
指定値を平均とする正規分布はNORMINV関数で生成できる。
平均50、標準偏差17の分布は次のように生成できる。
傾向線Y=mX+cに沿った数値を生成するためには傾向線にランダム要素を付与する。m=2, c=5のとき、たとえば次のように記載する。

TRUE/FALSEを返す真偽値は文字列と同様に生成できる。
CHOOSE関数でTRUE/FALSEから選択させる。
IF文を使えばTRUE/FALSEの割合を細かく制御できる。TRUEを30%にしたければ次の通り。
各々生成して&で結合すれば良い。接頭辞としてTR,VN,CARのいずれかをもち、その後に2桁の01-15までの数値が付く商品コードは次のように生成できる。
Pythonが使えるならFakerパッケージを使うことで、自由自在にダミーデータを生成できる。日本語ドキュメントはこちら。使い方はPythonメモ : fakerでテストデータを生成する - もた日記で紹介されている。生成可能なデータの一覧はこちらにまとめられている。
- 疑似個人情報データ生成サービス:連番、氏名、性別、電話番号(一般)、電話番号(FAX)、電話番号(携帯)、メールアドレス、住所、生年月日、年齢、出身地、血液型、乱数、パスワード
- なんちゃって個人情報:名前、ふりがな、メールアドレス、性別、年齢、誕生日、婚姻、血液型、都道府県、電話番号、携帯番号、キャリア、カレーの食べ方
上記で対応していないものについては自力で準備しなければならないが、EXCELを使えば、日付、文字列、数値からなるダミーデータを容易に生成できる。Using Excel's Random Functions to setup Dummy Dataではそのテクニックを網羅的に紹介している。ここではいくつか説明を付与して紹介したい。
1.日付
ある範囲の日付を生成するには次のようなやり方がある。
1-1.任意の範囲の日付
ある範囲の日付を生成する場合には次のように記載すれば良い。
=RANDBETWEEN(開始日付,終了日付)
RANDBETWEEN関数に渡す2つの日付はDATE関数で生成する。表示形式を日付にするのを忘れずに。
=RANDBETWEEN(DATE(2019,1,1),DATE(2019,12,31))
1-2.ある月の任意の日付
日だけ変化させればよいのであれば、DATE関数で生成することもできる。
=DATE(2019,2,RANDBETWEEN(1,28))
1-3.指定日を平均とする正規分布日付
おおよそ2019/1/1から2019/12/31まで平均値2019/7/1、標準偏差2ヶ月で生成する。NORMINV(RAND(), 0,60)は±180日に99.7%が入る。
=DATE(2019,7,NORMINV(RAND(), 0,60))
2.文字列
いくつかの単語の中から一つを選択させるのには次のようなやり方がある。
2-1.文字列選択
数式に書ける程度の量であればCHOOSE関数とRANDBETWEEN関数を組み合わせて利用するのが早い。
=CHOOSE(RANDBETWEEN(1,6),"アイテム1","アイテム2","アイテム3","アイテム4","アイテム5","アイテム6")
アイテムの数は任意に設定できる。アイテムの出現頻度に偏りをつけたければ重複して設定すれば良い。たとえば男女比2:1の性別を生成したい場合には次のようにする。
=CHOOSE(RANDBETWEEN(1,3),"男","男","女")
A型39%、O型29%、B型22%、AB型10%の血液型を生成する場合は、RAND関数をA列に配置し、B列に次のように記載する。
A1=RAND()
=IF(A1<0.39,"A型",IF(A1<0.68,"O型",IF(A1<0.9,"B型","AB型")))
2-2.文字列検索
VLOOKUP関数とRANDBETWEEN関数を組み合わせて使えばテーブルを参照してピックアップできる。
=VLOOKUP(RANDBETWEEN(1,リスト長), リスト, 2)
たとえば次のような星座テーブルが用意されているとする。

このテーブルをランダムに参照するには次のように記載する。
=VLOOKUP(RANDBETWEEN(1,12),星座テーブル,2)
2-3.インデックス
INDEX関数を使えばよりシンプルに書くことも可能だ。ソート番号を用意する必要がない。
=INDEX(リスト, RANDBETWEEN(1, COUNTA(リスト) ))
先程の星座を参照するには次のように記載する。
=INDEX(星座テーブル[星座],RANDBETWEEN(1,COUNTA(星座テーブル[星座])))
3.数値
ある条件に基づいた数値を出力にするには次のような方法がある。
3-1.数値選択
文字列と同じ方法が利用できる。
=CHOOSE(RANDBETWEEN(1,6),数値1,数値2,数値3,数値4,数値5,数値6)
=CHOOSE(RANDBETWEEN(1,6), 18, 21, -19, 36.4, 18, 24)
3-2.ランダム整数
整数に関してはRANDBETWEEN関数が便利に利用できる。
=RANDBETWEEN(開始数値, 終了数値)
=RANDBETWEEN(50, 100)
3-3.ランダム実数
RAND関数は0以上1未満の乱数を生成する。
=RAND()
aとbの範囲で乱数を生成するには次のようにする。
=RAND()*(b-a)+a
INT関数でくくれば整数になる。
=INT(RAND()*(b-a)+a)
3-4.正規分布
指定値を平均とする正規分布はNORMINV関数で生成できる。
=NORMINV(RAND(), 平均, 標準偏差)
平均50、標準偏差17の分布は次のように生成できる。
=NORMINV(RAND(), 50, 17)
3-5.傾向線に沿った数値
傾向線Y=mX+cに沿った数値を生成するためには傾向線にランダム要素を付与する。m=2, c=5のとき、たとえば次のように記載する。
=NORMINV(RAND(),2,0.3)*A1 + NORMINV(RAND(),5,1.5)

4.真偽値
TRUE/FALSEを返す真偽値は文字列と同様に生成できる。
4-1.選択
CHOOSE関数でTRUE/FALSEから選択させる。
=CHOOSE(RANDBETWEEN(1,2),TRUE, FALSE)
4-2.IF
IF文を使えばTRUE/FALSEの割合を細かく制御できる。TRUEを30%にしたければ次の通り。
=IF(RAND()<0.3,TRUE, FALSE)
5.文字列と数値の組み合わせ
各々生成して&で結合すれば良い。接頭辞としてTR,VN,CARのいずれかをもち、その後に2桁の01-15までの数値が付く商品コードは次のように生成できる。
=CHOOSE(RANDBETWEEN(1,3),"TR","VN","CAR")&TEXT(RANDBETWEEN(1,15),"0#")
おまけ
Pythonが使えるならFakerパッケージを使うことで、自由自在にダミーデータを生成できる。日本語ドキュメントはこちら。使い方はPythonメモ : fakerでテストデータを生成する - もた日記で紹介されている。生成可能なデータの一覧はこちらにまとめられている。
lunarmodule7 at 23:31│Comments(0)│
