ランダムデータの合成(CSV ファイルの生成,SQLite 3 データベースの生成)
このページには,CSVファイル形式のランダムデータの生成プログラムと実行手順を載せています.
さらに、CSV ファイルから,SQLite 3 のデータベースを作成します.
前準備
curl のインストール(Ubuntu 上)
次のコマンドを実行.
sudo apt -y update
sudo apt -y install curl
ランダムデータの入った CSV ファイルの生成(Ubuntu 上)
◆ 生成するデータファイル
- 第1列:通し番号
- 第2列:「A001」
- 第3列:0から100の一様乱数
- 第4列:0から100の一様乱数
- 第5列:日時(sqlite3 の datetime 形式に準拠)
- 第6列:日時 ※ 第4列と同じ値
◆ ソースコードのダウンロードとコンパイル手順
cd /tmp
rm -f populate.c
curl -O https://www.kkaneko.jp/ai/bigdata/populate.c
gcc -o a.out populate.c

◆ 実行手順と実行結果の例
./a.out 10

プログラムのソースコード
#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));
/* header */
printf( "seq, name, a1, a2, created_at, updated_at \n" );
for( i = 1; i < atoi(argv[1]); i++ ) {
gettimeofday(&tv, NULL);
pnow = localtime(&tv.tv_sec);
int yy = pnow->tm_year+1899;
int mm = (12.0 * ((int)rand())/RAND_MAX)+1;
int dd = (30.0 * ((int)rand())/RAND_MAX)+1;
int h = pnow->tm_hour;
int m = pnow->tm_min;
int s = pnow->tm_sec;
int msec = tv.tv_usec;
/* seq, NAME */
printf( "%12.12d, A001, ", i );
/* A1, A2 */
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, ", yy, mm, dd, h, m, s, msec );
/* updated_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;
}
SQLite 3 データベースの生成(Ubuntu 上)
SQLite 3 のインストール
あらかじめ決めておく事項
このページでは,SQLite 3 データベースの生成を行う. 生成するSQLite 3 データベースのデータベース名を決めておくこと.
生成するSQLite3 データベース名: /tmp/random.db
データベース名は,自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと,
SQLite 3 データベースの生成
テーブル定義
rs(seq, name, a1, a2, created_at, updated_at)
- csvkit, nkf のインストール
sudo apt -y install csvkit nkf
- CSV ファイルの生成
- 生成する CSV ファイル名: /tmp/random.csv
- その本体の行数: 100000
cd /tmp rm -f populate.c curl -O https://www.kkaneko.jp/ai/bigdata/populate.c gcc -o a.out populate.c ./a.out 100000 > /tmp/random.csv head /tmp/random.csv
- CSV ファイルから SQLite 3 データベースの生成
- 処理する CSV ファイル名: /tmp/random.csv
- 生成するSQLite3 データベース名: /tmp/random.db
rm -f /tmp/random.db csvsql --db sqlite:////tmp/random.db --insert /tmp/random.csv echo "vacuum;" | sqlite3 /tmp/random.db echo "select * from random limit 20;" | sqlite3 /tmp/random.db