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)
Example #3
0
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)
Example #4
0
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']
Example #7
0
def get_district_xticklabels(index):
    retval = []
    districts = d.get_district()
    for i in index:
        retval.append(districts.loc[i]['name'])
    return retval