def get_district_choropleth(start_datetime, end_datetime, output='json'): data = d.get_traffic_accident_by_date(start_datetime, end_datetime)['districtId'] district_names = d.get_district() data = data.value_counts() data.index = data.index.map(lambda p: district_names.loc[p]['name']) zeroes = pd.Series(data=0, index=district_names.name) data = data + zeroes data = data.fillna(0) data = data.sort_values() df = pd.DataFrame(dict(district=data.index, count=data.values)) geojson_file = os.path.join(os.path.dirname(__file__), 'districts_epsg_4326.geojson.txt') with open(geojson_file, encoding='utf-8') as file: geo_districts = json.loads(file.read()) fig = px.choropleth(data_frame=df, geojson=geo_districts, featureidkey='properties.NM3', locations='district', color='count', color_continuous_scale='tealrose', range_color=(0, df['count'].mean()*2), projection='sinusoidal', labels={'count':'Počet nehôd'}, hover_data={'district':False}, hover_name=df['district']) fig.update_geos(fitbounds="locations", visible=False) fig.update_layout( margin={"r":0,"t":0,"l":0,"b":0}, paper_bgcolor='rgba(0,0,0,0)', plot_bgcolor='rgba(0,0,0,0)', geo=dict(bgcolor= 'rgba(0,0,0,0)'), coloraxis_showscale=False, ) return plots.encode_plot(fig, output)
def get_plot_total_accidents_by_district(start_datetime, end_datetime, output='json'): acc = d.get_traffic_accident_by_date(start_datetime, end_datetime)['districtId'] acc = acc.value_counts() data = d.get_district() data['count'] = 0 data['count'] += acc data['count'] = data['count'].fillna(0) data.sort_values(by='count', inplace=True) fig = px.bar( data, x='name', y='count', custom_data=[data.index], labels={ 'count': 'Počet nehôd', 'name': 'Okres' }, ) fig.update_layout( xaxis=dict( title_text='Okres', titlefont=dict(size=20), ), height=600, yaxis=dict( title_text='Celkový počet nehôd', gridcolor='rgb(140,140,140)', titlefont=dict(size=20), ), dragmode=False, margin={ "r": 0, "t": 0, "l": 0, "b": 0 }, paper_bgcolor='rgba(0,0,0,0)', plot_bgcolor='rgba(0,0,0,0)', font=dict(size=14, ), ) return encode_plot(fig, output)
def get_plot_accident_trend_in_district(district_id, start_datetime=None, end_datetime=None): data = d.get_traffic_accident_by_date(get_start_datetime(start_datetime), get_end_datetime(end_datetime)) data = data.loc[data.districtId == district_id]['overallStartTime'] data = data.map(lambda p: p.date()) data = data.value_counts().sort_index() sns.set_style("whitegrid") fig = plt.figure(figsize=(25, 15)) plt.title("Vývoj nehôd v čase pre okres " + d.get_district().loc[district_id]['name'], fontsize=30, pad=20) plt.subplots_adjust(left=0.07, right=0.99) g = sns.lineplot(x=data.index, y=data.values) #g.set_xlabel("Deň",fontsize=30, labelpad=15) g.set_ylabel("Počet nehôd", fontsize=30, labelpad=20) #g.set_xticklabels(get_date_xtickslabels(data.index), rotation=90, fontsize=20) g.tick_params(axis='x', labelsize=25, rotation=45) g.tick_params(axis='y', labelsize=25) return encode_plot(fig)
def get_plot_accidents_by_district(start_datetime=None, end_datetime=None): data = d.get_traffic_accident_by_date( get_start_datetime(start_datetime), get_end_datetime(end_datetime))['districtId'] data = data.value_counts() zeroes = pd.Series(index=d.get_district().index) zeroes.values[:] = 0 zeroes += data data = zeroes.fillna(0).sort_values() sns.set_style("whitegrid") fig = plt.figure(figsize=(25, 15)) fig.tight_layout() plt.title("Absolútny počet nehôd podľa okresu", fontsize=30, pad=20) plt.subplots_adjust(top=0.93, bottom=0.2, left=0.07, right=0.99) g = sns.barplot(x=get_district_xticklabels(data.index), y=data.values, palette=get_min_max_colors(data.values)) g.set_ylabel("Absolútny počet nehôd", fontsize=30, labelpad=20) g.set_xticklabels(get_district_xticklabels(data.index), rotation=90, fontsize=13) g.tick_params(axis='y', labelsize=25) return encode_plot(fig)
def get_districts_in_groups(county_id, num_in_one_group): df = d.get_district() df = df.loc[df.index >= county_id * 100] df = df.loc[df.index < (county_id + 1) * 100] return form_groups(df, 4)
def get_district_name(district_id): names = d.get_district() return names.loc[district_id]['name']
def get_district_xticklabels(index): retval = [] districts = d.get_district() for i in index: retval.append(districts.loc[i]['name']) return retval