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