{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MATLAB Mobile(無料枠)とfoliumによるGPSデータのプロット \n", " \n", "このぺージではMATLAB Mobileの無料枠の機能を利用して、MATLAB Mobileをiphoneにインストールして、それをもって移動したときのGPSによる位置情報を地図上にプロットするということを行います。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pythonコード \n", "必要なライブラリのインポート" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.8.12 | packaged by conda-forge | (default, Sep 16 2021, 01:40:49) [MSC v.1916 64 bit (AMD64)]\n", "folium version: 0.12.0\n", "2.0.9\n", "1.3.3\n", "1.21.2\n", "0.9.0\n" ] } ], "source": [ "import folium\n", "import json\n", "import pandas as pd\n", "import numpy as np\n", "import geopandas as gpd\n", "import sys\n", "print(sys.version)\n", "print('folium version: 0.12.0')\n", "print(json.__version__)\n", "print(pd.__version__)\n", "print(np.__version__)\n", "print(gpd.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ベースマップの作成 \n", "GPSデータをプロットする前のベースとなるマップを用意します。`folium.Map`を利用して作成することができます" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = folium.Map(location=[35.7056232, 139.751919], # 中心の設定:今回は東京ドーム\n", " tiles='cartodbpositron', # 地図のスタイルを設定\n", " zoom_start = 11, # 初期ズーム率を設定\n", " control_scale = True\n", " ) \n", "m # 作成したベースマップを表示" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "jupyter notebookでは上のマップを表示するためにFile -> trust notebookをクリックしました " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 23区の境界などを格納した情報を読み込み \n", "読み込みに関しては、`open(r'tokyo23.json) -> json.load(f)`の流れで読み込めるらしいのですが、私の環境ではエラーが出てしまったため以下のように読み込みました。そして、私の環境では、データフレームに変換して後のグラデーションの表示(Choropleth図)がうまくいったので \n", "データフレームに変換 -> column名の変更 という作業を行っています" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N03_001N03_002N03_003N03_004N03_007geometry
0東京都台東区13106MULTIPOLYGON (((139.76667 35.71330, 139.76609 ...
1東京都杉並区13115MULTIPOLYGON (((139.64081 35.66667, 139.64076 ...
2東京都文京区13105MULTIPOLYGON (((139.71782 35.71605, 139.71783 ...
3東京都新宿区13104MULTIPOLYGON (((139.71397 35.67918, 139.71421 ...
4東京都世田谷区13112MULTIPOLYGON (((139.62407 35.61081, 139.62405 ...
5東京都江戸川区13123MULTIPOLYGON (((139.85000 35.63841, 139.84999 ...
6東京都墨田区13107MULTIPOLYGON (((139.79517 35.70466, 139.79702 ...
7東京都港区13103MULTIPOLYGON (((139.71369 35.65800, 139.71367 ...
8東京都豊島区13116MULTIPOLYGON (((139.68229 35.72460, 139.68226 ...
9東京都江東区13108MULTIPOLYGON (((139.77500 35.61608, 139.77350 ...
10東京都荒川区13118MULTIPOLYGON (((139.75833 35.74473, 139.75720 ...
11東京都練馬区13120MULTIPOLYGON (((139.56564 35.72166, 139.56568 ...
12東京都葛飾区13122MULTIPOLYGON (((139.81667 35.74979, 139.81650 ...
13東京都品川区13109MULTIPOLYGON (((139.69539 35.60749, 139.69541 ...
14東京都大田区13111MULTIPOLYGON (((139.75000 35.54457, 139.74932 ...
15東京都中野区13114MULTIPOLYGON (((139.62500 35.72831, 139.62481 ...
16東京都中央区13102MULTIPOLYGON (((139.75833 35.65976, 139.75813 ...
17東京都北区13117MULTIPOLYGON (((139.72363 35.73993, 139.72359 ...
18東京都千代田区13101MULTIPOLYGON (((139.73150 35.68150, 139.73120 ...
19東京都目黒区13110MULTIPOLYGON (((139.68053 35.60445, 139.68045 ...
20東京都渋谷区13113MULTIPOLYGON (((139.71128 35.66667, 139.71102 ...
21東京都板橋区13119MULTIPOLYGON (((139.67317 35.74768, 139.67325 ...
22東京都足立区13121MULTIPOLYGON (((139.81650 35.75000, 139.81650 ...
\n", "
" ], "text/plain": [ " N03_001 N03_002 N03_003 N03_004 N03_007 \\\n", "0 東京都 台東区 13106 \n", "1 東京都 杉並区 13115 \n", "2 東京都 文京区 13105 \n", "3 東京都 新宿区 13104 \n", "4 東京都 世田谷区 13112 \n", "5 東京都 江戸川区 13123 \n", "6 東京都 墨田区 13107 \n", "7 東京都 港区 13103 \n", "8 東京都 豊島区 13116 \n", "9 東京都 江東区 13108 \n", "10 東京都 荒川区 13118 \n", "11 東京都 練馬区 13120 \n", "12 東京都 葛飾区 13122 \n", "13 東京都 品川区 13109 \n", "14 東京都 大田区 13111 \n", "15 東京都 中野区 13114 \n", "16 東京都 中央区 13102 \n", "17 東京都 北区 13117 \n", "18 東京都 千代田区 13101 \n", "19 東京都 目黒区 13110 \n", "20 東京都 渋谷区 13113 \n", "21 東京都 板橋区 13119 \n", "22 東京都 足立区 13121 \n", "\n", " geometry \n", "0 MULTIPOLYGON (((139.76667 35.71330, 139.76609 ... \n", "1 MULTIPOLYGON (((139.64081 35.66667, 139.64076 ... \n", "2 MULTIPOLYGON (((139.71782 35.71605, 139.71783 ... \n", "3 MULTIPOLYGON (((139.71397 35.67918, 139.71421 ... \n", "4 MULTIPOLYGON (((139.62407 35.61081, 139.62405 ... \n", "5 MULTIPOLYGON (((139.85000 35.63841, 139.84999 ... \n", "6 MULTIPOLYGON (((139.79517 35.70466, 139.79702 ... \n", "7 MULTIPOLYGON (((139.71369 35.65800, 139.71367 ... \n", "8 MULTIPOLYGON (((139.68229 35.72460, 139.68226 ... \n", "9 MULTIPOLYGON (((139.77500 35.61608, 139.77350 ... \n", "10 MULTIPOLYGON (((139.75833 35.74473, 139.75720 ... \n", "11 MULTIPOLYGON (((139.56564 35.72166, 139.56568 ... \n", "12 MULTIPOLYGON (((139.81667 35.74979, 139.81650 ... \n", "13 MULTIPOLYGON (((139.69539 35.60749, 139.69541 ... \n", "14 MULTIPOLYGON (((139.75000 35.54457, 139.74932 ... \n", "15 MULTIPOLYGON (((139.62500 35.72831, 139.62481 ... \n", "16 MULTIPOLYGON (((139.75833 35.65976, 139.75813 ... \n", "17 MULTIPOLYGON (((139.72363 35.73993, 139.72359 ... \n", "18 MULTIPOLYGON (((139.73150 35.68150, 139.73120 ... \n", "19 MULTIPOLYGON (((139.68053 35.60445, 139.68045 ... \n", "20 MULTIPOLYGON (((139.71128 35.66667, 139.71102 ... \n", "21 MULTIPOLYGON (((139.67317 35.74768, 139.67325 ... \n", "22 MULTIPOLYGON (((139.81650 35.75000, 139.81650 ... " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokyo23_df=gpd.read_file('tokyo23.json')\n", "tokyo23_df = tokyo23_df.rename(columns={'code': 'N03_007'})\n", "tokyo23_df.head(23) #はじめの5行を表示" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## コードがN03_007というcolumnに入っていることを確認 \n", "strタイプになっていることがわかります。後半ではこのコードによって、その区と人口を紐づけます。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['13106' '13115' '13105' '13104' '13112' '13123' '13107' '13103' '13116'\n", " '13108' '13118' '13120' '13122' '13109' '13111' '13114' '13102' '13117'\n", " '13101' '13110' '13113' '13119' '13121']\n", "\n" ] } ], "source": [ "code=tokyo23_df['N03_007'].values\n", "print(code)\n", "code_0=code[0]\n", "print(type(code_0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 東京23区の市区町村コードとその区の名前のペアの読み込み" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
codename
013101千代田区
113102中央区
213103港区
313104新宿区
413105文京区
513106台東区
613107墨田区
713108江東区
813109品川区
913110目黒区
\n", "
" ], "text/plain": [ " code name\n", "0 13101 千代田区\n", "1 13102 中央区\n", "2 13103 港区\n", "3 13104 新宿区\n", "4 13105 文京区\n", "5 13106 台東区\n", "6 13107 墨田区\n", "7 13108 江東区\n", "8 13109 品川区\n", "9 13110 目黒区" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "code_name=pd.read_csv('code_name.csv', encoding=\"shift-jis\")\n", "code_name.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 東京23区の名前と人口のペアの読み込み" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namepopulation
0千代田区61420
1中央区157484
2港区253940
3新宿区343494
4文京区227224
5台東区203219
6墨田区264515
7江東区510692
8品川区398732
9目黒区283153
\n", "
" ], "text/plain": [ " name population\n", "0 千代田区 61420\n", "1 中央区 157484\n", "2 港区 253940\n", "3 新宿区 343494\n", "4 文京区 227224\n", "5 台東区 203219\n", "6 墨田区 264515\n", "7 江東区 510692\n", "8 品川区 398732\n", "9 目黒区 283153" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "name_population=pd.read_csv('name_population.csv', encoding=\"shift-jis\")\n", "name_population.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pd.mergeを用いて23区の名前を利用してデータフレームを横方向に結合 \n", "code_**name**と**name**_populationでは**name**のcolumnが共通しているので、その重複を利用して2つのデータフレームを結合することができます。23区の人口の場合は欠損値はありませんが、データ取得ができておらずNANになっている場合でも `how=outer` を利用して結合可能です。" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namepopulationcode
0千代田区6142013101
1中央区15748413102
2港区25394013103
3新宿区34349413104
4文京区22722413105
5台東区20321913106
6墨田区26451513107
7江東区51069213108
8品川区39873213109
9目黒区28315313110
\n", "
" ], "text/plain": [ " name population code\n", "0 千代田区 61420 13101\n", "1 中央区 157484 13102\n", "2 港区 253940 13103\n", "3 新宿区 343494 13104\n", "4 文京区 227224 13105\n", "5 台東区 203219 13106\n", "6 墨田区 264515 13107\n", "7 江東区 510692 13108\n", "8 品川区 398732 13109\n", "9 目黒区 283153 13110" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged_df=pd.merge(name_population, code_name, how='outer')\n", "merged_df.head(10) # 結合したデータフレームの値を確認" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "codeとpopulationのみを取り出したデータフレームを作成します" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "tokyo23_population_df=merged_df.loc[:,['code','population']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "結合したデータフレームの値を確認します" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N03_007population
01310161420
113102157484
213103253940
313104343494
413105227224
513106203219
613107264515
713108510692
813109398732
913110283153
\n", "
" ], "text/plain": [ " N03_007 population\n", "0 13101 61420\n", "1 13102 157484\n", "2 13103 253940\n", "3 13104 343494\n", "4 13105 227224\n", "5 13106 203219\n", "6 13107 264515\n", "7 13108 510692\n", "8 13109 398732\n", "9 13110 283153" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokyo23_population_df.columns = ['N03_007','population']\n", "tokyo23_population_df.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 各区の人口の情報を読み込み \n", "注意:ここではCSVファイルから読み込んだ区のコードは数値として読み込まれているので、 \n", "上のセルにあるような文字(str)配列に変更する必要があります \n", "また、自前のデータで行う場合はpopulationに相当する値が文字列として数字が入っている場合は図の作成時にエラーが出てしまうため変換が必要です" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N03_007population
01310161420
113102157484
213103253940
313104343494
413105227224
513106203219
613107264515
713108510692
813109398732
913110283153
\n", "
" ], "text/plain": [ " N03_007 population\n", "0 13101 61420\n", "1 13102 157484\n", "2 13103 253940\n", "3 13104 343494\n", "4 13105 227224\n", "5 13106 203219\n", "6 13107 264515\n", "7 13108 510692\n", "8 13109 398732\n", "9 13110 283153" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tokyo23_population_df['N03_007'] = tokyo23_population_df['N03_007'].astype('str')\n", "tokyo23_population_df.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## choropleth図の作成 \n", "folium.Choroplethという機能を使って作図していきます。以下のように設定を定義します。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "folium.Choropleth(geo_data=tokyo23_df, # 地理情報のファイル\n", " name = 'choropleth_tokyo23', # 出力する地図プロットの名前\n", " data = tokyo23_population_df, # 各区の人口データ\n", " columns=['N03_007', 'population'], # 各区の人口データのkey列とその値の列を指定\n", " key_on='feature.properties.N03_007', # keyの情報:feature.properties.xxの形。N03_007の値を基に人口データと紐づける\n", " fill_opacity=0.41, # グラデーションであらわすときの色の濃さを指定\n", " line_opacity=0.1, # 区の境界線の濃さを指定\n", " line_color='blue', # 境界線の色を指定\n", " fill_color='YlGn' # グラデーションのカラーマップを指定\n", " ).add_to(m)\n", "folium.LayerControl().add_to(m) # ベースマップmにchoroplethの設定を追加\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "このように23区の人口の多さをグラデーションで示すことができました。次は前半のMATLAB Mobileによりスマートフォンから取得したGPSデータをプロットしていきます。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matlab Onlineで作成したlatlon.csvの取り込み" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LatitudeLongitude
035.69610139.75904
135.69609139.75893
235.69608139.75886
335.69608139.75879
435.69607139.75873
535.69607139.75865
635.69607139.75856
735.69605139.75848
835.69602139.75838
935.69601139.75829
\n", "
" ], "text/plain": [ " Latitude Longitude\n", "0 35.69610 139.75904\n", "1 35.69609 139.75893\n", "2 35.69608 139.75886\n", "3 35.69608 139.75879\n", "4 35.69607 139.75873\n", "5 35.69607 139.75865\n", "6 35.69607 139.75856\n", "7 35.69605 139.75848\n", "8 35.69602 139.75838\n", "9 35.69601 139.75829" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "locations = pd.read_csv(\"latlon.csv\") # 読み込み\n", "numPlot=np.size(locations.Longitude) # データの個数を取得\n", "locations.head(10) # 一部を表示" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## GPSのデータをラインで表示する \n", "`folium.vector_layers.PolyLine`を用いてラインを書くことができます" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "line = folium.vector_layers.PolyLine(\n", " locations=locations, \n", " color='blue', \n", " weight=3)\n", "# マーカーと線の地図レイヤへの追加\n", "m.add_child(line)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 始点と終点をアイコンで表示 \n", "GPSデータの最初と最後の座標を取得し、folium.Marker関数でアイコンを表示します" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "folium.Marker(location=[locations.Latitude[0], locations.Longitude[0]],\n", " icon=folium.Icon(color=\"red\", icon=\"home\")).add_to(m)\n", "folium.Marker(location=[locations.Latitude[numPlot-1], locations.Longitude[numPlot-1]],\n", " icon=folium.Icon(color=\"red\", icon=\"step-forward\")).add_to(m)\n", "m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 結果の保存 \n", "m.saveを用いてhtlm形式で保存することができます。私の環境ではそのまま開くとうまく見ることができました" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "m.save('out.html') # 結果の保存" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## まとめ \n", "MATLAB Mobileを用いてGPSデータを取得し、MATLAB Online(無料の機能)を用いてCSV形式で保存をしました。そしてpythonのfoliumを用いてその軌跡をプロットすることができました。同様の機能やライブラリを用いて他にもあらゆるタイプのプロットができそうです。 \n", "機会があればまた別のプロットの種類も試してみたいと思います。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "oldHeight": 328.538, "position": { "height": "240px", "left": "1175.35px", "right": "20px", "top": "244px", "width": "350px" }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "varInspector_section_display": "none", "window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }