データの内容
ファイル名が長いので、d_大学リスト1.xlsxをdf1、d_大学リスト2.xlsxをdf2と呼びます。
df1 <- read_xlsx("d_大学リスト1.xlsx")
df2 <- read_xlsx("d_大学リスト2.xlsx")
df1とdf2の内容は以下の通り。
| 北海道大学 |
北海道札幌市北区北8条西5丁目 |
| 北海道教育大学 |
北海道札幌市北区あいの里5条3-1-3 |
| 室蘭工業大学 |
北海道室蘭市水元町27-1 |
| 小樽商科大学 |
北海道小樽市緑3-5-21 |
| 帯広畜産大学 |
北海道帯広市稲田町西2線11 |
| 北見工業大学 |
北海道北見市公園町165 |
| 沖縄国際大学 |
沖縄県宜野湾市宜野湾2-6-1 |
| 沖縄大学 |
沖縄県那覇市字国場555 |
| 沖縄キリスト教学院大学 |
沖縄県中頭郡西原町字翁長777番地 |
| 沖縄キリスト教短期大学 |
沖縄県中頭郡西原町字翁長777番地 |
| 沖縄女子短期大学 |
沖縄県島尻郡与那原町東浜1番地 |
| 沖縄工業高等専門学校 |
沖縄県名護市字辺野古905 |
| いわき短期大 |
私立 |
| お茶の水女子大 |
国立 |
| かなざわ食マネジメント専門職大 |
私立 |
| くらしき作陽大 |
私立 |
| こども教育宝仙大 |
私立 |
| せとうち観光専門職短期大 |
私立 |
| 麗澤大学 |
私立 |
| 麻布大学 |
私立 |
| 龍谷大学 |
私立 |
| 龍谷大学短期大学 |
私立 |
| LEC東京リーガルマインド大学院大 |
私立 |
| SBI大学院大 |
私立 |
住所の分割
- Rで作業すると以下の数行で、
df1にある住所の分割が完了します。分割された住所を含む新しいデータをdf1aと呼びます。
vec_addr <- df1 %>%
select(学校所在地) %>%
pull()
df_addr <-
map_dfr(vec_addr, ~ separate_address(.))
df1a <- bind_cols(df1, df_addr)
kable(head(df1a))
| 北海道大学 |
北海道札幌市北区北8条西5丁目 |
北海道 |
札幌市北区 |
北8条西5丁目 |
| 北海道教育大学 |
北海道札幌市北区あいの里5条3-1-3 |
北海道 |
札幌市北区 |
あいの里5条3-1-3 |
| 室蘭工業大学 |
北海道室蘭市水元町27-1 |
北海道 |
室蘭市 |
水元町27-1 |
| 小樽商科大学 |
北海道小樽市緑3-5-21 |
北海道 |
小樽市 |
緑3-5-21 |
| 帯広畜産大学 |
北海道帯広市稲田町西2線11 |
北海道 |
帯広市 |
稲田町西2線11 |
| 北見工業大学 |
北海道北見市公園町165 |
北海道 |
北見市 |
公園町165 |
| 沖縄国際大学 |
沖縄県宜野湾市宜野湾2-6-1 |
沖縄県 |
宜野湾市 |
宜野湾2-6-1 |
| 沖縄大学 |
沖縄県那覇市字国場555 |
沖縄県 |
那覇市 |
字国場555 |
| 沖縄キリスト教学院大学 |
沖縄県中頭郡西原町字翁長777番地 |
沖縄県 |
中頭郡西原町 |
字翁長777番地 |
| 沖縄キリスト教短期大学 |
沖縄県中頭郡西原町字翁長777番地 |
沖縄県 |
中頭郡西原町 |
字翁長777番地 |
| 沖縄女子短期大学 |
沖縄県島尻郡与那原町東浜1番地 |
沖縄県 |
島尻郡与那原町 |
東浜1番地 |
| 沖縄工業高等専門学校 |
沖縄県名護市字辺野古905 |
沖縄県 |
名護市 |
字辺野古905 |
データの修正(df2)
df1とdf2のデータ数が異なっていることには気づかれましたか?
重複データ一覧(df2)
| 九州大学 |
公立 |
| 九州大学 |
国立 |
| 九州工業大学 |
公立 |
| 九州工業大学 |
国立 |
| 京都大学 |
公立 |
| 京都大学 |
国立 |
| 佐賀大学 |
公立 |
| 佐賀大学 |
国立 |
| 北海道大学 |
公立 |
| 北海道大学 |
国立 |
| 名古屋大学 |
公立 |
| 名古屋大学 |
国立 |
| 大分大学 |
公立 |
| 大分大学 |
国立 |
| 大阪大学 |
公立 |
| 大阪大学 |
国立 |
| 宮城教育大学 |
公立 |
| 宮城教育大学 |
国立 |
| 宮崎大学 |
公立 |
| 宮崎大学 |
国立 |
| 山形大学 |
公立 |
| 山形大学 |
国立 |
| 岩手大学 |
公立 |
| 岩手大学 |
国立 |
| 弘前大学 |
公立 |
| 弘前大学 |
国立 |
| 東京大学 |
公立 |
| 東京大学 |
国立 |
| 東北大学 |
公立 |
| 東北大学 |
国立 |
| 熊本大学 |
公立 |
| 熊本大学 |
国立 |
| 琉球大学 |
公立 |
| 琉球大学 |
国立 |
| 神戸大学 |
公立 |
| 神戸大学 |
国立 |
| 福岡教育大学 |
公立 |
| 福岡教育大学 |
国立 |
| 福島大学 |
公立 |
| 福島大学 |
国立 |
| 秋田大学 |
公立 |
| 秋田大学 |
国立 |
| 長崎大学 |
公立 |
| 長崎大学 |
国立 |
| 鹿児島大学 |
公立 |
| 鹿児島大学 |
国立 |
| 鹿屋体育大学 |
公立 |
| 鹿屋体育大学 |
国立 |
上記にリストされている学校は、全て国立 です。公立として登録されている部分を削除しましょう。
目視による確認が必要な場合もあります。(凄くイヤだけど…。)
名寄せ問題
- この課題は所謂「名寄せ問題」に近い問題です。
df1とdf2にある「学校名」が「完全一致」もしくは「限りなく一致」している学校をピックアップしましょう。
特定の課題にしか使えない解法ではなく、汎用性のあるアプローチ方法を考えましょう。後で楽ができるかもしれません。
df1b <- df1a %>% stringdist_left_join(
df2b,
by = "学校名",
max_dist = 1,
method = "jw",
distance_col = "myout"
) %>%
group_by(学校名.x) %>%
slice_max(n = 1, order_by = -myout, with_ties = TRUE) %>%
mutate(Prob_Matching = 1 - myout) %>%
select(-myout) %>%
ungroup()
df1b %>%
select(starts_with("学校名"), 設置区分, Prob_Matching) %>%
head() %>%
kable()
| いわき短期大学 |
いわき短期大 |
私立 |
0.9523810 |
| お茶の水女子大学 |
お茶の水女子大 |
国立 |
0.9583333 |
| かなざわ食マネジメント専門職大学 |
かなざわ食マネジメント専門職大 |
私立 |
0.9791667 |
| くらしき作陽大学 |
くらしき作陽大 |
私立 |
0.9583333 |
| こども教育宝仙大学 |
こども教育宝仙大 |
私立 |
0.9629630 |
| せとうち観光専門職短期大学 |
せとうち観光専門職短期大 |
私立 |
0.9743590 |
| 大阪女学院大学 |
大阪女学院大 |
0.952381 |
| 大阪女学院大学 |
大阪学院大学 |
0.952381 |
| 常磐会短期大学 |
常磐会短期大 |
0.952381 |
| 常磐会短期大学 |
常磐短期大学 |
0.952381 |
| 神戸女学院大学 |
神戸女学院大 |
0.952381 |
| 神戸女学院大学 |
神戸学院大学 |
0.952381 |
| 西南女学院大学 |
西南女学院大 |
0.952381 |
| 西南女学院大学 |
西南学院大学 |
0.952381 |
| 西日本工業大学 |
日本工業大学 |
0.952381 |
| 西日本工業大学 |
西日本工業大 |
0.952381 |
学校名.xの中に「頭から連続した」学校名.yの文字列が含まれるかをチェックしましょう。例えば、「西南女学院大学」の中に「西南女学院大」は含まれますが、「西南学院大学」は含まれません。つまり、正しくない、削除すべき組み合わせは、以下の通りとなります。
| 大阪女学院大学 |
大阪学院大学 |
| 常磐会短期大学 |
常磐短期大学 |
| 神戸女学院大学 |
神戸学院大学 |
| 西南女学院大学 |
西南学院大学 |
| 西日本工業大学 |
日本工業大学 |
分析用データの完成
df1f <- df1e %>%
select(-学校名.y, -Prob_Matching, -学校所在地) %>%
rename(学校名 = 学校名.x)
df1f %>%
head() %>%
kable()
| いわき短期大学 |
福島県 |
いわき市 |
平鎌田字寿金沢37 |
私立 |
| お茶の水女子大学 |
東京都 |
文京区 |
大塚2-1-1 |
国立 |
| かなざわ食マネジメント専門職大学 |
石川県 |
白山市 |
横江町5250 |
私立 |
| くらしき作陽大学 |
岡山県 |
倉敷市 |
玉島長尾3515 |
私立 |
| こども教育宝仙大学 |
東京都 |
中野区 |
中央二丁目33番26号 |
私立 |
| せとうち観光専門職短期大学 |
香川県 |
高松市 |
屋島西町2366-1 |
私立 |
df1f %>%
tail() %>%
kable()
| 麗澤大学 |
千葉県 |
柏市 |
光ケ丘2-1-1 |
私立 |
| 麻布大学 |
神奈川県 |
相模原市中央区 |
淵野辺1-17-71 |
私立 |
| 龍谷大学 |
京都府 |
京都市伏見区 |
深草塚本町67 |
私立 |
| 龍谷大学短期大学部 |
京都府 |
京都市伏見区 |
深草塚本町67 |
私立 |
| LEC東京リーガルマインド大学院大学 |
東京都 |
千代田区 |
神田三崎町2-2-15 |
私立 |
| SBI大学院大学 |
東京都 |
港区 |
六本木1-6-1 泉ガーデンタワー21階 |
私立 |
df1f %>%
tabyl(設置区分) %>%
adorn_totals() %>%
kable()
| 公立 |
120 |
0.1017812 |
| 国立 |
137 |
0.1162002 |
| 私立 |
922 |
0.7820187 |
| Total |
1179 |
1.0000000 |
例題
三重県にある大学等を市町村ごとにソートしてリストしてください。
df1f %>%
filter(prefecture == "三重県") %>%
arrange(city, 設置区分) %>%
kable()
| 皇學館大学 |
三重県 |
伊勢市 |
神田久志本町1704 |
私立 |
| 近畿大学工業高等専門学校 |
三重県 |
名張市 |
春日丘7番町1番地 |
私立 |
| ユマニテク短期大学 |
三重県 |
四日市市 |
南浜田町4-21 |
私立 |
| 四日市大学 |
三重県 |
四日市市 |
萱生町1200 |
私立 |
| 四日市看護医療大学 |
三重県 |
四日市市 |
萱生町1200番地 |
私立 |
| 三重県立看護大学 |
三重県 |
津市 |
夢が丘一丁目1-1 |
公立 |
| 三重短期大学 |
三重県 |
津市 |
一身田中野157 |
公立 |
| 三重大学 |
三重県 |
津市 |
栗真町屋町1577 |
国立 |
| 高田短期大学 |
三重県 |
津市 |
一身田豊野195 |
私立 |
| 鈴鹿工業高等専門学校 |
三重県 |
鈴鹿市 |
白子町 |
国立 |
| 鈴鹿医療科学大学 |
三重県 |
鈴鹿市 |
岸岡町1001-1 |
私立 |
| 鈴鹿大学 |
三重県 |
鈴鹿市 |
郡山町663-222 |
私立 |
| 鈴鹿大学短期大学部 |
三重県 |
鈴鹿市 |
郡山町663-222 |
私立 |
| 鳥羽商船高等専門学校 |
三重県 |
鳥羽市 |
池上町1-1 |
国立 |
公立大学等が複数ある市町村+区は、全国で幾つありますか?
df1f %>%
filter(設置区分 == "公立") %>%
count(city) %>%
filter(n > 1) %>%
arrange(desc(n)) %>%
mutate(行番号 = row_number()) %>%
relocate(行番号) %>%
gt()
| 1 |
神戸市西区 |
4 |
| 2 |
秋田市 |
3 |
| 3 |
会津若松市 |
2 |
| 4 |
前橋市 |
2 |
| 5 |
品川区 |
2 |
| 6 |
大分市 |
2 |
| 7 |
宮崎市 |
2 |
| 8 |
岐阜市 |
2 |
| 9 |
川崎市幸区 |
2 |
| 10 |
旭川市 |
2 |
| 11 |
津市 |
2 |
| 12 |
滝沢市 |
2 |
| 13 |
磐田市 |
2 |
| 14 |
米沢市 |
2 |
| 15 |
那覇市 |
2 |
| 16 |
長久手市 |
2 |
| 17 |
青森市 |
2 |
| 18 |
静岡市駿河区 |
2 |