diff --git a/bars/bars.py b/bars/bars.py index 03bfe79b..07922bae 100644 --- a/bars/bars.py +++ b/bars/bars.py @@ -9,7 +9,8 @@ data_bars = init_data_bars() data_revenus = init_data_revenus() barNumber = init_barNumber() -departements = json.load(open('./bars/data/departements-version-simplifiee.geojson')) +departements = json.load( + open('./bars/data/departements-version-simplifiee.geojson')) data_bars_revenus = init_data_bars_revenus(data_bars, data_revenus) @@ -19,7 +20,8 @@ def __init__(self, application=None): nbBar_revenu_byCp = init_nbBar_revenu_byCp(data_bars_revenus) data_bars_revenus_unique = data_bars_revenus.iloc[:, :6].drop_duplicates().merge( - nbBar_revenu_byCp[['Postal code', 'Revenu fiscal de référence par foyer fiscal']], on=['Postal code'], + nbBar_revenu_byCp[['Postal code', 'Revenu fiscal de référence par foyer fiscal']], on=[ + 'Postal code'], how='inner') fig_dep_1 = px.choropleth_mapbox(barNumber, geojson=departements, locations='Département', featureidkey='properties.code', # join keys @@ -69,8 +71,10 @@ def __init__(self, application=None): fig_conc_revnFisc.update_layout(mapbox_style="carto-darkmatter") fig_conc_revnFisc.update_layout(margin=dict(b=0, t=0, l=0, r=0)) - code_postaux_geo = json.load(open('./bars/data/contours-codes-postaux.geojson')) - tmp = nbBar_revenu_byCp.drop('Revenu fiscal de référence par foyer fiscal', axis=1) + code_postaux_geo = json.load( + open('./bars/data/contours-codes-postaux.geojson')) + tmp = nbBar_revenu_byCp.drop( + 'Revenu fiscal de référence par foyer fiscal', axis=1) tmp['Revenu par foyer fiscal'] = nbBar_revenu_byCp['Revenu fiscal de référence par foyer fiscal'].round( decimals=1) @@ -84,7 +88,8 @@ def __init__(self, application=None): opacity=0.75, labels={'prix': 'Nombre de bars'} ) - fig_CP.update_layout(mapbox_style="carto-darkmatter", margin={"r": 0, "t": 0, "l": 0, "b": 0}) + fig_CP.update_layout(mapbox_style="carto-darkmatter", + margin={"r": 0, "t": 0, "l": 0, "b": 0}) mean_by_bar_number = init_mean_by_bar_number(nbBar_revenu_byCp) fig_blue_1 = px.histogram(data_frame=mean_by_bar_number, x='Revenu fiscal de référence par foyer fiscal', @@ -116,7 +121,8 @@ def __init__(self, application=None): """), html.Div( [ - dcc.Graph(id='fig_concentration', figure=fig_concentration1), + dcc.Graph(id='fig_concentration', + figure=fig_concentration1), dcc.RadioItems( id='radio_concentration', options=[{'label': 'Concentration des bars en France', 'value': 'graph1'}, @@ -247,7 +253,8 @@ def update_graph_blue(self, value): return fig_blue_7 else: fig_blue_6 = px.line(x=np.arange(len(nbBar_revenu_byCp)), - y=np.sort(nbBar_revenu_byCp['Revenu fiscal de référence par foyer fiscal']), + y=np.sort( + nbBar_revenu_byCp['Revenu fiscal de référence par foyer fiscal']), log_y=True, title='Revenu fiscal de référence des %d bars' % len(nbBar_revenu_byCp), labels={ "y": "Revenu fiscal de référence par foyer fiscal"}) diff --git a/bars/get_data_bars.py b/bars/get_data_bars.py index 8bb16863..750f576c 100644 --- a/bars/get_data_bars.py +++ b/bars/get_data_bars.py @@ -3,19 +3,20 @@ def init_postal_code(): - postalCodes = pd.read_csv('https://bano.openstreetmap.fr/data/full.csv.gz', compression='gzip', - usecols=['01400', '46.147624', '4.923727'], - dtype={'01400': str, '46.147624': np.float64, '4.923727': np.float64}) + postalCodes = pd.read_csv('./bars/data/cord_departement.csv', sep=",", + usecols=['01400', '46.15', '4.92'], + dtype={'01400': str, '46.15': np.float64, '4.92': np.float64}) postalCodes.columns = ['Postal code', 'Latitude', 'Longitude'] - postalCodes['Latitude'] = postalCodes['Latitude'].apply(lambda lat: round(lat, 3)) - postalCodes['Longitude'] = postalCodes['Longitude'].apply(lambda long: round(long, 3)) return postalCodes def init_data_revenus(): - data_revenus = pd.read_excel('./bars/data/revenus_communes_2019.xlsx') # header=3 - data_revenus.drop(data_revenus.columns[[0, 3, 7, 8, 9, 10, 11, 12, 13]], axis=1, inplace=True) - data_revenus.drop(data_revenus.tail(2).index, inplace=True) # drop last 2 rows + data_revenus = pd.read_excel( + './bars/data/revenus_communes_2019.xlsx') # header=3 + data_revenus.drop( + data_revenus.columns[[0, 3, 7, 8, 9, 10, 11, 12, 13]], axis=1, inplace=True) + data_revenus.drop(data_revenus.tail(2).index, + inplace=True) # drop last 2 rows data_revenus.rename(columns=lambda n: data_revenus[n][2], inplace=True) data_revenus.drop(index=[0, 1, 2], inplace=True) data_revenus = data_revenus[ @@ -26,7 +27,8 @@ def init_data_revenus(): def init_code_commune(): code_commune = pd.read_csv('./bars/data/code-commune.csv', sep=';') - code_commune.drop(['Nom_commune', 'Ligne_5', 'Libellé_d_acheminement', 'coordonnees_gps'], axis=1, inplace=True) + code_commune.drop(['Nom_commune', 'Ligne_5', 'Libellé_d_acheminement', + 'coordonnees_gps'], axis=1, inplace=True) code_commune.columns = ['Code commune', 'Postal code'] code_commune['Postal code'] = code_commune['Postal code'].astype(str) code_commune['Postal code'] = code_commune['Postal code'].apply( @@ -56,14 +58,18 @@ def init_data_bars(): data_bars.isnull().sum().sum() data_bars['Latitude'] = data_bars['Latitude'].astype(float) data_bars['Longitude'] = data_bars['Longitude'].astype(float) - data_bars['Latitude'] = data_bars['Latitude'].apply(lambda lat: round(lat, 3)) - data_bars['Longitude'] = data_bars['Longitude'].apply(lambda long: round(long, 3)) + data_bars['Latitude'] = data_bars['Latitude'].apply( + lambda lat: round(lat, 2)) + data_bars['Longitude'] = data_bars['Longitude'].apply( + lambda long: round(long, 2)) postalCodes = init_postal_code() - data_bars = pd.merge(data_bars, postalCodes, how='left', on=['Latitude', 'Longitude']).drop_duplicates() + data_bars = pd.merge(data_bars, postalCodes, how='left', on=[ + 'Latitude', 'Longitude']).drop_duplicates() data_bars["Postal code"] = data_bars["Postal code"].str.strip() data_bars.dropna(subset=['Postal code'], inplace=True) - data_bars['Département'] = data_bars['Postal code'].apply(lambda code: str(code)[0:2]) + data_bars['Département'] = data_bars['Postal code'].apply( + lambda code: str(code)[0:2]) data_bars.drop_duplicates(subset=['Geo Point'], inplace=True) return data_bars @@ -77,7 +83,8 @@ def init_barNumber(): def update_data_revenus(data_revenus): code_commune = init_code_commune() - data_revenus.insert(1, "Code commune", data_revenus['Dép.'].str.strip().apply(lambda dep: dep[:2]) + data_revenus['Commune']) + data_revenus.insert(1, "Code commune", data_revenus['Dép.'].str.strip().apply( + lambda dep: dep[:2]) + data_revenus['Commune']) data_revenus.drop(["Dép.", "Commune"], axis=1, inplace=True) data_revenus['Code commune'] = data_revenus['Code commune'].str.strip() data_revenus = pd.merge(data_revenus, code_commune, on=['Code commune'], how='left').drop( @@ -88,22 +95,31 @@ def update_data_revenus(data_revenus): def init_data_bars_revenus(data_bars, data_revenus): - data_bars_revenus = pd.merge(data_bars, update_data_revenus(data_revenus), on=['Postal code'], how='left') + data_bars_revenus = pd.merge(data_bars, update_data_revenus( + data_revenus), on=['Postal code'], how='left') data_bars_revenus.drop( data_bars_revenus[data_bars_revenus['Revenu fiscal de référence des foyers fiscaux'] == 'n.c.'].index, inplace=True) data_bars_revenus.drop_duplicates(inplace=True) - data_bars_revenus['Revenu fiscal de référence des foyers fiscaux'] = data_bars_revenus['Revenu fiscal de référence des foyers fiscaux'].astype(np.float64) - data_bars_revenus['Revenu fiscal de référence par foyer fiscal'] = data_bars_revenus['Revenu fiscal de référence des foyers fiscaux'] / data_bars_revenus['Nombre de foyers fiscaux'] + data_bars_revenus['Revenu fiscal de référence des foyers fiscaux'] = data_bars_revenus[ + 'Revenu fiscal de référence des foyers fiscaux'].astype(np.float64) + data_bars_revenus['Revenu fiscal de référence par foyer fiscal'] = data_bars_revenus[ + 'Revenu fiscal de référence des foyers fiscaux'] / \ + data_bars_revenus['Nombre de foyers fiscaux'] return data_bars_revenus + def init_nbBar_revenu_byCp(data_bars_revenus): nbBar_revenu_byCp = pd.merge( - data_bars_revenus.groupby('Postal code')['Revenu fiscal de référence par foyer fiscal'].mean().reset_index(), + data_bars_revenus.groupby('Postal code')[ + 'Revenu fiscal de référence par foyer fiscal'].mean().reset_index(), data_bars_revenus.groupby('Postal code')['Nom'].nunique().reset_index(), on=['Postal code'], how='inner') - nbBar_revenu_byCp.columns = ['Postal code', 'Revenu fiscal de référence par foyer fiscal', 'Nombre de bars'] + nbBar_revenu_byCp.columns = [ + 'Postal code', 'Revenu fiscal de référence par foyer fiscal', 'Nombre de bars'] return nbBar_revenu_byCp + def init_mean_by_bar_number(nbBar_revenu_byCp): - mean_by_bar_number = nbBar_revenu_byCp.groupby('Nombre de bars').mean().reset_index() - return mean_by_bar_number \ No newline at end of file + mean_by_bar_number = nbBar_revenu_byCp.groupby( + 'Nombre de bars').mean().reset_index() + return mean_by_bar_number