*記事に掲載されているコードは2024年4月現在問題なく起動します。(検証済み)
こんにちは! Nocky(のっきー)です!
今回はPythonで店舗位置情報(緯度・経度の情報)を地図にプロットさせる方法について、紹介します。
緯度経度の情報をもとに地図に表示させるって難しそうですね。。
それに使い道あるの?
確かに、難しそうなイメージがありますが、大丈夫です!
今回もライブラリを活用します。
今回、活用するライブラリは「folium」です!
このライブラリを使うことで、緯度経度の情報を使って、地図に位置を簡単に表示させることができます。
競合店舗の位置を可視化して、競合の店舗戦略を分析したり、自社の出店戦略を練るなどマーケティング活動に活かすことができますよ!
地図に位置情報をプロットするPythonのコード
地図に位置情報をプロットするためのコードは下記になります。
まずはコピペして、挑戦してみてください!
Google Colaboratoryなら、Googleのアカウントがあれば、すぐpythonを使うことができます。
import pandas as pd
import folium
df = pd.read_csv("Hostel.csv")
df = df.dropna(subset=['lat', 'lon'])
#プレーンな地図を用意する
map1 = folium.Map(
#初期位置のセット
location=[35.681167, 139.767052],
#初期表示の拡大具合のセット
zoom_start = 11,
#地図のスタイルの選択 どれか一つ選んで#をはずしてください
tiles = "OpenStreetMap"
#tiles="cartodbpositron"
#tiles = "Stamen Toner"
#tiles = "Stamen Terrain"
)
for i in range(len(df)):
folium.Circle(
radius=50,
location=[df.iloc[i]['lat'], df.iloc[i]['lon']],
tooltip=str(df.iloc[i]['City'] +", " +df.iloc[i]['hostel.name']),
#ドットの外枠の色を指定します
color="green",
#ドットを色埋めするかを設定します
fill = True,
#色埋めする際の色を設定します
fill_color = "lightgreen"
).add_to(map1)
#描画
map1
今回のデータはKaggleにあるホステルの位置データを活用しています。
データ:https://www.kaggle.com/koki25ando/hostel-world-dataset
Kaggleは無料で登録ができますし、いろいろなデータセットをダウンロードできるので、
この機会に登録してみてください!
サイトを訪れ、赤い枠で囲っているDownloadからデータを取得してください。
今回のPythonのコード構成は以下のようになっています。
- ライブラリのインポート
- データのインポート
- 地図の設定
- データのプロット設定、& 描画
Pythonコードの説明
それでは、それぞれのコード(機能のかたまり)ごとに詳しくみていきます!
ライブラリのインストール
まずは今回、必要なPythonのライブラリをインストールしましょう。
インストールされていないとimportできず、エラーになってしまうので注意してください。
ターミナルを開いて、下記のコードでインストールしてください。
pip install pandas
pip install folium
ライブラリのインポート
import pandas as pd
import folium
「folium」と「pandas」というライブラリを使うことで地図に位置情報をプロットできます。
「folium」は緯度経度の情報を使って地図に位置を表示させることができるライブラリです。
「pandas 」はcsvのデータをPythonで扱えるように取得、加工するためのライブラリです。
データのインポート
df = pd.read_csv("Hostel.csv")
df = df.dropna(subset=['lat', 'lon'])
地図に表示させるデータをインポートします。
今回はホステルの位置データを活用しています。
“Hostel.csv”の部分を変更して、他のデータでも挑戦してみてください。
df = df.dropna(subset=['lat', 'lon'])
上記のコードで緯度経度に欠損があるデータを取り除きます。
地図の設定
#地図を用意
map1 = folium.Map(
#初期位置の設定
location=[35.681167, 139.767052],
#初期表示の拡大具合の設定
zoom_start = 11,
#地図のスタイルの選択 どれか一つ選んで#をはずしてください
tiles = "OpenStreetMap"
#tiles="cartodbpositron"
#tiles = "Stamen Toner"
#tiles = "Stamen Terrain"
)
このコード部分で表示させる地図の設定を行います。
location=[緯度,経度 ]で表示させる地図の中心点を決めます。
zoom_start = 数字で地図の拡大具合を設定します。 数字を大きくするほど、拡大されます。
tiles = “デザイン名” で地図のデザインを変更できます。下記のようなデザインがあります。
データのプロット設定 & 描画
for i in range(len(df)):
folium.Circle(
radius=50,
location=[df.iloc[i]['lat'], df.iloc[i]['lon']],
tooltip=str(df.iloc[i]['City'] +", " +df.iloc[i]['hostel.name']),
#ドットの外枠の色を指定します
color="green",
#ドットを色埋めするかを設定します
fill = True,
#色埋めする際の色を設定します
fill_color = "lightgreen"
).add_to(map1)
#描画
map1
このコード部分で表示させる位置情報の設定と表示させるデザインを設定し、表示させています。
radius=50,
location=[df.iloc[i]['lat'], df.iloc[i]['lon']],
tooltip=str(df.iloc[i]['City'] +", " +df.iloc[i]['hostel.name']),
radiusで表示させる円の大きさを設定します
locationで緯度経度を設定、tooltipでマウスオンした際に表示させる情報を設定しています。
#ドットの外枠の色を指定します
color="green",
#ドットを色埋めするかを設定します
fill = True,
#色埋めする際の色を設定します
fill_color = "lightgreen"
colorで表示させる色を選びます。
fillをTrueにすると円が塗りつぶされた表示になります。また、fill_colorで塗り潰す色を設定できます。fillをFalseにすると、真ん中が塗りつぶされていない円が表示されます。
foliumを使って競合分析(店舗情報を可視化)してみた
東京駅の近辺にあるコンビニエンスストア(セブンイレブン、ローソン、ファミリーマート)の位置をプロットして、可視化してみたいと思います。
Pythonのコードは下記になります。 是非、挑戦してみてください。
import pandas as pd
import folium
#地図を用意
map1 = folium.Map(
#初期位置を設定
location=[35.681167, 139.767052],
#初期表示の拡大具合の設定
zoom_start = 15,
#地図のスタイルの選択 どれか一つ選んで#をはずしてください
tiles = "OpenStreetMap"
#tiles = "cartodbpositron"
#tiles = "Stamen Toner"
#tiles = "Stamen Terrain"
)
df = pd.read_csv("Convenience_store_Tokyo_Station.csv")
seven = df[df.Brand == 'SevenEleven']
lowson = df[df.Brand == 'Lawson']
fama = df[df.Brand == 'FamilyMart']
for i in range(len(seven)):
folium.Circle(
radius=10,
location=[seven.iloc[i]['Lat'], seven.iloc[i]['Lon']],
tooltip=str(seven.iloc[i]['Brand']),
#ドットの外枠の色を指定します
color="red",
#ドットを色埋めするかを設定します
fill = True
).add_to(map1)
for i in range(len(fama)):
folium.Circle(
radius=10,
location=[fama.iloc[i]['Lat'], fama.iloc[i]['Lon']],
tooltip=str(fama.iloc[i]['Brand']),
#ドットの外枠の色を指定します
color="green",
#ドットを色埋めするかを設定します
fill = True
).add_to(map1)
for i in range(len(lowson)):
folium.Circle(
radius=10,
location=[lowson.iloc[i]['Lat'], lowson.iloc[i]['Lon']],
tooltip=str(lowson.iloc[i]['Brand']),
#ドットの外枠の色を指定します
color="blue",
#ドットを色埋めするかを設定します
fill = True
).add_to(map1)
#描画
map1
コンビニの店舗データはこちらからダウンロードしてみてください。
やはり、ローソンは三菱系の企業が多い地域に点在してますね。ファミマは駅の近くに出店。
セブンイレブンは一定の間隔を置いて、出店してますね。可視化することで企業の出店戦略がなんとなく、読み取れます。
終わりに
いかがでしたでしょうか!?
今回はPythonで店舗位置情報(緯度・経度の情報)を地図にプロットさせる方法について紹介してきました!
皆さんのお持ちのデータやネット上になるデータセットを活用して、挑戦してみてください!
pythonはライブラリやAPIを活用することで本当にいろいろなことが比較的簡単にできるので、興味のありそうな分野を探して、挑戦してみてください!
それではまた、他の記事で会いましょう〜!
ちなみにAPIの活用を学ぶなら、下記のUdemyの講座などもおすすめです!おすすめのUdemy講座
おすすめ記事!