"""
## <span style="color:red"> Projet Python : ANALYSE DES DEPENSES DE L'ASSURANCE MALADIE </span>

<h4 style ="color:rgb(2, 104, 255))"> <i> Auteur : Imane El Mountasser  </h4>
"""
"""
**Objectif global de l'étude :** 

* Detecter les dépassements d'honoraires médicaux afin de pouvoir lutter contre les excès tarifaires et réduire les dépenses de l'Etat.
* Partie 1 : Structuration des données (Modélisation et Programmation Objet)
* Partie 2 : Analyse statistique des données


Données étudiées : Jeu de données gouvernementale du service Assurance Maladie. https://www.data.gouv.fr/fr/datasets/depenses-d-assurance-maladie-hors-prestations-hospitalieres-donnees-nationales/

"""
"""
### <span style="color:green"> PARTIE 1 : STRUCTURATION DES DONNEES </span>
"""
"""
 **<span style="color:blue">A2. Etape 2 : Determination des classes et leurs attributs</span>** 
 
Modélisation des données après compréhension des variables et création d'un dictionnaire de données.

La presentation du diagramme a été réalisé grace à l'application lucidchart
![image.png](attachment:image.png)
"""
## CODE MODELISATION DES DONNEES
# Variable pour filtrer selon les conditions du champs de notre etude
DEPARTEMENTS = {"62" : "Pas-de-Calais", "59" : "Nord","02" : "Aisne", "60" : "Oise", "80" : "Somme"}
SPECIALITES = {"12":"Pediatrie","17":"Psychiatrie","15":"Ophtalmologie",
 "13":"Pneumologie", "14":"Rhumatologie", "03":"Cardiologie","05":"Dermatologie"}
PRESTATIONSS = ['1101','1102','1103','1104','1111','1113','1112','1114','1211','1212',
 '1213','1214','1215','1216','1140']

import csv

class SOIN :
    
     def __init__(self, prs_nat="", l_prs_nat ="", sns_date=""):
        self.prs_nat = prs_nat
        self.l_prs_nat = l_prs_nat
        self.sns_date = sns_date

class EXECUTANT :
    def __init__(self, exe_spe="", l_exe_spe="", exe_stj1 = "", l_exe_stj1 = ""):
        self.exe_spe = exe_spe
        self.l_exe_spe = l_exe_spe
        self.exe_stj1 = exe_stj1
        self.l_exe_stj1 = l_exe_stj1
        

class ASSURANCE :
    def __init__(self, asu_nat = "", l_asu_nat = "", cpam = "", l_cpam = "", dpt ="" , l_dpt = ""):
        self.asu_nat = asu_nat
        self.l_asu_nat = l_asu_nat
        self.cpam = cpam
        self.l_cpam = l_cpam
        self.dpt = dpt 
        self.l_dpt = l_dpt


class REMBOURSEMENT :
     def __init__(self, SOIN, EXECUTANT, ASSURANCE, rem_mon ="", dep_mon="", rec_mon = "", rem_taux="") :
        self.SOIN= SOIN 
        self.EXECUTANT = EXECUTANT
        self.ASSURANCE = ASSURANCE
        self.rem_mon = rem_mon
        self.rec_mon = rec_mon
        self.dep_mon = dep_mon
        self.rem_taux = rem_taux

     
class REMBOURSEMENTS:
     def __init__(self):
        self.listeRBS=[] 
        

     def charger(self,datafile):  
         fich= open(datafile,"r") 
         data= csv.DictReader(fich,delimiter=";")
         
        
         print("\nChargement des données en cours ...")
         for ligne in data: 
             a=ligne["rem_mon"].replace(".","")
             a=a.replace(',','.')
             b=float(a)
             
             z=ligne["dep_mon"].replace(".","")
             z=z.replace(',','.')
             w=float(z)
             
             p=ligne["rec_mon"].replace(".","")
             p=p.replace(',','.')
             q=float(p)
             
             l=ligne["REM_TAU"].replace(".","")
             l=l.replace(',','.')
             m=float(l)
             
             if ligne ["dpt"] in DEPARTEMENTS and ligne ["prs_nat"] in PRESTATIONSS and ligne ["exe_spe"] in SPECIALITES :
              
                 a=REMBOURSEMENT(SOIN(ligne["prs_nat"], ligne["l_prs_nat"], ligne["sns_date"]), EXECUTANT(ligne["exe_spe"],ligne["l_exe_spe"],ligne["exe_stj1"],ligne["l_exe_stj1"] ), ASSURANCE(ligne["asu_nat"], ligne["l_asu_nat"], ligne["cpam"],ligne["l_cpam"], ligne["dpt"], ligne["l_dpt"]), b, w, q, m)
                 self.listeRBS.append(a)
          
         fich.close()
         print("\nChargement des données executé!")

     def data(self): 
        d=dict()
        d["rem_mon"]=[a.rem_mon for a in self.listeRBS]
        d["rec_mon"]=[a.rec_mon for a in self.listeRBS]
        d["dep_mon"]=[a.dep_mon for a in self.listeRBS]
        d["rem_taux"]=[a.rem_taux for a in self.listeRBS]
        d["prs_nat"]=[a.SOIN.prs_nat for a in self.listeRBS]
        d["l_prs_nat"]=[a.SOIN.l_prs_nat for a in self.listeRBS]
        d["sns_date"]=[a.SOIN.sns_date  for a in self.listeRBS]
        d["exe_spe"]=[a.EXECUTANT.exe_spe  for a in self.listeRBS]
        d["l_exe_spe"]=[a.EXECUTANT.l_exe_spe  for a in self.listeRBS]
        d["exe_stj1"]=[a.EXECUTANT.exe_stj1  for a in self.listeRBS]
        d["l_exe_stj1"]=[a.EXECUTANT.l_exe_stj1  for a in self.listeRBS]
        d["asu_nat"]=[a.ASSURANCE.asu_nat  for a in self.listeRBS]
        d["l_asu_nat"]=[a.ASSURANCE.l_asu_nat  for a in self.listeRBS]
        d["cpam"]=[a.ASSURANCE.cpam  for a in self.listeRBS]
        d["l_cpam"]=[a.ASSURANCE.l_cpam  for a in self.listeRBS]
        d["dpt"]=[a.ASSURANCE.dpt  for a in self.listeRBS]
        d["l_dpt"]=[a.ASSURANCE.l_dpt  for a in self.listeRBS]
        

        return d 
"""
Le code ci-dessus correspond au module classe chargé ci-dessous et qui permettra la modélisation et le chargement des données  du fichier excel R201901 correspondant aux données disponibles sur le site de l'Assurance Maladie.
"""
# Importation des modules 
import classes as ma 
import pandas as pd
import seaborn as sn
import matplotlib.pyplot as plt
from IPython.display import HTML, display
import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.sandbox.regression.predstd import wls_prediction_std
import numpy as np
import scipy.stats as stats
import math
import depfrance as toutdep
import sklearn
"""
<h3 style = "color:rgb(2, 0, 126)"> 1. Chargement des données </h3>
"""
remboursements = ma.REMBOURSEMENTS()

# Chargement du datafile
remboursements.charger("R201901.csv")

# Création d'un dataframe a partir du fichier csv charge
datac=remboursements.data()
dfc = pd.DataFrame.from_dict(datac)
dfc.head(100)
"""
<h3 style = "color:rgb(2, 0, 126)"> 2. Data Analytics  </h3>
"""
"""
<h4 style = "color:#DF2801"> 2.1) Indicateur statistique de base </h4> 
"""
dfc.describe()
#Calcul des sommes totale du montant rembourse
dfc[["rem_mon"]].sum()
#Calcul des sommes totale du montant de depassement d'honorairz
dfc[["dep_mon"]].sum()
sn.set_theme(style="whitegrid")
ax = sn.boxplot(x=dfc["dep_mon"])
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
"""
"""
Ce tabeau recapitule les indicateurs statistiques suivant pour toute nos variables quantitatives continues :
- n nombre d'observations
- Moyenne
- Ecart Type
- Minimum
- Maximum 
- Les quartiles 
Une visualisation grace aux boites à moustaches aurait été possible mais comme illustré ci dessus les données à variance trop élevées mènent à des boxplot trop compacte, le meilleur format a interpreter reste le tableau récapitulatif des indicateurs statistiques.

On a également calculé les totaux qui nous interesse à savoir celui du montant remboursé et depassement d'honoraire.

Pour chacune de nos variables nous rédigerons un texte récapitulatif interprétant les informations du tableau.

**MONTANT REMBOURSE** 
En Janvier 2019 l'Assurance maladie a remboursé un montant 6 706 872.71€. En moyenne elle rembourse 843.7€ par acte de soin, ce nombre peut paraitre élevé mais cela est du au fait que certains soins sont significativement plus cher que les autres soit au maximum 89 341.2€ cela s'illustre par un ecart type de 4339.2 donc les actes de soins s'écarte bel et bien de cette moyenne élevée. Pour avoir une idée du montant remboursé en general pour un acte de soin on utilisera donc la médiane de 50€. Etant donné que le troisième quartile à 75% est de 207€ on en déduit que les actes très couteux pour l'assurance maladie demeurent rares ayant lieu vers le derniers quartile. 


**TAUX DE REMBOURSEMENT*

L'Assurance maladie rembourse au minimum 19% de l'acte de soin et au maximum prend en charge complètement l'acte dans 25% des cas. En generale l'assurance maladie rembourse 70% de l'acte de soin.

**MONTANT DU DEPASSEMENT D'HONORAIRE**

On remarque que les depassements d'honoraires sont des evemenements assez rare ayant lieu dans 25% des cas et s'élève en general à 27 euros et en moyenne à 195euros. Au minimum il sont négatifs de 122 euros on peut en déduire soit qu'il sont remboursé par l'assurance ou on se fie au premier quartile (=0) et concluent qu'il n'ont pas lieu. Il est possible que les dépassements d'honoraire soit très cher car au maximum on a remboursé :  12 4104.55€.
"""
"""
<h4 style = "color:#DF2801"> 2.2) Matrice des correlations </h4> 
"""
"""
**OBJECTIF**
Nous désirons obtenir des modèles prédictif qui permettrons de prédire avec précision :
- Le montant remboursé
- Le depassement d'honoraire
Cela nous permettra également de detecter les facteurs ayant une influence sur ces deux montants et en déduire des actions que l'on peut prendre pour optimiser le budget de l'assurance maladie.
"""
matricecorr = dfc.corr()
matricecorr
# Visualisation de la matrice des correlations
sn.heatmap(matricecorr, annot=True)
plt.show()
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
"""
"""
Une matrice de corrélation est utilisée pour évaluer la dépendence entre plusieurs variables. Ce sont les variables manifestant une dépendance importante qui nous permettrons de develloper des modèles prédictifs de régression linéaire. On considère que deux variables sont fortement correlé à partir d'un seuil en valeur absolue de 0.6
On en conclu une forte correlation linéaire entre :
- La base de remboursement et le montant rembourse
- La base de remboursement et le depassement d'honoraire 
On aurait pu penser qu'un taux de remboursement élevée influerait significativement sur le montant remboursé par l'assurance maladie mais nous avons une influence quasi nulle à ce niveau là. Une optimisation du budget serait bien plus significative en modifiant les bases de remboursement fortement corréllée au montant remboursé. On remarque aussi que les depassement d'honoraire les plus elevées correspondent au actes de soins ayant des bases de remboursements importante également. 
On conseille alors à l'assurance maladie d'ajuster le taux de remboursements des soins pour optimiser ses dépenses.
"""
"""
<h4 style = "color:#DF2801"> 2.3) Regression lineaire simple </h4> 
"""
"""
**PREDICTION MONTANT REMBOURSE**
"""
regmodele = ols("rem_mon ~ rec_mon", data=dfc).fit()


regmodele_resume = regmodele.summary()

# Pour la visualitsation des resultats on convertit en table html et rajoute des couleurs pour plus de clarte
HTML(
(regmodele_resume
    .as_html()
    .replace('<th>  Adj. R-squared:    </th>', '<th style="background-color:#aec7e8;"> Adj. R-squared: </th>')
    .replace('<th>coef</th>', '<th style="background-color:#ffbb78;">coef</th>')
    .replace('<th>std err</th>', '<th style="background-color:#c7e9c0;">std err</th>')
    .replace('<th>P>|t|</th>', '<th style="background-color:#bcbddc;">P>|t|</th>')
    .replace('<th>[0.025</th>    <th>0.975]</th>', '<th style="background-color:#ff9896;">[0.025</th>    <th style="background-color:#ff9896;">0.975]</th>'))
)
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
"""
"""
* Modele mathematique équation des moindres carrés : y = 0.7919x + 10.232 
* La variation du montant rembourse est expliquée à 96.69% par le modèle mathématique de regression linéaire entre le montant remboursé et la base de remboursement.
* La variable de base de remboursement a t'elle une influence significative ?
**Méthode 1 : p-value**
Une p-value inférieure à 0.05% indique que la variable a une influence significative et qu'elle vaut la peine d'etre inclue dans le modèle. C'est la cas pour notre modèle car on a une p-value de 0.239
**Methode 2 : Test de Fisher**
Montrons que la liaison entre la base de remboursement et le montant remboursé est significative au seuil de signification alpha de  5%.
Soit y = ax + b l'équation des moindres carrés. On pose les hypothèses suivante :
Ho : a = 0 
H1 : a ≠ 0

Soit F(Nombre de degres de liberte, nombre observation - 2, 1 - alpha / 2 )
On desire trouver sur la loi de distribution de Fisher le nombre correspondant à  F(1, 7947, 0.975)  grace au site https://www.danielsoper.com/statcalc/calculator.aspx?id=4 on trouve : 

"""
"""
![image.png](attachment:image.png)
"""
"""
Selon le resume de la regression on a la F-Statistic qui vaut 2.505e+05. 
F-statistic < 3.8426

On rejette alors l'hyphothèse nulle et on en conclu donc que la base de remboursement a une influence significative sur le montant remboursé.
"""
"""
**PREDICTION DU MONTANT DE DEPASSEMENT D'HONORAIRE**
"""
regmodele = ols("dep_mon ~ rec_mon", data=dfc).fit()


regmodele_resume = regmodele.summary()

# Pour la visualitsation des resultats on convertit en table html et rajoute des couleurs pour plus de clarte
HTML(
(regmodele_resume
    .as_html()
    .replace('<th>  Adj. R-squared:    </th>', '<th style="background-color:#aec7e8;"> Adj. R-squared: </th>')
    .replace('<th>coef</th>', '<th style="background-color:#ffbb78;">coef</th>')
    .replace('<th>std err</th>', '<th style="background-color:#c7e9c0;">std err</th>')
    .replace('<th>P>|t|</th>', '<th style="background-color:#bcbddc;">P>|t|</th>')
    .replace('<th>[0.025</th>    <th>0.975]</th>', '<th style="background-color:#ff9896;">[0.025</th>    <th style="background-color:#ff9896;">0.975]</th>'))
)
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
"""
"""
* Modele mathematique équation des moindres carrés : y = 0.2448x -62.0323
* La variation du montant rembourse est expliquée à 43.3% par le modèle mathématique de regression linéaire entre le montant remboursé et la base de remboursement.
* La variable de base de remboursement a t'elle une influence significative ?
**Méthode 1 : p-value**
Une p-value inférieure à 0.05% indique que la variable a une influence significative et qu'elle vaut la peine d'etre inclue dans le modèle. Ici nous avons une p-value de 0 qui est cas mathématique pratique rare qui signifie que l'observation effectue est impossible à effecteur sous l'hypothèse nulle.
**Methode 2 : Test de Fisher**
Montrons que la liaison entre la base de remboursement et le montant remboursé est significative au seuil de signification alpha de  5%.
Soit y = ax + b l'équation des moindres carrés. On pose les hypothèses suivante :
Ho : a = 0 
H1 : a ≠ 0

Soit F(Nombre de degres de liberte, nombre observation - 2, 1 - alpha / 2 )
On desire trouver sur la loi de distribution de Fisher le nombre correspondant à  F(1, 7947, 0.975)  grace au site https://www.danielsoper.com/statcalc/calculator.aspx?id=4 on trouve : 
"""
"""
![image.png](attachment:image.png)
"""
"""
Selon le resume de la regression on a la F-Statistic qui vaut 6081. 
F-statistic > 3.8426

On valide alors l'hyphothèse nulle et on en conclu donc que la base de remboursement n'a pas une influence significative sur le montant remboursé.
Le modèle obtenu est alors caduque. 
"""
"""
<h4 style = "color:#DF2801"> 2.4) Top 3 </h4> 
"""
# TOP 10 des prestations les plus cher avec la nature de presation et specialité d'executant correspondant
dfc[["l_prs_nat", "l_exe_spe","rem_mon"]].nlargest(10, 'rem_mon')
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
Grace à ce top 10 on peut déduire que les consultations cotee CS et CNP ainsi que les avis ponctuels du medecins sont ceux qui coutent le plus cher à l'Assurance maladie. 

Conseil : Revoir la base de remboursement de ces actes de soins pourrait siginificativement baisser les dépenses de l'Assurance maladie
"""
# TOP 3 des prestations les plus cher par groupe de prestation
df3 = dfc.groupby("l_prs_nat").nunique().nlargest(3, "rem_mon")
df3[["rem_mon"]]

# TOP 3 des assurances qui ont le montant d'honoraire le plus eleve par groupe de type d'assurance
df2 = dfc.groupby("l_prs_nat").nunique().nlargest(3, "dep_mon")
df2[["dep_mon"]]
# TOP 3 des prestations les plus cher par groupe de specialité d'executant
df1 = dfc.groupby("l_exe_spe").nunique().nlargest(3, "rem_mon")
df1[["rem_mon"]]
# TOP 3 des depassement d'honoraire les plus eleves par groupe de specialité d'executant
df1 = dfc.groupby("l_exe_spe").nunique().nlargest(3, "dep_mon")
df1[["rem_mon"]]
"""
<h4 style = "color:#DF2801"> 2.5) Analyse des executants </h4> 
"""
"""
<h4 style = "color:	#87CEEB"> A) Moyenne du montant rembourse par type d'executant </h4> 
"""
df1 = dfc.groupby("l_exe_spe").mean()
df1[["rem_mon"]].plot(kind = "barh", color = 'rgbkymc')
df1[["rem_mon"]]
"""
<h4 style = "color:	#87CEEB"> B) Moyenne de la base de remboursement par type d'executant </h4> 
"""
df1 = dfc.groupby("l_exe_spe").mean()
df1[["rec_mon"]]
df1[["rec_mon"]].plot(kind = "barh", color = 'rgbkymc')
"""
<h4 style = "color:	#87CEEB"> C) Moyenne du taux de remboursement par type d'executant </h4> 
"""
df1 = dfc.groupby("l_exe_spe").mean()
df1[["rem_taux"]]
df1[["rem_taux"]].plot(kind = "barh", color = 'rgbkymc')
"""
<h4 style = "color:	#87CEEB"> C) Moyenne du depassement d'honoraire par type d'executant </h4> 
"""
df1 = dfc.groupby("l_exe_spe").mean()
df1[["dep_mon"]]
df1[["dep_mon"]].plot(kind = "barh", color = 'rgbkymc')
"""
<h4 style = "color:	#87CEEB"> D) Moyenne du montant rembourse par mode d'exercice de l'executant </h4> 
"""
df1 = dfc.groupby("l_exe_stj1").mean()
df1[["rem_mon"]]
"""
**Interpreation**
Les actes de soins par un executant en mode salarié sont 5.14 fois moins remboursé que pour un executant libéral.
"""
"""
<h4 style = "color:	#87CEEB"> D) Moyenne du depassement d'honoraire par mode d'exercice de l'executant </h4> 
"""
df1 = dfc.groupby("l_exe_stj1").mean()
df1[["dep_mon"]]
"""
**Interpretation**
On remarque que les executant salariés ne dépasse presque jamais leur honoraire alors que les executants du secteur libéral depasse leur honoraire en moyenne de 227 euros!
"""
"""
<h4 style = "color:#DF2801"> 2.7) Intervalle de confiance du montant remboursé </h4> 
"""
"""
**Loi de la variable** <br>
Tout d'abord on visualise la loi de la variable grace à un diagramme de densité. 
"""
sn.distplot(dfc['rem_mon'], hist=True, kde=True, 
             bins=int(5/5), color = 'darkblue', 
             hist_kws={'edgecolor':'black'},
             kde_kws={'linewidth': 4})
"""
Il semble que nous avons une loi normale néanmoins celle ci est entrave par les valeurs trop elevées du dataset. Comme nous avons pu le voir la variance du dataset est elevee precedent cela nous a deja poussé à choisir la médiane à la moyenne. Nous decidons alors de nous debarasse du dernier quartile afin d'obtenir un intervalle de confiance plus juste. 
"""
z_scores = stats.zscore(dfc[["rem_mon"]])
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 0.19).all(axis=1)
new_df = dfc[filtered_entries]
new_df
sn.distplot(new_df['rem_mon'], hist=True, kde=True, 
             bins=int(5/5), color = 'darkblue', 
             hist_kws={'edgecolor':'black'},
             kde_kws={'linewidth': 4})
new_df[["rem_mon"]].describe()
"""
<h5 style = "color:#FC4B26"> Interpretation </h5> 
"""
# Tout d'abord calculons la statistique critique à 95 % 
stats.norm.ppf(0.975) # 1 - 0.05 / 2 vaut 0.975
"""
La forme d'un intervalle de confiance est :
![image.png](attachment:image.png)
D'après les données ci dessus on a : <br>
xbar = 191.4 <br>
Valeur critique Z = 1.96 <br>
sigma = 283.47 <br>
n = 5814
"""
# Borne inferieur de l'intervalle
borne_inf = 191.4 - 1.96 * ( 283.47 / math.sqrt(5814))
borne_inf
# Borne superieure de l'intervalle
borne_inf = 191.4 + 1.96 * ( 283.47 / math.sqrt(5814))
borne_inf
"""
**Conclusion**
Nous avons une probabilité de 95% que le montant remboursé soit compris entre 184.1 et 198 euros.
"""
"""
<h4 style = "color:#DF2801"> 3.1) Data Mining : Les francais sont-ils egaux en terme de soins </h4> 
"""
# Importation des données avec tout les departements
remboursements = toutdep.REMBOURSEMENTS()

# Chargement du datafile
remboursements.charger("R201901.csv")

# Création d'un dataframe a partir du fichier csv charge
datac=remboursements.data()
df_france = pd.DataFrame.from_dict(datac)
"""
Nous nous demandons si tout les Francais sont égaux face aux soins, il convient alors d'effectuer une étude sur l'ensemble du territoire. Les actes de soins sont décris dans notre base en fonction de leur département, nous allons en déduire la région et dans un deuxième temps nous appliquerons la méthode mathématique adéquate pour etablir une typologie des regions en fonction de leur egalité face aux soins.
"""
# Dictionnaire des regions
REGIONS = {
    'Auvergne-Rhône-Alpes': ['01', '03', '07', '15', '26', '38', '42', '43', '63', '69', '73', '74'],
    'Bourgogne-Franche-Comté': ['21', '25', '39', '58', '70', '71', '89', '90'],
    'Bretagne': ['35', '22', '56', '29'],
    'Centre-Val de Loire': ['18', '28', '36', '37', '41', '45'],
    'Corse': ['2A', '2B'],
    'Grand Est': ['08', '10', '51', '52', '54', '55', '57', '67', '68', '88'],
    'Guadeloupe': ['971'],
    'Guyane': ['973'],
    'Hauts-de-France': ['02', '59', '60', '62', '80'],
    'Île-de-France': ['75', '77', '78', '91', '92', '93', '94', '95'],
    'La Réunion': ['974'],
    'Martinique': ['972'],
    'Normandie': ['14', '27', '50', '61', '76'],
    'Nouvelle-Aquitaine': ['16', '17', '19', '23', '24', '33', '40', '47', '64', '79', '86', '87'],
    'Occitanie': ['09', '11', '12', '30', '31', '32', '34', '46', '48', '65', '66', '81', '82'],
    'Pays de la Loire': ['44', '49', '53', '72', '85'],
    'Provence-Alpes-Côte d\'Azur': ['04', '05', '06', '13', '83', '84'],
}


liste_region = []
ajout = True
for index, row in df_france.iterrows():
    if ajout == False :
        liste_region.append("NULL")
    ajout = False
    for x in REGIONS :
        for a in REGIONS[x]:
            if row["dpt"] == a :
                liste_region.append(x)
                ajout = True


# Creation de la colonne region
se = pd.Series(liste_region)
df_france['region'] = se.values
# On verifie que la colonne a bien etait rajoute
df_france[["dpt", "region"]]
# Somme du montant rembourse par region
df1 = df_france.groupby("region").sum()
df1[["rem_mon"]].sort_values(by='rem_mon', ascending=False)
df1[["rem_mon"]].plot.bar(color="green")
df1[["rem_mon"]]
"""
<h5 style = style = "color:#DF2801"> Interpretation </h5>
L'Assurance maladie a principalement dépense en région d'Ile de France largement en tete avec près du double du montant remboursé de son successeur, Provence-Alpes-Cote-d'Azur. 
   
"""
"""
**ANALYSE EN COMPOSANTE PRINCIPALE**

L'analyse en composante principale est une méthode de Data Mining qui permet de résumer un grand nombre de données de manière pertinente. Pour appliquer l'ACP nous avons besoin d'un tableau de type individus x variables quantitatives.Nous effecturons alors les modifications necessaire pour obtenir un tableau tel que les individus seront les Régions et les variables quantitatives : l'ensemble des indicateurs statistique type possible pour chacune des variables quantitatives que nous avons dans notre dataset. 

*Objectifs de l'étude*

* Construire une typologie des régions
Dresser un bilan des ressemblances et dissemblance entre les région du point de vue des variables representative de l'égalité face aux soins.
* Dresser un bilan des correlations entre les variables
Nous désirons savoir quelles sont les variables qui apportent un information similaire et egalement obtenir un petit nombre d'indicateur capable de résumer la majorité des variables appelé composantes principales.
"""
df_ACP = df_france.groupby("region").agg(
    #Montant Rembourse
    max_rem_mon = ("rem_mon", max),
    min_rem_mon = ("rem_mon", min),
    somme_rem_mon = ("rem_mon", sum),
    moyenne_rem_mon = ("rem_mon", np.mean),
    ecartype_rem_mon = ("rem_mon", np.std),
    #Base de remboursement
    max_rec_mon = ("rec_mon", max),
    min_rec_mon = ("rec_mon", min),
    somme_rec_mon = ("rec_mon", sum),
    moyenne_rec_mon = ("rec_mon", np.mean),
    ecartype_rec_mon = ("rec_mon", np.std),
    #Taux de remboursement
    max_rem_taux = ("rem_taux", max),
    min_rem_taux = ("rem_taux", min),
    somme_rem_taux = ("rem_taux", sum),
    moyenne_rem_taux = ("rem_taux", np.mean),
    ecartype_rem_taux = ("rem_taux", np.std),
    #Montant du depassement du depassement d'honoraire
    max_dep_mon = ("dep_mon", max),
    min_dep_mon = ("dep_mon", min),
    somme_dep_mon = ("dep_mon", sum),
    moyenne_dep_mon = ("dep_mon", np.mean),
    ecartype_dep_mon = ("dep_mon", np.std),
)
df_ACP
# Information sur le dataframe sur lequel on réalise l'ACP

# Dimensions 
print(df_ACP.shape) # (18,20) Nous avons 18 observations et 20 variables
# On charge les données sur excel pour completer l ACP sur R
df_ACP.to_excel("df_ACP.xlsx")
"""
**VALEUR PROPRES**
![image.png](attachment:image.png)
![image-2.png](attachment:image-2.png)
"""
"""
**Combien d'axe factoriel doit-on garder**

* Critère du coude 

La premiere cassure a lieu entre le premier et le deuxième axe factoriel. On ne garde que les axes precedant cette brisure on choisit alors selon le critère du coude de conserver le premier axe.

* Critère du seuil d'inertie 0.70


Les deux premier axe factoriel restituent 69.48% de l'inertie totale on choisit alors de conserver les 2 premiers axes factoriels.

Conclusion max(1,2)= 2 donc on choisis de garder les 2 premiers axes pour constituer le premier plan factoriel.
"""
"""
**PREMIER PLAN FACTORIEL ET CERCLE DES CORRELATIONS**
"""
"""
![image-2.png](attachment:image-2.png)
"""
"""
**INTERPRETATION DU PREMIER PLAN FACTORIEL**

On voit que la région Ile de France s'éloigne significativement des autres observations on en déduit que l'acces au soin en Ile-de-france est globalement différent de celui dans autres régions. On peut également distinguer 3 groupes :


Groupe 1 :
- Provence-Ales-Cote-d'Azur
- Pays de La Loire
- Auvergne-RhonesèAlpes
- Bretagne
- Occitanie 
- Grand Est

Groupe 2 :

- La Reunion
- Nouvelle Acquitaine
- Corse
- Normandie
- Hauts de France
- Bourgogne-Franche-Compte

Groupe 3 :

- Martinique
- Centre Val de Loire
- Guadeloupe
- Guyane

Les valeurs obtenue pour chaque groupe sont proche on en déduit que l'accès au soin dans ces groupes de régions est à peu près le  meme. 
Les groupe 2 et 3 s'oppose au groupe 1 sur le premier axes on en déduit que l'accès au soin est significativement different pour cette configuration car le premier axe est celui qui résume au mieux les points.
On remarquera néanmoins une distinction entre les groupes 2 et 3 qui s'oppose au niveau du deuxième axe de données.

"""
"""
**INTERPRETATION DU CERCLE DES CORRELATIONS**

![image.png](attachment:image.png)
"""
"""
**INTERPRETATION DU CERCLE DES CORRELATIONS**

Les variables qui n'ont pas d'interet dans notre etude sont celle qui s'éloigne de la circonférence du cercle. Elles ont une faible corrélation. Ce sont les variables :
- Moyenne_rem_taux
- min_dep_mon
- min_rem_taux
- min_rem_mon
- min_rec_mon

On remarque que toute les variables sont corrélées positivement à l'axe 1. Les vairbales proches comme moyenne_rem_mon et moyenne_rec_mon sont fortement correlées et donnent donc une information similaire à notre etude. Les variables qui forment un axe de 90degrès ont des valeurs significativement diffement pour l'axe 1 comme moyenne_rem_mon et somme_dep_mon.
"""
"""
**COORDONNEES**
![image.png](attachment:image.png)
"""
"""
**CONTRIBUTION**
![image.png](attachment:image.png)
"""
"""
**INTERPRETATION DES CONTRIBUTIONS**

Seuil : Moyenne des contribution CONTBARRE
CONTBARRE = 5
Les variables que l'on retient sont :
- somme_rem_mon
- max_rem_mon
- moyenne_rem_mon
- ecartype_rem_mon
- max_rec_mon
- ecartype_dep_mon
- moyenne_dep_mon 
- somme_dep_mon
- max_dep_mon
- somme_rem_taux
- ecarttype_rec_mon
- moyenne_rec_mon
- somme_rec_mon
Ces 13 variables sur 20 sont celles qui contribuent le plus au premier axe factoriel qui est celui qui resument le mieux les données.
"""
"""
**COS^2**
![image.png](attachment:image.png)
"""
"""
**INTERPRETATION DES COS^2**

Le seuil des cos^2 est 0.5. Il indique la qualité de representation de la variable sur l'axe factoriel et il doit etre proche de 1. 
Les variables bien representées sur l'axe 1 sont :
- max_rem_mon
- somme_rem_mon
- max_rec_mon
- ecart_type_rem_mon
- moyenne_rem_mon
- ecarttype_dep_mon
- moyenne_dep_mon
- somme_dep_mon
- max_dep_mon
- somme_rem_taux
- ecartype_rec_mon
- moyenne_rec_mpn
- somme_rec_mon


"""
"""
**INFORMATION COMPLEMENTAIRE : PIB PAR HABITANT INSEE 2016**
![image.png](attachment:image.png)
"""
"""
**CONCLUSION**

On remarque que la typologie dégagée est fortement assimilable au dépense de l'assurance maladie par région. Le groupe 1 est celui pour lequel on a les dépense les plus elevées suivi du groupe 2 et enfin le groupe 3 pour lequel on note les dépenses les plus faibles. On en conclu que tous les francais n'ont pas le meme accès au soin sur tout le territoire mais qu'au sein des groupes établi l'accès au soin peut etre considéré comme homogène. Le PIB par habitant calculé par l'INSEE peut etre associé au groupes établis allant de ceux pour qui l'Assurance dépense le plus au moins correspondent parfaitement au groupe de régions des plus au moins riches. On en déduit que les régions les plus riches beneficient d'un remboursement plus élevée et que les groupes de régions les plus pauvres beneficient d'un remboursement moindre. La richesse de la région est donc un facteur influent ce qui renforce notre conclusion que les francais n'ont pas accès au soin à pied égal sur tout le territoire. 


On retient alors la typologie suivante : 

Groupe 1 :
- Ile de France
- Provence-Ales-Cote-d'Azur
- Pays de La Loire
- Auvergne-RhonesèAlpes
- Bretagne
- Occitanie 
- Grand Est

Groupe 2 :

- La Reunion
- Nouvelle Acquitaine
- Corse
- Normandie
- Hauts de France
- Bourgogne-Franche-Compte

Groupe 3 :

- Martinique
- Centre Val de Loire
- Guadeloupe
- Guyane


"""