金子邦彦研究室インストールオープンデータ,データファイル処理ランダムデータの合成(CSV ファイルの生成,SQLite 3 データベースの生成)

ランダムデータの合成(CSV ファイルの生成,SQLite 3 データベースの生成)

このページには,CSVファイル形式のランダムデータの生成プログラムと実行手順を載せています.

さらに、CSV ファイルから,SQLite 3 のデータベースを作成します.

前準備

curl のインストール(Ubuntu 上)

次のコマンドを実行.

sudo apt -y update
sudo apt -y install curl

ランダムデータの入った CSV ファイルの生成(Ubuntu 上)

◆ 生成するデータファイル

◆ ソースコードのダウンロードとコンパイル手順

cd /tmp
rm -f populate.c
curl -O https://www.kkaneko.jp/tools/bigdata/populate.c
gcc -o a.out populate.c

[image]

◆ 実行手順と実行結果の例

./a.out 10

[image]

プログラムのソースコード

#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 データベースの生成を行う. 生成するSQLite 3 データベースのデータベース名を決めておくこと.

生成するSQLite3 データベース名: /tmp/random.db

データベース名は,自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと,

SQLite 3 データベースの生成

テーブル定義

rs(seq, name, a1, a2, created_at, updated_at)

  1. csvkit, nkf のインストール
    sudo apt -y install csvkit nkf
    
  2. CSV ファイルの生成
    cd /tmp
    rm -f populate.c
    curl -O https://www.kkaneko.jp/tools/bigdata/populate.c
    gcc -o a.out populate.c
    ./a.out 100000 > /tmp/random.csv
    head /tmp/random.csv
    

    [image]
  3. CSV ファイルから SQLite 3 データベースの生成
    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
    

    [image]