In [54]:
%matplotlib inline
import numpy as np                   # math
import pandas as pd                  # manipulating data
import matplotlib.pyplot as plt      # graphing
import os                            # useful for handling filenames etc.

# calculates the Pearson correlation coefficient, p-value, and does linear regression
from scipy.stats import pearsonr, linregress

#import seaborn as sns                # makes matplotlib beautiful
#sns.set_style('darkgrid')

import matplotlib as mpl             # control formatting
mpl.rcParams['axes.titlesize'] = 16
mpl.rcParams['axes.titleweight'] = 'semibold'

# interactive graphs
from bokeh.io import output_notebook, show, push_notebook
from bokeh.plotting import figure
from bokeh.layouts import row, column
from bokeh.models import DatetimeTickFormatter, HoverTool
output_notebook()

# manage date and time
from datetime import datetime, timedelta, date


Loading BokehJS ...

In [51]:
# An example of what the website query looks like without any processing
CSV_URL = 'https://www.wunderground.com/weatherstation/WXDailyHistory.asp?\
ID=KCABERKE169&day=01&month=11&year=2018&graphspan=day&format=1'
df = pd.read_csv(CSV_URL, index_col=False)
df


Out[51]:
Time TemperatureF DewpointF PressureIn WindDirection WindDirectionDegrees WindSpeedMPH WindSpeedGustMPH Humidity HourlyPrecipIn Conditions Clouds dailyrainin SolarRadiationWatts/m^2 SoftwareType DateUTC<br>
0 2018-11-01 12:49:32 72.3 48.0 -100.0 SSW 202.0 0.0 0.0 42.0 0.00 NaN NaN 0.00 44.49 Weather logger V3.0. 2018-11-01 19:49:32
1 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 2018-11-01 12:54:36 72.5 48.2 -100.0 SE 133.0 0.0 0.0 42.0 0.21 NaN NaN 0.04 277.27 Weather logger V3.0. 2018-11-01 19:54:36
3 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2018-11-01 12:59:56 73.4 45.7 -100.0 South 187.0 0.0 0.0 37.0 0.21 NaN NaN 0.04 292.76 Weather logger V3.0. 2018-11-01 19:59:56
5 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2018-11-01 13:04:44 74.3 44.2 -100.0 ESE 114.0 1.8 4.9 34.0 0.00 NaN NaN 0.04 288.55 Weather logger V3.0. 2018-11-01 20:04:44
7 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2018-11-01 13:09:48 75.4 44.4 -100.0 SE 133.0 0.4 2.5 33.0 0.00 NaN NaN 0.04 295.80 Weather logger V3.0. 2018-11-01 20:09:48
9 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2018-11-01 13:14:52 76.3 44.2 -100.0 SE 139.0 0.0 0.0 32.0 0.00 NaN NaN 0.04 274.66 Weather logger V3.0. 2018-11-01 20:14:52
11 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 2018-11-01 13:19:56 77.5 43.7 -100.0 SSE 150.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 274.23 Weather logger V3.0. 2018-11-01 20:19:56
13 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 2018-11-01 13:24:44 78.8 45.7 -100.0 South 186.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 287.99 Weather logger V3.0. 2018-11-01 20:24:44
15 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 2018-11-01 13:29:32 79.7 45.5 -100.0 East 97.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 279.70 Weather logger V3.0. 2018-11-01 20:29:32
17 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 2018-11-01 13:34:36 80.6 45.5 -100.0 NE 39.0 0.0 0.0 29.0 0.00 NaN NaN 0.04 290.42 Weather logger V3.0. 2018-11-01 20:34:36
19 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 2018-11-01 13:39:56 81.7 46.4 -100.0 NE 46.0 0.0 0.0 29.0 0.00 NaN NaN 0.04 280.35 Weather logger V3.0. 2018-11-01 20:39:56
21 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 2018-11-01 13:44:28 82.4 47.8 -100.0 NE 49.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 266.63 Weather logger V3.0. 2018-11-01 20:44:28
23 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 2018-11-01 13:49:16 82.9 49.3 -100.0 SSW 212.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 260.77 Weather logger V3.0. 2018-11-01 20:49:16
25 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 2018-11-01 13:54:52 83.3 50.4 -100.0 South 190.0 0.0 0.0 32.0 0.00 NaN NaN 0.04 252.30 Weather logger V3.0. 2018-11-01 20:54:52
27 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 2018-11-01 13:59:40 83.3 49.6 -100.0 SW 226.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 245.79 Weather logger V3.0. 2018-11-01 20:59:40
29 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
240 2018-11-01 22:49:49 64.6 53.8 -100.0 SSW 210.0 0.0 0.0 68.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:49:49
241 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
242 2018-11-01 22:54:53 64.4 52.0 -100.0 SW 221.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:54:53
243 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
244 2018-11-01 22:59:57 64.2 51.4 -100.0 SSW 200.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:59:57
245 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
246 2018-11-01 23:04:45 64.2 51.4 -100.0 SW 214.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:04:45
247 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
248 2018-11-01 23:09:49 64.0 51.3 -100.0 SW 219.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:09:49
249 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
250 2018-11-01 23:14:37 64.0 51.3 -100.0 SSW 209.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:14:37
251 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
252 2018-11-01 23:19:57 63.9 51.4 -100.0 SSW 205.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:19:57
253 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
254 2018-11-01 23:24:45 63.7 51.3 -100.0 SSW 208.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:24:45
255 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
256 2018-11-01 23:29:49 63.3 51.4 -100.0 SSW 207.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:29:49
257 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
258 2018-11-01 23:34:21 63.1 51.3 -100.0 SSW 206.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:34:21
259 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
260 2018-11-01 23:39:57 62.8 51.3 -100.0 SSW 206.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:39:57
261 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
262 2018-11-01 23:44:29 62.6 51.1 -100.0 SW 229.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:44:29
263 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
264 2018-11-01 23:49:17 62.6 50.4 -100.0 SSW 213.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:49:17
265 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
266 2018-11-01 23:54:53 62.6 49.5 -100.0 SSW 200.0 0.0 0.0 62.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:54:53
267 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
268 2018-11-01 23:59:57 62.8 49.6 -100.0 SSW 208.0 0.0 0.0 62.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:59:57
269 <br> NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

270 rows × 16 columns


In [52]:
# We can clean-up the odd row structure trivially:
dg = df.drop([2*i + 1 for i in range(df.shape[0] // 2)])
dg


Out[52]:
Time TemperatureF DewpointF PressureIn WindDirection WindDirectionDegrees WindSpeedMPH WindSpeedGustMPH Humidity HourlyPrecipIn Conditions Clouds dailyrainin SolarRadiationWatts/m^2 SoftwareType DateUTC<br>
0 2018-11-01 12:49:32 72.3 48.0 -100.0 SSW 202.0 0.0 0.0 42.0 0.00 NaN NaN 0.00 44.49 Weather logger V3.0. 2018-11-01 19:49:32
2 2018-11-01 12:54:36 72.5 48.2 -100.0 SE 133.0 0.0 0.0 42.0 0.21 NaN NaN 0.04 277.27 Weather logger V3.0. 2018-11-01 19:54:36
4 2018-11-01 12:59:56 73.4 45.7 -100.0 South 187.0 0.0 0.0 37.0 0.21 NaN NaN 0.04 292.76 Weather logger V3.0. 2018-11-01 19:59:56
6 2018-11-01 13:04:44 74.3 44.2 -100.0 ESE 114.0 1.8 4.9 34.0 0.00 NaN NaN 0.04 288.55 Weather logger V3.0. 2018-11-01 20:04:44
8 2018-11-01 13:09:48 75.4 44.4 -100.0 SE 133.0 0.4 2.5 33.0 0.00 NaN NaN 0.04 295.80 Weather logger V3.0. 2018-11-01 20:09:48
10 2018-11-01 13:14:52 76.3 44.2 -100.0 SE 139.0 0.0 0.0 32.0 0.00 NaN NaN 0.04 274.66 Weather logger V3.0. 2018-11-01 20:14:52
12 2018-11-01 13:19:56 77.5 43.7 -100.0 SSE 150.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 274.23 Weather logger V3.0. 2018-11-01 20:19:56
14 2018-11-01 13:24:44 78.8 45.7 -100.0 South 186.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 287.99 Weather logger V3.0. 2018-11-01 20:24:44
16 2018-11-01 13:29:32 79.7 45.5 -100.0 East 97.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 279.70 Weather logger V3.0. 2018-11-01 20:29:32
18 2018-11-01 13:34:36 80.6 45.5 -100.0 NE 39.0 0.0 0.0 29.0 0.00 NaN NaN 0.04 290.42 Weather logger V3.0. 2018-11-01 20:34:36
20 2018-11-01 13:39:56 81.7 46.4 -100.0 NE 46.0 0.0 0.0 29.0 0.00 NaN NaN 0.04 280.35 Weather logger V3.0. 2018-11-01 20:39:56
22 2018-11-01 13:44:28 82.4 47.8 -100.0 NE 49.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 266.63 Weather logger V3.0. 2018-11-01 20:44:28
24 2018-11-01 13:49:16 82.9 49.3 -100.0 SSW 212.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 260.77 Weather logger V3.0. 2018-11-01 20:49:16
26 2018-11-01 13:54:52 83.3 50.4 -100.0 South 190.0 0.0 0.0 32.0 0.00 NaN NaN 0.04 252.30 Weather logger V3.0. 2018-11-01 20:54:52
28 2018-11-01 13:59:40 83.3 49.6 -100.0 SW 226.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 245.79 Weather logger V3.0. 2018-11-01 20:59:40
30 2018-11-01 14:04:44 83.3 48.7 -100.0 South 183.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 239.89 Weather logger V3.0. 2018-11-01 21:04:44
32 2018-11-01 14:09:48 83.5 48.9 -100.0 SSW 203.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 243.23 Weather logger V3.0. 2018-11-01 21:09:48
34 2018-11-01 14:14:52 83.5 48.9 -100.0 NW 325.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 235.37 Weather logger V3.0. 2018-11-01 21:14:52
36 2018-11-01 14:19:56 83.8 49.1 -100.0 SSE 162.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 226.00 Weather logger V3.0. 2018-11-01 21:19:56
38 2018-11-01 14:24:12 84.0 50.2 -100.0 SSW 195.0 0.0 0.0 31.0 0.00 NaN NaN 0.04 227.39 Weather logger V3.0. 2018-11-01 21:24:12
40 2018-11-01 14:29:48 84.2 48.6 -100.0 NE 49.0 0.0 0.0 29.0 0.00 NaN NaN 0.04 219.75 Weather logger V3.0. 2018-11-01 21:29:48
42 2018-11-01 14:34:52 84.4 45.9 -100.0 WNW 287.0 0.9 2.5 26.0 0.00 NaN NaN 0.04 131.58 Weather logger V3.0. 2018-11-01 21:34:52
44 2018-11-01 14:39:56 84.4 44.8 -100.0 NNW 342.0 0.9 4.9 25.0 0.00 NaN NaN 0.04 216.19 Weather logger V3.0. 2018-11-01 21:39:56
46 2018-11-01 14:44:28 84.6 46.9 -100.0 SSE 152.0 0.0 0.0 27.0 0.00 NaN NaN 0.04 132.06 Weather logger V3.0. 2018-11-01 21:44:28
48 2018-11-01 14:49:48 84.6 48.0 -100.0 SSW 196.0 0.0 0.0 28.0 0.00 NaN NaN 0.04 132.49 Weather logger V3.0. 2018-11-01 21:49:48
50 2018-11-01 14:54:52 84.7 47.1 -100.0 SE 137.0 0.0 0.0 27.0 0.00 NaN NaN 0.04 193.70 Weather logger V3.0. 2018-11-01 21:54:52
52 2018-11-01 14:59:56 84.9 47.3 -100.0 NW 307.0 0.0 0.0 27.0 0.00 NaN NaN 0.04 115.30 Weather logger V3.0. 2018-11-01 21:59:56
54 2018-11-01 15:04:44 84.7 50.0 -100.0 SE 130.0 1.3 2.5 30.0 0.00 NaN NaN 0.04 125.16 Weather logger V3.0. 2018-11-01 22:04:44
56 2018-11-01 15:09:32 84.6 49.8 -100.0 NNW 342.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 187.58 Weather logger V3.0. 2018-11-01 22:09:32
58 2018-11-01 15:14:36 84.2 49.5 -100.0 ESE 121.0 0.0 0.0 30.0 0.00 NaN NaN 0.04 130.71 Weather logger V3.0. 2018-11-01 22:14:36
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
210 2018-11-01 21:34:37 64.0 52.2 -100.0 SSW 212.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:34:37
212 2018-11-01 21:39:57 64.2 51.8 -100.0 SW 223.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:39:57
214 2018-11-01 21:44:45 64.2 51.4 -100.0 South 190.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:44:45
216 2018-11-01 21:49:49 64.4 52.0 -100.0 South 190.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:49:49
218 2018-11-01 21:54:53 64.4 53.2 -100.0 SSW 204.0 0.0 0.0 67.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:54:53
220 2018-11-01 21:59:41 64.2 52.7 -100.0 West 274.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 04:59:41
222 2018-11-01 22:04:45 64.2 50.5 -100.0 SSW 202.0 0.0 0.0 61.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:04:45
224 2018-11-01 22:09:49 64.4 52.0 -100.0 SW 221.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:09:49
226 2018-11-01 22:14:05 64.4 51.1 -100.0 SSW 202.0 0.0 0.0 62.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:14:05
228 2018-11-01 22:19:57 64.6 50.0 -100.0 SSW 192.0 0.0 0.0 59.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:19:57
230 2018-11-01 22:24:45 64.8 52.7 -100.0 SSW 193.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:24:45
232 2018-11-01 22:29:49 65.1 53.6 -100.0 SSW 192.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:29:49
234 2018-11-01 22:34:37 65.1 54.0 -100.0 SSW 200.0 0.0 0.0 67.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:34:37
236 2018-11-01 22:39:41 64.9 54.1 -100.0 SSW 207.0 0.0 0.0 68.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:39:41
238 2018-11-01 22:44:45 64.8 54.0 -100.0 South 189.0 0.0 0.0 68.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:44:45
240 2018-11-01 22:49:49 64.6 53.8 -100.0 SSW 210.0 0.0 0.0 68.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:49:49
242 2018-11-01 22:54:53 64.4 52.0 -100.0 SW 221.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:54:53
244 2018-11-01 22:59:57 64.2 51.4 -100.0 SSW 200.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 05:59:57
246 2018-11-01 23:04:45 64.2 51.4 -100.0 SW 214.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:04:45
248 2018-11-01 23:09:49 64.0 51.3 -100.0 SW 219.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:09:49
250 2018-11-01 23:14:37 64.0 51.3 -100.0 SSW 209.0 0.0 0.0 63.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:14:37
252 2018-11-01 23:19:57 63.9 51.4 -100.0 SSW 205.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:19:57
254 2018-11-01 23:24:45 63.7 51.3 -100.0 SSW 208.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:24:45
256 2018-11-01 23:29:49 63.3 51.4 -100.0 SSW 207.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:29:49
258 2018-11-01 23:34:21 63.1 51.3 -100.0 SSW 206.0 0.0 0.0 65.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:34:21
260 2018-11-01 23:39:57 62.8 51.3 -100.0 SSW 206.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:39:57
262 2018-11-01 23:44:29 62.6 51.1 -100.0 SW 229.0 0.0 0.0 66.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:44:29
264 2018-11-01 23:49:17 62.6 50.4 -100.0 SSW 213.0 0.0 0.0 64.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:49:17
266 2018-11-01 23:54:53 62.6 49.5 -100.0 SSW 200.0 0.0 0.0 62.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:54:53
268 2018-11-01 23:59:57 62.8 49.6 -100.0 SSW 208.0 0.0 0.0 62.0 0.00 NaN NaN 0.00 0.00 Weather logger V3.0. 2018-11-02 06:59:57

135 rows × 16 columns


In [ ]:
# Method for grabbing data for a specific location and data and cleaning up the website query output
def get_clean_df(location_id, date):
    """Get weather data from `location_id` on `date`, then
    remove all the `<br>` tags in the file.
    
    `date` should be a list/tuple of 3 strings in the format
    [MM, DD, YYYY].
    """
    url = "https://www.wunderground.com/weatherstation/WXDailyHistory.asp?" + \
          "ID={}&".format(location_id) + \
          "day={}&".format(date[1]) + \
          "month={}&".format(date[0]) + \
          "year={}&".format(date[2]) + \
          "graphspan=day&format=1"
    print(url)
    data = pd.read_csv(url, index_col=False)
    # drop every other row because it contains `<br>`
    return data.drop([2*i + 1 for i in range(data.shape[0] // 2)])

In [49]:
# Method to process weather data DataFrame 
#   - converts temperature/pressure to sensible units and drop unneeded columns
def process_data(data_df):
    def deg_f_to_c(deg_f):
        return (5. / 9.) * (deg_f - 32)

    def inhg_to_mbar(inhg):
        return 33.863753 * inhg

    data_df.reset_index()
    for row in data_df.itertuples():
        idx = row.Index
        itime, tempf, dewf, pressure = row.Time, row.TemperatureF, row.DewpointF, row.PressureIn
        data_df.loc[idx, 'Time'] = datetime.strptime(itime, '%Y-%m-%d %H:%M:%S')
        data_df.loc[idx, 'Temperature'] = deg_f_to_c(tempf)
        data_df.loc[idx, 'Dewpoint'] = deg_f_to_c(dewf)
        data_df.loc[idx, 'Pressure'] = inhg_to_mbar(pressure)

    return data_df.drop(['TemperatureF', 'DewpointF', 'PressureIn', 'Conditions', 'Clouds',
                         'SoftwareType', 'DateUTC<br>'], axis=1)

ws_data = process_data(get_clean_df('KCABERKE169', ['11', '01', '2018']))


https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KCABERKE169&day=01&month=11&year=2018&graphspan=day&format=1

In [50]:
ws_data


Out[50]:
Time WindDirection WindDirectionDegrees WindSpeedMPH WindSpeedGustMPH Humidity HourlyPrecipIn dailyrainin SolarRadiationWatts/m^2 Temperature Dewpoint Pressure
0 2018-11-01 12:49:32 SSW 202.0 0.0 0.0 42.0 0.00 0.00 44.49 22.388889 8.888889 -3386.3753
2 2018-11-01 12:54:36 SE 133.0 0.0 0.0 42.0 0.21 0.04 277.27 22.500000 9.000000 -3386.3753
4 2018-11-01 12:59:56 South 187.0 0.0 0.0 37.0 0.21 0.04 292.76 23.000000 7.611111 -3386.3753
6 2018-11-01 13:04:44 ESE 114.0 1.8 4.9 34.0 0.00 0.04 288.55 23.500000 6.777778 -3386.3753
8 2018-11-01 13:09:48 SE 133.0 0.4 2.5 33.0 0.00 0.04 295.80 24.111111 6.888889 -3386.3753
10 2018-11-01 13:14:52 SE 139.0 0.0 0.0 32.0 0.00 0.04 274.66 24.611111 6.777778 -3386.3753
12 2018-11-01 13:19:56 SSE 150.0 0.0 0.0 30.0 0.00 0.04 274.23 25.277778 6.500000 -3386.3753
14 2018-11-01 13:24:44 South 186.0 0.0 0.0 31.0 0.00 0.04 287.99 26.000000 7.611111 -3386.3753
16 2018-11-01 13:29:32 East 97.0 0.0 0.0 30.0 0.00 0.04 279.70 26.500000 7.500000 -3386.3753
18 2018-11-01 13:34:36 NE 39.0 0.0 0.0 29.0 0.00 0.04 290.42 27.000000 7.500000 -3386.3753
20 2018-11-01 13:39:56 NE 46.0 0.0 0.0 29.0 0.00 0.04 280.35 27.611111 8.000000 -3386.3753
22 2018-11-01 13:44:28 NE 49.0 0.0 0.0 30.0 0.00 0.04 266.63 28.000000 8.777778 -3386.3753
24 2018-11-01 13:49:16 SSW 212.0 0.0 0.0 31.0 0.00 0.04 260.77 28.277778 9.611111 -3386.3753
26 2018-11-01 13:54:52 South 190.0 0.0 0.0 32.0 0.00 0.04 252.30 28.500000 10.222222 -3386.3753
28 2018-11-01 13:59:40 SW 226.0 0.0 0.0 31.0 0.00 0.04 245.79 28.500000 9.777778 -3386.3753
30 2018-11-01 14:04:44 South 183.0 0.0 0.0 30.0 0.00 0.04 239.89 28.500000 9.277778 -3386.3753
32 2018-11-01 14:09:48 SSW 203.0 0.0 0.0 30.0 0.00 0.04 243.23 28.611111 9.388889 -3386.3753
34 2018-11-01 14:14:52 NW 325.0 0.0 0.0 30.0 0.00 0.04 235.37 28.611111 9.388889 -3386.3753
36 2018-11-01 14:19:56 SSE 162.0 0.0 0.0 30.0 0.00 0.04 226.00 28.777778 9.500000 -3386.3753
38 2018-11-01 14:24:12 SSW 195.0 0.0 0.0 31.0 0.00 0.04 227.39 28.888889 10.111111 -3386.3753
40 2018-11-01 14:29:48 NE 49.0 0.0 0.0 29.0 0.00 0.04 219.75 29.000000 9.222222 -3386.3753
42 2018-11-01 14:34:52 WNW 287.0 0.9 2.5 26.0 0.00 0.04 131.58 29.111111 7.722222 -3386.3753
44 2018-11-01 14:39:56 NNW 342.0 0.9 4.9 25.0 0.00 0.04 216.19 29.111111 7.111111 -3386.3753
46 2018-11-01 14:44:28 SSE 152.0 0.0 0.0 27.0 0.00 0.04 132.06 29.222222 8.277778 -3386.3753
48 2018-11-01 14:49:48 SSW 196.0 0.0 0.0 28.0 0.00 0.04 132.49 29.222222 8.888889 -3386.3753
50 2018-11-01 14:54:52 SE 137.0 0.0 0.0 27.0 0.00 0.04 193.70 29.277778 8.388889 -3386.3753
52 2018-11-01 14:59:56 NW 307.0 0.0 0.0 27.0 0.00 0.04 115.30 29.388889 8.500000 -3386.3753
54 2018-11-01 15:04:44 SE 130.0 1.3 2.5 30.0 0.00 0.04 125.16 29.277778 10.000000 -3386.3753
56 2018-11-01 15:09:32 NNW 342.0 0.0 0.0 30.0 0.00 0.04 187.58 29.222222 9.888889 -3386.3753
58 2018-11-01 15:14:36 ESE 121.0 0.0 0.0 30.0 0.00 0.04 130.71 29.000000 9.722222 -3386.3753
... ... ... ... ... ... ... ... ... ... ... ... ...
210 2018-11-01 21:34:37 SSW 212.0 0.0 0.0 65.0 0.00 0.00 0.00 17.777778 11.222222 -3386.3753
212 2018-11-01 21:39:57 SW 223.0 0.0 0.0 64.0 0.00 0.00 0.00 17.888889 11.000000 -3386.3753
214 2018-11-01 21:44:45 South 190.0 0.0 0.0 63.0 0.00 0.00 0.00 17.888889 10.777778 -3386.3753
216 2018-11-01 21:49:49 South 190.0 0.0 0.0 64.0 0.00 0.00 0.00 18.000000 11.111111 -3386.3753
218 2018-11-01 21:54:53 SSW 204.0 0.0 0.0 67.0 0.00 0.00 0.00 18.000000 11.777778 -3386.3753
220 2018-11-01 21:59:41 West 274.0 0.0 0.0 66.0 0.00 0.00 0.00 17.888889 11.500000 -3386.3753
222 2018-11-01 22:04:45 SSW 202.0 0.0 0.0 61.0 0.00 0.00 0.00 17.888889 10.277778 -3386.3753
224 2018-11-01 22:09:49 SW 221.0 0.0 0.0 64.0 0.00 0.00 0.00 18.000000 11.111111 -3386.3753
226 2018-11-01 22:14:05 SSW 202.0 0.0 0.0 62.0 0.00 0.00 0.00 18.000000 10.611111 -3386.3753
228 2018-11-01 22:19:57 SSW 192.0 0.0 0.0 59.0 0.00 0.00 0.00 18.111111 10.000000 -3386.3753
230 2018-11-01 22:24:45 SSW 193.0 0.0 0.0 65.0 0.00 0.00 0.00 18.222222 11.500000 -3386.3753
232 2018-11-01 22:29:49 SSW 192.0 0.0 0.0 66.0 0.00 0.00 0.00 18.388889 12.000000 -3386.3753
234 2018-11-01 22:34:37 SSW 200.0 0.0 0.0 67.0 0.00 0.00 0.00 18.388889 12.222222 -3386.3753
236 2018-11-01 22:39:41 SSW 207.0 0.0 0.0 68.0 0.00 0.00 0.00 18.277778 12.277778 -3386.3753
238 2018-11-01 22:44:45 South 189.0 0.0 0.0 68.0 0.00 0.00 0.00 18.222222 12.222222 -3386.3753
240 2018-11-01 22:49:49 SSW 210.0 0.0 0.0 68.0 0.00 0.00 0.00 18.111111 12.111111 -3386.3753
242 2018-11-01 22:54:53 SW 221.0 0.0 0.0 64.0 0.00 0.00 0.00 18.000000 11.111111 -3386.3753
244 2018-11-01 22:59:57 SSW 200.0 0.0 0.0 63.0 0.00 0.00 0.00 17.888889 10.777778 -3386.3753
246 2018-11-01 23:04:45 SW 214.0 0.0 0.0 63.0 0.00 0.00 0.00 17.888889 10.777778 -3386.3753
248 2018-11-01 23:09:49 SW 219.0 0.0 0.0 63.0 0.00 0.00 0.00 17.777778 10.722222 -3386.3753
250 2018-11-01 23:14:37 SSW 209.0 0.0 0.0 63.0 0.00 0.00 0.00 17.777778 10.722222 -3386.3753
252 2018-11-01 23:19:57 SSW 205.0 0.0 0.0 64.0 0.00 0.00 0.00 17.722222 10.777778 -3386.3753
254 2018-11-01 23:24:45 SSW 208.0 0.0 0.0 64.0 0.00 0.00 0.00 17.611111 10.722222 -3386.3753
256 2018-11-01 23:29:49 SSW 207.0 0.0 0.0 65.0 0.00 0.00 0.00 17.388889 10.777778 -3386.3753
258 2018-11-01 23:34:21 SSW 206.0 0.0 0.0 65.0 0.00 0.00 0.00 17.277778 10.722222 -3386.3753
260 2018-11-01 23:39:57 SSW 206.0 0.0 0.0 66.0 0.00 0.00 0.00 17.111111 10.722222 -3386.3753
262 2018-11-01 23:44:29 SW 229.0 0.0 0.0 66.0 0.00 0.00 0.00 17.000000 10.611111 -3386.3753
264 2018-11-01 23:49:17 SSW 213.0 0.0 0.0 64.0 0.00 0.00 0.00 17.000000 10.222222 -3386.3753
266 2018-11-01 23:54:53 SSW 200.0 0.0 0.0 62.0 0.00 0.00 0.00 17.000000 9.722222 -3386.3753
268 2018-11-01 23:59:57 SSW 208.0 0.0 0.0 62.0 0.00 0.00 0.00 17.111111 9.777778 -3386.3753

135 rows × 12 columns


In [55]:
p = figure(plot_width=960, plot_height=480, title='Etcheverry Rooftop Temperature', x_axis_type='datetime')

p.line(ws_data['Time'], ws_data['Temperature'], line_width=2)
p.add_tools(HoverTool(tooltips=[('Time', '$x'), ('Temp', '$y')]))

p.xaxis.axis_label = 'Time'
p.yaxis.axis_label = 'Temperature'

show(p)



In [ ]: