2015年7月14日火曜日

郵便番号情報のデータベース化

郵便番号のデータベース化を行います。

1.郵便番号データ
http://www.post.japanpost.jp/zipcode/dl/roman-zip.html
ダウンロードして開くと
"0640941","北海道","札幌市 中央区","旭ケ丘","HOKKAIDO","SAPPORO SHI CHUO KU","ASAHIGAOKA"
このようなデータ形式になっています。

2.保管用データベース作成
CREATE TABLE IF NOT EXISTS `postalcodes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(7) NOT NULL,
  `ken` varchar(255) NOT NULL,
  `city` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `kenread` varchar(255) NOT NULL,
  `cityread` varchar(255) NOT NULL,
  `addressread` varchar(255) NOT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

3.サーバ側でアップロードできるファイル容量を増やしておく。
今回ダウンロードしたファイルは12.4MBありました。
今回はphpMyAdminでCSVアップロードで済ませてしまおうと思います。
phpMyAdminのデフォルトだと2MB位なので、増やしておきます。

# vi /etc/php.ini

memory_limit = 128M

;post_max_size = 8M

post_max_size = 32M
;upload_max_filesize = 2M

upload_max_filesize = 32M




4.データのアップロード
今回はphpMyAdminを利用して、CSVデータをテーブルに格納します。
phpMyAdmin->データベース選択->テーブル(postalcodes)選択->インポート
今回のCSVを選択します。
フォーマットがCSVになっていることを確認し、カラム名に
code,ken,city,address,kenread,cityread,addressreadを書いておきます。
実行ボタンを押すとアップロードが開始されます。

今回の環境では2分程度かかりました。

参考サイト
http://rensabanet.com/wordpress-tips/tukai/11733/

2015年7月7日火曜日

Rでのカイ二乗検定

年毎の発生率の有意性を確認するために実施しました。
今回は5年間のある事象の発生率に対し、有意性があるか検定します。

今回の対象はサンプル数10万件程度を仮定するので、ピアソンのカイ二乗検定を利用します。

今回のテーブルです。

  発生あり 発生なし
2015 1325 94055
2014 1358 34025
2013 1655 38484
2012 1873 75089
2011 1424 65571

帰無仮説 H0:発生の頻度と年代は独立である
対立仮説 H1:発生の頻度と年代は独立でない(関係がある)

実際にRでやってみます。
chisq.test(matrix(c(1325,94055,1358,34025,1655,38484,1873,75089,1424,65571),nrow=5,byrow=TRUE))

    Pearson's Chi-squared test

data:  matrix(c(1325, 94055, 1358, 34025, 1655, 38484, 1873, 75089,1424, 65571), nrow = 5, byrow = TRUE)
X-squared = 1245.7, df = 4, p-value < 2.2e-16

統計量であるカイ二乗値:X-squared = 1245.7
自由度:df = 4
p値(p-value): < 2.2e-16 < 0.001(有意水準0.1%)

よって帰無仮説H0を棄却する。

結論
有意水準0.1%で、事象の発生頻度と年代は独立でない。つまり年代と関係があるといえる。

参考
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/66.html
http://monge.tec.fukuoka-u.ac.jp/r_analysis/test_crosstable00.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1169222731

2015年7月4日土曜日

MySQLのデフォルト設定(UTF-8環境)

いつもソフトウェア側でUTF-8を指定していたので問題無かったのですが、色々な用途で使うとデフォルトでしっかり設定したほうがよいです。

[現在の状況の確認]
phpMyAdmin等で次のSQL文を実行してみます。

SHOW VARIABLES LIKE "chara%"


デフォルトではこの中でcharacter_set_serverがlatin1になっています。これを修正します。

[変更]
# vi /etc/my.cnf
[mysqld]に追加
character-set-server=utf8

[client]作成
default-character-set=utf8





# service mysqld restart

[確認]
もう一度
SHOW VARIABLES LIKE "chara%"
を発行してみると


のようにUTF-8の環境になったようです。

参考
http://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a