Commit 3a08ed5f authored by Myriam Begel's avatar Myriam Begel

Début étude sur le train

parent 249180ee
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import pandas as pd
import plotly.graph_objs as go
from utils import red, blue, green, grey, orange, brown, purple
from figures import figure_barh, figure_rep_contributeurs, figure_date
from commons import INTERIM_PATH, FIG_PATH, extrema, analyse, back
from textwrap import dedent
from app import app
shortname = 'train'
DATA_PATH = INTERIM_PATH + 'LA_TRANSITION_ECOLOGIQUE.csv'
#pers_dep = pd.read_csv(INTERIM_PATH + shortname + '_personnes_par_departement.csv', index_col=0)
#part_q = pd.read_csv(INTERIM_PATH + shortname + '_participation_question.csv', index_col=0).T
#extrema = extrema.loc[shortname]
# Data
data = pd.read_csv(DATA_PATH, low_memory=False, nrows=1)
cols_d = {c[:4]: c[7:] for c in list(data.columns)[11:]}
analyse = 'Analyse des expressions les plus utilisées parmi les contributions évoquant le train'
contrib = 'Nombre de contributions sur la thématique ferroviaire : **__%d__**, représentant **__%d__**%% des réponses à cette question.'
with open('../figures/transition_Q161_train_contributeurs.html', 'r') as f:
map_Q161 = f.read()
with open('../figures/transition_Q149_train_contributeurs.html', 'r') as f:
map_Q149 = f.read()
with open('../figures/train_Q154_arr_pas.html', 'r') as f:
map_Q154_arr_pas = f.read()
with open('../figures/train_Q154_arr_oui.html', 'r') as f:
map_Q154_arr_oui = f.read()
with open('../figures/train_Q154_arr_non.html', 'r') as f:
map_Q154_arr_non = f.read()
layout = html.Div([
back,
html.H3(children='Étude spécifique sur le transport ferroviaire'),
html.P('''
Cette analyse reprend le questionnaire sur la transition écologique et essaie de l'analyser en se concentrant sur la thématique ferroviaire.
'''),
html.H4(cols_d['Q160']),
html.H4(cols_d['Q161']),
dcc.Markdown(contrib % (7973, 6)),
html.H5('Répartition géographique des réponses évoquant la thématique ferroviaire'),
html.Iframe(
srcDoc=map_Q161,
height='500px',
width='100%'
),
html.H5(analyse),
dcc.Markdown('''
Les contributeurs évoquant le train parlent des **petites lignes**, du **fret ferroviaire** avec notamment l'expression **mettre les camions sur des trains**. La demande de transports en communs **moins chers** voire **gratuits** revient souvent.
'''),
html.H4(cols_d['Q148']),
html.H4(cols_d['Q149']),
dcc.Markdown(contrib % (5061, 4)),
html.H5('Répartition géographique des réponses évoquant la thématique ferroviaire'),
html.Iframe(
srcDoc=map_Q149,
height='500px',
width='100%'
),
html.H5(analyse),
dcc.Markdown('''
Quand ils évoquent le train, les contributeurs disent qu'ils prennent ou devraient prendre **le train plutôt que la voiture et l'avion** quand c'est possible.
'''),
html.H4(cols_d['Q154']),
html.Iframe(
srcDoc=map_Q154_arr_oui,
height='520px',
width='100%'
),
html.Iframe(
srcDoc=map_Q154_arr_non,
height='520px',
width='100%'
),
html.Iframe(
srcDoc=map_Q154_arr_pas,
height='520px',
width='100%'
),
html.H4(cols_d['Q154']),
dcc.Markdown(contrib % (8561, 12)),
html.H5(analyse),
dcc.Markdown('''
Le **train** est cité plus de 6500 fois, les **transports en communs** plus de 3000 fois. Le coût est une notion importante puisque **cher** revient 1000 fois, tout comme **prix**, la **gratuité** revient elle près de 800 fois.
Les **petites lignes** sont mentionnées 400 fois, les **zones rurales** sont aussi un sujet d'intérêt avec notamment la mention des **petites gares**.
Les **horaires** sont aussi un problème pour certains. On retrouve la mention de **fréquence** mais aussi d'**horaires de travail** difficiles pour se passer de la voiture.
'''),
])
......@@ -8,7 +8,7 @@ from dotenv import load_dotenv
load_dotenv()
from app import app, server
from apps import democratie, transition, fiscalite, organisation, events
from apps import democratie, transition, fiscalite, organisation, events, train
from figures import figure_questionnaire_par_contrib
intro_md = '''
......@@ -38,6 +38,7 @@ layout_home = [
html.P(dcc.Link("La transition écologique", href='la-transition-ecologique')),
html.P(dcc.Link("Organisation de l'État et des services publiques", href='organisation-de-letat-et-des-services-publiques')),
html.P(dcc.Link("Débats publiques", href='debats')),
html.P(dcc.Link("Étude spécifique sur le transport ferroviaire", href='train')),
html.H4('Participation des contributeurs'),
dcc.Graph(
id='questionnaire_par_contrib',
......@@ -83,6 +84,8 @@ def display_page(pathname):
return organisation.layout
elif pathname == 'debats':
return events.layout
elif pathname == 'train':
return train.layout
else:
return '404'
......
This diff is collapsed.
......@@ -36,8 +36,7 @@ cols = [
'Q142 - En matière d\'immigration, une fois nos obligations d\'asile remplies, souhaitez-vous que nous puissions nous fixer des objectifs annuels définis par le Parlement ?',
'Q143 - Que proposez-vous afin de répondre à ce défi qui va durer ?',
'Q144 - Quelles sont, selon vous, les modalités d\'intégration les plus efficaces et les plus justes à mettre en place aujourd\'hui dans la société ?',
'Q145 - Y a-t-il d\'autres points sur la démocratie et la citoyenneté sur lesquels vous souhaiteriez vous exprimer ?',
'code'],
'Q145 - Y a-t-il d\'autres points sur la démocratie et la citoyenneté sur lesquels vous souhaiteriez vous exprimer ?'],
['id', 'reference', 'title', 'createdAt', 'publishedAt', 'updatedAt',
'trashed', 'trashedStatus', 'authorId', 'authorType', 'authorZipCode',
'Q160 - Quel est aujourd\'hui pour vous le problème concret le plus important dans le domaine de l\'environnement ?',
......@@ -55,8 +54,7 @@ cols = [
'Q207 - Si non, quelles sont les solutions de mobilité alternatives que vous souhaiteriez pouvoir utiliser ?',
'Q157 - Et qui doit selon vous se charger de vous proposer ce type de solutions alternatives ?',
'Q158 - Que pourrait faire la France pour faire partager ses choix en matière d\'environnement au niveau européen et international ?',
'Q159 - Y a-t-il d\'autres points sur la transition écologique sur lesquels vous souhaiteriez vous exprimer ?',
'code'],
'Q159 - Y a-t-il d\'autres points sur la transition écologique sur lesquels vous souhaiteriez vous exprimer ?'],
['id', 'reference', 'title', 'createdAt', 'publishedAt', 'updatedAt',
'trashed', 'trashedStatus', 'authorId', 'authorType', 'authorZipCode',
'Q162 - Quelles sont toutes les choses qui pourraient être faites pour améliorer l\'information des citoyens sur l\'utilisation des impôts ?',
......@@ -66,8 +64,7 @@ cols = [
'Q205 - S\'il faut selon vous revoir les conditions d\'attribution de certaines aides sociales, lesquelles doivent être concernées ?',
'Q165 - Quels sont les domaines prioritaires où notre protection sociale doit être renforcée ?',
'Q166 - Pour quelle(s) politique(s) publique(s) ou pour quels domaines d\'action publique, seriez-vous prêts à payer plus d\'impôts ?',
'Q167 - Y a-t-il d\'autres points sur les impôts et les dépenses sur lesquels vous souhaiteriez vous exprimer ?',
'code'],
'Q167 - Y a-t-il d\'autres points sur les impôts et les dépenses sur lesquels vous souhaiteriez vous exprimer ?'],
['id', 'reference', 'title', 'createdAt', 'publishedAt', 'updatedAt',
'trashed', 'trashedStatus', 'authorId', 'authorType', 'authorZipCode',
'Q169 - Que pensez-vous de l\'organisation de l\'Etat et des administrations en France ? De quelle manière cette organisation devrait-elle évoluer ?',
......@@ -103,7 +100,7 @@ cols = [
'Q202 - Si vous avez été amené à mettre fin à votre activité, pouvez-vous indiquer les éléments de satisfaction et/ou les difficultés rencontrés en précisant, pour chaque point, l\'administration concernée :',
'Q203 - Si vous avez été amené à recruter une personne portant un handicap, pouvez-vous indiquer les éléments de satisfaction et/ou les difficultés rencontrés en précisant, pour chaque point, l\'administration concernée :',
'Q189 - Y a-t-il d\'autres points sur l\'organisation de l\'Etat et des services publics sur lesquels vous souhaiteriez vous exprimer ?',
'code']
]
]
qcols = [['id',
'createdAt',
......
......@@ -74,7 +74,7 @@ def ajout_departements(filename, columns):
zipcodes = zipcodes[0].values
data = pd.read_csv('../data/raw/%s.csv' % filename, low_memory=False)
if type(data['authorZipCode'].iloc[0]) != int:
data['authorZipCode'] = data['authorZipCode'].fillna('0').apply(eval)
data['authorZipCode'] = data['authorZipCode'].fillna(0)#.apply(eval)
data.columns = columns
data['code'] = data['authorZipCode'].apply(lambda x: code_departement(x, zipcodes))
#if shortname == 'fiscalite':
......
import pandas as pd
from commons import files, shortnames, qfiles, qshortnames
from name_columns import cols, qcols
def code_insee(row):
com = ('000%d' % row['COM'])[-3:]
return row['DEP'] + com
def arrondissement(row):
if pd.isnull(row['AR']):
return row['DEP'] + '00ZZ'
return row['DEP'] + '00' + str(int(row['AR']))
def canton(row):
if pd.isnull(row['CT']):
return row['DEP'] + 'ZZZZ'
canton = ('000%d' % row['CT'])[-3:]
return row['DEP'] + canton
def outre_mer(row):
code = row['authorZipCode']
if pd.isnull(row['DEP']):
if code == 97133: # St Barthélemy
return '977'
if code == 97150: # St Martin
return '978'
if code > 97000: # Outre-mer
return str(code)[:3]
return None
return row['DEP']
def main():
arr = pd.read_csv('../data/raw/France2018.tsv', sep='\t',
usecols=['DEP', 'COM', 'AR', 'CT'], low_memory=False)
arr['INSEE'] = arr.apply(code_insee, axis=1)
arr['arrondissement'] = arr.apply(arrondissement, axis=1)
arr['canton'] = arr.apply(canton, axis=1)
cp = pd.read_csv('../data/raw/laposte_hexasmal.csv', sep=';',
usecols=[0,2], dtype={'Code_commune_INSEE': str})
cp.columns = ['INSEE', 'authorZipCode']
cor = arr.merge(cp, on='INSEE', how='inner')
cor['code'] = cor.apply(outre_mer, axis=1)
tmp = (cor.groupby(['authorZipCode', 'code'])
.size().to_frame('count').reset_index())
cor = (cor.merge(tmp, on=['authorZipCode', 'code'])
.sort_values('count', ascending=False)
.drop_duplicates(subset='authorZipCode')
[['authorZipCode', 'code', 'arrondissement', 'canton']])
cor.to_csv('../data/interim/association_code_postal.csv', index=False)
def update():
afiles = files + qfiles
ashortnames = shortnames + qshortnames
acols = cols + qcols
assoc = pd.read_csv('../data/interim/association_code_postal.csv')
for f, shortname, columns in zip(afiles, ashortnames, acols):
print(f)
data = pd.read_csv('../data/raw/%s.csv' % f, low_memory=False)
data['authorZipCode'].fillna(0, inplace=True)
data.columns = columns
data = data.merge(assoc, on='authorZipCode', how='left')
data['code'].fillna('Mauvais code postal', inplace=True)
data.to_csv('../data/interim/%s.csv' %f, index=False)
if __name__ == '__main__':
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment