Spaces:
Sleeping
Sleeping
| from __future__ import division, print_function | |
| from six import StringIO | |
| from svgpath2mpl import parse_path | |
| from collections import defaultdict | |
| 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): | |
| 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.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() | |
| filtered_date = counts_df1.iloc[-1]['date'] | |
| filtered_time = counts_df.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.5, 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 | |