In [1]:
import sys
import pandas as pd
import numpy as np
import difflib
import gzip
from scipy import stats
import glob
import os
import matplotlib.image as mpimg
import matplotlib.pyplot as plt

In [2]:
#https://stackoverflow.com/questions/20906474/import-multiple-csv-files-into-pandas-and-concatenate-into-one-dataframe
CSV_PATH= "../data/yvr-weather"
PHOTO_PATH = "/mnt/e/data/katkam-secret-location/katkam-scaled"

PHOTO_PATH = r"\\devmachine\e$\data\katkam-secret-location\katkam-scaled"
def load_csvs(path):
    allFiles = glob.glob(path + "/*.csv")
    frame = pd.DataFrame()
    list_ = []
    for file_ in allFiles:
        df = pd.read_csv(file_,skiprows=16,parse_dates=[0])
        list_.append(df)
    frame = pd.concat(list_)
    return frame
data = load_csvs(CSV_PATH)

data = data[data["Data Quality"].notnull()]
# data["Time"]=data["Date/Time"]
columns= ["Date/Time","Weather"]
# data = data[columns]
data


Out[2]:
Date/Time Year Month Day Time Data Quality Temp (°C) Temp Flag Dew Point Temp (°C) Dew Point Temp Flag ... Wind Spd Flag Visibility (km) Visibility Flag Stn Press (kPa) Stn Press Flag Hmdx Hmdx Flag Wind Chill Wind Chill Flag Weather
0 2016-06-01 00:00:00 2016 6 1 00:00 14.9 NaN 13.8 NaN ... NaN 32.2 NaN 101.28 NaN NaN NaN NaN NaN NaN
1 2016-06-01 01:00:00 2016 6 1 01:00 15.1 NaN 13.8 NaN ... NaN 32.2 NaN 101.26 NaN NaN NaN NaN NaN Cloudy
2 2016-06-01 02:00:00 2016 6 1 02:00 15.1 NaN 12.8 NaN ... NaN 32.2 NaN 101.25 NaN NaN NaN NaN NaN NaN
3 2016-06-01 03:00:00 2016 6 1 03:00 14.8 NaN 11.0 NaN ... NaN 32.2 NaN 101.27 NaN NaN NaN NaN NaN NaN
4 2016-06-01 04:00:00 2016 6 1 04:00 14.0 NaN 10.6 NaN ... NaN 32.2 NaN 101.23 NaN NaN NaN NaN NaN Mostly Cloudy
5 2016-06-01 05:00:00 2016 6 1 05:00 13.8 NaN 10.4 NaN ... NaN 32.2 NaN 101.24 NaN NaN NaN NaN NaN NaN
6 2016-06-01 06:00:00 2016 6 1 06:00 14.6 NaN 9.7 NaN ... NaN 48.3 NaN 101.25 NaN NaN NaN NaN NaN NaN
7 2016-06-01 07:00:00 2016 6 1 07:00 16.1 NaN 10.5 NaN ... NaN 48.3 NaN 101.30 NaN NaN NaN NaN NaN Mostly Cloudy
8 2016-06-01 08:00:00 2016 6 1 08:00 16.4 NaN 10.8 NaN ... NaN 48.3 NaN 101.31 NaN NaN NaN NaN NaN NaN
9 2016-06-01 09:00:00 2016 6 1 09:00 17.8 NaN 11.2 NaN ... NaN 48.3 NaN 101.29 NaN NaN NaN NaN NaN NaN
10 2016-06-01 10:00:00 2016 6 1 10:00 18.0 NaN 11.4 NaN ... NaN 48.3 NaN 101.29 NaN NaN NaN NaN NaN Cloudy
11 2016-06-01 11:00:00 2016 6 1 11:00 19.5 NaN 11.9 NaN ... NaN 48.3 NaN 101.26 NaN NaN NaN NaN NaN NaN
12 2016-06-01 12:00:00 2016 6 1 12:00 20.8 NaN 9.8 NaN ... NaN 48.3 NaN 101.21 NaN NaN NaN NaN NaN NaN
13 2016-06-01 13:00:00 2016 6 1 13:00 20.8 NaN 8.6 NaN ... NaN 48.3 NaN 101.19 NaN NaN NaN NaN NaN Cloudy
14 2016-06-01 14:00:00 2016 6 1 14:00 18.6 NaN 12.2 NaN ... NaN 24.1 NaN 101.20 NaN NaN NaN NaN NaN Rain
15 2016-06-01 15:00:00 2016 6 1 15:00 16.5 NaN 12.7 NaN ... NaN 19.3 NaN 101.23 NaN NaN NaN NaN NaN Rain
16 2016-06-01 16:00:00 2016 6 1 16:00 16.5 NaN 12.9 NaN ... NaN 24.1 NaN 101.21 NaN NaN NaN NaN NaN Rain
17 2016-06-01 17:00:00 2016 6 1 17:00 16.5 NaN 12.7 NaN ... NaN 24.1 NaN 101.18 NaN NaN NaN NaN NaN NaN
18 2016-06-01 18:00:00 2016 6 1 18:00 15.6 NaN 14.0 NaN ... NaN 12.9 NaN 101.17 NaN NaN NaN NaN NaN NaN
19 2016-06-01 19:00:00 2016 6 1 19:00 15.2 NaN 13.8 NaN ... NaN 24.1 NaN 101.11 NaN NaN NaN NaN NaN Cloudy
20 2016-06-01 20:00:00 2016 6 1 20:00 14.8 NaN 13.7 NaN ... NaN 16.1 NaN 101.11 NaN NaN NaN NaN NaN Rain
21 2016-06-01 21:00:00 2016 6 1 21:00 14.3 NaN 13.4 NaN ... NaN 16.1 NaN 101.11 NaN NaN NaN NaN NaN Rain
22 2016-06-01 22:00:00 2016 6 1 22:00 14.1 NaN 13.3 NaN ... NaN 16.1 NaN 101.08 NaN NaN NaN NaN NaN Rain
23 2016-06-01 23:00:00 2016 6 1 23:00 14.2 NaN 13.6 NaN ... NaN 12.9 NaN 101.07 NaN NaN NaN NaN NaN Rain
24 2016-06-02 00:00:00 2016 6 2 00:00 14.2 NaN 13.6 NaN ... NaN 24.1 NaN 101.05 NaN NaN NaN NaN NaN NaN
25 2016-06-02 01:00:00 2016 6 2 01:00 14.4 NaN 13.5 NaN ... NaN 24.1 NaN 101.07 NaN NaN NaN NaN NaN Rain
26 2016-06-02 02:00:00 2016 6 2 02:00 14.4 NaN 13.0 NaN ... NaN 24.1 NaN 101.13 NaN NaN NaN NaN NaN NaN
27 2016-06-02 03:00:00 2016 6 2 03:00 14.4 NaN 11.8 NaN ... NaN 19.3 NaN 101.17 NaN NaN NaN NaN NaN Rain
28 2016-06-02 04:00:00 2016 6 2 04:00 13.9 NaN 12.3 NaN ... NaN 24.1 NaN 101.21 NaN NaN NaN NaN NaN Cloudy
29 2016-06-02 05:00:00 2016 6 2 05:00 13.9 NaN 12.1 NaN ... NaN 24.1 NaN 101.26 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
450 2017-06-19 18:00:00 2017 6 19 18:00 16.9 NaN 14.5 NaN ... NaN 48.3 NaN 101.49 NaN NaN NaN NaN NaN NaN
451 2017-06-19 19:00:00 2017 6 19 19:00 16.0 NaN 14.4 NaN ... NaN 48.3 NaN 101.53 NaN NaN NaN NaN NaN Mostly Cloudy
452 2017-06-19 20:00:00 2017 6 19 20:00 15.7 NaN 14.4 NaN ... NaN 48.3 NaN 101.48 NaN NaN NaN NaN NaN NaN
453 2017-06-19 21:00:00 2017 6 19 21:00 14.6 NaN 13.7 NaN ... NaN 32.2 NaN 101.50 NaN NaN NaN NaN NaN NaN
454 2017-06-19 22:00:00 2017 6 19 22:00 14.5 NaN 13.7 NaN ... NaN 32.2 NaN 101.54 NaN NaN NaN NaN NaN Mainly Clear
455 2017-06-19 23:00:00 2017 6 19 23:00 14.0 NaN 13.2 NaN ... NaN 32.2 NaN 101.56 NaN NaN NaN NaN NaN NaN
456 2017-06-20 00:00:00 2017 6 20 00:00 14.4 NaN 13.3 NaN ... NaN 32.2 NaN 101.51 NaN NaN NaN NaN NaN NaN
457 2017-06-20 01:00:00 2017 6 20 01:00 14.5 NaN 13.5 NaN ... NaN 32.2 NaN 101.56 NaN NaN NaN NaN NaN Mostly Cloudy
458 2017-06-20 02:00:00 2017 6 20 02:00 14.7 NaN 13.6 NaN ... NaN 32.2 NaN 101.60 NaN NaN NaN NaN NaN NaN
459 2017-06-20 03:00:00 2017 6 20 03:00 15.1 NaN 13.8 NaN ... NaN 24.1 NaN 101.58 NaN NaN NaN NaN NaN NaN
460 2017-06-20 04:00:00 2017 6 20 04:00 15.5 NaN 14.2 NaN ... NaN 24.1 NaN 101.55 NaN NaN NaN NaN NaN Mostly Cloudy
461 2017-06-20 05:00:00 2017 6 20 05:00 15.3 NaN 14.0 NaN ... NaN 32.2 NaN 101.58 NaN NaN NaN NaN NaN NaN
462 2017-06-20 06:00:00 2017 6 20 06:00 16.1 NaN 13.9 NaN ... NaN 48.3 NaN 101.67 NaN NaN NaN NaN NaN NaN
463 2017-06-20 07:00:00 2017 6 20 07:00 16.3 NaN 14.3 NaN ... NaN 48.3 NaN 101.69 NaN NaN NaN NaN NaN Cloudy
464 2017-06-20 08:00:00 2017 6 20 08:00 16.8 NaN 14.4 NaN ... NaN 32.2 NaN 101.69 NaN NaN NaN NaN NaN NaN
465 2017-06-20 09:00:00 2017 6 20 09:00 16.7 NaN 14.0 NaN ... NaN 24.1 NaN 101.73 NaN NaN NaN NaN NaN NaN
466 2017-06-20 10:00:00 2017 6 20 10:00 18.3 NaN 14.6 NaN ... NaN 24.1 NaN 101.75 NaN NaN NaN NaN NaN Cloudy
467 2017-06-20 11:00:00 2017 6 20 11:00 18.0 NaN 15.3 NaN ... NaN 32.2 NaN 101.80 NaN NaN NaN NaN NaN NaN
468 2017-06-20 12:00:00 2017 6 20 12:00 17.5 NaN 14.6 NaN ... NaN 32.2 NaN 101.87 NaN NaN NaN NaN NaN NaN
469 2017-06-20 13:00:00 2017 6 20 13:00 18.1 NaN 14.9 NaN ... NaN 48.3 NaN 101.90 NaN NaN NaN NaN NaN Mostly Cloudy
470 2017-06-20 14:00:00 2017 6 20 14:00 18.6 NaN 14.1 NaN ... NaN 48.3 NaN 101.93 NaN NaN NaN NaN NaN NaN
471 2017-06-20 15:00:00 2017 6 20 15:00 19.6 NaN 14.0 NaN ... NaN 48.3 NaN 101.92 NaN NaN NaN NaN NaN NaN
472 2017-06-20 16:00:00 2017 6 20 16:00 19.0 NaN 13.6 NaN ... NaN 48.3 NaN 101.93 NaN NaN NaN NaN NaN Mainly Clear
473 2017-06-20 17:00:00 2017 6 20 17:00 19.1 NaN 13.5 NaN ... NaN 48.3 NaN 101.94 NaN NaN NaN NaN NaN NaN
474 2017-06-20 18:00:00 2017 6 20 18:00 17.9 NaN 11.5 NaN ... NaN 48.3 NaN 101.92 NaN NaN NaN NaN NaN NaN
475 2017-06-20 19:00:00 2017 6 20 19:00 17.1 NaN 11.6 NaN ... NaN 48.3 NaN 101.94 NaN NaN NaN NaN NaN Mainly Clear
476 2017-06-20 20:00:00 2017 6 20 20:00 16.2 NaN 11.5 NaN ... NaN 48.3 NaN 101.96 NaN NaN NaN NaN NaN NaN
477 2017-06-20 21:00:00 2017 6 20 21:00 15.8 NaN 12.0 NaN ... NaN 48.3 NaN 102.04 NaN NaN NaN NaN NaN NaN
478 2017-06-20 22:00:00 2017 6 20 22:00 15.6 NaN 11.7 NaN ... NaN 48.3 NaN 102.07 NaN NaN NaN NaN NaN Mainly Clear
479 2017-06-20 23:00:00 2017 6 20 23:00 15.4 NaN 10.7 NaN ... NaN 32.2 NaN 102.12 NaN NaN NaN NaN NaN NaN

9237 rows × 25 columns


In [3]:
def enum_photos(path):
    data = pd.DataFrame()
    data["Filename"] = os.listdir(path)
    data["Time"] = data["Filename"].apply(lambda x: x[x.find("-")+1:x.find(".")])
    data["Time"] = pd.to_datetime(data["Time"])
    return data
photo_data = enum_photos(PHOTO_PATH)

#pd.to_datetime(photo_data["Time"])
photo_data


Out[3]:
Filename Time
0 katkam-20160605060000.jpg 2016-06-05 06:00:00
1 katkam-20160605070000.jpg 2016-06-05 07:00:00
2 katkam-20160605080000.jpg 2016-06-05 08:00:00
3 katkam-20160605090000.jpg 2016-06-05 09:00:00
4 katkam-20160605100000.jpg 2016-06-05 10:00:00
5 katkam-20160605110000.jpg 2016-06-05 11:00:00
6 katkam-20160605120000.jpg 2016-06-05 12:00:00
7 katkam-20160605130000.jpg 2016-06-05 13:00:00
8 katkam-20160605140000.jpg 2016-06-05 14:00:00
9 katkam-20160605150000.jpg 2016-06-05 15:00:00
10 katkam-20160605160000.jpg 2016-06-05 16:00:00
11 katkam-20160605170000.jpg 2016-06-05 17:00:00
12 katkam-20160605180000.jpg 2016-06-05 18:00:00
13 katkam-20160605190000.jpg 2016-06-05 19:00:00
14 katkam-20160605200000.jpg 2016-06-05 20:00:00
15 katkam-20160605210000.jpg 2016-06-05 21:00:00
16 katkam-20160606060000.jpg 2016-06-06 06:00:00
17 katkam-20160606070000.jpg 2016-06-06 07:00:00
18 katkam-20160606080000.jpg 2016-06-06 08:00:00
19 katkam-20160606090000.jpg 2016-06-06 09:00:00
20 katkam-20160606100000.jpg 2016-06-06 10:00:00
21 katkam-20160606110000.jpg 2016-06-06 11:00:00
22 katkam-20160606120000.jpg 2016-06-06 12:00:00
23 katkam-20160606130000.jpg 2016-06-06 13:00:00
24 katkam-20160606140000.jpg 2016-06-06 14:00:00
25 katkam-20160606150000.jpg 2016-06-06 15:00:00
26 katkam-20160606160000.jpg 2016-06-06 16:00:00
27 katkam-20160606170000.jpg 2016-06-06 17:00:00
28 katkam-20160606180000.jpg 2016-06-06 18:00:00
29 katkam-20160606190000.jpg 2016-06-06 19:00:00
... ... ...
5016 katkam-20170620080000.jpg 2017-06-20 08:00:00
5017 katkam-20170620090000.jpg 2017-06-20 09:00:00
5018 katkam-20170620100000.jpg 2017-06-20 10:00:00
5019 katkam-20170620110000.jpg 2017-06-20 11:00:00
5020 katkam-20170620120000.jpg 2017-06-20 12:00:00
5021 katkam-20170620130000.jpg 2017-06-20 13:00:00
5022 katkam-20170620140000.jpg 2017-06-20 14:00:00
5023 katkam-20170620150000.jpg 2017-06-20 15:00:00
5024 katkam-20170620160000.jpg 2017-06-20 16:00:00
5025 katkam-20170620170000.jpg 2017-06-20 17:00:00
5026 katkam-20170620180000.jpg 2017-06-20 18:00:00
5027 katkam-20170620190000.jpg 2017-06-20 19:00:00
5028 katkam-20170620200000.jpg 2017-06-20 20:00:00
5029 katkam-20170620210000.jpg 2017-06-20 21:00:00
5030 katkam-20170621060000.jpg 2017-06-21 06:00:00
5031 katkam-20170621070000.jpg 2017-06-21 07:00:00
5032 katkam-20170621080000.jpg 2017-06-21 08:00:00
5033 katkam-20170621090000.jpg 2017-06-21 09:00:00
5034 katkam-20170621100000.jpg 2017-06-21 10:00:00
5035 katkam-20170621110000.jpg 2017-06-21 11:00:00
5036 katkam-20170621120000.jpg 2017-06-21 12:00:00
5037 katkam-20170621130000.jpg 2017-06-21 13:00:00
5038 katkam-20170621140000.jpg 2017-06-21 14:00:00
5039 katkam-20170621150000.jpg 2017-06-21 15:00:00
5040 katkam-20170621160000.jpg 2017-06-21 16:00:00
5041 katkam-20170621170000.jpg 2017-06-21 17:00:00
5042 katkam-20170621180000.jpg 2017-06-21 18:00:00
5043 katkam-20170621190000.jpg 2017-06-21 19:00:00
5044 katkam-20170621200000.jpg 2017-06-21 20:00:00
5045 katkam-20170621210000.jpg 2017-06-21 21:00:00

5046 rows × 2 columns


In [18]:
# pd.concat([data,photo_data], axis=1, join_axes=[data["Date/Time"]])
combined_data = pd.merge(data, photo_data, how='inner', left_on="Date/Time", right_on="Time")
combined_data = combined_data[combined_data["Weather"].notnull()]


Out[18]:
Original Mapped
0 Mainly Clear Mainly Clear
1 Mostly Cloudy Mostly Cloudy
2 Cloudy Cloudy
3 Rain Showers Rain Showers
4 Moderate Rain Showers Moderate Rain Showers
5 Clear Clear
6 Rain Rain
7 Rain,Fog Rain,Fog
8 Drizzle Drizzle
9 Rain Showers,Fog Rain Showers,Fog
10 Thunderstorms Thunderstorms
11 Fog Fog
12 Drizzle,Fog Drizzle,Fog
13 Moderate Rain Showers,Fog Moderate Rain Showers,Fog
14 Rain,Drizzle Rain,Drizzle
15 Moderate Rain Moderate Rain
16 Moderate Rain,Drizzle Moderate Rain,Drizzle
17 Heavy Rain Heavy Rain
18 Moderate Rain,Fog Moderate Rain,Fog
19 Rain,Drizzle,Fog Rain,Drizzle,Fog
20 Heavy Rain,Fog Heavy Rain,Fog
21 Snow Showers Snow Showers
22 Snow Snow
23 Snow,Fog Snow,Fog
24 Rain,Snow Rain,Snow
25 Freezing Fog Freezing Fog
26 Rain,Snow,Fog Rain,Snow,Fog
27 Moderate Snow Moderate Snow
28 Rain Showers,Snow Showers,Fog Rain Showers,Snow Showers,Fog
29 Rain Showers,Snow Pellets Rain Showers,Snow Pellets
30 Rain Showers,Snow Showers Rain Showers,Snow Showers

In [57]:
def generateEmptyMappingCSV(combined_data):
    mapping = pd.DataFrame(combined_data["Weather"].unique(),columns=["Original"])
    mapping["Mapped"] = mapping["Original"]
    mapping.to_csv("mapping-template.csv")
    return mapping
# generateEmptyMappingCSV(combined_data)
mapping = pd.read_csv("mapping.csv")
mapping_dict = mapping.set_index("Original").T.to_dict('records')[0]
mapping_dict
combined_data["Mapped"] = combined_data.apply(lambda x : mapping_dict[x["Weather"]],axis = 1)
combined_data[["Date/Time","Weather","Mapped","Filename"]].to_csv("cleaned_data.csv",index=False)

In [54]:
# combined_data[combined_data['Weather'].str.contains("Rain",case=False,na=False) |
#              combined_data['Weather'].str.contains("Cloud",case=False,na=False)]

# img=mpimg.imread(PHOTO_PATH+"/"+'katkam-20170618160000.jpg')
# plt.imshow(img)
# plt.show()