1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
| from Tkinter import *
from math import *
import Pmw
from random import randrange
def evaluer(event):
"Calcul de moyenne"
global substit, substit2, n, SEffectif, Moyenne
test=len(SaisieEff.get())
test2=len(SaisieVal.get())
if ((test==0)or(test2==0)):
AffMoy.configure(text = "Entrez des valeurs")
else:
substit =eval(SaisieEff.get()) #passe les donnees saisies sous forme de tableau d'entier
substit2 = eval(SaisieVal.get())
n=len(substit) #calcul le nombre de case du tableau
n2=len(substit2)
i=0
SEffectif=SValeur=0
if ((n!=n2)or(n==0)or(n2==0)or(n==1)or(n2==1)): #au cas ou il n'y a pas le meme nombre de valeur que d'effectif on renvoie erreur
AffMoy.configure(text = "Erreur")
else:
while i<n: #Boucle calculant l'effectif total
SEffectif=SEffectif+substit[i]
i=i+1
i=0
while i<n2: # boucle calculant la valeur * l'effectif
SValeur=SValeur+substit[i]*substit2[i]
i=i+1
Moyenne=float(SValeur/SEffectif)
AffMoy.configure(text = "Moyenne = " + str(Moyenne))
def Canevas():
"Constructeur graphique : axes et echelle horizontale"
global fenetre3
test=len(SaisieEff.get())
test1=len(SaisieVal.get())
if ((test==0)or(test1==0)):
AffMoy.configure(text = "Entrez les valeurs")
else:
fenetre3=Tk()
fenetre3.title("Repere")
substit =eval(SaisieEff.get()) #passe les donnees saisies sous forme de tableau d'entier
substit2 = eval(SaisieVal.get())
n=len(substit) #calcul le nombre de case du tableau
n2=len(substit2)
Can=Canvas(fenetre3) #variable contenant le canevas
Can.configure(bg='ivory',bd=2, height=600,width=640, relief= SUNKEN)
Can.create_line(0, 300, 640, 300, arrow=LAST) #Creatrion de l'axe des absisses
Can.create_line(320, 600, 320, 5, arrow=LAST) #Creation de l'axe des ordonnees
for t in range(1, 64): #boucle de graduation sur x
stx = t*10
Can.create_line(stx, 300-4, stx, 300+4)
stx=0
for t in range(1, 60): #boucle de graduation sur y
stx = 10 + t*10
Can.create_line(324, stx, 316, stx)
fenetre3.geometry("700x690")
Can.pack() #affichage du canevas
i=0
buff, buff2=substit[i], substit2[i]
while i<n: #boucle recherchant le plus grand nombre contenu dans le tableau des effectifs
if (buff<substit[i]):
buff=substit[i]
if (buff<substit2[i]): #boucle recherchant le plus grand nombre contenu dans le tableau des valeurs
buff2=substit2[i]
i=i+1
a=b=10
NbrMax=31
global Expa
Expa=0
Expb=0
while buff>NbrMax: #Boucle permettant de calculer le coefficient qui sera applique sur les effectifs pour adapter l'echelle
a=float(a)/10
NbrMax=NbrMax*10
Expa=Expa+1
NbrMax=29
while buff2>NbrMax: #Boucle permettant de calculer le coefficient qui sera applique sur les valeurs pour adapter l'echelle
b=float(b)/10
NbrMax=NbrMax*10
Expb=Expb+1
i=0
while i<n: #Boucle creant les differents points du nuage
Can.create_line(substit[i]*float(a)+316, 300-(substit2[i]*float(b)),substit[i]*float(a)+324 ,300-(substit2[i]*float(b)),fill='red', smooth=1) # horizontal
Can.create_line(substit[i]*float(a)+320, 304-(substit2[i]*float(b)),substit[i]*float(a)+320, 296-(substit2[i]*float(b)),fill='red', smooth=1) # vertical
i=i+1
if (a==10):
a=1
else:
a=10**Expa
if (b==10):
b=1
else:
b=10**Expb
AffEchelleX = Label(fenetre3, text = "Sur l'axe des absisses (effectif), 1 unite = " + str(a))
AffEchelleY = Label(fenetre3, text = "Sur l'axe des ordonnees (valeur), 1 unite = " + str(b))
AffEchelleX.pack()
AffEchelleY.pack()
ButEcarType=Button(fenetre3, text = "Ecart-type", command=EcartType)
ButCorrLin=Button(fenetre3, text = "Correlation lineaire", command=CoeffCor)
ButEcarType.pack(side = LEFT)
ButCorrLin.pack(side = RIGHT)
def EcartType():
"Calcul de l'ecart type"
Somme=i=0
substit =eval(SaisieEff.get()) #passe les donnees saisies sous forme de tableau d'entier
substit2 = eval(SaisieVal.get())
n=len(substit) #calcul le nombre de case du tableau
n2=len(substit2)
while i < n:
Somme=Somme+substit[i]*(substit2[i]-Moyenne)**2
i=i+1
Variance=float(Somme/SEffectif)
Ecart=float(sqrt(Variance))
global AffEcarCoeff
AffEcarCoeff=Label(fenetre3, text="Ecart-type = " + str(Ecart))
AffEcarCoeff.pack()
def CoeffCor():
"Calcul le coefficient de correlation lineaire"
MoyenneY=i=MoyenneX=0
while i<n: #boucle calculant les moyennes des champs effectifs et valeurs
MoyenneX=MoyenneX+substit2[i]
MoyenneY=MoyenneY+substit[i]
i=i+1
MoyenneX=float(MoyenneX/n)
MoyenneY=float(MoyenneY/n)
i=Covariance=0
while i<n: #boucle calculant la covariance entre les champs effectif et valeur
Covariance=float(Covariance+(substit2[i]-MoyenneX)*(substit[i]-MoyenneY))
i=i+1
i=EcartY=EcartX=0
while i<n: #boucle calculant l'ecart type de effectif et de valeur
EcartX=EcartX+(substit2[i]-MoyenneX)**2
EcartY=EcartY+(substit[i]-MoyenneY)**2
i=i+1
EcartXY=sqrt(EcartX*EcartY)
Coeff=float(Covariance/EcartXY)
AffEcarCoeff=Label(fenetre3, text="r = " + str(Coeff))
AffEcarCoeff.pack()
def help():
"Creation de la fenetre d'aide"
fenetre2=Tk()
fenetre2.title('Aide PythonStats')
fenetre2.geometry('650x200')
TitleAide=Label(fenetre2, text='Aide pour PythonStats', foreground='black', font='Arial 16')
aide1=Label(fenetre2, text='Saisie des donnees', foreground='blue', font='arial 12')
text1=Label(fenetre2, text="Les donnees doivent etre separees d'une virgule ',' . Lorsqu 'il y a des decimaux on utilise le point '.' (ex: 12.56). Pour obtenir la moyenne en reelle")
text2=Label(fenetre2, text="vous devez rentrer au minimum une donnee en decimale, il suffit de rajouter un point apres une donnee (ex: '12.')")
aide2=Label(fenetre2, text='Statistiques a 2 variables', foreground='blue', font='arial 12')
TitleAide.grid(row=0, column=0)
aide1.grid(row=3, column =0)
text1.grid(row=4, column=0)
text2.grid(row=5, column=0)
fenetre2.mainloop
def OpenCours():
file=open('Statistiques.pdf','r')
#----------PROGRAMME PRINCIPAL-----------#
fenetre = Tk() #Variable contenant l'objet Tk()
fenetre.title('PythonStats')
fenetre.geometry("200x163")
photo=PhotoImage(file='ptinterrog.gif')
photo2=PhotoImage(file='NuagePt.GIF')
photo3=PhotoImage(file='cour.GIF')
toolbar=Frame(bd=1)
help=Button(toolbar, image=photo, command=help)
Cours=Button(toolbar,image=photo3, command=OpenCours)
tip=Pmw.Balloon() #Utilise la fonction balloon de la classe Pmw
AffMoy = Label(fenetre)
AffEffectif = Label(fenetre, text='Effectif :', foreground="blue")
AffValeur = Label(fenetre, text='Valeur :', foreground="blue")
bou=Button(fenetre,image=photo2, command=Canevas)
SaisieEff = Entry(fenetre)
SaisieVal = Entry(fenetre)
tip.bind(help, "aide") #affiche <<aide>> dans une bulle lorsque la souris passe sur le bouton "help"
tip.bind(Cours, "Cours Statistiques et Probabilites")
tip.bind(bou, "Dessine le nuage de point dans un repere")
#Affectation de fonction evaluer lorsqu'on apuie sur entree a l'objet entree
SaisieEff.bind("<Return>", evaluer)
SaisieVal.bind("<Return>", evaluer)
#Affichage des differentes objets de la fenetre
toolbar.pack(expand=YES, fill=X)
Cours.pack(side=LEFT)
help.pack(side=LEFT)
AffEffectif.pack()
SaisieEff.pack()
AffValeur.pack()
SaisieVal.pack()
AffMoy.pack()
bou.pack()
fenetre.mainloop |
Partager