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()
Content source: MockyJoke/numbers
Similar notebooks: