# coding: utf-8
#! ruby -Ku
# -*- coding: utf-8 -*-

require 'pp'
require 'rubygems'
require 'sqlite3'
require 'date'

# SQLite 3 のデータベースファイル名を 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 = SQLite 3::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] )

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

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