Partage
  • Partager sur Facebook
  • Partager sur Twitter

Histogramme de frequence

    3 décembre 2015 à 11:38:37

    Salut,

    Alors voila je suis entrain d’écrire un petit programme en python et mon but et de créer un histogramme de fréquence.

    celui ci devant ressembler en gros a ça : 

    La situation : je fait la somme de 5 lancer de des, les résultats varient donc de 5 à 30.

    Je répète ça 1000 fois dans une boucle et j’obtiens finalement un tableau de 26 éléments contenant le nombre d'apparition de chaque somme comme ceci :

    [0. 1. 3. 1. 8. 16. 23. 40. 53. 54. 92. 99. 97. 111. 83. 90. 80. 61. 41. 12. 14. 10. 10. 1. 0. 0.]

    voila donc les valeur que je veut dans mon histogramme :

    -à la colonne 5 : 0

    -à la colonne 6 : 1

    -à la colonne 7 : 3

    ...

    -à la colonne 30 : 0

    Voila le code de ma classe pour l'instant et son résultat.

    #!/usr/bin/python
    # -*- coding: latin-1 -*-
    from scipy import *
    import numpy as np
    import matplotlib.pyplot as plt
    from random import *
    
    def lancer () :
    	return (randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6)) # somme de 5 chiffre aléatoires entre 1 et 6 inclus
    
    def frequence (n) :
    	freq = zeros(26)
    	for i in range(0, n) :
    		tmp = lancer ()
    		
    		freq[tmp-5] += 1
    	#End for
    	return freq
    
    def test () :
    	result = frequence (1000)
    	print (result)
    	
    	plt.hist(result, normed = 1)
    	plt.xlabel('Somme des 5 dés')
    	plt.ylabel('Fréquence')
    	
    	plt.grid(True)
    	plt.show()
    
    test()

    P.S : Je pense globalement avoir compris mon problème mais j'ai beau chercher rien a faire ...

    P.S 2 : Si vous pouviez répondre assez rapidement cela m'arrangerais j'en ai besoin assez vite ^^

    Merci d'avance,

    Rémi.

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2015 à 12:33:32

      Ce n'est pas à toi de calculer les fréquences des valeurs, c'est à hist de le faire (c'est son boulot ;)). Ce que tu donnes à cette fonction, c'est ton array de 1000 valeurs (les 1000 sommes de tes lancers).

      Le petit piège, c'est de bien choisir la valeur des paramètres de hist. Le nombres de bins c'est le nombre d'intervalles, et il n'y a pas 25 intervalles (comme je le pensais) ni 26 (comme tu le pensais) mais 24 intervalles (6->7: intervalle, 7->8: intervalle, ...):

      import numpy as np
      import matplotlib.pyplot as plt
      from random import randint
      
      def tirage(nb):
          x = np.zeros(nb)
          for i in range(nb):
              x[i] = (randint(1, 6) + randint(1, 6) + randint(1, 6) + randint(1, 6) +
                      randint(1, 6))
          return x
      
      NB = 1000
      x = tirage(NB)  #Ou np.random.random_integers(6, 30, NB)
      plt.hist(x, bins=24, range=(6, 30), normed=True)
      plt.show()


      Le paramètre range représente la valeur min et max du graphe.

      PS: Le random_integers est un test que j'ai fait pour savoir si lancer 1000 fois un dé de 30 valeurs est équivalent à lancer 1000 fois 5 dés de 6 valeurs. La réponse est non :p

      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        3 décembre 2015 à 12:47:55

        Merci a toi ça ma beaucoup aider j'ai le résultat que je voulais !

        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2015 à 16:26:55

          Tu peux aussi rendre ça un peu plus jolie avec seaborn.

          import random
          import pylab as plt
          import seaborn as sns
          
          data = [sum(random.randint(1,6) for i in range(5)) for i in range(1000)]
          ax = sns.distplot(data)
          plt.show()



          • Partager sur Facebook
          • Partager sur Twitter

          Histogramme de frequence

          × 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.
          • Editeur
          • Markdown