LoginSignup
1
1

More than 1 year has passed since last update.

foliumを使用して、地理空間データを用いて、聖地巡礼マップを作成しよう!!

Posted at

はじめに

何か、オープンソースのデータを可視化したいなという思いで作ってみました。
foliumを使用することで地図上に情報を載せることが出来るみたいなので、
自分の興味のあるものと紐づけて作成してみました。

データのダウンロード

pythonのライブラリーのfoliumを用いることで、
地図上に緯度経度情報があるデータを表示することが可能になる。
まず、https://linkdata.org/work/rdf1s8817i
にあるアニメ聖地の位置情報があるサイトにアクセスし、Excelファイルの
ダウンロードを行う。

データの前処理

ダウンロードを行ったExcelファイルから、「作品名」「経度」「緯度」を抜き出し、
新規にエクセルを作成し、コピー&ペーストで貼り付ける。Excelファイルの
名称をdataにする。

df = pd.read_excel("data.xlsx", engine="openpyxl")
df

以下のように出力される。

	作品名	緯度	経度
0	櫻子さんの足下には死体が埋まっている	43.770776	142.364744
1	僕だけがいない街	42.634082	141.605510
2	天体のメソッド	42.551203	140.764115
3	薄桜鬼 真改	41.768674	140.728924
4	艦隊これくしょん  艦これ‐	41.292748	141.183478
...	...	...	...
459	五島の雲 山本二三美術館	NaN	NaN
460	サンリオキャラクターパークハーモニーランド	NaN	NaN
461	88番札所】東京都	NaN	NaN
462	【0番札所】成田空港	NaN	NaN
463	1番札所】インフォメーションスポット	NaN	NaN

欠損値の処理

中身に、緯度・経度の情報が空欄の欠損値があるため、欠損値データの削除を行う。

df2 = df.dropna(subset=["緯度", "経度"])
df2

すると以下のように欠損値データがなくなる。

	作品名	緯度	経度
0	櫻子さんの足下には死体が埋まっている	43.770776	142.364744
1	僕だけがいない街	42.634082	141.605510
2	天体のメソッド	42.551203	140.764115
3	薄桜鬼 真改	41.768674	140.728924
4	艦隊これくしょん  艦これ‐	41.292748	141.183478
...	...	...	...
452	京都国際マンガミュージアム	35.010117	135.751464
454	水木しげるロード	35.539633	133.231627
455	青山剛昌ふるさと館	35.490018	133.758366
456	マチ★アソビ	34.070275	134.554863
457	香美市立やなせたかし記念館アンパンマンミュージアム	33.603884	133.686273

重複の削除

ここで、作品名の昇順に並び変えてみる。そして重複数を見てみる。

df2_sorted = df2.sort_values("作品名", ascending=False)
df2_sorted['作品名'].value_counts()
おへんろ。                         16
心が叫びたがってるんだ。                   8
ルドルフとイッパイアッテナ                  8
艦隊これくしょん  艦これ‐                5
文豪ストレイドッグス                     4
                              ..
ガールズ&パンツァー 最終章                 1
ガーリッシュ ナンバー                    1
ガヴリールドロップアウト                   1
凪のあすから                         1
香美市立やなせたかし記念館・アンパンマンミュージアム     1

重複が存在していることがわかる。そのため、
最初に出現した重複行を残し、その他を削除します。

df3 = df2_sorted.drop_duplicates(subset='作品名', keep='first')
df3
	作品名	緯度	経度
100	香美市立やなせたかし記念館・アンパンマンミュージアム	33.603884	133.686273
457	香美市立やなせたかし記念館アンパンマンミュージアム	33.603884	133.686273
45	青梅赤塚不二夫会館	35.787990	139.275791
455	青山剛昌ふるさと館	35.490018	133.758366
412	長門有希ちゃんの消失	34.737877	135.341522
...	...	...	...
280	true tears	36.557318	136.875321
7	Wake Up, Girls 新章	38.269075	140.870172
265	SHIROBAKO	35.717784	139.566260
107	ROBOTICS;NOTES	30.532819	130.958880
85	RDG レッドデータガール	33.988495	135.792417
105 rows × 3 columns

困った事1

ここで、今回生じた問題として、今回生じた問題として、df3加工済データ内にある。2,3行目「香美市立やなせたかし記念館・アンパンマンミュージアム」「香美市立やなせたかし記念館アンパンマンミュージアム」
7,8「長谷川町子記念館」「長谷川町子美術館」16,17「秒速5センチメートル」「秒速5センチメートル」(半角全角)
29,30の「有頂天家族2」、「有頂天家族2」、32,33「新潟市マンガ・アニメ情報館」、「新潟市マンガの家」
44,45「刀剣乱舞 ‐ONLINE‐」「刀剣乱舞 -ONLINE-」54,55「一休さん(酬恩庵一休寺)」「一休さん」
60,61,62「ヤマノススメ サードシーズン」「ヤマノススメ おもいでプレゼント」「ヤマノススメ サードシーズン」
85、86「ひるね姫~知らないワタシの物語~」「ひるね姫 ~知らないワタシの物語~」
100,101「『エヴァンゲリオン』シリーズ」「「エヴァンゲリオン」シリーズ」
といったいような重複が発見できた。
Levenshtein1で重複とみなす方法も考えましたが、それ以上の差があるものもあることから今回は、緯度経度が同じもので作成名が似ているものを削除する方法を試みようとしました。

困った事2

しかし、「蒼穹のファフナー」「かみちゅ!」が同じ緯度経度であることが判明34.409179 133.205638

「ハルチカ ~ハルタとチカは青春する~」「ちびまる子ちゃんランド」が同じ緯度経度34.975184 138.383293

薄桜鬼 真改 有頂天家族2 有頂天家族2 少年陰陽師 夜は短し歩けよ乙女 京都国際マンガミュージアム いなり、こんこん、恋いろは。 上記はすべて同じ緯度経度35.010117 135.751464 弱虫ペダル 『エヴァンゲリオン』シリーズ35.232366 139.106915

「秒速5センチメートル」「文豪ストレイドッグス」35.444668 139.642153

純情ロマンチカ 世界一初恋 ラブライブ! シュタインズ・ゲート35.694041 139.753586

杉並アニメーションミュージアム アクセル・ワールド アクエリオンロゴス35.699574 139.636385

時をかける少女 刀剣乱舞 ‐ONLINE‐ 刀剣乱舞 -ONLINE- 三ツ星カラーズ35.712607 139.779998

そにアニ -SUPER SONICO THE ANIMATION- SHIROBAKO35.717784 139.56626

ミス・モノクローム ガーリッシュ ナンバー38.601088 140.406779

釣りキチ三平 横手市増田まんが美術館39.313784 140.566648

実際に行ったこと

明らかに同じような緯度経度に様々な作品が重複しすぎているような気がしたため、 また作品数が残り、105ということを考えて、エクセルファイルから似たものを削除していった。 今回削除したものは、昇順にした際の後半のものを削除を行った。 3行目「香美市立やなせたかし記念館アンパンマンミュージアム」8行目「長谷川町子美術館」 17行目「秒速5センチメートル」29行目「有頂天家族2」32行目「新潟市マンガの家」 44行目「刀剣乱舞 -ONLINE-」53行目「一休さん」59,60行目「ヤマノススメ おもいでプレゼント」「ヤマノススメ サードシーズン」 82行目「ひるね姫 ~知らないワタシの物語~」97行目「「エヴァンゲリオン」シリーズ」

マッピングを行う

#94作品をマッピングを行う。
import folium
import pandas as pd

# データを読み込む(エンコーディングを指定する)
df = pd.read_excel("df3sakuzyo.xlsx", engine="openpyxl")
#☆↑ここのエクセルは、削除を行った後の名称に変更する必要あり

# 地図の中心を日本に設定する
map_center = [38.5, 138.5]

# 地図を作成する
map = folium.Map(location=map_center, zoom_start=5)

# データを地図に表示する
for index, row in df.iterrows():
    folium.Marker(location=[row["緯度"], row["経度"]], popup=row["作品名"]).add_to(map)

# 地図をHTMLファイルとして保存する
map.save("map1.html")

MAP01.png
日本地図上にマッピングできました。

また、緯度35°00'36.4" 経度135°45'05.3"ここは、京都の二条城前駅の近くのため、重複していてもおかしくはないと予想ができる。

最終的には、正確な場所は各作品を見て判断を行う必要はある。

おまけ<新規に場所を追加していく方法>

今回、下記のデータを追加で挿入してみる。
作品名: "プリパラ", "緯度": 35.6702989, "経度": 139.7074779
作品名: "エロマンガ先生", "緯度": 35.7612453, "経度": 139.8054765

# 追加するデータを辞書型に格納する
new_data_1 = {"作品名": "プリパラ", "緯度": 35.6703247, "経度": 139.7088716}
new_data_2 = {"作品名": "エロマンガ先生", "緯度": 35.7612453, "経度": 139.8054765}

# 追加するデータをDataFrameに変換する
new_df_1 = pd.DataFrame([new_data_1])
new_df_2 = pd.DataFrame([new_data_2])

# dfに新しいデータを追加する
df = df.append(new_df_1, ignore_index=True)
df = df.append(new_df_2, ignore_index=True)
df
作品名	緯度	経度
0	香美市立やなせたかし記念館・アンパンマンミュージアム	33.603884	133.686273
1	青梅赤塚不二夫会館	35.787990	139.275791
2	青山剛昌ふるさと館	35.490018	133.758366
3	長門有希ちゃんの消失	34.737877	135.341522
4	長谷川町子記念館	35.646575	139.653249
...	...	...	...
91	SHIROBAKO	35.717784	139.566260
92	ROBOTICS;NOTES	30.532819	130.958880
93	RDG レッドデータガール	33.988495	135.792417
94	プリパラ	35.670325	139.708872
95	エロマンガ先生	35.761245	139.805476
df.to_excel("df追加更新していく.xlsx", index=False)
import folium
import pandas as pd

# データを読み込む(エンコーディングを指定する)
df = pd.read_excel("df追加更新していく.xlsx", engine="openpyxl")

# 地図の中心を日本に設定する
map_center = [38.5, 138.5]

# 地図を作成する
map = folium.Map(location=map_center, zoom_start=5)

# データを地図に表示する
for index, row in df.iterrows():
    folium.Marker(location=[row["緯度"], row["経度"]], popup=row["作品名"]).add_to(map)

# 地図をHTMLファイルとして保存する
map.save("map2.html")

追加で日本地図上にマッピングができました。
MAP2.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1