カーネル密度推定を用いた店舗情報の可視化

9,256 views

Published on

カーネル密度推定を用いて、日本国内のマクドナルドの分布状況を可視化するというお話です。
解析にはGRASSを使用しています。

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,256
On SlideShare
0
From Embeds
0
Number of Embeds
597
Actions
Shares
0
Downloads
41
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

カーネル密度推定を用いた店舗情報の可視化

  1. 1. カーネル密度推定を用いた 店舗情報の可視化 2012年2月23日 heshikik@orkney.co.jp heshikik
  2. 2. きっかけは1枚の絵 アメリカ全土のマクドナルド分布http://www.datapointed.net/2009/09/distance-to-nearest-mcdonalds/
  3. 3. これの日本版を見てみたい
  4. 4. ググってみる
  5. 5. 同じようなことを考える人はいるようですhttp://www.codezine.jp/article/detail/6103 http://mglab.blogspot.com/2009/10/blog-post.html
  6. 6. 自分でも描いてみよう
  7. 7. まずはマクドナルドの店舗リストを手に入れよう
  8. 8. そう簡単には手に入らない
  9. 9. じゃあ、自力でリストを作る
  10. 10. 公式サイトから住所録を取得 http://www.mcdonalds.co.jp/shop/map/mcd_shop.php
  11. 11. perlで取得Web::Scraper を使ってこの要素を切り取る
  12. 12. コードはこんな感じ :my $scraper = scraper { process #ShopLists .ShopName dd, addressList[] => TEXT;};my $list = "./pref_list.txt";while(<listfile>) { my $pref = $_; my $res = $scraper->scrape(URI->new("http://www.mcdonalds.co.jp/shop/map/mcd_shop.php/shops?keyword=".$pref."&search.x=0&search.y=0")); foreach my $address(@{$res->{addressList}}){ print "$address"."¥n"; };} :
  13. 13. 住所リストは取れたので…北海道岩見沢市八条東10丁目2-55北海道札幌市厚別区厚別中央二条4丁目4-12北海道滝川市南滝の川132-1北海道札幌市南区藤野三条4丁目1-1北海道日高郡新ひだか町静内末広町2-1-1北海道河東郡音更町木野大通西17-1-4北海道札幌市東区東雁来九条4丁目7-1北海道恵庭市黄金南6-10-2北海道札幌市清田区里塚二条7丁目1-5北海道千歳市錦町3-10-1北海道伊達市舟岡町236-1 : Web APIでジオコーディング
  14. 14. コードはこんな感じ (今度はpython) TARGET_FILE = "mac_address.txt“ OUTPUT_FILE = "mac_latlon.csv“ TARGET_URL = "http://www.geocoding.jp/api/? " f = file(TARGET_FILE, "r") writer = csv.writer(file(OUTPUT_FILE, "w"), delimiter="¥t") for line in f: if line == "¥n": continue target = unicode(line, "utf-8", "ignore") query = [("q", line[:-1]), ("v", "1.1")] url = TARGET_URL + urllib.urlencode(query) result = urllib.urlopen(url).read() tree = etree.fromstring(result, parser=etree.XMLParser()) if len(tree.xpath("//lat")) != 0 lat = tree.xpath("//lat")[0].text lng = tree.xpath("//lng")[0].text writer.writerow([line[:-1], lat, lng, lat_dms, lng_dms]) time.sleep(5)
  15. 15. 必要なデータは揃った! 43.05808,141.355735 43.041,141.326977 43.087173,141.327749 43.068373,141.347621 43.107265,141.339675 43.14021,141.340742 43.07117,141.370255 43.079937,141.403721 43.096212,141.398004 :
  16. 16. GRASSにインポート> v.in.ascii input=C:¥test¥mac_latlon.csv output=mac
  17. 17. 拡大するとこんな感じ
  18. 18. これだと、ただの点の集合 もう少し定量的に密集度を評価できないか?
  19. 19. 空間補間??標高値を持った点群 ボロノイ図形 IDW RST
  20. 20. Z値を持ったデータではないので これらの方法は不適切 密度を算出してその分布を 可視化できれば良さそう
  21. 21. カーネル密度推定• 統計学において、確率変数の確率密度関数 を推定する手法の1つ。• ある母集団の標本のデータが与えられたとき、 カーネル密度推定を使えばその母集団の データを外挿できる。 wikipediaより抜粋
  22. 22. 度数分布と言えばヒストグラムだけど… http://www.econ.kobe-u.ac.jp/~nomura/lecture/10f/kd-estimate.pdf
  23. 23. カーネル密度推定のアイデア http://www.econ.kobe-u.ac.jp/~nomura/lecture/10f/kd-estimate.pdf
  24. 24. カーネル密度推定の方法 http://www.econ.kobe-u.ac.jp/~nomura/lecture/10f/kd-estimate.pdf
  25. 25. カーネル密度推定を用いてマクドナルド分布を可視化してみる
  26. 26. GRASSで描くとこうなる> v.kernel input=mac@MAC output=kernel stddeviation=0.03
  27. 27. 拡大するとこんな感じ
  28. 28. カラーテーブルを調整
  29. 29. 日本版マクドナルド分布を描くという目的は無事達成
  30. 30. 定量的なデータは得られたので人口密度などとの相関も評価 できるはず・・・ to be continued…
  31. 31. 参照URL• http://www.codezine.jp/article/detail/6103• http://mglab.blogspot.com/2009/10/blog- post.html• http://www.mcdonalds.co.jp/shop/map/mcd_ shop.php• http://e8y.net/mag/013-web-scraper/• http://www.econ.kobe- u.ac.jp/~nomura/lecture/10f/kd-estimate.pdf

×