[Wikipédia](http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E5%AF%86%E5%BA % A6% E6% 8E% A8% E5% AE% 9A) Veuillez vous y référer. Dans certaines situations (grand nombre de données, suite à une fonction de distribution fluide, etc.), un histogramme peut vous aider à avoir une vue d'ensemble de vos données.
Tout d'abord, chargez les packages requis et créez environ 5 ensembles de données bimodaux avec des distributions normales superposées.
import numpy as np
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt
N = 5
means = np.random.randn(N,2) * 10 + np.array([100, 200])
stdev = np.random.randn(N,2) * 10 + 30
count = np.int64(np.int64(np.random.randn(N,2) * 10000 + 50000))
a = [
np.hstack([
np.random.randn(count[i,j]) * stdev[i,j] + means[i,j]
for j in range(2)])
for i in range(N)]
Il est gênant s'il existe une valeur aberrante ridicule, de sorte que les données seront coupées au point de pourcentage de 0,1% à 99,9%.
(En passant, dans numpy, percentile (array, x)
est spécifié dans la plage de 0..100, mais dans les pandas, Series.quantile (x)
est spécifié en 0.1. C'est déroutant.)
Si vous passez ensuite les données à scipy.stats.gaussian_kde ()
, il retournera la fonction de densité estimée par le noyau gaussien, vous pouvez donc la tracer rapidement en la combinant avec numpy.linspace
.
limmin = min(np.percentile(x, 0.1) for x in a)
limmax = max(np.percentile(x, 99.9) for x in a)
ls = np.linspace(limmin, limmax, 100)
for n in range(N):
x = a[n]
x = x[(x > limmin)&(x < limmax)]
kde = gaussian_kde(x)
plt.plot(ls, kde(ls), label='data %d' % n)
plt.xlim([limmin, limmax])
plt.legend()
plt.title('data distributions')
plt.show()
Si vous utilisez la méthode resample ()
de l'objet kde, vous pouvez générer des données pour la simulation d'une distribution proche des données mesurées. Pour plus d'informations, voir Documents officiels.
Recommended Posts