頑張らないために頑張る

ゆるく頑張ります

ダミーデータをお手軽に調達する

Posted at — Sep 7, 2019

テストデータは欲しいけど「hoge」とかじゃ困るときに

文書作成やレイアウト検討など、さまざまなシチュエーションでダミーデータは必要です。ただ、あんまり「テストテストテスト・・・」のような単語の羅列だったり、同じ日付が繰り返し並んでいても、実際の動作がイメージしにくいです。かと言って、「hoge」「fuga」「piyo」「foo」「bar」「baz」ばっかりだと「そもそもどんなデータを想定してるんだかさっぱりだよ!」なんてこともあるかもしれません。

そこで各種ダミーデータの作成方法をメモしておきます。なお、ここで言及する「ダミーデータ」とは以下のようなものを想定しています。

よって、Linuxなどでランダムなデータを生成するのに利用するurandomのような機能は対象外です。また、VBAによるランダムなデータの生成もここでは対象外とします。プログラムを組むなら何でもアリになっちゃうしね_(:3」∠)_

fakerを使う

fakerはPythonパッケージの1つです。このパッケージのすごいところは人名、住所、会社名などを日本語で生成できるところ。またその機能もすこぶる多彩です。前述のプロフィール情報のほか、下記のようなダミーデータを生成できます。

もう、とりあえずプロフィール系のダミーデータはこれ使っておけばいいんじゃね?っていうくらいに多彩です。ホントしゅごい_(:3」∠)_

強いて難点をあげるなら、ダミーテキストも生成できるのですが、日本語として意味のない文章になることくらい。「別に意味がなくてもいいよー」という場合は、このパッケージ1つあればもう完璧です。

ちなみに紹介したこれはPythonのパッケージですが、PHPRubyにもfakerという同名のライブラリが存在します。

ダミーデータを生成するサービスを利用する

ダミーデータを調達するには、web上で生成してくれるサイトを利用するのが手っ取り早いです。大抵は出力もCSVなどに対応しているので、わざわざwebページをコピペする必要もありません。なので、有名どころ(?)を紹介します。

疑似個人情報データ生成サービス

もうページの名前からして期待できるのが疑似個人情報データ生成サービスです。出力できるダミーデータは一般的なプロフィール情報です。名前などのパターンが多い上、住所は出力したい都道府県を選択できる、男女比率を選択できる、出力する年齢の範囲も指定できるとあってなかなか多機能です。血液型も生成できるのですが、日本人の血液型の割合に合わせて生成されるというのも、「それっぽさ」を醸し出す一因かもしれません。

JSONの出力はできませんがXMLの出力が可能で、他にxls、CSVでの出力ができます。

難点は、メールアドレスのドメインが完全にランダムなこと。gTLDにないような文字列なので、そこだけはケアが必要です。

mockaroo

日本語データではありませんが、ダミーのプロフィール情報のほかにBitcoinのアドレスや中国っぽい名前まで生成する、めちゃくちゃ多彩な機能を持ったサービスがmockarooです。出力もCSV以外にJSON、xls形式など多彩。なお、1000件を超えるデータの出力についてはお金がかかるので注意。

ただねぇ・・・日本語データが生成できないのは、唯一にして最大の弱点・・・。

NameMaker

英語名やフランス語名など、それっぽい名前を生成できるのがName Makerです。NPC名とかに使えるかな?

ダミーテキストを生成する

前述のfakerではカバーしきれなかったのがダミーテキスト。そんなわけでダミーテキストを調達する方法について紹介します。

Lorem Ipsum

英字のダミーテキストでは大御所のLorem Ipsum。とりあえずこれを使っておけば「それっぽくなる」のが便利。UIの出来がいいと、Lorem Ipsumを書いておくだけでなんかオサレっぽさが醸し出されます。

青空文庫

日本語のダミーテキストを調達するのについては、もうこれが一番なんじゃなかろうか、と。最終手段を最初に持ってきた感がありますが、青空文庫にある任意の本の一節を引用する方法があります。著作権はすでに切れているので利用については自由です。

ネックはルビが振られていること。具体的には以下のように振られ方をしています。

私《わたくし》はその人を常に先生と呼んでいた。
だからここでもただ先生と書くだけで本名は打ち明けない。
これは世間を憚《はば》かる遠慮というよりも、その方が私にとって自然だからである。

これを除外しないといけないのが手間です。ルビの削除についてはググると方法が出てたりするのですが、結論から言っちゃうと正規表現で条件に一致したところは消しちゃえ、です。

青空文庫のルビを削除する

Visual Studio Codeなどのエディターで置換元を指定する際、下記のような正規表現で指定します。置換先には何も指定しません。これでルビの削除ができます。なお、置換元の条件に正規表現が指定できないエディターでは利用できません。

《[^》]+》

なお、カッコの形が異なる場合は違った条件にする必要があります。たとえば「(~)」でルビが記述されていれば下記のように置換元を指定します。

([^)]+)

各種ダミーテキスト生成サイト

ググると結構出てきます。手前味噌ですが、こちらでもダミーテキストを生成できます。

Officeでは便利な関数があります

Microsoft Officeでは、各アプリケーションにダミーデータを生成する関数などがもともと備わっています。

Excel

以下はすべてExcel関数です。動作はOffice Professional 2016環境下にて確認しています。

Randbetween()・・・ランダムな値を生成

最小値と最大値を指定すれば、勝手にランダムな値を生成してくれます。数値だけじゃなくて日付や時刻などもイケるのが素晴らしい。超絶便利。なお、値の指定は整数のみ有効です。

たとえば、日付を生成したい場合は任意のセルにて下記のように記述します。

=Randbetween("2019/01/01","2019/12/31")

時刻はちょっとややこしいです。下記のように記述します。

=RANDBETWEEN(TIME(0,0,0)*100000, TIME(10, 10, 10)*100000) / 100000

なんでこうなるかなんですが、Excel上で時刻は小数で管理されているせいです。

Excel関数であるtime()などは、ぱっと見だと時刻としてデータを返しているように見えます。ただし、実際は小数値を時刻にExcelが見た目だけ置き換えているだけなので、そのあたりを考慮しないといけません。さらにrandbetween()は小数を扱えないため、実際のデータが小数である時刻とは相性がすこぶる悪いのです。よって、「time()の結果を一度整数にして生成したrandbetween()の結果を小数に直す」という回りくどいことをしないといけないのでした。

なお、日付や時刻の場合はシリアル値が生成されるので、実際の見た目を整えたい場合はセルの表示形式を日付や時刻に設定しておく必要があります。

注意点というか、特筆すべき点があるとすれば、randbetween()関数による値の生成は、表示が更新されれば再計算されます。つまり、行・列の削除やオートフィル、セルへの値設定などの操作を行った場合、その操作の度に毎度毎度再計算されます

たとえばA1にrandbetween()を記述しました。

pic

このままF1までオートフィルすると、A1も再計算されます。

pic

今度はA1をコピーしてA3からA5にペーストして見ます。コピー元のA1だけでなくB1からF1までもが再計算されました。

pic

今度はD3に直接値をセットします。ただ単純に文字列を入力しただけでもrandbetween()が再計算されていることがわかります。

pic

このように、randbetween()を記述している限り再計算されます。なので、ある程度好みの値が生成できたらコピーして「値の貼り付け」を行って値を確定させるか、計算方法の設定を「手動」にすることで、余計な再計算を防ぐことができます。

rand()・・・ランダムな小数を生成

お馴染みランダム関数。小数を単純に生成するならこれ。ただ、整数ならrandbetween()があるので、わざわざこちらを利用して整数に直す必要はないし、小数も任意の数で割ればいいわけです。なので、実はわざわざこちらを利用するシチュエーションってそんなにないのかも。

word

Wordは文書作成ソフトらしく、文章を生成してくれます。こちらも動作はOffice Professional 2016環境下にて確認しています。

rand()・・・ランダムな文章を生成

適当な文章を勝手に生成します。段落や1段落中の文章数も指定が可能で至れり尽くせり。もちろんちゃんと日本語として読める文章なのでご安心です。

とりあえず文章を生成したい場合は、下記を任意の箇所に記述してエンターを押します。するといきなり文章が現れます。

=rand()

ちなみに引数を指定できます。形式はrand(段落数, 1段落中の文章数)です。

lorem()・・・有名なダミーテキストを生成

英字のダミーテキストを生成したい場合はこちらを使用します。そう、英字のダミーテキストって言ったらアレですよね。使い方は、相変わらず任意の場所で下記の入力を行ったあとに、エンターキーを押すだけです。

=lorem()

こっちも引数の指定が可能です。形式はlorem(段落数, 1段落中の文章数)です。

(備考)rand.old()・・・昔の機能なのでわざわざ使用するほどでもない

Word 2003あたりから実装されていた機能です。rand()と異なるのは生成される文章が短いことです。これを実行すると下記のような文章が生成されます。

Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。
Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。
Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。Word 2003 は、画期的な日本語入力・編集環境を実現した日本語ワープロです。

・・・まぁ、いわゆる「ダミーテキストっぽい」データが生成されますが、前述のrand()があるのでわざわざこちらを利用することはあまりないな、と思います。

PowerPoint

同様にパワポでもテキストを生成する機能が、準備されています。一応ね!ただ、Excelほど多機能ではなく、Wordほど親切ではありませんが・・・。こちらも動作はOffice Professional 2016環境下にて確認しています。

rand()・・・有名なパングラムを生成

「The quick brown fox jumps over the lazy dog」という有名なパングラムを生成します。

とりあえず文章を生成したい場合は、下記を任意のテキストフィールドに記述してエンターを押します。すると「The quick brown fox jumps over the lazy dog」という文章がいくつか生成されます。

=rand()

ちなみに引数を指定できます。形式はrand(段落数, 繰り返しの数)です。

lorem()・・・パワポでも使えます

英字のダミーテキストを生成したい場合はこちらを使用します。使い方は、相変わらず任意の場所で下記の入力を行ったあとに、エンターキーを押すだけです。

=lorem()

こっちも引数の指定が可能です。形式はlorem(段落数, 1段落中の文章数)です。

そもそもOfficeが持つ機能を使わなくても良くないか

というわけで、前述のテキストを含むダミーデータを生成できるサイトなどから、それ用のデータを取得すればより利便性がいいかもしれません。そこはケースバイケースで。

おわりに

ダミーデータの調達方法についてまとめてみました。こういうデータってまとまった件数が必要なこともあるので、自動で気軽に調達できるならそれに越したことはありません。楽しよう!_(:3」∠)_

comments powered by Disqus