First 1000 api requests to the DarkSky API each day are free!
Installing darkskylib: pip install darkskylib
from datetime import datetime as dt
import pandas as pd
import hvplot.pandas
from darksky import forecast
import os
key=os.environ['DARKSKY_API_KEY']
LOC = key, 42.3601, -71.0589 # boston
t = dt(2013, 5, 6, 12).isoformat()
W = forecast(*LOC, time=t)
def vdir(obj):
return [x for x in dir(obj) if not x.startswith('__')]
vdir(W.currently)
['_data', 'apparentTemperature', 'cloudCover', 'dewPoint', 'humidity', 'icon', 'precipIntensity', 'precipProbability', 'pressure', 'summary', 'temperature', 'time', 'uvIndex', 'visibility', 'windBearing', 'windGust', 'windSpeed']
def forecast_to_df(location=LOC, time=None, var='temperature'):
"""Convert a darksky forecast object to a pandas dataframe
Keyword arguments:
location -- tuple containing (darksky_api_key (str), lat (float), lon (float))
time -- isoformat time. (default=None, giving current forecast)
var -- variable to extract (e.g. 'temperature', 'dewPoint')
"""
W = forecast(*location, time=time)
nt = len(W.hourly.data)
data = [W.hourly.data[i][var] for i in range(nt)]
index = [dt.fromtimestamp(W.hourly.data[i].time) for i in range(nt)]
df = pd.Series(data=data, index=index, name=var)
return df
LOC = key, 41.5532, -70.6086 # falmouth, ma
forecast_to_df(LOC).hvplot() * forecast_to_df(LOC).hvplot.scatter()
forecast_to_df(LOC, var='precipProbability').hvplot() * forecast_to_df(LOC, var='precipProbability').hvplot.scatter()
LOC = key, 43.828, -69.564 # inner heron island, me
Request a range of dates, returning a list of Pandas series
s = [forecast_to_df(LOC, time=date.isoformat(), var='temperature') for date in pd.date_range(start='11/1/2017', end='11/25/2017')]
Concatenate the list of Pandas Series into one
df = pd.concat(s)
import holoviews as hv
df.hvplot() * df.hvplot.scatter() * hv.HLine(32.0)