【Nippon,infotheo,tidyr】チョコレート狂が生きていきやすい場所を探す
ここ2週間ほど
バグの地雷原とログの森で迷子になっている間に、
札幌では初雪が降りました。
まだ夏が終わったのを受け入れていないのになんてことだ。
ということで
冬の楽しみを一生懸命考えてみました。
クリスマス → いい子にしていたからきっと12/25にはPS4が枕元にあるに違いない
スキー → 行く。
バレンタイン→ ???
???
そ う だ バ レ ン タ イ ン が あ る
バレンタインは恋人たちだけのものじゃない。
私は世界で一番チョコレートが好きだ。
チョコレートの海で溺れて死にたい。
ということでチョコレートを死ぬほど食べても恥ずかしくないエリアを探します。
テーマ
チョコレートの消費額の多いエリアを可視化
あんま目新しいことはしないです。
さくっとやる
> choco_1 #チョコレートの消費額 area Expenditure1 1 金沢市 6543 2 山口市 5853 3 宇都宮市 5797 4 山形市 5697 5 富山市 5634 6 奈良市 5620 7 高松市 5479 8 札幌市 5478 9 京都市 5455 10 高知市 5428 11 川崎市 5388 12 鳥取市 5381 13 大分市 5377 14 広島市 5313 15 長野市 5251 16 東京都区部 5248 17 さいたま市 5239 18 鹿児島市 5237 19 福井市 5235 20 名古屋市 5091 21 仙台市 5064 22 甲府市 5057 23 松山市 5039 24 津市 4987 25 福島市 4922 26 神戸市 4880 27 浜松市 4849 28 前橋市 4839 29 水戸市 4807 30 岐阜市 4805 31 新潟市 4801 32 静岡市 4733 33 横浜市 4729 34 佐賀市 4703 35 大津市 4652 36 秋田市 4639 37 千葉市 4634 38 岡山市 4619 39 熊本市 4576 40 松江市 4539 41 宮崎市 4536 42 和歌山市 4501 43 徳島市 4477 44 盛岡市 4317 45 福岡市 4232 46 那覇市 4174 47 堺市 4133 48 大阪市 4096 49 長崎市 4076 50 北九州市 3952 51 青森市 3471 > choco_2 #チョコレート菓子類の消費額 area Expenditure2 1 札幌市 1976 2 山口市 1950 3 高知市 1933 4 金沢市 1906 5 鳥取市 1757 6 山形市 1721 7 宇都宮市 1713 8 富山市 1683 9 松山市 1668 10 浜松市 1646 11 鹿児島市 1630 12 福井市 1612 13 松江市 1580 14 徳島市 1558 15 大分市 1557 16 奈良市 1555 17 佐賀市 1537 18 仙台市 1499 19 長野市 1474 20 岡山市 1466 21 川崎市 1445 22 大津市 1395 23 福島市 1373 24 盛岡市 1359 25 津市 1355 26 高松市 1344 27 甲府市 1343 28 広島市 1308 29 宮崎市 1248 30 岐阜市 1229 31 水戸市 1222 32 秋田市 1214 33 千葉市 1196 34 京都市 1188 35 さいたま市 1185 36 神戸市 1182 37 横浜市 1165 38 新潟市 1162 39 静岡市 1156 40 前橋市 1152 41 名古屋市 1148 42 青森市 1125 43 東京都区部 1123 44 和歌山市 1100 45 熊本市 1081 46 堺市 1045 47 福岡市 1035 48 那覇市 1035 49 長崎市 974 50 大阪市 943 51 北九州市 923
県庁所在地の他、政令指定都市が混ざってます。
なんかの時に作った県庁所在地→都道府県→地方変換マスタがあったので今回はそれとマージして都道府県名に変換。
#都道府県マスタ----------------------------------------------- master<-read.csv("ID.csv",header=FALSE) colnames(master)<-c("ID","areaname","chiho","area") #マージと合計行の追加------------------------------------------ choco_map<-master %>% dplyr::left_join(.,choco_1,by="area") %>% dplyr::left_join(.,choco_2,by="area") %>% dplyr::mutate(.,Expenditure=Expenditure1+Expenditure2) #-------------------------------------------------------------- > choco_map ID areaname chiho area Expenditure1 Expenditure2 Expenditure 1 1 北海道 hokkaido 札幌市 5478 1976 7454 2 2 青森県 tohoku 青森市 3471 1125 4596 3 3 岩手県 tohoku 盛岡市 4317 1359 5676 4 4 宮城県 tohoku 仙台市 5064 1499 6563 5 5 秋田県 tohoku 秋田市 4639 1214 5853 6 6 山形県 tohoku 山形市 5697 1721 7418 7 7 福島県 tohoku 福島市 4922 1373 6295 8 8 茨城県 kantou 水戸市 4807 1222 6029 9 9 栃木県 kantou 宇都宮市 5797 1713 7510 10 10 群馬県 kantou 前橋市 4839 1152 5991 11 11 埼玉県 kantou さいたま市 5239 1185 6424 12 12 千葉県 kantou 千葉市 4634 1196 5830 13 13 東京都 kantou 東京都区部 5248 1123 6371 14 14 神奈川県 kantou 横浜市 4729 1165 5894 15 15 新潟県 tyubu 新潟市 4801 1162 5963 16 16 富山県 tyubu 富山市 5634 1683 7317 17 17 石川県 tyubu 金沢市 6543 1906 8449 18 18 福井県 tyubu 福井市 5235 1612 6847 19 19 山梨県 tyubu 甲府市 5057 1343 6400 20 20 長野県 tyubu 長野市 5251 1474 6725 21 21 岐阜県 tyubu 岐阜市 4805 1229 6034 22 22 静岡県 tyubu 静岡市 4733 1156 5889 23 23 愛知県 tyubu 名古屋市 5091 1148 6239 24 24 三重県 kansai 津市 4987 1355 6342 25 25 滋賀県 kansai 大津市 4652 1395 6047 26 26 京都府 kansai 京都市 5455 1188 6643 27 27 大阪府 kansai 大阪市 4096 943 5039 28 28 兵庫県 kansai 神戸市 4880 1182 6062 29 29 奈良県 kansai 奈良市 5620 1555 7175 30 30 和歌山県 kansai 和歌山市 4501 1100 5601 31 31 鳥取県 tyugoku 鳥取市 5381 1757 7138 32 32 島根県 tyugoku 松江市 4539 1580 6119 33 33 岡山県 tyugoku 岡山市 4619 1466 6085 34 34 広島県 tyugoku 広島市 5313 1308 6621 35 35 山口県 tyugoku 山口市 5853 1950 7803 36 36 徳島県 shikoku 徳島市 4477 1558 6035 37 37 香川県 shikoku 高松市 5479 1344 6823 38 38 愛媛県 shikoku 松山市 5039 1668 6707 39 39 高知県 shikoku 高知市 5428 1933 7361 40 40 福岡県 kyusyu 福岡市 4232 1035 5267 41 41 佐賀県 kyusyu 佐賀市 4703 1537 6240 42 42 長崎県 kyusyu 長崎市 4076 974 5050 43 43 熊本県 kyusyu 熊本市 4576 1081 5657 44 44 大分県 kyusyu 大分市 5377 1557 6934 45 45 宮崎県 kyusyu 宮崎市 4536 1248 5784 46 46 鹿児島県 kyusyu 鹿児島市 5237 1630 6867 47 47 沖縄県 okinawa 那覇市 4174 1035 5209
チョコレート、チョコレート菓子、チョコ類合計額があるけど、
このままだと可視化した時に見づらいので離散化して均等な額ごとのグループにまとめます。
#消費額のクラス分け-------------------------------------------- class_1<-infotheo::discretize(subset(choco_map,select=Expenditure1),disc="equalwidth") class_2<-infotheo::discretize(subset(choco_map,select=Expenditure2),disc="equalwidth") class_a<-infotheo::discretize(subset(choco_map,select=Expenditure),disc="equalwidth") colnames(class_1)<-"class_1" colnames(class_2)<-"class_2" colnames(class_a)<-"class_a" > choco_map<-dplyr::bind_cols(choco_map,class_1,class_2,class_a);head(choco_map) ID areaname chiho area Expenditure1 Expenditure2 Expenditure class_1 class_2 class_a 1 1 北海道 hokkaido 札幌市 5478 1976 7454 2 3 3 2 2 青森県 tohoku 青森市 3471 1125 4596 1 1 1 3 3 岩手県 tohoku 盛岡市 4317 1359 5676 1 2 1 4 4 宮城県 tohoku 仙台市 5064 1499 6563 2 2 2 5 5 秋田県 tohoku 秋田市 4639 1214 5853 2 1 1 6 6 山形県 tohoku 山形市 5697 1721 7418 3 3 3
額が小さい順に1→2→3のグループが出来たので可視化します。
今回は(も){Nippon}パッケージ。
デフォルトの色を変えてみたくて試行錯誤しましたがなんか直接色指定することしか成功しなかった...
#コロプレス(色指定がしたい)---------------------------------------------------- cols <- rev(RColorBrewer::brewer.pal(3,"Set2")) choco_map$class_1<-gsub("1",cols[1],choco_map$class_1) choco_map$class_1<-gsub("2",cols[2],choco_map$class_1) choco_map$class_1<-gsub("3",cols[3],choco_map$class_1) #描画 Nippon::JapanPrefecturesMap(col = choco_map$class_1,axes=FALSE) #チョコレート消費額 Nippon::JapanPrefecturesMap(col = choco_map$class_a) #チョコレート全般消費額
上が{RColorBrewer}のセットで色指定したやつ、下がデフォルトです。
なんかこんなやり方じゃなくていい気がする。。。むむむ
しかもちょっと待って。
地元が一番チョコレート食べてないエリアってどういうことなの、ねえ岩手。。。私が居なくなったから...?
地域性は特になさそう。。というか額の幅を均等にすると、ほとんど「2」に分類されてるから
極端に多いところと、極端に少ないところが目立つ感じに。
とりあえず金沢に行けばチョコレートを死ぬほど食べても浮くことはなさそう。
おまけ
「そんなチョコレート食べたら太るよ」って散々言われるので
都道府県別の肥満率をクラス分けしてクロス集計でもしてみた。
このへんの書き方、
table()から{tidyr}に移行していきたいなあと。
データ元は同じくe-statの国民健康・栄養調査(2010年)より。
> himan areaname himan 1 沖縄県 0.452 2 宮崎県 0.447 3 栃木県 0.405 4 福島県 0.403 5 徳島県 0.401 6 宮城県 0.395 7 岩手県 0.387 8 北海道 0.385 9 青森県 0.380 10 高知県 0.376 11 大分県 0.373 12 長崎県 0.365 13 熊本県 0.337 14 鹿児島県 0.335 15 愛媛県 0.330 16 奈良県 0.326 17 千葉県 0.317 18 和歌山県 0.315 19 大阪府 0.314 20 佐賀県 0.313 21 秋田県 0.312 22 茨城県 0.312 23 埼玉県 0.310 24 東京都 0.305 25 神奈川県 0.303 26 福岡県 0.298 27 富山県 0.296 28 群馬県 0.296 29 広島県 0.294 30 愛知県 0.294 31 山形県 0.293 32 三重県 0.292 33 岐阜県 0.292 34 石川県 0.284 35 島根県 0.278 36 兵庫県 0.277 37 新潟県 0.277 38 岡山県 0.275 39 山梨県 0.272 40 長野県 0.257 41 京都府 0.256 42 香川県 0.254 43 静岡県 0.252 44 鳥取県 0.251 45 滋賀県 0.230 46 福井県 0.225 47 山口県 0.221 #チョコマップとくっつける himan_map<-dplyr::left_join(choco_map,himan,by="areaname") #肥満率もクラス分け class_himan<-infotheo::discretize(subset(himan_map,select=himan),disc="equalwidth") colnames(class_himan)<-"class_himan" #クラスもくっつける himan_map<-dplyr::bind_cols(himan_map,class_himan) #クロス集計------------------------------------------------------- himan_map$class_himan<-gsub("1","S",himan_map$class_himan) himan_map$class_himan<-gsub("2","M",himan_map$class_himan) himan_map$class_himan<-gsub("3","L",himan_map$class_himan) > dplyr::count(himan_map,class_a,class_himan) %>% + tidyr::spread(.,class_himan,n) %>% + dplyr::select(.,class_a,S,M,L) Source: local data frame [3 x 4] class_a S M L 1 1 NA 7 4 2 2 17 8 3 3 3 4 1 3
最後にselect()したら並び順を変えられた。今更いいこと覚えた。
そして今気づいたけどクラス内の個数にだいぶ偏りがあるのに
単純にクロス集計なんてするもんじゃなかった。。
でもなんかクラス2とか肥満率Sが多いよ、ほら。
ほどほどチョコ食べたらむしろいいんじゃない、、いやなんでもないです。
追記
もっかい回したら謎の")"でエラーが出たので修正しまぴた。
class_himan<-infotheo::discretize(subset(himan_map,select=himan),disc="equalwidth")
colnames(class_himan)<-"class_himan"
こういう処理を外出しせずに、
mutate()とかの中にうまく入れてしまいたいんだけどどうにもうまくいかなかった..
infotheo::discretizeの戻り値の列名が分割元の列と同じになるのを制御したかったりするんだけどなあ..