Python has massive capabilities in fitting well to data wrangling and manipulation tasks.

These abilities complemented with folium makes its easy for you to visualize this data

I’ll be running all commands from a Jupyter notebook.

To get stated,

Import numpy and pandas python packages for data manipulation

import pandas as pd
import geo

For purposes of demontrations, I use data from a class I took.

The data is captures in a csv file

df = pd.read_csv('track.csv',parse_dates=['time'])
df.head()
time lat lng height
0 2015-08-20 03:48:07.235 35.015021 32.519585 136.199997
1 2015-08-20 03:48:24.734 35.014954 32.519606 126.599998
2 2015-08-20 03:48:25.660 35.014871 32.519612 123.000000
3 2015-08-20 03:48:26.819 35.014824 32.519654 120.500000
4 2015-08-20 03:48:27.828 35.014776 32.519689 118.900002

Index the dataframe by the 'time' column

df.index = df.time
df.index[:10]
DatetimeIndex(['2015-08-20 03:48:07.235000', '2015-08-20 03:48:24.734000',
               '2015-08-20 03:48:25.660000', '2015-08-20 03:48:26.819000',
               '2015-08-20 03:48:27.828000', '2015-08-20 03:48:29.720000',
               '2015-08-20 03:48:30.669000', '2015-08-20 03:48:33.793000',
               '2015-08-20 03:48:34.869000', '2015-08-20 03:48:37.708000'],
              dtype='datetime64[ns]', name='time', freq=None)

localize the time (OPTIONAL)

Am in Nairobi currently so (+3:00 GMT)

import pytz
ts = df.index[0]

ts.tz_localize(pytz.utc)

Timestamp(‘2015-08-20 03:48:07.235000+0000’, tz=’UTC’)

ts.tz_localize(pytz.UTC).tz_convert(pytz.timezone('Africa/Nairobi'))

Timestamp(‘2015-08-20 06:48:07.235000+0300’, tz=’Africa/Nairobi’)

Plot a marker on the map

Using a circular marker, add a popup depicting time at a particular location

import folium
m = folium.Map(location=[df['lng'].mean(), df['lat'].mean()], zoom_start=15)

row = df.iloc[321]
marker = folium.CircleMarker([row['lng'], row['lat']], radius=5, color='red', popup=row['time'].strftime('%H:%M'))
marker.add_to(m)

m

Plot track followed

m = folium.Map(location=[df['lng'].mean(), df['lat'].mean()], zoom_start=15)
def add_marker(row):
    marker = folium.CircleMarker([row['lng'], row['lat']], radius=5, color='red', popup=row['time'].strftime('%H:%M'))
    marker.add_to(m)

df.apply(add_marker, axis=1)

m