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

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

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

# データの前処理
ダウンロードを行ったExcelファイルから、「作品名」「経度」「緯度」を抜き出し、
新規にエクセルを作成し、コピー＆ペーストで貼り付ける。Excelファイルの
名称をdataにする。
```Python
df = pd.read_excel("data.xlsx", engine="openpyxl")
df
```
以下のように出力される。
```powershell
	作品名	緯度	経度
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	【０番札所】成田空港	NaN	NaN
463	【1番札所】インフォメーションスポット	NaN	NaN
```
## 欠損値の処理
中身に、緯度・経度の情報が空欄の欠損値があるため、欠損値データの削除を行う。
```Python
df2 = df.dropna(subset=["緯度", "経度"])
df2
```
すると以下のように欠損値データがなくなる。
```powershell
	作品名	緯度	経度
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
```
## 重複の削除
ここで、作品名の昇順に並び変えてみる。そして重複数を見てみる。
```Python
df2_sorted = df2.sort_values("作品名", ascending=False)
df2_sorted['作品名'].value_counts()
```
```powershell
おへんろ。                         16
心が叫びたがってるんだ。                   8
ルドルフとイッパイアッテナ                  8
艦隊これくしょん ‐ 艦これ‐                5
文豪ストレイドッグス                     4
                              ..
ガールズ＆パンツァー　最終章                 1
ガーリッシュ ナンバー                    1
ガヴリールドロップアウト                   1
凪のあすから                         1
香美市立やなせたかし記念館・アンパンマンミュージアム     1
```
重複が存在していることがわかる。そのため、
最初に出現した重複行を残し、その他を削除します。
```Python
df3 = df2_sorted.drop_duplicates(subset='作品名', keep='first')
df3
```
```powershell
	作品名	緯度	経度
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
```
## 困った事１
ここで、今回生じた問題として、今回生じた問題として、df3加工済データ内にある。２,３行目「香美市立やなせたかし記念館・アンパンマンミュージアム」「香美市立やなせたかし記念館アンパンマンミュージアム」
7，8「長谷川町子記念館」「長谷川町子美術館」16，17「秒速５センチメートル」「秒速5センチメートル」（半角全角）
29，30の「有頂天家族２」、「有頂天家族2」、32，33「新潟市マンガ・アニメ情報館」、「新潟市マンガの家」
44，45「刀剣乱舞 ‐ONLINE‐」「刀剣乱舞 -ONLINE-」54，55「一休さん（酬恩庵一休寺）」「一休さん」
60，61，62「ヤマノススメ　サードシーズン」「ヤマノススメ　おもいでプレゼント」「ヤマノススメ サードシーズン」
85、86「ひるね姫～知らないワタシの物語～」「ひるね姫 ～知らないワタシの物語～」
100，101「『エヴァンゲリオン』シリーズ」「「エヴァンゲリオン」シリーズ」
といったいような重複が発見できた。
Levenshtein1で重複とみなす方法も考えましたが、それ以上の差があるものもあることから今回は、緯度経度が同じもので作成名が似ているものを削除する方法を試みようとしました。

## 困った事２
しかし、「蒼穹のファフナー」「かみちゅ！」が同じ緯度経度であることが判明34.409179 133.205638

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

薄桜鬼 真改 有頂天家族２ 有頂天家族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行目「香美市立やなせたかし記念館アンパンマンミュージアム」８行目「長谷川町子美術館」 17行目「秒速5センチメートル」２９行目「有頂天家族2」３２行目「新潟市マンガの家」 44行目「刀剣乱舞 -ONLINE-」５３行目「一休さん」59，60行目「ヤマノススメ　おもいでプレゼント」「ヤマノススメ サードシーズン」 82行目「ひるね姫 ～知らないワタシの物語～」97行目「「エヴァンゲリオン」シリーズ」

# マッピングを行う
```Python
#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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114779/bdcbee40-7758-3222-449f-746360e08c62.png)
日本地図上にマッピングできました。

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

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


# おまけ＜新規に場所を追加していく方法＞
今回、下記のデータを追加で挿入してみる。
作品名: "プリパラ", "緯度": 35.6702989, "経度": 139.7074779
作品名: "エロマンガ先生", "緯度": 35.7612453, "経度": 139.8054765
```Python
# 追加するデータを辞書型に格納する
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
```
```powershell
作品名	緯度	経度
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
```
```Python
df.to_excel("df追加更新していく.xlsx", index=False)
```
```Python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114779/e997b0fe-9bc9-20ff-9830-e3f82d49d5bd.png)