Dans matplotlib, l'axe vertical de l'histogramme
--Frequency (par défaut de matplotlib) --Fréquence relative
Et dessiner.
La norme de matplotlib.hist a changé comportement de matplotlib: histgram normé Statistiques ② Utilisez python pour apprendre la fonction de densité de probabilité (distribution normale, distribution normale standard)!
La formule est
--Densité de fréquence = fréquence / largeur de classe
Il semble. Lorsque j'ai expérimenté le code Python ci-dessous, il semble que l'axe vertical soit la densité de fréquence relative lorsque "densité = True" est spécifié dans la fonction hist. La fonction hist a également une option normée (obsolète), mais il semble que l'option densité supprime ce bogue.
Dessinez trois histogrammes. Le nombre de données est de 10000 et il s'agit d'un nombre aléatoire normal avec une valeur moyenne de 50 et un écart type de 10.
#%% md
#%%
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
#%%
#Création de données
μ = 50
σ = 10
data = [ np.random.normal(μ, σ) for i in range(10000) ]
#%%
#Nombre de cours
num_bins = 20
#Largeur de classe
bin_width = (max(data) - min(data)) / num_bins
print(f"Largeur de classe=sur{bin_width}")
#Dessin graphique
fig = plt.figure(figsize=(8, 24))
# (1)Un histogramme avec l'axe vertical comme fréquence
ax1 = fig.add_subplot(311)
ax1.title.set_text("(1) frequency")
ax1.grid(True)
ax1.hist(data, bins=num_bins)
# (2)Un histogramme avec l'axe vertical comme fréquence relative
ax2 = fig.add_subplot(312)
ax2.title.set_text("(2) relative frequency")
ax2.grid(True)
ax2.set_xlim(ax1.get_xlim())
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights)
# (3)Un histogramme avec l'axe vertical comme densité de fréquence relative(Bleu)& Fonction de densité de probabilité de la distribution normale(rouge)
ax3 = fig.add_subplot(313)
ax3.title.set_text("(3) density")
ax3.grid(True)
ax3.set_xlim(ax1.get_xlim())
ax3.hist(data, bins=num_bins, density=True, color="blue", alpha=0.5)
x = np.arange(0, 100, 1)
y = norm.pdf(x, μ, σ)
ax3.fill_between(x, y, color="red", alpha=0.5)
ax3.plot(x, y, 'k', linewidth=3, color="red", alpha=0.5)
Quand j'ai exécuté le code, il a dit "largeur de classe = environ 3,718313197105561" et l'histogramme suivant a été dessiné. Chacun des trois histogrammes a (1) axe vertical = fréquence, (2) axe vertical = fréquence relative et (3) axe vertical = histogramme de densité de fréquence relative (bleu) et fonction de densité de probabilité de distribution normale (rouge) superposés. Est affiché. Puisque l'histogramme de "densité = Vrai" et la fonction de densité de probabilité se chevauchent, il semble que la zone de l'histogramme entier devienne 1 lorsque "densité = Vrai" est défini.
Utilisez la colonne la plus élevée de l'histogramme pour la validation.
La colonne la plus élevée de (2) est une valeur comprise entre 0,14 et 0,15.
Quand j'ai exécuté le code, il a dit environ 3.7.
Fréquence relative / largeur de classe = 0,145 / 3,7 ≒ 0,039 Il semble correspondre au pilier le plus élevé de (3). (Fin de la vérification)
Il est difficile de lire l'histogramme ci-dessus et d'additionner, alors définissez le numéro de classe (variable num_bins) du code Python sur 1 et réexécutez-le.
La hauteur du seul pilier de (2) est désormais de 1,0. De plus, comme nous avons utilisé 10000 données, la hauteur du seul pilier de (1) est également de 10000. L'histogramme "densité = Vrai" (bleu) dans (3) a également la même apparence que la zone de la fonction de densité de probabilité (rouge) (zone = 1). (Fin de la vérification)
Recommended Posts