PYTHON不推荐使用的DataFrame版本问题

时间:2018-10-15 12:28:24

标签: python dataframe

您可以在下面看到我的代码。直到我使用最后一行代码通过Kaplan Meier估计器检查条件生存时间后,它才能正常工作:

kmf._conditional_time_to_event_()

我收到的错误消息是:

  

C:\ Users \ YannickLECROART \ Miniconda3 \ envs \ machinelearning \ lib \ site-packages \ lifelines \ utils__init __。py:73:FutureWarning:from_items已弃用。请改用DataFrame.from_dict(dict(items),...)。 DataFrame.from_dict(OrderedDict(items))可用于保留键顺序。     ],orient ='index',columns = survival_functions.columns)

从我在互联网上阅读的内容来看,我似乎使用了已弃用的代码,但无法确切知道在哪里。你能帮我吗?

完整代码:

#%matplotlib inline
#en cas d'utilisation avec jupyter notebook

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from lifelines import KaplanMeierFitter
import matplotlib.ticker as mtick #utilisé pour paramétrer le graphine (cf % des valeurs de l'axe des y)s

#on créé une variable dans laquelle on crée un dataframe/tableau via Panda que l'on remplit avec le fichier CSV
iot_df = pd.read_csv("testmaintenanceprediot.csv")

# on va pesonnaliser le graphique que l'on va utiliser pour afficher les données
sns.set(palette = "colorblind", font_scale = 1.35, 
        rc = {"figure.figsize": (12,9), "axes.facecolor": ".92"})

#cette méthode permet le 5 1ère lignes du tableau par défaut si aucun paramètre n'est affiché c'est juste pour visualiser
iot_df.head()

#pour faire appel à l'estimateur de Kaplan-Meier on créé d'abord un objet KaplanMerierFitter
kmf = KaplanMeierFitter() 

#on utilise la méthode fit de l'objet KaplanMeierFitter pour aller récupérer les données du tableau
kmf.fit(durations = iot_df.duree, 
        event_observed = iot_df.batterie_0)
#le 1er argument accepte un tableau d'une série de durée ou d'occurence
#le 2eme arguement accepte un tableau d'une série qui indique si la fin/mort s'est produite


#après avoir rempli l'estimateur de données on peut accéder à ce tableau qui affiche les sujets sur différents périodes
kmf.event_table

#print(kmf)
#commande permettant de voir si l'estamateur Kaplan a pu remplir son tableau

#Dans le tableau obtenu et visible sur Jupyter notebook on a:
#la colonne REMOVED qui correspond à la somme des colonnes CENSORED + OBSERVED durant la période donnée.
#la colonne OBSERVED correspond au nbr d'observations
#la colonne CENSORED correspond au nbr d'observations retirée faute de données ou par retrait par exemple (c'est la force de l'estimateur Kaplan qui tient compte des ces paramètres dans son calcul (cf médical))
#la colonne ENTRANCE correspond au moment où un sujet est rentrer dans la population étudiée durant la période donnée. 
#la colonne AT RISK correspond au nbr de sujets toujours fonctionnel (pas de maintenance) sur une période donnée

'''
la formule de probabilité de survie est la suivante:
t= temps

S(t) = (nbr de sujets à risque au départ - nbr de sujets qui ont eu une maintenance immédiatement) / nbr de sujets à risque au départ

'''

#le code pour calculer cette formule est donc
event_at_0 = kmf.event_table.iloc[0, :] #on récupère les données pour temps = 0 depuis le tableau
#on calcule à présent la probabilité de survie pour temps = 0
surv_for_0 =  (event_at_0.at_risk - event_at_0.observed) / event_at_0.at_risk * 100
surv_for_0
#pour afficher la variable qui représente la probabilité de survie pour temps = 0
#print(surv_for_0)
#En multipliant par 100 le résutat obtenue on obtient le % de sujets qui sont opérationnels donc sans maintenance au moment où ils ont été mis en service



#la formule pour la probabilité de survie pour t=1
'''
la formule de probabilité de survie pour temps = 1:

S1 = (nbr de sujets ayant survécu à la mise en service - nbr de sujets qui ont échoué la 1ère année) / nbr de sujets ayant survécu à la mise en service

'''
#la valeur de S1 représente la probabilité que si un sujet n'a pas de maintenance immédiatement après mise en service alors on obtient un % indiquant la chance d'être opérationnel la 1ère année
#ci-dessous le code pour temps=1
event_at_1 = kmf.event_table.iloc[1, :]
surv_for_1 =  (event_at_1.at_risk - event_at_1.observed) / event_at_1.at_risk * 100
surv_for_1
#pour afficher la variable qui représente la probabilité de survie pour temps = 1
#print(surv_for_1)
#En multipliant par 100 le résutat obtenue on obtient le % de change qu'un sujet fonctionne correctement la 1ère année de mise en service



#la formule pour la probabilité de survie pour t=2
'''
la formule de probabilité de survie pour temps = 2:

S2 = (nbr de sujets ayant survécu après la 1ère année - nbr de sujets qui ont échoué pendant la 2 année) / nbr de sujets ayant survécu après la 1ère année

'''
# ci-dessous le code pour  t = 2
event_at_2 = kmf.event_table.iloc[2, :]
surv_for_2 =  (event_at_2.at_risk - event_at_2.observed) / event_at_2.at_risk * 100
surv_for_2
#pour afficher la variable qui représente la probabilité de survie pour temps = 2
#print(surv_for_2)
#S2 représente la probabilité qu'un sujet fonctionne la 2e année après avoir fonctionné la 1ère année.

'''
la formule de probabilité de survie pour un sujet au delà de 2 ans:

S2 = S0 * S1 * S2
'''
#on ne fait que multiplier les 3 probabilités de survie individuelles
#ci-dessous le code pour cette formule:
surv_after_2 = surv_for_0 * surv_for_1 * surv_for_2 / 10000
surv_after_2
#la variable surv_after_2 correspond donc à la probabilité qu'un appareil fonctionne au delà de 2 ans
#pour afficher la variable qui représente la probabilité de survie au delà de 2 ans
#print(surv_after_2)

'''
A ce stade notre objet KaplanMeierFitter a déjà effectué tous les calclus plus haut pour nous. On peut obtenir la probabilité de survie pour une période donnée en 
utilisant simplement la méthode predict. donc pour obtenir la valeur de S(2) on passe juste 2 dans la méthode predict.

EX
kmf.predict(2)

Pour voir le résultat dans le terminal
analyse = kmf.predict(2)
print(analyse)

La méthode predict. peut aussi gérer un tableau en retournant ainsi un tableau de probabilités:

Ex pour la probabilié de survie d'un sujet après 1,3,5 et 10 ans

kmf.predict([1,3,5,10])

Pour voir le résultat dans le terminal
analyse = kmf.predict([1,3,5,10])
print(analyse)

'''                 

'''                 
Pour obtenir la liste complète des probabilités estimées  de notre objet KaplanMeierFitter nous utilisons l'attribut survival_function_

Pour voir le résultat dans le terminal
analyse = kmf.survival_function_
print(analyse)
'''

'''
Pour obtenir la médiane qui indique le nombre d'année où 50% des objets non plus de batterie

analyse =kmf.median_
print(analyse)

'''


#pour faire un graphique de l'estimation de l'objet KaplanMeier on utilise la méthode plot
kmf.plot()
# Ajouter un titre et un label pour l'axe des y mais aussi changer le format en % de l'axe des Y => 0,1 = 100%
plt.title("Estimation du niveau de la batterie des capteurs")
plt.ylabel("Probabilité qu'un appareil ait toujours de la batterie")
plt.xlabel("Timeline en mois")
plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter(1.0))#le paramètre 1.0 permet de changer le format en %
#plt.show()  #pour voir le graphique en terminal 


#Pour faire une analyse par modèle d'appareil il faut d'abord trier la colonne concernée de la Dataframe dans cet exemple la colonne modele-objet du fichier CSV
iot_df.modele_objet.unique()
#pour vérifier si le tri est bien effectué utiliser les 2 commandes suivantes:
#analyse=iot_df.modele_objet.unique()
#print(analyse)
iot_df.modele_objet.value_counts() #permet d'avoir un comptage pour chaque modèle
#pour vérifier si le comtage a bien été effectué utiliser les 2 commandes suivantes:
#analyse=iot_df.modele_objet.value_counts()
#print(analyse)
idx = iot_df.modele_objet.isin(["IR868LR"])
#commande pour retirer toutes les lignes dont le modèle de capteur est "IR868LR"
iot_df_2 = iot_df.loc[~idx, :]
#commande pour garder toutes les autres lignes dont le modèle n'est pas "IR868LR"
len(iot_df_2.modele_objet.unique())
#commande pour vérifier le nombre d'entrée pour déterminer ensuite les dimensions du tableau

#pour vérifier si le tri est bien effectué utiliser les 2 commandes suivantes:
#analyse=iot_df_2
#print(analyse)


#on créé à présent un nouvel objet KMF (Kaplan Meier Fitter)
kmf_par_modele = KaplanMeierFitter()

duration = iot_df_2.duree
observed = iot_df_2.batterie_0

#définir l'ordre des modèles quand il y en a plusieurs sinon lister le seul
modele_capteur= ["ERS_C02"]

#Créer une grille  de 5x3 en créant les modèles d'objets et les axes
#Régler Set share Y sur True (vrai, booléen) pour que chaque rangée du graphique ait les labels de l'axe des y le plus à gauche
fig, axes = plt.subplots(nrows = 1, ncols = 2, sharey = True, figsize=(12,15))

#la méthode flatten() va créer un tableau à 1 dimension pour chaque axe que l'on va mettre sous forme graphique avec notre grille
#On assemble ensuite les 2 tableaux à 1 dimension contenant les positions et les axes de sorte à ce qu'on puisse répéter chaque position
#et dessiner son estimation KM sur ses axes respectifs
for modele_capteur, ax in zip(modele_capteur, axes.flatten()):
    #on va récupérer les entrées pour les objets qui correspondent au label modele_capteur (ERC_CO2)
     idx = iot_df_2.modele_objet == modele_capteur
     #remplir l'estimateur KMF pour ces appareils
     kmf_par_modele.fit(duration[idx], observed[idx])
     #dessiner les estimations du KMF pour ce modèle sur ses axes respectifs
     kmf_par_modele.plot(ax=ax, legend=False)
     #ajouter le texte pour indiquer la moyenne pour le modèle concerné
     #les coordonnées xy passés pour chaque axe
     #par ex (.5, .5) place le texte au centre du graphique
     ax.annotate("Moyenne = {:.0f} mois".format(kmf_par_modele.median_), xy = (.47, .85), xycoords = "axes fraction")
     #retirer le label par défaut "timeline" de l'axe des x appliqué par la méthode kmf.plot()
     ax.set_xlabel("")
     #donner des titres pour chaque graphique s'il y en a plusieurs (là un seul pour l'unique modèle)
     ax.set_title(modele_capteur)
     #définir des axes y et x communs pour tous les graphes s'il y en plusieurs
     ax.set_xlim(0,25)
     ax.set_ylim(0,1)


#ajuster le tout pour l'affichage
fig.tight_layout()

#définir un axe des x commun
fig.text(0.5, -0.01, "Timeline (Mois)", ha="center")
#définir un axe des y commun
fig.text(-0.01, 0.5, "Probabilité qu'un ERS_C02 ait toujours de la batterie",  va="center", rotation="vertical")
#ajouter un titre pour l'ensemble du graphique (cf s'il y a des sous graphiques)
fig.suptitle("Courbe de longévité pour le capteur ERS_C02",
             fontsize=20)
#ajouter un peu de marge entre le titre et le reste du graphique pour éviter les chevauchements
fig.subplots_adjust(top=0.92)

plt.show()

kmf._conditional_time_to_event_()

1 个答案:

答案 0 :(得分:1)

您可以将python配置为在触发警告时引发带有追溯的异常。参见Get Traceback of warnings