3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-04

Japanese football players in foreign clubs shown on the map.

この記事について

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

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

結果

完成したものはこちらからアクセスしてください
Videotogif(3).gif

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

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

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

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

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

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

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

エクセルデータはこちらの薄い水色の列だけ利用
スクリーンショット 2021-01-04 103045.png

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

コード


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

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

3
5
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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?