Etude des sujets des amendements PLFSS - Sasha

Préparation des données

 
 
%reload_ext autoreload
%autoreload 2
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
!python -m spacy download fr_core_news_sm > /dev/null
import pandas as pd
#amdt = pd.read_csv('textes_amendements_nouveaux_articles_plfss_2020-2021.csv')
amdt = pd.read_csv('https://github.com/leximpact/donnees-extraites-assemblee/raw/main/textes_amendements_nouveaux_articles_plfss_2020-2021.csv')
amdt.head(5)
texteLegislatifUid uid avantAApres dispositif exposeSommaire
0 PRJLANR5L15B2296 AMANR5L15PO420120B2296P0D1N000001 A I. – Après l’alinéa 13, insérer l’alinéa suiv... La mise en place d’un accord d’intéressement d...
1 PRJLANR5L15B2296 AMANR5L15PO420120B2296P0D1N000002 Apres À la première phrase du premier alinéa de l’ar... L’article L 531‑2 du Code de la Sécurité Socia...
2 PRJLANR5L15B2296 AMANR5L15PO420120B2296P0D1N000005 A Compléter l’alinéa 17 par la phrase suivante :... S’il est louable d’expérimenter des dispositif...
3 PRJLANR5L15B2296 AMANR5L15PO420120B2296P0D1N000008 A Après l’alinéa 8, insérer les cinq alinéas sui... Cet amendement permet d’amplifier la portée de...
4 PRJLANR5L15B2296 AMANR5L15PO420120B2296P0D1N000010 Apres Le premier alinéa de l’article L. 521‑1 du cod... Pendant plus de cinquante ans, notre politique...
len(amdt) #Nombre total d'amendements
4797
amdt['texte'] = amdt['dispositif'] + amdt['exposeSommaire'] 

Nettoyage

 
import nltk
nltk.download('stopwords')
nltk.download('punkt')
[nltk_data] Downloading package stopwords to /home/ben/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
True
[nltk_data] Downloading package punkt to /home/ben/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.
True
from nltk.tokenize import word_tokenize
tokenized = [ word_tokenize(text) for text in amdt['texte'] ] #return_token

Retrait des mots de liaison (stopword) et de la ponctuation

#( Casing: Est-ce vraiment utile ? Est-ce qu'on ne va pas perdre les Acronymes de vue ?)
new_tokenized = []
for token in tokenized:
    new_tokenized.append([ word.lower() for word in token if word.isalpha()])
print(new_tokenized[4])
['le', 'premier', 'alinéa', 'de', 'l', 'article', 'du', 'code', 'de', 'la', 'sécurité', 'sociale', 'est', 'complété', 'par', 'une', 'phrase', 'ainsi', 'rédigée', 'elles', 'sont', 'universelles', 'pendant', 'plus', 'de', 'cinquante', 'ans', 'notre', 'politique', 'familiale', 'a', 'reposé', 'sur', 'le', 'principe', 'de', 'l', 'universalité', 'cela', 'signifie', 'qu', 'elle', 's', 'adressait', 'à', 'tous', 'les', 'français', 'sans', 'distinction', 'sociale', 'elle', 'reposait', 'sur', 'l', 'idée', 'que', 'chaque', 'enfant', 'à', 'naître', 'est', 'une', 'chance', 'et', 'une', 'richesse', 'pour', 'la', 'france', 'pour', 'son', 'avenir', 'quel', 'que', 'soient', 'les', 'ressources', 'dont', 'disposent', 'les', 'mettre', 'en', 'place', 'ce', 'principe', 'd', 'universalité', 'la', 'politique', 'familiale', 'appelle', 'des', 'outils', 'dits', 'de', 'redistribution', 'horizontale', 'c', 'des', 'mécanismes', 'de', 'solidarité', 'des', 'familles', 'sans', 'enfant', 'envers', 'les', 'familles', 'avec', 'enfants', 'pour', 'que', 'quel', 'que', 'soit', 'les', 'revenus', 'des', 'parents', 'la', 'naissance', 'd', 'un', 'enfant', 'n', 'ait', 'pas', 'pour', 'effet', 'de', 'porter', 'atteinte', 'à', 'leur', 'niveau', 'de', 'ce', 'principe', 'd', 'universalité', 'a', 'été', 'mis', 'à', 'mal', 'sous', 'le', 'précédent', 'quinquennat', 'notamment', 'à', 'travers', 'la', 'modulation', 'des', 'allocations', 'familiales', 'et', 'les', 'baisses', 'successives', 'du', 'quotient', 'familial', 'faisant', 'ainsi', 'de', 'la', 'politique', 'familiale', 'une', 'politique', 'sociale', 'comme', 'les', 'loi', 'de', 'financement', 'de', 'la', 'sécurité', 'sociale', 'pour', 'a', 'choisi', 'de', 'ne', 'pas', 'revenir', 'sur', 'cette', 'modulation', 'des', 'allocations', 'familiales', 'qui', 'a', 'pour', 'conséquence', 'principale', 'la', 'baisse', 'de', 'la', 'natalité', 'dans', 'notre', 'le', 'présent', 'amendement', 'vise', 'à', 'réintroduire', 'ce', 'principe', 'd', 'universalité', 'base', 'même', 'de', 'la', 'politique', 'familiale', 'française', 'enviée', 'par', 'tant', 'de', 'nos', 'voisins']
#On importe les mots "inutiles" (stopwords) du langage français
from nltk.corpus import stopwords 
stop_words = stopwords.words("french")
print(stop_words[:20])
['au', 'aux', 'avec', 'ce', 'ces', 'dans', 'de', 'des', 'du', 'elle', 'en', 'et', 'eux', 'il', 'ils', 'je', 'la', 'le', 'les', 'leur']
SW = pd.read_csv('Added_stop_words.csv')
SW = list(SW['StopWords'])
print("NOS MOTS 'INUTILES' : \n", SW)
NOS MOTS 'INUTILES' : 
 ['alinéa', 'amendement', 'º', 'L.', 'loi', 'présent', 'rapport', '1', '2020', 'II', 'phrase', '2', 'Gouvernement', 'I.', '575', 'organismes', '3', '2019', 'secteur', 'non', 'mot', 'mesure', 'Etat', 'Objet', 'objet', 'compte', 'situation', 'ans', 'propose', '4', 'III', 'également', 'congé', 'ainsi', 'afin', 'tel', 'cet']
print("AVANT : \n", tokenized[4], "\n")
final_SW = SW + stop_words
tokenized = []
for token in new_tokenized:
    tokenized.append([ word for word in token if word not in final_SW])
print("APRÈS : \n", tokenized[4], "\n")

print("MOT ENLEVÉS : \n", final_SW) # On affiche ci-dessous tous les mots que l'on a retirés
AVANT : 
 ['Le', 'premier', 'alinéa', 'de', 'l', '’', 'article', 'L.', '521‑1', 'du', 'code', 'de', 'la', 'sécurité', 'sociale', 'est', 'complété', 'par', 'une', 'phrase', 'ainsi', 'rédigée', ':', '«', 'Elles', 'sont', 'universelles', '.', '»', 'Pendant', 'plus', 'de', 'cinquante', 'ans', ',', 'notre', 'politique', 'familiale', 'a', 'reposé', 'sur', 'le', 'principe', 'de', 'l', '’', 'universalité', '.', 'Cela', 'signifie', 'qu', '’', 'elle', 's', '’', 'adressait', 'à', 'tous', 'les', 'Français', ',', 'sans', 'distinction', 'sociale', '.', 'Elle', 'reposait', 'sur', 'l', '’', 'idée', 'que', 'chaque', 'enfant', 'à', 'naître', 'est', 'une', 'chance', 'et', 'une', 'richesse', 'pour', 'la', 'France', ',', 'pour', 'son', 'avenir', ',', 'quel', 'que', 'soient', 'les', 'ressources', 'dont', 'disposent', 'les', 'parents.Pour', 'mettre', 'en', 'place', 'ce', 'principe', 'd', '’', 'universalité', ',', 'la', 'politique', 'familiale', 'appelle', 'des', 'outils', 'dits', 'de', 'redistribution', 'horizontale', ',', 'c', '’', 'est-à-dire', 'des', 'mécanismes', 'de', 'solidarité', 'des', 'familles', 'sans', 'enfant', 'envers', 'les', 'familles', 'avec', 'enfants', ',', 'pour', 'que', ',', 'quel', 'que', 'soit', 'les', 'revenus', 'des', 'parents', ',', 'la', 'naissance', 'd', '’', 'un', 'enfant', 'n', '’', 'ait', 'pas', 'pour', 'effet', 'de', 'porter', 'atteinte', 'à', 'leur', 'niveau', 'de', 'vie.Or', ',', 'ce', 'principe', 'd', '’', 'universalité', 'a', 'été', 'mis', 'à', 'mal', 'sous', 'le', 'précédent', 'quinquennat', ',', 'notamment', 'à', 'travers', 'la', 'modulation', 'des', 'allocations', 'familiales', 'et', 'les', 'baisses', 'successives', 'du', 'quotient', 'familial', ',', 'faisant', 'ainsi', 'de', 'la', 'politique', 'familiale', 'une', 'politique', 'sociale', 'comme', 'les', 'autres.La', 'loi', 'de', 'financement', 'de', 'la', 'sécurité', 'sociale', 'pour', '2018', 'a', 'choisi', 'de', 'ne', 'pas', 'revenir', 'sur', 'cette', 'modulation', 'des', 'allocations', 'familiales', 'qui', 'a', 'pour', 'conséquence', 'principale', 'la', 'baisse', 'de', 'la', 'natalité', 'dans', 'notre', 'pays.Aussi', ',', 'le', 'présent', 'amendement', 'vise', 'à', 'réintroduire', 'ce', 'principe', 'd', '’', 'universalité', ',', 'base', 'même', 'de', 'la', 'politique', 'familiale', 'française', ',', 'enviée', 'par', 'tant', 'de', 'nos', 'voisins', '.'] 

APRÈS : 
 ['premier', 'article', 'code', 'sécurité', 'sociale', 'complété', 'rédigée', 'elles', 'universelles', 'pendant', 'plus', 'cinquante', 'politique', 'familiale', 'a', 'reposé', 'principe', 'universalité', 'cela', 'signifie', 'adressait', 'tous', 'français', 'sans', 'distinction', 'sociale', 'reposait', 'idée', 'chaque', 'enfant', 'naître', 'chance', 'richesse', 'france', 'avenir', 'quel', 'ressources', 'dont', 'disposent', 'mettre', 'place', 'principe', 'universalité', 'politique', 'familiale', 'appelle', 'outils', 'dits', 'redistribution', 'horizontale', 'mécanismes', 'solidarité', 'familles', 'sans', 'enfant', 'envers', 'familles', 'enfants', 'quel', 'revenus', 'parents', 'naissance', 'enfant', 'effet', 'porter', 'atteinte', 'niveau', 'principe', 'universalité', 'a', 'mis', 'mal', 'sous', 'précédent', 'quinquennat', 'notamment', 'travers', 'modulation', 'allocations', 'familiales', 'baisses', 'successives', 'quotient', 'familial', 'faisant', 'politique', 'familiale', 'politique', 'sociale', 'comme', 'financement', 'sécurité', 'sociale', 'a', 'choisi', 'revenir', 'cette', 'modulation', 'allocations', 'familiales', 'a', 'conséquence', 'principale', 'baisse', 'natalité', 'vise', 'réintroduire', 'principe', 'universalité', 'base', 'politique', 'familiale', 'française', 'enviée', 'tant', 'voisins'] 

MOT ENLEVÉS : 
 ['alinéa', 'amendement', 'º', 'L.', 'loi', 'présent', 'rapport', '1', '2020', 'II', 'phrase', '2', 'Gouvernement', 'I.', '575', 'organismes', '3', '2019', 'secteur', 'non', 'mot', 'mesure', 'Etat', 'Objet', 'objet', 'compte', 'situation', 'ans', 'propose', '4', 'III', 'également', 'congé', 'ainsi', 'afin', 'tel', 'cet', 'au', 'aux', 'avec', 'ce', 'ces', 'dans', 'de', 'des', 'du', 'elle', 'en', 'et', 'eux', 'il', 'ils', 'je', 'la', 'le', 'les', 'leur', 'lui', 'ma', 'mais', 'me', 'même', 'mes', 'moi', 'mon', 'ne', 'nos', 'notre', 'nous', 'on', 'ou', 'par', 'pas', 'pour', 'qu', 'que', 'qui', 'sa', 'se', 'ses', 'son', 'sur', 'ta', 'te', 'tes', 'toi', 'ton', 'tu', 'un', 'une', 'vos', 'votre', 'vous', 'c', 'd', 'j', 'l', 'à', 'm', 'n', 's', 't', 'y', 'été', 'étée', 'étées', 'étés', 'étant', 'étante', 'étants', 'étantes', 'suis', 'es', 'est', 'sommes', 'êtes', 'sont', 'serai', 'seras', 'sera', 'serons', 'serez', 'seront', 'serais', 'serait', 'serions', 'seriez', 'seraient', 'étais', 'était', 'étions', 'étiez', 'étaient', 'fus', 'fut', 'fûmes', 'fûtes', 'furent', 'sois', 'soit', 'soyons', 'soyez', 'soient', 'fusse', 'fusses', 'fût', 'fussions', 'fussiez', 'fussent', 'ayant', 'ayante', 'ayantes', 'ayants', 'eu', 'eue', 'eues', 'eus', 'ai', 'as', 'avons', 'avez', 'ont', 'aurai', 'auras', 'aura', 'aurons', 'aurez', 'auront', 'aurais', 'aurait', 'aurions', 'auriez', 'auraient', 'avais', 'avait', 'avions', 'aviez', 'avaient', 'eut', 'eûmes', 'eûtes', 'eurent', 'aie', 'aies', 'ait', 'ayons', 'ayez', 'aient', 'eusse', 'eusses', 'eût', 'eussions', 'eussiez', 'eussent']
import nltk
nltk.download('wordnet')
[nltk_data] Downloading package wordnet to /home/ben/nltk_data...
[nltk_data]   Unzipping corpora/wordnet.zip.
True
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()

amdt_clean= []
for token in tokenized:
    amdt_clean.append([lemmatizer.lemmatize(word) for word in token])
print(amdt_clean[4])
['premier', 'article', 'code', 'sécurité', 'sociale', 'complété', 'rédigée', 'elles', 'universelles', 'pendant', 'plus', 'cinquante', 'politique', 'familiale', 'a', 'reposé', 'principe', 'universalité', 'cela', 'signifie', 'adressait', 'tous', 'français', 'sans', 'distinction', 'sociale', 'reposait', 'idée', 'chaque', 'enfant', 'naître', 'chance', 'richesse', 'france', 'avenir', 'quel', 'ressources', 'dont', 'disposent', 'mettre', 'place', 'principe', 'universalité', 'politique', 'familiale', 'appelle', 'outils', 'dit', 'redistribution', 'horizontale', 'mécanismes', 'solidarité', 'familles', 'sans', 'enfant', 'envers', 'familles', 'enfants', 'quel', 'revenus', 'parent', 'naissance', 'enfant', 'effet', 'porter', 'atteinte', 'niveau', 'principe', 'universalité', 'a', 'mi', 'mal', 'sou', 'précédent', 'quinquennat', 'notamment', 'travers', 'modulation', 'allocation', 'familiales', 'bai', 'successives', 'quotient', 'familial', 'faisant', 'politique', 'familiale', 'politique', 'sociale', 'comme', 'financement', 'sécurité', 'sociale', 'a', 'choisi', 'revenir', 'cette', 'modulation', 'allocation', 'familiales', 'a', 'conséquence', 'principale', 'baisse', 'natalité', 'vise', 'réintroduire', 'principe', 'universalité', 'base', 'politique', 'familiale', 'française', 'enviée', 'tant', 'voisins']
df = pd.DataFrame(amdt_clean)
#print(df.head(10))
df.to_csv('amdt_clean.csv')  #Chaque ligne est un amendement

Les mots les plus cités

from collections import Counter

most = []
for token in amdt_clean:
    bow = Counter(token)
    most.append(bow.most_common(30))


df = pd.DataFrame(most)
print(df.head(10))
df.to_csv('most_common_word_per_amdt.csv')  #Chaque ligne est un amendement 
                     0                 1                2   \
0         (salariés, 7)  (entreprises, 4)       (moins, 4)   
1       (naissance, 15)      (enfant, 14)       (prime, 9)   
2  (expérimentation, 5)      (article, 4)        (code, 3)   
3          (service, 7)      (article, 5)        (code, 4)   
4        (politique, 5)      (sociale, 4)   (familiale, 4)   
5       (allocation, 6)   (familiales, 5)  (modulation, 5)   
6       (allocation, 4)     (adoptées, 3)   (naissance, 3)   
7       (allocation, 4)     (adoptées, 3)   (naissance, 3)   
8           (charge, 9)      (patient, 8)        (pied, 6)   
9     (substitution, 5)   (pharmacien, 4)  (médicament, 4)   

                   3                    4                  5               6   \
0          (prime, 3)  (exceptionnelle, 3)       (article, 3)       (mise, 3)   
1        (sociale, 6)       (politique, 6)       (article, 5)       (date, 5)   
2        (service, 3)           (cette, 2)     (notamment, 2)     (effets, 2)   
3  (établissement, 4)           (actes, 4)         (soins, 3)     (social, 3)   
4              (a, 4)        (principe, 4)  (universalité, 4)     (enfant, 3)   
5         (revenu, 4)    (universalité, 4)       (sociale, 4)          (a, 4)   
6           (mode, 3)         (mesures, 2)     (politique, 2)   (quotient, 2)   
7           (mode, 3)         (mesures, 2)     (politique, 2)   (quotient, 2)   
8          (prise, 5)      (diabétique, 5)       (diabète, 4)  (assurance, 3)   
9          (cette, 4)         (article, 3)    (biologique, 3)      (cadre, 3)   

                     7                    8                    9   ...  \
0            (place, 3)          (accord, 3)       (employeur, 2)  ...   
1        (versement, 5)           (avant, 5)        (familles, 5)  ...   
2  (contemporanéité, 2)   (participation, 2)      (financière, 2)  ...   
3           (règles, 3)  (établissements, 3)           (entre, 3)  ...   
4         (sécurité, 2)            (sans, 2)            (quel, 2)  ...   
5          (revenus, 4)            (plus, 4)           (impôt, 4)  ...   
6         (parental, 2)            (base, 2)          (nombre, 2)  ...   
7         (parental, 2)            (base, 2)          (nombre, 2)  ...   
8          (maladie, 3)          (cahier, 3)  (établissements, 3)  ...   
9        (condition, 2)          (décret, 2)   (réglementaire, 2)  ...   

                  20                  21              22              23  \
0    (mentionnés, 2)              (a, 2)       (code, 2)    (général, 2)   
1       (arrivée, 3)           (bien, 3)      (après, 2)     (versée, 2)   
2          (saad, 2)           (prix, 2)        (apa, 2)        (pch, 2)   
3     (modalités, 2)  (qualification, 2)       (aide, 2)       (lors, 2)   
4  (universelles, 1)        (pendant, 1)       (plus, 1)  (cinquante, 1)   
5           (sou, 2)         (retour, 2)     (prévue, 2)  (familiale, 2)   
6         (entre, 1)          (porte, 1)  (notamment, 1)   (familial, 1)   
7         (entre, 1)          (porte, 1)  (notamment, 1)   (familial, 1)   
8         (alors, 2)       (pratique, 2)       (plus, 2)       (déjà, 2)   
9       (sociale, 1)        (prévoit, 1)       (code, 1)      (santé, 1)   

                   24                25               26              27  \
0  (intéressement, 2)            (i, 1)       (après, 1)    (insérer, 1)   
1     (ressources, 2)         (doit, 2)      (décret, 2)   (décembre, 2)   
2       (convient, 2)           (ni, 2)   (compléter, 1)   (suivante, 1)   
3   (expérimenter, 2)  (dérogations, 2)      (formes, 2)   (parcours, 2)   
4         (reposé, 1)         (cela, 1)    (signifie, 1)  (adressait, 1)   
5        (système, 2)        (effet, 2)     (montant, 2)      (foyer, 2)   
6     (familiales, 1)        (prime, 1)  (prestation, 1)    (accueil, 1)   
7     (familiales, 1)        (prime, 1)  (prestation, 1)    (accueil, 1)   
8   (représentent, 2)      (élèvent, 2)        (donc, 2)      (soins, 2)   
9       (publique, 1)      (indique, 1)  (dérogation, 1)    (premier, 1)   

                    28              29  
0         (suivant, 1)          (v, 1)  
1            (mois, 2)      (choix, 2)  
2    (gouvernement, 1)      (remet, 1)  
3       (personnes, 2)      (sujet, 2)  
4            (tous, 1)   (français, 1)  
5  (redistribution, 2)    (partage, 2)  
6           (jeune, 1)     (enfant, 1)  
7           (jeune, 1)     (enfant, 1)  
8         (million, 2)  (améliorer, 1)  
9            (peut, 1)   (délivrer, 1)  

[10 rows x 30 columns]

TF IDF

Term frequency - inverse document frequency

corpus = []
for amdt1 in amdt_clean:
    temp = ' '.join(amdt1)
    corpus.append(temp)
    temp = ''
    
#Vectorization - Term Frequency in Global Corpus
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
tf = vectorizer.fit_transform(corpus)

print(corpus[2:4])
['compléter suivante gouvernement remet parlement échéance cette période expérimentation évaluation portant notamment effets contemporanéité crédit impôt mentionné article sexdecies code général impôts participation financière bénéficiaires prestations mentionnées article code action sociale familles part coûts induits application i article prestataires définis article code travail participant expérimentation autre part louable expérimenter dispositifs permettant plus avoir décalage entre moment où dépense réalisée celui où aide perçues personnes recourant service domicile notamment plus vulnérables entre elles nécessaire mesurer éventuels effets induits négatifs telles mesures effet certains saad facturent prix participation financière légale prévue apa pch convient mesurer effet cette expérimentation prix service conséquence reste ailleurs expérimentation prévoit contemporanéité apa pch organisé centre cesu or ore déjà conseils départementaux peuvent verser directement mécanisme tier payant prises charge saad limitant avance trésorerie bénéficiaires convient vérifier expérimentation introduisant nouvel acteur engendre ni surcoût personnes service prestataires ni complexité supplémentaire', 'après insérer cinq alinéas suivants article dudit code limitent possibilités organiser délégations soins cadre prise charge établissement santé établissement service social rédigé disposition suivantes code action sociale familles a règles tarification organisation prévues code action sociale familles applicables établissements service mentionnés article code b article redéfinir modalités qualification entre actes aide actes soins lors prise charge établissement service social permet amplifier portée article effet question clé rigidités financières lesquelles article ouvre possibilité expérimenter dérogations règles tarification établissements service sociaux autres formes cloisonnement mettent cause pertinence accompagnements génèrent rupture parcours personnes prévoit étendre dérogations deux point règles organisation établissements service sociaux favoriser innovation organisationnelles permettre expérimenter nouvelles formes coopération entre acteurs sociaux sanitaires service parcours santé vie personnes modalités qualification entre actes aide actes soins cadre accompagnement établissement service social plf similaire déposé rejeté gouvernement motif sujet devait être traité lors concertation grand âge autonomie pilotée dominique libault or mar aborde expressément sujet justifie déposer nouveau']
feature_names = vectorizer.get_feature_names()
print(feature_names[:10])
['aa', 'aah', 'aasctel', 'ab', 'abaissant', 'abaisse', 'abaissement', 'abaisser', 'abaissés', 'abandon']
import re
corpus_index = amdt['uid'].tolist()
print(corpus_index[:5])
#amdt['uid'].nunique() 
['AMANR5L15PO420120B2296P0D1N000001', 'AMANR5L15PO420120B2296P0D1N000002', 'AMANR5L15PO420120B2296P0D1N000005', 'AMANR5L15PO420120B2296P0D1N000008', 'AMANR5L15PO420120B2296P0D1N000010']
#IDF - Inverse Document Frequencies
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

# initialize and fit TfidfVectorizer
vectorizer = TfidfVectorizer(norm=None)
tf_idf_scores = vectorizer.fit_transform(corpus)
#print(tf_idf_scores)
# get vocabulary of terms
feature_names = vectorizer.get_feature_names()
#print(type(tf_idf_scores.todense()))
print (pd.DataFrame(tf_idf_scores.todense()) )  #ICI on a bien les bonnes valeurs
print(pd.DataFrame(tf_idf_scores.todense()[0][0]))
#print(feature_names)
# create pandas DataFrame with tf-idf scores
df_tf_idf = pd.DataFrame(data = pd.DataFrame(tf_idf_scores.todense()), index=corpus_index, columns=feature_names)
print(df_tf_idf)
#df_tf_idf.fillna(0)
df_tf_idf.replace(np.nan, 0)
#df_tf_idf.reset_index() 
#df_tf_idf.rename_axis('ID') 
      0         1      2      3      4      5      6      7      8      9      \
0       0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
1       0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
2       0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
3       0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
4       0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
...     ...       ...    ...    ...    ...    ...    ...    ...    ...    ...   
4792    0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
4793    0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
4794    0.0  5.669292    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
4795    0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   
4796    0.0  0.000000    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   

      ...  13052    13053     13054  13055  13056  13057  13058  13059  13060  \
0     ...    0.0  2.09383  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
1     ...    0.0  2.09383  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
2     ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
3     ...    0.0  2.09383  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
4     ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
...   ...    ...      ...       ...    ...    ...    ...    ...    ...    ...   
4792  ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
4793  ...    0.0  2.09383  8.377342    0.0    0.0    0.0    0.0    0.0    0.0   
4794  ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
4795  ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   
4796  ...    0.0  0.00000  0.000000    0.0    0.0    0.0    0.0    0.0    0.0   

      13061  
0       0.0  
1       0.0  
2       0.0  
3       0.0  
4       0.0  
...     ...  
4792    0.0  
4793    0.0  
4794    0.0  
4795    0.0  
4796    0.0  

[4797 rows x 13062 columns]
   0      1      2      3      4      5      6      7      8      9      ...  \
0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0  ...   

   13052    13053  13054  13055  13056  13057  13058  13059  13060  13061  
0    0.0  2.09383    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0  

[1 rows x 13062 columns]
                                     aa  aah  aasctel  ab  abaissant  abaisse  \
AMANR5L15PO420120B2296P0D1N000001   NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO420120B2296P0D1N000002   NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO420120B2296P0D1N000005   NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO420120B2296P0D1N000008   NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO420120B2296P0D1N000010   NaN  NaN      NaN NaN        NaN      NaN   
...                                  ..  ...      ...  ..        ...      ...   
AMANR5L15PO717460BTA0353P0D1N000118 NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000119 NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000120 NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000121 NaN  NaN      NaN NaN        NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000122 NaN  NaN      NaN NaN        NaN      NaN   

                                     abaissement  abaisser  abaissés  abandon  \
AMANR5L15PO420120B2296P0D1N000001            NaN       NaN       NaN      NaN   
AMANR5L15PO420120B2296P0D1N000002            NaN       NaN       NaN      NaN   
AMANR5L15PO420120B2296P0D1N000005            NaN       NaN       NaN      NaN   
AMANR5L15PO420120B2296P0D1N000008            NaN       NaN       NaN      NaN   
AMANR5L15PO420120B2296P0D1N000010            NaN       NaN       NaN      NaN   
...                                          ...       ...       ...      ...   
AMANR5L15PO717460BTA0353P0D1N000118          NaN       NaN       NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000119          NaN       NaN       NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000120          NaN       NaN       NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000121          NaN       NaN       NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000122          NaN       NaN       NaN      NaN   

                                     ...  événements  être  êtrepar  île  \
AMANR5L15PO420120B2296P0D1N000001    ...         NaN   NaN      NaN  NaN   
AMANR5L15PO420120B2296P0D1N000002    ...         NaN   NaN      NaN  NaN   
AMANR5L15PO420120B2296P0D1N000005    ...         NaN   NaN      NaN  NaN   
AMANR5L15PO420120B2296P0D1N000008    ...         NaN   NaN      NaN  NaN   
AMANR5L15PO420120B2296P0D1N000010    ...         NaN   NaN      NaN  NaN   
...                                  ...         ...   ...      ...  ...   
AMANR5L15PO717460BTA0353P0D1N000118  ...         NaN   NaN      NaN  NaN   
AMANR5L15PO717460BTA0353P0D1N000119  ...         NaN   NaN      NaN  NaN   
AMANR5L15PO717460BTA0353P0D1N000120  ...         NaN   NaN      NaN  NaN   
AMANR5L15PO717460BTA0353P0D1N000121  ...         NaN   NaN      NaN  NaN   
AMANR5L15PO717460BTA0353P0D1N000122  ...         NaN   NaN      NaN  NaN   

                                     œnologie  œufs  œuvrant  œuvre  œuvrent  \
AMANR5L15PO420120B2296P0D1N000001         NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO420120B2296P0D1N000002         NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO420120B2296P0D1N000005         NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO420120B2296P0D1N000008         NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO420120B2296P0D1N000010         NaN   NaN      NaN    NaN      NaN   
...                                       ...   ...      ...    ...      ...   
AMANR5L15PO717460BTA0353P0D1N000118       NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000119       NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000120       NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000121       NaN   NaN      NaN    NaN      NaN   
AMANR5L15PO717460BTA0353P0D1N000122       NaN   NaN      NaN    NaN      NaN   

                                     œuvres  
AMANR5L15PO420120B2296P0D1N000001       NaN  
AMANR5L15PO420120B2296P0D1N000002       NaN  
AMANR5L15PO420120B2296P0D1N000005       NaN  
AMANR5L15PO420120B2296P0D1N000008       NaN  
AMANR5L15PO420120B2296P0D1N000010       NaN  
...                                     ...  
AMANR5L15PO717460BTA0353P0D1N000118     NaN  
AMANR5L15PO717460BTA0353P0D1N000119     NaN  
AMANR5L15PO717460BTA0353P0D1N000120     NaN  
AMANR5L15PO717460BTA0353P0D1N000121     NaN  
AMANR5L15PO717460BTA0353P0D1N000122     NaN  

[4797 rows x 13062 columns]
aa aah aasctel ab abaissant abaisse abaissement abaisser abaissés abandon ... événements être êtrepar île œnologie œufs œuvrant œuvre œuvrent œuvres
AMANR5L15PO420120B2296P0D1N000001 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO420120B2296P0D1N000002 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO420120B2296P0D1N000005 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO420120B2296P0D1N000008 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO420120B2296P0D1N000010 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
AMANR5L15PO717460BTA0353P0D1N000118 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO717460BTA0353P0D1N000119 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO717460BTA0353P0D1N000120 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO717460BTA0353P0D1N000121 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
AMANR5L15PO717460BTA0353P0D1N000122 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

4797 rows × 13062 columns

for n in range(5):#range(len(df_tf_idf)):
    #print(n)
    #print(id)
    main = pd.DataFrame()
    main['Most_frequent_words'] = feature_names
    main['Word_occurrence'] = df_tf_idf.iloc[n]  # MAIN ISSUE HERE: Series definition not taking float but convert2 nan
    print(max(df_tf_idf.iloc[n]))
    print(len(df_tf_idf.iloc[n]))
    print(type(df_tf_idf.iloc[n]))
    print(max(main['Word_occurrence']))
    print(type(main['Word_occurrence']))
    print(type(main))
    print(main.head(5))
    main.sort_values(by =['Word_occurrence'], inplace = True, ascending = False, na_position='last')
    print(main.head(5))
nan
13062
<class 'pandas.core.series.Series'>
nan
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
nan
13062
<class 'pandas.core.series.Series'>
nan
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
nan
13062
<class 'pandas.core.series.Series'>
nan
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
nan
13062
<class 'pandas.core.series.Series'>
nan
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
nan
13062
<class 'pandas.core.series.Series'>
nan
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
  Most_frequent_words  Word_occurrence
0                  aa              NaN
1                 aah              NaN
2             aasctel              NaN
3                  ab              NaN
4           abaissant              NaN
#Organizing most common words !Il faut transposer
# tuple_mots = ()
# for n in range(len(df_tf_idf)):
#     print(n)
#     id = df_tf_idf.index[n]
#     print(id)
#     #Creating a DF per amendment
#     main = pd.DataFrame()
#     main['Mots principaux'] = df_tf_idf.columns.T
#     main['Occurence'] = df_tf_idf.iloc[n]
    
    
#     #main['mots'] = df_tf_idf['ID']
    
#     print(max(df_tf_idf.index[n]))
#     #print(main.head(5))
#     #main.sort_values(main[id])

#     #main = main.iloc[:25] #On ne garde que les 25 mots les plus utilisés par amendement
#     #tuple_mots.append(main)
df_tf_idf.shape
(4797, 13062)
id = 0
df_tf_idf.index[0]
'AMANR5L15PO420120B2296P0D1N000001'
test = df_tf_idf.index[id]