[Python] [Folium]海外の日本人サッカー選手を地図上で可視化する 2021.1.1現在


Japanese football players in foreign clubs shown on the map.

この記事について

現在、ビジャレアルの久保選手の動向が話題になっているところですが、海外で活躍されてる選手はどこにいるのかPython/Foliumで可視化してみました。その中で工夫したポイントを説明したいと思います。

1.Foliumでアイコンを所属チームのマークにした
2.所属選手名をクリックではなく、マウスオーバーで表示させるようにする
3.データの入手・前処理について

結果

完成したものはこちらからアクセスしてください

チームのアイコン表示について

カスタムアイコンはfolium.features.CustomIconを利用しました。
なかなか日本語の説明もなく、英語のFoliumのサイトの説明を頼りになんとなくやっていたらできました。

チームのアイコンはネットで収集したものを、背景透明にしてpngで、imageフォルダに入れてあり、アイコンが見つからない場合のエラー処理も以下のコードには入れてあります。

所属選手名をクリックではなく、マウスオーバーで表示させるようにする

このマウスオーバーで情報を表示することを、英語でtooltipというそうです。
それをFoliumのmarkerを指定するときに
tooltip='文字列'
で指定するだけです。以下のコードを参考にしてください。

 データの入手・前処理について

まずはWikipediaの情報をもとに、ホームタウン、ホームスタジアムの経度・緯度、アイコンなどをかき集めてエクセルにしています。
本当は自動でスクレイピングでやりたかったのですが、それほど数もないので手動にしました。。。
集めた各選手・チームのデータはEXCELで保存し、Pandas/Dataframeからプロットしています。

エクセルデータはこちらの薄い水色の列だけ利用

それなりにデータを集めるのは大変でした 汗

コード


import pandas as pd
import folium
from glob import glob

df_player= pd.read_excel ('PlayerClubData.xlsx', header=0,encoding='utf-8' )

m = folium.Map(location=[46, -1.5],  zoom_start=4)

for club in df_player['club'].unique():
    df2=df_player[df_player['club']==club]  #2名以上いる場合、名前を結合する
    names=' '.join(df2['Player'].tolist()) # Series = > List => joinしてstr

    for item in df2.head(1).iterrows():  #ちょっとややこしいが、各クラブの1人目だけプロットするのでhead(1)

        if item[1]['lat']>0 or item[1]['lat']<0 :  # 経度データがfloatでnanはスキップする
            l_in = [s for s in glob("./images/*.png") if club in s]  #アイコンファイルがあるかチェックする
            if len(l_in)>0: #該当するファイル数 通常は1
                iconTmp = folium.features.CustomIcon(l_in[0], icon_size=(50,50)) #ここでアイコンファイルを指定する 
            else:
                iconTmp=folium.Icon(color='red') #アイコンファイルがない場合はこちら

            folium.Marker(location=[item[1]['lat'], item[1]['lon']], 
                tooltip=item[1]['club']+'<br>'+names,   # このtooltipでマウスオーバーで表示できる
                icon=iconTmp).add_to(m) #上で指定したアイコンファイルにする

m.save('index.html')

print ('finished!')

ソースコード及びデータファイルはこちらから

 参考

Foliumでアイコンを表示するサンプル(英語)Python Folium — A Data Visualization Superhero
サンプルコードが分かりやすかったです。

サッカー海外組の所属クラブ - 全画面地図
始めはこちらをみて、同じものを作りたいと思いました。このメンバーは2012年?!

Pythonのfoliumで岩手県内の病院の場所を可視化してみる
こちらもいろいろと参考にさせていただきました。

感想

covid-19で海外に気軽に行けなくなってしまいましたが、個人的には海外旅行は観光スポットを巡るるのもいいのですが、現地でサッカー観戦するのも楽しいかと思います。その際にはこの地図で効率よく観戦できるルートを検討していただければと思います。

#個人的には、久保建英、南野拓実、スウェーデンにいる杉田祐希也 、宮市亮に期待しています!