Spaces:
Sleeping
Sleeping
File size: 4,775 Bytes
ddd31fd 5b9c013 ddd31fd 8855170 36949c9 8855170 ddd31fd 3260d15 ddd31fd 6d3a5cc ddd31fd 667e07a ddd31fd 38da39e ddd31fd 667e07a 8855170 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
from __future__ import division, print_function
from six import StringIO
from svgpath2mpl import parse_path
from collections import defaultdict
from src.pred_plot import hour_rounder
import xml.etree.ElementTree as etree
import re
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import requests
import pandas as pd
import datetime
import warnings
warnings.filterwarnings("ignore")
def calling_pred_map_viz(counts_df1, input_day = None, input_hour = None):
r = "svg/snazzy-image-01.svg"
tree = etree.parse(r)
root = tree.getroot()
path_elems = root.findall('.//{http://www.w3.org/2000/svg}path')
paths = [parse_path(elem.attrib['d']) for elem in path_elems]
facecolors = []
edgecolors = []
linewidths = []
for elem in path_elems:
facecolors.append(dict(item.split(":") for item in elem.attrib.get('style', 'none').split(";")).get("fill", "none"))
edgecolors.append(dict(item.split(":") for item in elem.attrib.get('style', 'none').split(";")).get("stroke", "none"))
linewidths.append(dict(item.split(":") for item in elem.attrib.get('style', 'none').split(";")).get("stroke-width", "none").replace("px", ""))
path_id = defaultdict(int)
for i, elem in enumerate(path_elems):
try:
#print(i, elem.attrib['id'])
path_id[elem.attrib['id']] = i
except:
continue
counts_df1['total'] = counts_df1['car'] + counts_df1['motorcycle'] + counts_df1['large_vehicle']
counts_df1.loc[:,'date_time'] = pd.to_datetime(counts_df1.loc[:,'date'] + " "+ counts_df1.loc[:,'time'], format='%Y-%m-%d %H:%M:%S')
counts_df1.loc[:,'hour'] = counts_df1.loc[:,'date_time'].apply(hour_rounder)
counts_df1.loc[:,'day_name'] = counts_df1.loc[:,'date_time'].dt.day_name()
if (input_day != None) & (input_hour != None):
filtered_day = input_day
filtered_hour = input_hour
else:
filtered_date = counts_df1.iloc[-1]['date']
filtered_time = counts_df1.iloc[-1]['time']
filtered_day = counts_df1.iloc[-1]['day_name']
filtered_hour = counts_df1.iloc[-1]['hour']
# filtered_date = counts_df1.iloc[-1]['date']
# filtered_time = counts_df1.iloc[-1]['time']
# filtered_day = counts_df1.iloc[-1]['day_name']
# filtered_hour = counts_df1.iloc[-1]['hour']
day_hour_view_group = counts_df1.groupby(by=['view', 'day_name', 'hour'])['total'].mean().reset_index()
count_max = day_hour_view_group['total'].max()
count_min = day_hour_view_group['total'].min()
count_dict = {"woodlands_to_sg" :day_hour_view_group.loc[(day_hour_view_group['view'] == 'Woodlands - to SG') & (day_hour_view_group['day_name'] == filtered_day) & (day_hour_view_group['hour'] == filtered_hour), "total" ].iloc[0],
"woodlands_to_jh" :day_hour_view_group.loc[(day_hour_view_group['view'] == 'Woodlands - to Johor') & (day_hour_view_group['day_name'] == filtered_day) & (day_hour_view_group['hour'] == filtered_hour), "total" ].iloc[0],
"tuas_to_sg" :day_hour_view_group.loc[(day_hour_view_group['view'] == 'Tuas - to SG') & (day_hour_view_group['day_name'] == filtered_day) & (day_hour_view_group['hour'] == filtered_hour), "total" ].iloc[0],
"tuas_to_jh" :day_hour_view_group.loc[(day_hour_view_group['view'] == 'Tuas - to Johor') & (day_hour_view_group['day_name'] == filtered_day) & (day_hour_view_group['hour'] == filtered_hour), "total" ].iloc[0]
}
values = np.array([0., 0.25, 1.])
values = np.sort(np.array(values))
values = np.interp(values, (values.min(), values.max()), (0., 1.))
colors = ["#539f6b", "#ffc835", "#bf0000"]
cmap = mpl.colors.LinearSegmentedColormap.from_list("custom", list(zip(values, colors)))
norm = mpl.colors.Normalize(vmin=count_min, vmax=count_max)
hex_dict = {k: mpl.colors.to_hex(cmap(norm(v))) for k, v in count_dict.items()}
color_dict = defaultdict(str)
for k, i in path_id.items():
#print(k, i)
color_dict[i] = hex_dict[k]
for k, i in color_dict.items():
#print(k,i)
facecolors[k] = i
collection = mpl.collections.PathCollection(paths,
edgecolors=edgecolors,
linewidths=[int(i)/100 for i in linewidths if i != 'none'],
facecolors=[i.strip() for i in facecolors])
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
collection.set_transform(ax.transData)
ax.add_artist(collection)
ax.set_xlim([100, 1900])
ax.set_ylim([1800, 0])
ax.set_title(filtered_day+ " | " + filtered_hour + " SGT", fontname = 'Georgia')
return fig
|