<jupyter_start><jupyter_text>Дискретное распределение Сгенерируем выборку объёма 100 из дискретного распределения с шестью равновероятными исходами.<jupyter_code>sample = np.random.choice([1,2,3,4,5,6], 100)<jupyter_output><empty_output><jupyter_text>Представим теперь, что эта выборка была получена не искусственно, а путём подбрасывания симметричного шестигранного кубика 100 раз. Оценим вероятности выпадения каждой из сторон с помощью частот:<jupyter_code># посчитаем число выпадений каждой из сторон:
from collections import Counter

c = Counter(sample)

print("Число выпадений каждой из сторон:")    
print(c)

# теперь поделим на общее число подбрасываний и получим вероятности:
print("Вероятности выпадений каждой из сторон:")
print({k: v/100.0 for k, v in c.items()})<jupyter_output>Число выпадений каждой из сторон:
Counter({5: 19, 1: 19, 4: 18, 3: 17, 6: 15, 2: 12})
Вероятности выпадений каждой из сторон:
{4: 0.18, 5: 0.19, 6: 0.15, 3: 0.17, 1: 0.19, 2: 0.12}<jupyter_text>Это и есть оценка функции вероятности дискретного распределения.  Непрерывное распределение Сгенерируем выборку объёма 100 из стандартного нормального распределения (с $\mu=0$ и $\sigma^2=1$):<jupyter_code>norm_rv = sts.norm(0, 1)
sample = norm_rv.rvs(100)<jupyter_output><empty_output><jupyter_text>Эмпирическая функция распределения для полученной выборки:<jupyter_code>x = np.linspace(-4,4,100)
cdf = norm_rv.cdf(x)
plt.plot(x, cdf, label='theoretical CDF')

# для построения ECDF используем библиотеку statsmodels
from statsmodels.distributions.empirical_distribution import ECDF
ecdf = ECDF(sample)
plt.step(ecdf.x, ecdf.y, label='ECDF')

plt.ylabel('$f(x)$')
plt.xlabel('$x$')
plt.legend(loc='upper left')<jupyter_output><empty_output><jupyter_text>Гистограмма выборки:<jupyter_code>plt.hist(sample, normed=True)
plt.ylabel('fraction of samples')
plt.xlabel('$x$')<jupyter_output>C:\Users\kpebe\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\axes\_axes.py:6521: MatplotlibDeprecationWarning: 
The 'normed' kwarg was deprecated in Matplotlib 2.1 and will be removed in 3.1. Use 'density' instead.
  alternative="'density'", removal="3.1")<jupyter_text>Попробуем задавать число карманов гистограммы вручную:<jupyter_code>plt.hist(sample, bins=3, normed=True)
plt.ylabel('fraction of samples')
plt.xlabel('$x$')
plt.hist(sample, bins=40, normed=True)
plt.ylabel('fraction of samples')
plt.xlabel('$x$')<jupyter_output>C:\Users\kpebe\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\axes\_axes.py:6521: MatplotlibDeprecationWarning: 
The 'normed' kwarg was deprecated in Matplotlib 2.1 and will be removed in 3.1. Use 'density' instead.
  alternative="'density'", removal="3.1")<jupyter_text>Эмпирическая оценка плотности, построенная по выборке с помощью ядерного сглаживания:<jupyter_code># для построения используем библиотеку Pandas:
df = pd.DataFrame(sample, columns=['KDE'])
ax = df.plot(kind='density')

# на том же графике построим теоретическую плотность распределения:
x = np.linspace(-4,4,100)
pdf = norm_rv.pdf(x)
plt.plot(x, pdf, label='theoretical pdf', alpha=0.5)
plt.legend()
plt.ylabel('$f(x)$')
plt.xlabel('$x$')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12869729389553178, 'fraction_numerical': 0.03429830081812461, 'mean_word_length': 7.214470284237726, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '413483', 'license': 'MIT', 'n_tokens_mistral': 1410, 'n_tokens_neox': 1441, 'n_words': 271, 'path': 'Yandex data science/1/Week 4/sample_distribution_evaluation.ipynb', 'repo_name': 'PupochekRus/Courses', 'size': '3178'}