北海道の市町村を観光客統計データでクラスタリングする
背景
私はこの数ヶ月間、北海道の観光客統計データを用いて地元の観光について調べている。 出身地にどのような特色があるのか、改めて知りたいと思ったからである。
北海道はオープンデータとして北海道観光入込客数調査報告書を公開中である(CC BY 2.1)。 過去15年分の各市町村における観光客数の月次推移をまとめたものである。延べ総数だけでなく、道外・道内、日帰り・宿泊などの詳細な内訳も含まれている。 そのため、各市町村がどのような特色を持っているかを知ることができる。
しかし、データそのものは無機質なスプレッドシートで、閲覧性に乏しい欠点があった。 市町村、内訳項目、時期など様々な分析軸があるにもかかわらず、閲覧・可視化には手作業による加工が多分に必要であった。
そこで、私は愚直にデータをクレンジングして機械可読化した上に、ヒートマップや各市町村の統計データを閲覧できるツールを作成した。 これにより、飛躍的に閲覧性が高まり、北海道全体の観光の特徴を俯瞰できるようになった。
(本ツールは2015年10月開催の北海道オープンデータハッカソンにてクリプトン賞を頂きました。別件にて起稿予定)
課題
しかし、視覚的に俯瞰できるようになっても、似た特色を持った自治体を探るのは手作業である。 北海道は市町村は179もある。人間には根気が続かず、到底無理である。
- 作者: 実業之日本社
- 出版社/メーカー: 実業之日本社
- 発売日: 2013/06/26
- メディア: ムック
- この商品を含むブログを見る
藤原製麺 札幌円山動物園白クマ塩ラーメン 112.4g×10袋
- 出版社/メーカー: 藤原製麺
- メディア: 食品&飲料
- 購入: 7人 クリック: 168回
- この商品を含むブログ (14件) を見る
手段
機械学習を使って似た特色を持った自治体を探す。 具体的には観光客統計データの1年分の月次推移を12次元ベクトルデータに見立てて、市町村をクラスタリングする。アルゴリズムにはk-meansを用いる。
統計データは北海道観光入込客数調査報告書の2011年度、2012年度(2012年1月〜2012年12月)のデータを用いる。メトリクスは道外観光客数を用いた。道外観光客のほうが、より北海道らしい場所へと行く傾向があると仮定したからである。
クラスタリング結果
結果は以下のようになった。
クラスタ数は手作業で探り、直感的に良いと感じた k=12 に落ち着かせた。 観光客数の絶対数も類似度に含めるため、各ベクトルは正規化しなかった。
考察
思いの外よくまとまった。 ある実行結果から20市町村以下となったクラスタを抜粋し、それぞれに名前をつけてみる。
孤高の都市たち
これらはそれぞれ単独クラスタとなった。北海道を代表する観光地であり、個性をはっきりと示せている都市である。
札幌市
小樽市
旭川市
函館市
あと一歩で孤高の都市
一定規模の観光資源・産業規模はあるものの、孤高の都市にはなりきれなかった都市たちである。 上川町、斜里町、洞爺湖町は温泉で有名であるが、なぜかそこに混じってしまう帯広市と釧路市。 そして、犬猿の仲である帯広と釧路が交わらないところも実態をよく表している。 登別市と千歳市が似ている実感はないが、いずれもGWと夏休みの間の6月にがくんと数を下げる点では一致していた。
(組み合わせA)
- 釧路市
- 上川町
(組み合わせB)
(組み合わせC)
スキークラスタ
文句なくスキー場である。ここまで綺麗にくくり出せるとは。
北の国からクラスタ
あーあーーーあああああ~~~~~~~~~。
知る人ぞ知る観光地クラスタ
これらは一定数の観光客を集めているという点で集まった模様である。 いずれも道の駅に寄りたくなる感じがする市町村である。
ソースコード
上記の実験結果はgithubにて公開中である。
展望
海外観光客や人口のメトリクスを足したり、時系列要素を年またぎで足したり、主成分分析を組み合わせたりすればもっといろんな視点で類似する自治体を集められる気がする。
- 作者: Willi Richert,Luis Pedro Coelho,斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/10/25
- メディア: 大型本
- この商品を含むブログ (4件) を見る
データサイエンティスト養成読本 機械学習入門編 (Software Design plus)
- 作者: 比戸将平,馬場雪乃,里洋平,戸嶋龍哉,得居誠也,福島真太朗,加藤公一,関喜史,阿部厳,熊崎宏樹
- 出版社/メーカー: 技術評論社
- 発売日: 2015/09/10
- メディア: 大型本
- この商品を含むブログ (5件) を見る
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (11件) を見る
参考文献
- K-means : scikit-learn による最も基本的なクラスタリング分析
- 結果の可視化 : GeoJSONを軽くするだけじゃない! TopoJSONクライアント TIPS
2015/11/04追記
区間推定法の信頼度が実際の推定結果と合致するかを確かめる
統計解析における検定・推定の勉強中に出てきた母平均の区間推定法の信頼度を理解するために行った実験の備忘録。 具体的には区間推定法の信頼度が実際の推定結果と合致するかを確かめた。
正規分布からサンプルしたデータでの母平均の区間推定を何度も行い、その中に真の母平均が含まれる確率を計算するスクリプトを実装した。
スクリプト
import random import math import numpy as np from scipy.stats import norm conf_results = [] mu0 = 20.0 # 母平均 sig0 = 10.0 # 母分散 N = 1000 # データサンプル数 trial = 1000 # 母平均推定試行回数 for i in range(trial): # 正規分布からデータをサンプルする data = np.random.normal(loc=mu0, scale=sig0, size=N) # サンプル集合の平均値を求める(母平均推定) mean = np.mean(data) # 母平均推定の信頼区間(95%)を求める R = norm.interval(0.95,loc=mean,scale=sig0/math.sqrt(N)) # 信頼区間に真の母平均が含まれるか否かを評価し、結果を出力する conf_results.append( R[0] < mu0 < R[1] ) # サンプルデータ群の正解率(実測の信頼度) print float(sum(conf_results)) / float(trial)
実行結果
0.946
設定した信頼度95%とほぼ一致している。
MacPortsで入れたmecabをRubyから使う
MacPortsからmecabを入れる
杉村様がブログで公開されている方法を参考に入れました。MacPortsから普通に入れた上に、UTF−8の辞書に差し替えます。
参考
$ sudo port install mecab $ sudo port install mecab-ipadic-utf8
$ sudo vi /opt/local/etc/mecabrc ;dicdir = /opt/local/lib/mecab/dic/sysdic ←コメントアウト dicdir = /opt/local/lib/mecab/dic/ipadic-utf8
gemパッケージ mecab のインストールする
そのままでは入らない
mecab.hのありかがわからないためエラーが起きます。
$ sudo gem install mecab Fetching: mecab-0.996.gem (100%) Building native extensions. This could take a while... ERROR: Error installing mecab: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb checking for make... yes checking for main() in -lstdc++... yes checking for main() in -lmecab... yes checking for main() in -lstdc++... yes checking for mecab.h... yes creating Makefile make "DESTDIR=" compiling mecab_wrap.cpp mecab_wrap.cpp:1855:10: fatal error: 'mecab.h' file not found #include "mecab.h" ^ 1 error generated. make: *** [mecab_wrap.o] Error 1 Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/mecab-0.996 for inspection. Results logged to /Library/Ruby/Gems/2.0.0/gems/mecab-0.996/ext/mecab/gem_make.out
解決方法 : CPPFLAGSオプションを付与する
上記エラーを回避するためには、MacPortsのmecabのヘッダの有りかをgemコマンドに教えます。
$ sudo gem install mecab -- --with-cppflags=-I/opt/local/include
MacPorts以外にもHomeBrew等でも同様の指定ができるのではないかと思われます。
参考
余談
下記のサイトなどではgemファイルそのものを改変する方法が紹介されているが、少なくとも今現在はそこまでしなくても上記オプション付与で対処できる模様です。
日韓漢字読みの法則
子音 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ㄱ | ㄴ | ㄷ | ㄹ | ㅁ | ㅂ | ㅅ | ㅇ | ㅈ | ㅊ | ㅋ | ㅌ | ㅍ | ㅎ |
g/k | n | d/t | r | m | b/p | s | 母音 | j/ch | ch | k | t | p | h |
母音 | |||||||||
---|---|---|---|---|---|---|---|---|---|
ㅏ | ㅑ | ㅓ | ㅕ | ㅗ | ㅛ | ㅜ | ㅠ | ㅡ | ㅣ |
a | ya | eo | yeo | o | yo | u | yu | eu | i |
ㅐ | =ㅏ+ㅣ | ae | =a+i |
ㅔ | =ㅓ+ㅣ | e | =eo+i |
ㅖ | =ㅕ+ㅣ | ye | =yeo+i |
ㅘ | =ㅗ+ㅏ | wa | =o+a |
ㅚ | =ㅗ+ㅣ | we | =o+i |
ㅝ | =ㅜ+ㅓ | weo | =u+eo |
ㅟ | =ㅜ+ㅣ | wi | =u+i |
ㅢ | =ㅡ+ㅣ | wee | =eu+i |
子音の法則
韓国語子音 | 日本語子音 | 例 | (日本語読み) |
---|---|---|---|
ㄱ (g/k) |
カ行 | 可(가/ga) | か |
ㄴ (n) |
ナ行/(ラ行)/(ダ行) | 那(나/na) | な |
ㄷ (d/t) |
タ行/ダ行 | 多(다/da) | た |
ㄹ (r) |
ラ行 | 羅(라/ra) | ら |
ㅁ (m) |
マ行/バ行 | 馬(마/ma) | ま/ば |
ㅂ (b/p) |
ハ行/バ行 | 負(부/bu) | ふ |
ㅅ (s) |
サ行/ザ行 | 使(사/sa) | し |
ㅇ (母音) |
ア行/カ行/ガ行 | 阿(아/a) | あ |
ㅈ (j/ch) |
タ行/サ行/ダ行/ザ行 | 自(자/ja) | じ |
ㅊ (ch) |
タ行/サ行/ダ行/ザ行 | 差(차/cha) | さ |
ㅋ (k) |
カ行 | 快(쾌/kwe) | かい |
ㅌ (t) |
タ行/ダ行 | 他(타/ta) | た |
ㅍ (p) |
ハ行/バ行 | 波(파/pa) | は |
ㅎ (h) |
カ行/ワ行 | 下(하/ha) | か |
- 韓国語では語頭で子音が落ちる傾向がある
- 「h」の子音がカ行になる
- 「p」「b」の発音対応は、昔の日本でハ行を唇をくっつけて発音していたことと一致
母音法則
ここからは多少数が増えてきて、例を示すのが大変になってくるがご了承いただきたい。
韓国語 | 日本語 | 例 | (日本語読み) |
---|---|---|---|
ㅏ (a) |
あ/い | 亜(아/a) | あ |
ㅑ (ya) |
や | 野(야/ya) | や |
ㅓ (eo) |
え/お | 低(저/jeo) | てい |
ㅕ (yeo) |
え/よ | 麗(려/ryeo) | れい |
ㅗ (o) |
お/う | 汚(오/o) | お |
ㅛ (yo) |
よ | 曜(요/yo) | よう |
ㅜ (u) |
う/お | 右(우/u) | ゆう/う |
ㅠ (yu) |
ゆ | 有(유/yu) | ゆう |
ㅡ (eu) |
い/お | 音(음/eum) | いん/おん |
ㅣ (i) |
い | 異(이/i) | い |
韓国語 | 日本語 | 例 | (日本語読み) |
---|---|---|---|
ㅐ (ae) |
あい | 愛(애/ae) | あい |
ㅔ (e) |
え | 憩(게/ge) | けい |
ㅖ (ye) |
え/よ | 予(예/ye) | よ |
ㅘ (wa) |
あ | 果(과/gwa) | か |
ㅚ (we) |
あい | 頼(뢰/rwe) | らい |
ㅝ (weo) |
え/い | 原(원/weon) | げん |
ㅟ (wi) |
い | 位(위/wi) | い |
ㅢ (wee) |
い | 義(의/wee) | ぎ |
皆既月食の連続写真をJavaScriptで閲覧する
昨日2014年10月8日(水)に観測された皆既月食の連続写真をJavaScriptで簡便に閲覧できるようにしました。
トリミングがまだやっつけ状態で欠落する写真もありますが、トリミングアルゴリズムを見直して改めて直す予定です。
Webカメラ映像から人を消す
Webカメラ映像から人を消すJavascriptを実装しました。 @yabuki様の「風景から歩行者を消す手軽な方法」に発想を得て作成した物です。
カメラへのアクセスを許可するとWebカメラ映像から人を消すスクリプトが発動します。
実装のポイントは以下の通りです。
- WebRTCでWebカメラ映像取得する
- ピクセル単位のアクセスをしたいので、Webカメラ映像のバッファを不可視なCanvasに落とし込む
- Canvasのピクセルの平均値を計算する(全部の値は持っていられないので逐次更新する平均値とした)
- 平均値の計算結果を可視なCanvasに描画する
詳しくは下記ソースをご参照ください。
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
- 作者: Ilya Grigorik,和田祐一郎,株式会社プログラミングシステム社
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/05/16
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: Steve Fulton,Jeff Fulton
- 出版社/メーカー: O'Reilly Media
- 発売日: 2013/04/11
- メディア: Kindle版
- この商品を含むブログを見る
社外レンズで撮影したキヤノンEOS RAW画像を純正現像ソフトDPPでレンズ補正する
本エントリでは、シグマ、タムロン、トキナー等の社外レンズを用いて撮影した、キヤノン製一眼レフカメラ(EOS Digital)のRAW画像を、キヤノン純正現像ソフトDPPでレンズ補正する方法を紹介する。
TOKINA トキナー AT-X124PRO DX2 キヤノンデジタル用(12-24mm/F4)【輸出専用棚ズレ品】
- 出版社/メーカー: TOKINA(トキナー)
- メディア: エレクトロニクス
- この商品を含むブログを見る
SIGMA 交換レンズ 17-70mm F2.8-4 DC MACRO OS HSM キヤノン用 17-70mmF2.8-4DCMACROOSHSM
- 出版社/メーカー: シグマ
- メディア: エレクトロニクス
- この商品を含むブログを見る
DPPとは
DPPとはDigital Photo Professionalの略。キヤノン製一眼レフカメラ(EOS Digital)でRAW撮影した写真の現像をするための純正ソフトウェアである。このソフトウェアを使ってRAW画像(CR2ファイル)を現像すれば、ボディ内で生成されるJPEGよりもきれいな写真を現像できる。なぜなら、撮像素子から得られた生のデータを無劣化で保存された情報を元に、PCの計算資源をふんだんに使って現像できるからである。 特にノイズ補正やレンズ補正が強力で、一昔前のボディで撮影した写真も、最新のボディと同等かそれ以上の画質で現像できるのが特徴である。私は特にレンズ補正が大好きである。写真の四隅に現れる色収差(ズレ)が、とてもきれいに修正されるからだ。だから、私は一眼(1D Mark II N, Kiss X4 , EOS M)でもコンデジ(S95,S100)でもできるだけRAWで撮っている。
- 出版社/メーカー: キヤノン
- 発売日: 2013/11/28
- メディア: Camera
- この商品を含むブログ (1件) を見る
Canon ミラーレス一眼カメラ EOS M2 ダブルレンズキット(ブラック) EF-M18-55mm F3.5-5.6 IS STM EF-M22mm F2 STM付属 EOSM2BK-WLK
- 出版社/メーカー: キヤノン
- 発売日: 2013/12/20
- メディア: Camera
- この商品を含むブログを見る
Canon デジタルカメラ PowerShot S120(ブラック) F値1.8 広角24mm 光学5倍ズーム PSS120(BK)
- 出版社/メーカー: キヤノン
- 発売日: 2013/09/12
- メディア: Camera
- この商品を含むブログ (3件) を見る
DPPの制約
しかしながら、DPPのレンズ補正機能は純正レンズのみに限定されている。故に、シグマ、トキナー、タムロン等の社外レンズに適用できない。レンズ補正のためには光学的な特性を表す様々なパラメタが必要になるためである。
カメラメーカーとしては、純正レンズの優位性を示すためにも、社外のレンズに対してレンズ補正の機能を解放するとは考えられないため、今後の改善は期待できない。素直に社外の現像ソフトを買えばよいのではあるが、購入に踏み切れない人もいるはず(筆者がそうだ)。そこで、無理矢理でもDPPで社外レンズのレンズ補正ができないか、試してみた。結論からいうと、できた。
純正以外のレンズにも適用する方法 = Exifのレンズ情報を純正レンズのものに書き換える
レンズ補正の社外のレンズでも適用可能にする方法がある。それはExifを書き換え、純正レンズに偽装する方法である。これによって、あっけなく適用可能になる。もちろん、補正のための光学的なパラメタはでたらめだろうから、最適な補正ではないことは自明であるが、色収差・色にじみはきれいに消える(微調整もできるのでかなりきれいになる)。この機能を無理矢理にでも使った方が、画質は圧倒的によい。
下記に貼った例は、イタリアのフィレンツェのドゥオモをTokina AT-X PRO 124 DX IIで撮影したものである。当然ながらDPPでのレンズ補正は許されていない。しかしながら、Exifのレンズ情報を純正レンズとして偽装することで可能になった。
Exifの書き換え方法
私はexiftoolを使って書き換えた。 Exifにまつわる様々な処理を簡単に行えるコマンドラインツールである。(コマンドプロンプト、ターミナルをある程度使いこなす必要があるので注意)
入手先
以下のexiftoolの公式Webサイトから入手可能である。
インストール方法
Windows
上記URLからexiftool-*.zipをダウンロード後、任意の場所に解凍。 PATHを通すなりして任意の場所から実行しやすい環境を作る。
Mac
上記URLからexiftool-*.dmgをダウンロード後、インストーラを実行。インストールするだけで任意パスから実行可能になる。
exiftoolを呼び出す具体的なコマンド
exiftoolを使ってLensType, MinFocalLength, MaxFocalLengthの属性を書き換える。
exiftool -MinFocalLength=[最小焦点距離] -MaxFocalLength=[最大焦点距離] -LensType='[レンズモデル名(選定方法は後述)]' [書き換え対象のファイル名]
※ 上書きされるので注意
偽装レンズの選定方法
偽装するレンズは、撮影したレンズと焦点距離が似ている純正レンズを指定するとよい。 例えば、 Tokina AT-X PRO 124 DX II(12-24mm f4.0)なら、純正の超広角レンズであるCanon EF-S 10-22mm f/3.5-4.5 USMを選ぶ。
exiftool -MinFocalLength=10 -MaxFocalLength=22 -LensType='Canon EF-S 10-22mm f/3.5-4.5 USM' IMG_0155\ 2.CR2
※ 上書きされるので注意
利用可能なレンズ一覧は下記exiftoolのマニュアルサイトの章"Canon LensType Values"に記されている。
なお、焦点距離の数値(MinFocalLength, MaxFocalLength)は各レンズと一致するように設定すること。そうでなければレンズ補正機能は使えない。
具体例
上記操作によって純正レンズ情報に偽装したRAW画像ファイルをDPPに読ませると、レンズ補正機能が使えるようになる。
まとめ
DPPにおいてタムロンやシグマ、トキナーなどの社外レンズで撮影したRAW画像に対してもレンズ補正が可能になる方法を紹介した。 Exifに記録されているレンズ情報を、強制的に純正レンズのものに書き換えることで可能になる。 LightroomやSilkypixなどの現像ソフトウェアを買うまでには至らない場合に、間に合わせの機能として使うのはいかがだろうか。
Adobe Photoshop Lightroom 5.0 日本語版 Windows/Macintosh版
- 出版社/メーカー: アドビシステムズ
- 発売日: 2013/06/21
- メディア: DVD-ROM
- この商品を含むブログ (1件) を見る
市川ソフトラボラトリー SILKYPIX Developer Studio Pro5 Win/Mac
- 出版社/メーカー: 市川ソフトラボラトリー
- 発売日: 2012/08/31
- メディア: CD-ROM
- この商品を含むブログを見る