#! ruby -Ku # -*- coding: utf-8 -*- require 'pp' require 'rubygems' require 'sqlite3' require 'date' # SQLite3 のデータベースファイル名を DBNAME に設定してください. # Windows の場合. 「C:」のようなドライブ名を付ける #DBNAME = "C:/SQLite/mydb" # Linux の場合 DBNAME = "/var/SQLite/mydb" DBDIR = File.dirname( DBNAME ) DBBASENAME = File.basename( DBNAME ) # データベースオープン Dir.chdir( File.dirname( File.expand_path( DBNAME ) ) ) db = SQLite3::Database.new( DBNAME ) # # 乱数の発生、分布は引数で指定 # def symbol_set(s, d) # 実行例 symbol_set( ["平日", "土曜", "日曜"], [5, 1, 1] ) # 累積分布 c = [0, 5, 6, 7] c = Array.new(d.size + 1) c[0] = 0 for i in 1..d.size do c[i] = c[i-1] + d[i-1] end # 変換表 t = [-1, 0, 0, 0, 0, 0, 1, 2], m = 7 m = c[ d.size ] t = Array.new(m + 1) t[0] = -1 for i in 1..d.size do for j in (c[i - 1])..(c[i] - 1) do t[j + 1] = i - 1 end end # a = Array.new(2) a[0] = t a[1] = m p a[0][(a[1] * rand) + 1] end def date_set(yy1, mm1, dd1, yy2, mm2, dd2) date1 = Date::new(yy1, mm1, dd1) date2 = Date::new(yy2, mm2, dd2) len = date2.jd - date1.jd + 1 # len は date1 から date2 までの日数+1 a = Array.new(2) a[0] = date1 a[1] = len d = a[0] + (a[1] * rand) p DateTime.new(d.year, d.month ,d.day, (24 * rand).truncate, (60 * rand).truncate, (60 * rand).truncate, 0.375) end date_set(2012, 4, 1, 2013, 3, 31) # symbol_set( ["平日", "土曜", "日曜"], [5, 1, 1] )

駅データ.jp

  1. テーブル定義
    #!/bin/bash 
    
    # Windows の場合. 「C:」のようなドライブ名を付ける
    #DBNAME="C:/SQLite/mydb"
    # Linux の場合
    DBNAME="/var/SQLite/mydb"
    
    #
    #
    #
    rm -f /tmp/1.$$.sql
    cat > /tmp/1.$$.sql <<-COMMAND
    cat /tmp/1.$$.sql | sqlite3 ${DBNAME}
    
  2. データの投入
    #!/bin/bash 
    
    # <前準備>
    # 駅データ.jp からダウンロード
    #都道府県 pref.csv 
    #事業者 company20130120.csv 
    #接続駅 join20130404.csv 
    #路線 line20130617free.csv 
    #駅 station20130529free.csv
    
    # Windows の場合. 「C:」のようなドライブ名を付ける
    #DBNAME="C:/SQLite/mydb"
    # Linux の場合
    DBNAME="/var/SQLite/mydb"
    
    #
    #
    #
    
    
    rm -f /tmp/1.$$.sql
    cat > /tmp/1.$$.sql <<-COMMAND
    COMMAND
    
    cat /tmp/1.$$.sql | sqlite3 ${DBNAME}
    
  3. データの調整
    #!/bin/bash 
    
    # Windows の場合. 「C:」のようなドライブ名を付ける
    #DBNAME="C:/SQLite/mydb"
    # Linux の場合
    DBNAME="/var/SQLite/mydb"
    
    #
    #
    #
    rm -f /tmp/1.$$.sql
    cat > /tmp/1.$$.sql <<-COMMAND
    
    COMMAND
    
    cat /tmp/1.$$.sql | sqlite3 ${DBNAME}
    

    緯度経度のプロット、密度のプロット

    X → Y, dom(X) = (緯度, 経度), dom(Y) = array
    #!/bin/bash 
    
    #
    #
    #
    rm -f /tmp/1.$$.r
    cat > /tmp/1.$$.r <<-COMMAND
    library(cluster)
    library(KernSmooth)  
    library(MASS)      
      library(RSQLite)
      driver=dbDriver("SQLite")
      con=dbConnect(driver, "/var/SQLite/mydb")
      R = dbGetQuery(con,"SELECT 駅名称 as name, 経度 as lat, 緯度 as lon from A駅 where 事業者名一般 = '名古屋鉄道';")
      png("/tmp/1.png")
      plot(R\$lat, R\$lon)
    
      library(EBImage)
      im <- Image(1, c(300,200))
      im[100,100] = 0
      dm <- distmap(im)
      png("/tmp/2.png")
      image(normalize(dm@.Data))
    
      a <- min(R\$lat)
      b <- max(R\$lat) - min(R\$lat)
      c <- min(R\$lon)
      d <- max(R\$lon) - min(R\$lon)
      X <- ( R\$lat - a ) / b   
      Y <- ( R\$lon - c ) / d 
      print(X)
      print(Y)
      library(EBImage)
      im <- Image(1, c(512,512))
      for (i in 1:length(X) ) {
        im[floor(512.0 * X[i]), floor(512.0 * Y[i])] = 0
      }
    
      dm <- distmap(im)
      png("/tmp/3.png")
      image(normalize(dm@.Data))
      
      density <- kde2d(X, Y, c(bandwidth.nrd(X), bandwidth.nrd(Y)), n=251, lims=c(0,1,0,1) ) 
      png("/tmp/4.png")
      image(density) 
    
    COMMAND
    
    cat /tmp/1.$$.r | R --vanilla 
    # display /tmp/1.png &
    # display /tmp/2.png &
    
    exit 
    echo install RSQLite
    echo install EBImage