Skip to content

Commit

Permalink
Merge remote-tracking branch 'DataCampAN/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexisEidelman committed Jan 26, 2017
2 parents ed3f1a0 + edd2775 commit a44d1ee
Show file tree
Hide file tree
Showing 10 changed files with 355 additions and 1 deletion.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,5 @@ ENV/
# Rope project settings
.ropeproject


MAEDI/config_twitter_api.py

5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
<<<<<<< HEAD
# Hackathons
Dossier contenant les travaux réalisé pendant les hackathons
=======
# DataCampAN
repo du 1er hackathon à l'assemblée nationale
>>>>>>> DataCampAN/master
47 changes: 47 additions & 0 deletions extract_html_from_qg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 26 11:37:39 2016
@author: aeidelman
"""

import os
import json

path = '/home/sgmap/data/DatacampAN/'

path_qg = os.path.join(path, 'AN', 'Questions_gouvernement_XIV.json')

with open(path_qg) as qg_file:
data = json.load(qg_file)

qg = data['questionsGvt']['question']
assert isinstance(qg, list)

caracteristiques_question = ['renouvellements', 'auteur', 'type',
'indexationAN', 'textesQuestion', 'identifiant',
'signalement', 'minAttribs', 'uid',
'minInt', 'cloture', 'textesReponse']

all_texts = ''

for idx in range(len(qg)):
exemple = qg[idx]
texte = exemple['textesReponse']['texteReponse']['texte']
assert exemple['type'] in ['QG']

dest = os.path.join(path, 'AN', 'html', str(idx) + '.html')
with open(dest, 'w', encoding='utf8') as output:
output.write(texte)

all_texts += texte + 7*'\n'


extract_text = all_texts.split(7*'\n')
size = int(len(extract_text)/10)
extract_text = extract_text[:size]
extract_text = 7*'\n'.join(extract_text)

dest_all = os.path.join(path, 'AN', 'all.html')
with open(dest_all, 'w', encoding='utf8') as output:
output.write(extract_text)
5 changes: 5 additions & 0 deletions extrait.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
</p><p align="CENTER"> COMPÉTITIVITÉ DES ENTREPRISES <a name=PG3></a> </p><br><strong>M.</i>Je suis fier que, grâce à ce Président, nos armées soient accueillies comme elles le sont en Afrique.Avec quelles mesures concrètes atteindrez-vous l'objectif que vous vous êtes vous-même fixé, et qui est contesté par plusieurs membres de votre gouvernement comme par une partie de votre majorité ?C'est la raison pour laquelle, d'ailleurs, la police nationale saisit le procureur pour déplacement provisoire lorsqu'il y a des cas de maltraitance constatés.<br><br><strong>Mme Claude Greff.</strong> Mais ce sont des cas de maltraitance !<br><br><strong>M.</strong>La parole est à M. David Douillet, pour le groupe de l'Union pour un mouvement populaire.<br><br><strong>M.</i>Je veux redire ici que la police nationale dans le territoire de la capitale, comme partout en France, accomplit un travail remarquable pour que les faits que je viens d'évoquer ne s'amplifient ni ne se développent et pour que le droit soit respecté.<br><br>Enfin, pour ce qui concerne les populations de roms, nous sommes très déterminés à faire en sorte que les campements illicites ne se multiplient pas, qu'il y soit mis fin et que les populations soient intégrées.<i>(Applaudissements sur quelques bancs du groupe SRC.Bernard Cazeneuve,</strong><i> ministre .</i>…et qu'un accompagnement social soit apporté à ces familles.Philippe Goujon et M.le président.<i>(Applaudissements sur quelques bancs du groupe SRC et sur les bancs du groupe écologiste.Un choix qu'il s'agit de soutenir pour atteindre l'objectif de 500 000 apprentis avant la fin du quinquennat, alors qu'il n'y en a aujourd'hui que 440 000.Aux soixante-dix mesures nouvelles adoptées pour lutter contre la fraude et aux 2 milliards d'euros récupérés grâce au service de traitement des déclarations rectificatives s'ajoute le fait qu'un accord prévoyant la mise en place de l'échange automatique d'informations a été signé, Suisse incluse.<br><br>Mais l'actualité démontre que les efforts de la France, notamment sur le plan international, ne doivent pas s'interrompre.S'agissant des contrôles effectués par la police nationale, ils ne peuvent, conformément à la loi, ne viser à aucun moment des personnes en raison de leur appartenance nationale ou de toute autre forme d'appartenance.Ainsi, en dix ans, le nombre d'exploitations a diminué de près de 25 %.C'est la raison pour laquelle, d'ailleurs, la police nationale saisit le procureur pour déplacement provisoire lorsqu'il y a des cas de maltraitance constatés.<br><br><strong>Mme Claude Greff.</strong> Mais ce sont des cas de maltraitance !<br><br><strong>M.</strong>La parole est à M. David Douillet, pour le groupe de l'Union pour un mouvement populaire.<br><br><strong>M.</i>…et qu'un accompagnement social soit apporté à ces familles.Quant aux actions de la police nationale, elles visent à faire en sorte que la mendicité, lorsqu'elle est agressive, et que la situation des jeunes enfants, qui sont parfois dans la rue pendant de longues heures et qui peuvent se trouver exposés à de la maltraitance, soient traitées conformément aux règles et aux lois de la République.La brigade d'assistance aux personnes sans-abri – comme la mission des personnes sans domicile fixe de la ville de Paris – fait un travail partout dans les quartiers de la ville pour que la sécurité soit assurée…<br><br><strong>M.<i>(Applaudissements sur quelques bancs du groupe SRC et sur les bancs du groupe écologiste.Il faut donc encore délibérer pour payer l'association concernée.François Rochebloine.</b> Eh oui !<br/><b>Mme Michèle Tabarot.</b> Vous devez aussi entendre les Français, qui se sont rassemblés dimanche pour vous demander de ne pas faire voler en éclat l'institution de la famille.<br/>Ces défaites, vous en portez la responsabilité, vous et votre majorité !<br/>Vous portez également la responsabilité de vos alliances avec les extrémistes du Front de gauche, ce parti qui, ce week-end, a franchi une étape supplémentaire en envoyant des messages intolérables aux Français, en traitant de " salopards " les dix-sept ministres des finances de la zone euro, sans que vous ne réagissiez, et en allant jusqu'à insulter d'une manière détestable votre propre ministre de l'économie, sans que vous ne réagissiez.<br/><b>Un député du groupe UMP.</b> Il ne réagit jamais !<br/><b>Mme Michèle Tabarot.</b> Monsieur le Premier ministre, vous ne pouvez plus garder ce silence complaisant.<br/>Par votre attitude, vous cautionnez des propos qui discréditent la classe politique.)</i><br><br>Je l'ai simplement rappelé hier dans un communiqué, en rectifiant la note à laquelle vous avez fait référence, parce que la police de France est attachée au respect des principes républicains.Bernard Cazeneuve,</strong><i> ministre .La brigade d'assistance aux personnes sans-abri – comme la mission des personnes sans domicile fixe de la ville de Paris – fait un travail partout dans les quartiers de la ville pour que la sécurité soit assurée…<br><br><strong>M.</i>Monsieur le député Luca, vous ne pouvez ignorer, pas plus que personne sur ces bancs, qu'à l'entrée en sixième, entre 15 et 20 % d'élèves sont en difficulté pour ce qui est de l'apprentissage du français.</i>Je vous remercie, monsieur Goujon, pour votre question qui permet d'apporter toutes les précisions utiles.Bernard Cazeneuve,</strong><i> ministre .S'agissant des contrôles effectués par la police nationale, ils ne peuvent, conformément à la loi, ne viser à aucun moment des personnes en raison de leur appartenance nationale ou de toute autre forme d'appartenance.Vous demandez une ligne claire : la ligne du Gouvernement sur la question que vous évoquez est connue et je veux en rappeler les principes.S'agissant des contrôles effectués par la police nationale, ils ne peuvent, conformément à la loi, ne viser à aucun moment des personnes en raison de leur appartenance nationale ou de toute autre forme d'appartenance.)<br/></i>
<p align='center'>POLITIQUE DU LOGEMENT </p><b>M.Et dès janvier prochain, je prendrai une nouvelle initiative pour faire en sorte que cette belle idée devienne une réalité.)</i><br> <p>


</p><p align="CENTER"> PROJET DE LOI SUR L'AGRICULTURE <a name=PG14></a> </p><br><strong>M.le président.</b> La parole est à M. Jean-Jacques Cottel, pour le groupe socialiste, républicain et citoyen.<br/><b>M.Ce " chantier du siècle ", comparable à celui du tunnel sous la Manche, est stratégique car il permettra le renforcement de l'attractivité économique de nos territoires et l'essor de nos ports.)</i> Resat Dibrani est un provocateur, une caricature, mais combien d'autres attendent en silence exactement la même chose de notre pays, qui ne peut plus assumer un système dont la maîtrise lui échappe ?Je rappelle qu'elle s'inspire de politiques appliquées à l'étranger – en Allemagne, au Royaume-Uni, en Belgique, aux Pays-Bas ou encore au Danemark – depuis une dizaine d'années, et que nous sommes en quelque sorte en session de rattrapage.Nous mettons donc les bouchées doubles.<br><br>Je ferai, à vos deux questions, une réponse en deux temps.Cela vous expose donc, vous, membres du Gouvernement, à une contestation de plus en plus radicale des maires, des parents et même – ce qui est un comble pour une majorité de gauche !Jean-Jacques Cottel.</b> ...le canal Seine Nord recueille l'unanimité et relève d'un statut d'aménagement d'intérêt européen avec de multiples retombées.<br/>Ce projet représente une opportunité territoriale majeure et les collectivités, après les réserves du foncier déjà effectuées, sont prêtes à s'impliquer davantage encore.le président.</b> Votre temps de parole est épuisé, mon cher collègue.<br/><b>M.le président.</b> La parole est à M. Jean-Jacques Cottel, pour le groupe socialiste, républicain et citoyen.<br/><b>M.Jean-Pierre Barbier.</b> Même en trois heures !<br/><b>Mme Marylise Lebranchu,</b> <i>ministre.Claude Goasguen.</b> Mais oui !Ce " chantier du siècle ", comparable à celui du tunnel sous la Manche, est stratégique car il permettra le renforcement de l'attractivité économique de nos territoires et l'essor de nos ports.Claude Goasguen.</b> Mais oui !Cela permettra de cesser de légiférer à l'aveugle comme nous le faisons depuis vingt ans, tout en vérifiant précisément la charge que crée toute nouvelle réglementation sur la vie des entreprises, afin de la compenser à due concurrence.)</i><br><br>Cette fois, il s'agit de l'engagement n°  18 du président Hollande : la réforme de la perte d'autonomie des personnes âgées.<br><br>Monsieur le Premier ministre, vous étiez ce matin à Angers, pour dévoiler en lien avec Michèle Delaunay et Marisol Touraine, les grands axes de la loi pour l'adaptation de la société au vieillissement, qui sera présentée en conseil des ministres début avril et que le Parlement examinera dans la foulée.</i>Monsieur le député, je vous remercie pour votre question relative à la réalisation du canal Seine Nord - un sujet qui, je le sais, vous tient particulièrement à coeur.le président.</b> La parole est à M. Jean-Jacques Cottel, pour le groupe socialiste, républicain et citoyen.<br/><b>M.)</i><br> <p>
117 changes: 117 additions & 0 deletions load_qe.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 26 09:13:40 2016
@author: aeidelman
"""
import os
import json
import pandas as pd

path = '/home/sgmap/data/DatacampAN/'

path_qe = os.path.join(path, 'AN', 'Questions_ecrites_XIV.json')

with open(path_qe) as qe_file:
data = json.load(qe_file)

qe = data['questionsEcrites']['question']
assert isinstance(qe, list)

test = pd.DataFrame(qe)


def is_dict(serie):
is_dict = serie.apply(lambda x: isinstance(x, dict) or isinstance(x, list))
return all(is_dict)

def serie_of_dict_to_df(serie):
if not is_dict(serie):
return serie
# assert all(is_dict)

# c'est un bug parfois on a des listes
cond = serie.apply(lambda x: isinstance(x, list))
serie[cond] = serie[cond].str.get(0)

# c'est pas un bug parfois,il y a des None
serie2 = pd.DataFrame(list(serie))
return serie2



def dict_to_df(df):
columns = [df[col] for col in df.columns]
is_col_dict = [is_dict(col) for col in columns]
for col in df.columns[is_col_dict]:
new_col = serie_of_dict_to_df(df[col])
if isinstance(new_col, pd.Series):
df[col] = col
else:
new_col1 = dict_to_df(new_col)
del df[col]
df = pd.concat([df, new_col1], axis=1)
return df

auteur = dict_to_df(test)
auteur.columns = auteur.columns.tolist()[:6] + ['parti','nom_parti'] + auteur.columns.tolist()[8:]
to_keep = [x for x in range(19)] + [21,22,23]

auteur = auteur.iloc[:, to_keep]

repondu = auteur[auteur['cloture'].notnull()].reset_index()
reponse = serie_of_dict_to_df(repondu['cloture'])
cloture = pd.to_datetime(reponse['dateCloture'], format='%Y-%m-%d')
debut = pd.to_datetime(repondu['dateJO'], format='%Y-%m-%d')

repondu['temps'] = (cloture - debut)/pd.to_timedelta('1d')

import numpy as np
parti_dev = repondu.groupby(['nom_parti','developpe'])['temps'].agg([np.mean,
lambda x : len(x)])
parti_dev.reset_index().to_csv('parti_dev_temps_moyen.csv', index=False)

parti = repondu.groupby(['nom_parti'])['temps'].agg([np.mean, lambda x : len(x)])
parti.reset_index().to_csv('parti_temps_moyen.csv', index=False)

parti = repondu.groupby(['developpe'])['temps'].agg([np.mean, lambda x : len(x)])
parti.reset_index().to_csv('developpe_temps_moyen.csv', index=False)

parti = repondu.groupby(['abrege'])['temps'].agg([np.mean, lambda x : len(x)])
parti.reset_index().to_csv('abrege_temps_moyen.csv', index=False)
xxx


caracteristiques_question = ['renouvellements', 'auteur', 'type',
'indexationAN', 'textesQuestion', 'identifiant',
'signalement', 'minAttribs', 'uid',
'minInt', 'cloture', 'textesReponse']
exemple = qe[95749]

assert all([x in caracteristiques_question for x in exemple.keys()])
assert len(exemple.keys()) == 12

auteur = exemple['auteur']
groupe = auteur['groupe']
identite = auteur['identite']

indexationAN = exemple['indexationAN']
analyses = indexationAN['analyses']
rubrique = indexationAN['rubrique']
teteAnalyse = indexationAN['teteAnalyse']

texte = exemple['textesQuestion']['texteQuestion']['texte']
date = exemple['textesQuestion']['texteQuestion']['infoJO']['dateJO']
assert exemple['type'] == 'QE'

identifiant = exemple['identifiant']

minAttribs = exemple['minAttribs']
minInt = exemple['minInt']

cloture = exemple['cloture']

textesReponse = exemple['textesReponse']



61 changes: 61 additions & 0 deletions load_qg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 26 09:13:40 2016
@author: aeidelman
"""
import os
import json

path = '/home/sgmap/data/DatacampAN/'

path_qg = os.path.join(path, 'AN', 'Questions_gouvernement_XIV.json')

with open(path_qg) as qg_file:
data = json.load(qg_file)

qg = data['questionsGvt']['question']
assert isinstance(qg, list)

caracteristiques_question = ['renouvellements', 'auteur', 'type',
'indexationAN', 'textesQuestion', 'identifiant',
'signalement', 'minAttribs', 'uid',
'minInt', 'cloture', 'textesReponse']
def load(param):
assert param in ['qe', 'qg']


qe = qg
param = 'qg'
exemple = qg[123]
assert all([x in caracteristiques_question for x in exemple.keys()])
assert len(exemple.keys()) in [9, 12] # 12 pour les qe, 9 pour les qg

auteur = exemple['auteur']
groupe = auteur['groupe']
identite = auteur['identite']

indexationAN = exemple['indexationAN']
analyses = indexationAN['analyses']
rubrique = indexationAN['rubrique']
teteAnalyse = indexationAN['teteAnalyse']

if param == 'qe':
texte = exemple['textesQuestion']['texteQuestion']['texte']
date = exemple['textesQuestion']['texteQuestion']['infoJO']['dateJO']
assert exemple['type'] in ['QE']
if param == 'qg':
texte = exemple['textesReponse']['texteReponse']['texte']
assert exemple['type'] in ['QG']

with open(str(idx) + '.html', 'w', encoding='utf8') as output:
output.write(texte)

identifiant = exemple['identifiant']

minAttribs = exemple['minAttribs']
minInt = exemple['minInt']

cloture = exemple['cloture']

textesReponse = exemple['textesReponse']
Binary file added output/developpe_temps_moyen.ods
Binary file not shown.
Binary file added output/parti_dev_temps_moyen.ods
Binary file not shown.
Binary file added output/parti_temps_moyen.ods
Binary file not shown.
Loading

0 comments on commit a44d1ee

Please sign in to comment.