Подгонка словаря в кривую нормального распределения - PullRequest
1 голос
/ 26 февраля 2020

Вот словарь:

l= {31.2: 1,35.1: 4,39.0: 13,42.9: 33,46.8: 115,50.7: 271,54.6: 363,58.5:381,62.4:379,66.3:370,70.2:256,74.1: 47,78.0: 2}

Таким образом, это означает, что 31,2 произошло 1 раз, 35,1 произошло 4 раза и так далее. Я попытался:

fig, ax = plt.subplots(1, 1)

ax.scatter(l.keys(), l.values)
ax.set_xlabel('Key')
ax.set_ylabel('Length of value')

enter image description here

Также я нашел среднее и стандартное значение

np.mean([k for k in l.keys()])
np.std([k for k in l.keys()])

Это способ найти среднее и стандарт для этих данных. Я сомневаюсь, потому что он не учитывает количество вхождений каждого данных. Я хочу видеть нормальную кривую на этих данных. Также есть способ узнать, как часто встречается значение. Например, если я расширяю кривую, чтобы коснуться 0 на оси x, и если я хочу знать, сколько точек данных задействовано для вхождения 0 (также может быть вероятность).

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Вот способ нарисовать нормальную кривую Гаусса, чтобы соответствовать данным:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

l = {31.2: 1, 35.1: 4, 39.0: 13, 42.9: 33, 46.8: 115, 50.7: 271, 54.6: 363, 58.5: 381, 62.4: 379, 66.3: 370, 70.2: 256, 74.1: 47, 78.0: 2}
# convert the dictionary to a list
l_list = [k for k, v in l.items() for _ in range(v)]

fig, ax = plt.subplots(1, 1)

ax.scatter(l.keys(), l.values())
ax.set_xlabel('Key')
ax.set_ylabel('Length of value')

mu = np.mean(l_list)
sigma = np.std(l_list)

u = np.linspace(mu - 4 * sigma, mu + 4 * sigma, 100)
ax2 = ax.twinx()
ax2.plot(u, stats.norm.pdf(u, mu, sigma), color='crimson')
ax2.set_ylabel('normal curve')

plt.show()

enter image description here

1 голос
/ 26 февраля 2020

Вот способ получить среднее значение и стандартное значение:

l= {31.2: 1,35.1: 4,39.0: 13,42.9: 33,46.8: 115,50.7: 271,54.6: 363,58.5:381,62.4:379,66.3:370,70.2:256,74.1: 47,78.0: 2}
ll=[[i]*j for i,j in zip(l.keys(),l.values())]
flat_list = [item for sublist in ll for item in sublist]
np.mean(flat_list), np.std(flat_list)

, которое печатает (59.559194630872476, 7.528353520785996).

Вы можете сделать гистограмму с np.histogram(flat_list), чтобы оценить частоту каждого вхождения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...