CSV 形式ランダムデータの合成(C を使用)(Ubuntu 上)
【概要】
乱数を用いて,整数,浮動小数点数,文字列,日時を含むデータを合成する C のプログラムである。データベースシステム(データを蓄積・管理するソフトウエア)の機能や性能を試験するためのテスト用データ(試験に使う仮のデータ)を作る目的で用いる。出力は CSV 形式(値をコンマで区切って並べたテキスト形式)である。
【目次】
プログラム
次の C のプログラムは,指定した行数だけデータを生成し,画面(標準出力)へ CSV 形式で出力する。各行は,通し番号(整数),固定の文字列,二つの浮動小数点数,生成した日時からなる。
#include<stdio.h>
#include<time.h>
#include<sys/time.h>
#include<stdlib.h>
int main(int argc, char** argv)
{
struct timeval tv;
struct tm *pnow = NULL;
int i;
srand((unsigned)time(NULL));
for( i = 1; i < atoi(argv[1]); i++ ) {
gettimeofday(&tv, NULL);
pnow = localtime(&tv.tv_sec);
int yy = pnow->tm_year + 1900;
int mm = pnow->tm_mon + 1;
int dd = pnow->tm_mday;
int h = pnow->tm_hour;
int m = pnow->tm_min;
int s = pnow->tm_sec;
int msec = tv.tv_usec;
/* K, NAME */
printf( "%12.12d, A001, ", i );
/* B1, B2 */
printf( "%f, %f, ", 100.0 * ((double)rand()) / RAND_MAX, 100.0 * ((double)rand()) / RAND_MAX );
/* created_at */
printf( "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d.%6.6d\n", yy, mm, dd, h, m, s, msec );
}
return 0;
}
使い方
- 上のプログラムを populate.c のようなファイル名で保存する。
- コンパイルする。
Ubuntu では,次のように gcc(GNUのCコンパイラ)を使ってコンパイルする。
-oは出力ファイル名を指定するオプションである。gcc -o populate.out populate.c
- 次のようにして実行する。
「10」のところには,生成したいデータの行数を指定する。
./populate.out 10
- 次のようなファイルが得られる。
整数,浮動小数点数,文字列,日時を含むデータである。画面に出た結果をファイルへ保存したいときは,
./populate.out 10 > data.csvのようにリダイレクト(出力先をファイルに切り替える書き方)を使う。
動作チェック、利用(csvkitと組み合わせ
python populate.py 10 | csvlook # 生成結果を整形表示して確認する
python populate.py 10 | csvstat # 生成結果の統計を確認する
python populate.py 10 > data.csv
csvsql --db "postgresql:///testdb" --insert data.csv # DBへ投入する