Что эквивалентно фитдисту и гистифиту в Python? - PullRequest
0 голосов
/ 23 января 2019

--- SAMPLE ---

У меня есть набор данных (образец), который содержит 1 000 значений повреждений ( значения очень малы <1e-6 </strong>) в одномерном массиве ( см. Вложенный файл .json ).Кажется, что образец соответствует логнормальному распределению: Histogram of data set (sample) and its counts

--- ПРОБЛЕМА И ЧТО Я УЖЕ ПРОБОВАЛ ---

Я пыталсяпредложения в этом посте Подгонка эмпирического распределения к теоретическому с помощью Scipy (Python)? и этого поста Scipy: логнормальное подгонка для соответствия моих данных логнормальным распределениемНи одна из этих работ.: (

Я всегда получаю что-то очень большое по оси Y следующим образом:

plot fitting distribution

Вот код, который я использовалв Python (и файл data.json можно загрузить с здесь ):

from matplotlib import pyplot as plt
from scipy import stats as scistats
import json
with open("data.json", "r") as f:
  sample = json.load(f) # load data: a 1000 * 1 array with many small values( < 1e-6)
fig, axis = plt.subplots() # initiate a figure
N, nbins, patches = axis.hist(sample, bins = 40) # plot sample by histogram
axis.ticklabel_format(style = 'sci', scilimits = (-3, 4), axis = 'x') # make X-axis to use scitific numbers
axis.set_xlabel("Value")
axis.set_ylabel("Count")    
plt.show()

fig, axis = plt.subplots()
param = scistats.lognorm.fit(sample) # fit data by Lognormal distribution
pdf_fitted = scistats.lognorm.pdf(nbins, * param[: -2], loc = param[-2], scale = param[-1]) # prepare data for ploting fitted distribution
axis.plot(nbins, pdf_fitted) # draw fitted distribution on the same figure
plt.show()

Я пробовал другой вид дистрибутива, но когда я пытаюсьНарисуйте результат, ось Y всегда слишком велика, и я не могу построить с моей гистограммой. Где я потерпел неудачу ???

Я также попробовал предложение в моем другом вопросе: Используйте ненормальное распределение scipy для подгонки данных к небольшим значениям, а затем укажите в matplotlib . Но значение переменной pdf_fitted всегда слишком велико.

--- ОЖИДАЕМЫЙ РЕЗУЛЬТАТ ---

По сути, я хочу вот что:

enter image description here

А вот код Matlab, который я использовал вскриншот выше:

fname = 'data.json';
sample = jsondecode(fileread(fname));

% fitting distribution
pd = fitdist(sample, 'lognormal')

% A combined command for plotting histogram and distribution
figure();
histfit(sample,40,"lognormal")

Так что, если у вас есть идея эквивалентной команды fitdist и histfit в Python / Scipy / Numpy / Matplotlib, пожалуйста, опубликуйте ее!

Большое спасибо!

1 Ответ

0 голосов
/ 23 января 2019

Попробуйте морского происхождения:

import seaborn as sns, numpy as np
sns.set(); np.random.seed(0)
x = np.random.randn(100)
ax = sns.distplot(x)

enter image description here

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