Je suis un cours dans lequel il faut calculer le rapport de corrélation entre 2 variables. Je remets mon code en entier , le problème venant de la dernière partie.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
data=pd.read_csv('C:/Users/Barbara/Desktop/Raph/MOOC/nettoyer_jeu_donnees/operations_enrichies.csv')
# représenter variable quantitative et qualitative
X = 'categ' # qualitative
Y = 'montant'# quantitative
# on ne garde que les dépenses en créant sous échantillons
sous_echantillon = data[data['montant']<0].copy()
# on remet les dépenses en positif
sous_echantillon['montant'] = - sous_echantillon['montant']
# pour enelever une categorie :
sous_echantillon = sous_echantillon[sous_echantillon['categ'] != 'TELEPHONE']
# les lignes suivantes affichent le graphique
modalites=sous_echantillon[X].unique()
groupes=[]
for m in modalites:
groupes.append(sous_echantillon[sous_echantillon[X]==m][Y])
# propriétés graphiques
medianprops={'color':'black'}
meanprops={'marker': 'o', 'markeredgecolor':'black', 'markerfacecolor': 'firebrick'}
plt.boxplot(groupes, labels=modalites, showfliers = False, medianprops = medianprops,
vert = False, patch_artist = True, showmeans = True, meanprops = meanprops )
plt.xlabel('montant')
plt.ylabel('catégorie')
plt.show()
# code permettant de calcule n² (eta squared) = rapport de correlation !
X = 'categ' # qualitative
Y = 'montant'# quantitative
# on ne garde que les dépenses en créant sous échantillon
sous_echantillon = data[data['montant']<0]
def eta_squared(x,y):
moyenne_y = y.mean
classes = []
for classe in x.unique():
yi_classe = y[x==classe]
classes.append({'ni' : len(yi_classe),
'moyenne_classe': yi_classe.mean()})
SCT = sum([(yj-moyenne_y)**2 for yj in y])
SCE = sum([c['ni']*(c['moyenne_classe']-moyenne_y)**2 for c in classes])
return float(SCE/SCT)
eta_squared(sous_echantillon[X], sous_echantillon[Y])
---------------------------------------------------------------------------TypeError Traceback (most recent call last)
<ipython-input-23-17241c16bceb> in <module> 16 SCE = sum([c['ni']*(c['moyenne_classe']-moyenne_y)**2for c in classes]) 17return float(SCE/SCT)---> 18eta_squared(sous_echantillon[X], sous_echantillon[Y])<ipython-input-23-17241c16bceb> in eta_squared(x, y) 13 classes.append({'ni' : len(yi_classe),
14 'moyenne_classe': yi_classe.mean()})
---> 15SCT = sum([(yj-moyenne_y)**2for yj in y]) 16 SCE = sum([c['ni']*(c['moyenne_classe']-moyenne_y)**2for c in classes]) 17return float(SCE/SCT)<ipython-input-23-17241c16bceb> in <listcomp>(.0) 13 classes.append({'ni' : len(yi_classe),
14 'moyenne_classe': yi_classe.mean()})
---> 15SCT = sum([(yj-moyenne_y)**2for yj in y]) 16 SCE = sum([c['ni']*(c['moyenne_classe']-moyenne_y)**2for c in classes]) 17returnSCE/SCT
TypeError: unsupported operand type(s) for -: 'float' and 'method'
Je voulais savoir à quoi correspond 'method' dans le message d'erreur? Une méthode c'est par exemple le 'sum()' en début de ligne?
Quelqu'un peut m'indiquer un peu plus précisément d'où vient l'erreur et comment la corriger.
(les 'montants' sont des nb décimaux d'où peut-être l'erreur avec le float ? )
Merci,
- Edité par RaphaëlBitoun 14 novembre 2019 à 17:43:28
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Problème calcul 'float' and 'method'
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)