# !{sys.executable} -m pip install -U pandas-profiling[notebook]
# !jupyter nbextension enable --py widgetsnbextension

load_data[source]

load_data(file)

files = {
    #"references_amendements_plfss_2020-2021" : "https://github.com/leximpact/donnees-extraites-assemblee/raw/main/references_amendements_plfss_2020-2021.csv",
    #"references_amendements_affaires_sociales" : "https://github.com/leximpact/donnees-extraites-assemblee/raw/main/references_amendements_affaires_sociales.csv"
    "references_articles_amendes_plfss_2020-2021" : "https://github.com/leximpact/donnees-extraites-assemblee/raw/main/references_articles_amendes_plfss_2020-2021.csv"
}

for k in files.keys():
    print(k, files.get(k))
    df = load_data(files.get(k))
    df["law_article"] = df.law + ' article ' + df.article
    #df.law_article.value_counts().to_frame().to_csv(k + '-top-article.csv')
references_articles_amendes_plfss_2020-2021 https://github.com/leximpact/donnees-extraites-assemblee/raw/main/references_articles_amendes_plfss_2020-2021.csv

Exploration générale des données

profile = ProfileReport(df, title='Pandas Profiling Report', explorative=True)
profile

plot_serie[source]

plot_serie(serie, title='')

display_distinct[source]

display_distinct(df)

display_distinct(df)
Nombres de valeurs distinctes pour alinea : 34
Nombres de valeurs distinctes pour alinea1 : 6
Nombres de valeurs distinctes pour amendements1Signataire : 15
Nombres de valeurs distinctes pour amendementsMoins10Signataires : 7
Nombres de valeurs distinctes pour amendementsPlus10Signataires : 18
Nombres de valeurs distinctes pour article : 65
Nombres de valeurs distinctes pour book : 2
Nombres de valeurs distinctes pour chapter : 2
Nombres de valeurs distinctes pour code-part : 4
Nombres de valeurs distinctes pour law : 32
Nombres de valeurs distinctes pour lawType : 6
Nombres de valeurs distinctes pour paragraph : 2
Nombres de valeurs distinctes pour section : 2
Nombres de valeurs distinctes pour section1 : 1
Nombres de valeurs distinctes pour sentence : 6
Nombres de valeurs distinctes pour text : 217
Nombres de valeurs distinctes pour texteLegislatif : 2
Nombres de valeurs distinctes pour texteLegislatifArticle : 48
Nombres de valeurs distinctes pour title : 3
Nombres de valeurs distinctes pour year : 2
Nombres de valeurs distinctes pour law_article : 33

Column with too many distinct values :
 ['article', 'text']


Valeurs distinctes pour alinea :
1                          198
2                          104
indirect: -1                64
3                           49
i order: 1                  21
4                           16
5                           15
iii order: 3                 7
indirect: 1                  7
v order: 5                   7
indirect: (relative: 0)      7
11                           6
ii order: 2                  6
c order: c                   6
3° order: 3                  4
l order: l                   4
b order: b                   4
a order: a                   4
1° order: 1                  4
xvi order: 16                2
7                            2
6                            2
2° order: 2                  2
6° order: 6                  2
iii bis order: 3             2
5° order: 5                  2
4° order: 4                  2
8                            2
ii septies order: 2          2
e order: e                   2
9                            1
ii bis order: 2              1
xvii order: 17               1
7° bis order: 7              1
Name: alinea, dtype: int64

Valeurs distinctes pour alinea1 :
b order: b     4
1° order: 1    3
2° order: 2    2
c order: c     2
2              2
3° order: 3    1
Name: alinea1, dtype: int64

Valeurs distinctes pour amendements1Signataire :
1     432
2     184
0     175
3     171
30    141
9      78
6      66
17     51
16     50
4      49
11     38
8      23
5      22
21     13
10     11
Name: amendements1Signataire, dtype: int64

Valeurs distinctes pour amendementsMoins10Signataires :
0    1107
1     146
2      84
6      77
4      52
3      32
5       6
Name: amendementsMoins10Signataires, dtype: int64

Valeurs distinctes pour amendementsPlus10Signataires :
2     398
0     282
1     234
4     139
11    131
5      56
6      54
27     51
7      34
3      31
14     25
8      18
22     14
24     13
26     13
10      6
12      3
9       2
Name: amendementsPlus10Signataires, dtype: int64

Valeurs distinctes pour book :
ier    2
ii     1
Name: book, dtype: int64

Valeurs distinctes pour chapter :
indirect: (relative: 0)    8
v                          1
Name: chapter, dtype: int64

Valeurs distinctes pour code-part :
order: 5       6
indirect: 1    6
order: 3       2
order: 6       1
Name: code-part, dtype: int64

Valeurs distinctes pour law :
indirect: (relative: 0)                                                                    217
code de la sécurité sociale                                                                191
code de la santé publique                                                                   82
code rural et de la pêche maritime                                                          49
code du travail                                                                             39
code de l’action sociale et des familles                                                    29
code général des impôts                                                                     23
code civil                                                                                  12
code des transports                                                                         10
89-1009 du 1989-12-31                                                                        6
code des juridictions financières                                                            4
code du sport                                                                                4
code de la construction et de l’habitation                                                   3
livre des procédures fiscales                                                                3
code des procédures civiles d’exécution                                                      2
code pénal                                                                                   2
2018-359 du 2018-05-16                                                                       2
2019-765 du 2019-07-24                                                                       2
2004-637 du 2004-07-01                                                                       2
2017-1836 du 2017-12-30                                                                      2
code des pensions civiles et militaires de retraite                                          2
code rural                                                                                   2
2004-605 du 2004-06-24                                                                       2
code général des collectivités territoriales                                                 2
96-1122                                                                                      2
96-50 du 1996-01-24                                                                          2
constitution                                                                                 1
code des pensions de retraite des marins français du commerce, de pêche ou de plaisance      1
code des assurances                                                                          1
code de la mutualité                                                                         1
code de procédure civile                                                                     1
code des pensions militaires d’invalidité et des victimes de guerre                          1
Name: law, dtype: int64

Valeurs distinctes pour lawType :
code            650
loi              37
ordonnance       12
décret            1
constitution      1
arrêté            1
Name: lawType, dtype: int64

Valeurs distinctes pour paragraph :
indirect: (relative: 0)    1
2                          1
Name: paragraph, dtype: int64

Valeurs distinctes pour section :
indirect: (relative: 0)    1
4                          1
Name: section, dtype: int64

Valeurs distinctes pour section1 :
2.0    1
Name: section1, dtype: int64

Valeurs distinctes pour sentence :
1               69
2               39
indirect: -1    13
3               11
4                2
5                1
Name: sentence, dtype: int64

Valeurs distinctes pour texteLegislatif :
plfss pour 2020    1129
plfss pour 2021     375
Name: texteLegislatif, dtype: int64

Valeurs distinctes pour texteLegislatifArticle :
article 38             144
article 45             126
article 46             108
article 17             101
article 10              84
article 32              69
article 34              56
article 16              56
article 48              56
article 7               55
article 28              50
article 42              44
article 8               43
article 3               42
article 43              36
article 36              35
article 30              32
article 53              27
article 52              26
article 15              25
article 56              24
article 12              24
article 11              24
article 40              22
article 14              20
article 55              19
article 54              19
article 26 bis          15
article 13              14
article 9               12
article 49              12
article 18              11
article 33               9
article 37               8
article 45 bis           8
article 44               8
article 50               7
article 41               6
article 31               6
article 26               5
article 29               4
article 39               3
article 9 ter            2
article 35               2
article 8 quinquies      2
article 24               1
article 19               1
article 4                1
Name: texteLegislatifArticle, dtype: int64

Valeurs distinctes pour title :
indirect: (relative: 0)    4
vi                         1
ii                         1
Name: title, dtype: int64

Valeurs distinctes pour year :
2019.0    768
2020.0    375
Name: year, dtype: int64

Valeurs distinctes pour law_article :
code rural et de la pêche maritime article l732-10      2
89-1009 du 1989-12-31 article 6-3                       2
code rural et de la pêche maritime article l723-13-3    2
89-1009 du 1989-12-31 article 6-1                       2
96-1122 article 20-1                                    2
code de la santé publique article l5471-1               2
2018-359 du 2018-05-16 article 4                        2
code civil article 373-2-2                              2
2017-1836 du 2017-12-30 article 15                      2
code de la sécurité sociale article l160-9              2
code de la sécurité sociale article l422-6              2
89-1009 du 1989-12-31 article 6-2                       2
indirect: (relative: 0) article l253-8-1                2
code général des impôts article 879                     2
96-50 du 1996-01-24 article 4                           2
code rural et de la pêche maritime article l732-12      2
indirect: (relative: 0) article l815-1                  1
code de la sécurité sociale article l138-10             1
indirect: (relative: 0) article l162-17-5               1
code de la sécurité sociale article l162-16-1           1
2019-765 du 2019-07-24 article 1                        1
indirect: (relative: 0) article l553-2                  1
indirect: (relative: 0) article l351-7-1 a              1
indirect: (relative: 0) article l135-6                  1
code de la sécurité sociale article l752-3-2            1
indirect: (relative: 0) article l213-1                  1
2004-637 du 2004-07-01 article 38                       1
2004-637 du 2004-07-01 article 39                       1
indirect: (relative: 0) article l731-35-2               1
code de la santé publique article l5121-12-1            1
code du travail article l7232-6                         1
indirect: (relative: 0) article l162-16-4-3             1
indirect: (relative: 0) article l165-4                  1
Name: law_article, dtype: int64
df.head()
alinea alinea1 amendements1Signataire amendementsMoins10Signataires amendementsPlus10Signataires article book chapter code-part law ... paragraph section section1 sentence text texteLegislatif texteLegislatifArticle title year law_article
0 NaN NaN 6 4 22 NaN NaN NaN NaN code de la sécurité sociale ... NaN NaN NaN NaN du code de la sécurité sociale plfss pour 2020 article 3 NaN 2019.0 NaN
1 5 NaN 6 4 22 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN au cinquième alinéa plfss pour 2020 article 3 NaN 2019.0 NaN
2 indirect: -1 NaN 6 4 22 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN au dernier alinéa plfss pour 2020 article 3 NaN 2019.0 NaN
3 e order: e NaN 6 4 22 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN au e plfss pour 2020 article 3 NaN 2019.0 NaN
4 iii bis order: 3 NaN 6 4 22 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN du iii bis plfss pour 2020 article 3 NaN 2019.0 NaN

5 rows × 21 columns

Nombre d'amendements par article, par année

import numpy as np
for y in df.year.unique():
    if np.isnan(y):
        continue
    y = int(y)
    print(y)
    df_tmp = df.query("year == @y")["law_article"]
    df_tmp.value_counts().to_frame().head(5)
    df_tmp.value_counts().to_frame().to_csv(f'{k}-{y}-top-article.csv')
2019
law_article
code civil article 373-2-2 2
code rural et de la pêche maritime article l732-10 1
code de la sécurité sociale article l162-16-1 1
code rural et de la pêche maritime article l723-13-3 1
2004-637 du 2004-07-01 article 38 1
2020
law_article

En fonction du nombre de soutiens

df.columns
Index(['alinea', 'alinea1', 'amendements1Signataire',
       'amendementsMoins10Signataires', 'amendementsPlus10Signataires',
       'article', 'book', 'chapter', 'code-part', 'law', 'lawType',
       'paragraph', 'section', 'section1', 'sentence', 'text',
       'texteLegislatif', 'texteLegislatifArticle', 'title', 'year',
       'law_article'],
      dtype='object')
df_soutiens = df.groupby(by="law_article").sum()
df_soutiens.drop(["year", "section1"], inplace=True, axis=1)
df_soutiens["amendements_Signataire_Total"] =  df_soutiens['amendements1Signataire'] \
        + df_soutiens['amendementsMoins10Signataires'] + df_soutiens['amendementsPlus10Signataires']
df_soutiens = df_soutiens.sort_values(by=['amendements_Signataire_Total', 'amendementsPlus10Signataires', 'amendementsMoins10Signataires'], ascending=False)
df_soutiens
df_soutiens.to_excel(k + '-amendements_signataires.xlsx')
amendements1Signataire amendementsMoins10Signataires amendementsPlus10Signataires amendements_Signataire_Total
law_article
2018-359 du 2018-05-16 article 4 9 4 24 37
code de la santé publique article l5471-1 11 4 15 30
2017-1836 du 2017-12-30 article 15 5 0 15 20
96-50 du 1996-01-24 article 4 5 0 15 20
code général des impôts article 879 5 0 15 20
code de la sécurité sociale article l422-6 9 1 9 19
89-1009 du 1989-12-31 article 6-1 4 3 8 15
89-1009 du 1989-12-31 article 6-2 4 3 8 15
89-1009 du 1989-12-31 article 6-3 4 3 8 15
indirect: (relative: 0) article l135-6 9 0 4 13
indirect: (relative: 0) article l213-1 9 0 4 13
indirect: (relative: 0) article l162-17-5 5 1 5 11
indirect: (relative: 0) article l165-4 5 1 5 11
code rural et de la pêche maritime article l723-13-3 2 6 3 11
indirect: (relative: 0) article l253-8-1 2 6 3 11
96-1122 article 20-1 2 2 6 10
code de la sécurité sociale article l160-9 2 2 6 10
code de la sécurité sociale article l138-10 1 1 6 8
code rural et de la pêche maritime article l732-10 2 2 2 6
code rural et de la pêche maritime article l732-12 2 2 2 6
2019-765 du 2019-07-24 article 1 1 2 2 5
code civil article 373-2-2 2 0 2 4
code du travail article l7232-6 3 0 0 3
indirect: (relative: 0) article l553-2 1 0 1 2
indirect: (relative: 0) article l731-35-2 1 0 1 2
2004-637 du 2004-07-01 article 38 2 0 0 2
2004-637 du 2004-07-01 article 39 2 0 0 2
code de la santé publique article l5121-12-1 2 0 0 2
code de la sécurité sociale article l162-16-1 2 0 0 2
indirect: (relative: 0) article l162-16-4-3 2 0 0 2
code de la sécurité sociale article l752-3-2 0 0 1 1
indirect: (relative: 0) article l351-7-1 a 0 0 1 1
indirect: (relative: 0) article l815-1 0 0 1 1

TODO

  • Adoptés par parti
  • Article par année
  • Adoptés par article
  • Il nous faut également analyser les articles de lois “modifiés” par le PLFSS. Sous deux dimensions : identifier les articles du PLFSS les plus amendés. Pour chaque article, donner le nombre d’amendements, en précisant le pourcentage d’amendements de plus de 10 signatures, et le pourcentage d’amendement d’une seule signature. (Ces deux scores venant potentiellement surclasser ou déclasser l’article en termes d’importance).
  • Sortir les la liste des textes de lois modifiés par l’article du PLFSS