Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/103: Рейтинг темы: голосов - 103, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22

Построить гистограмму распределения значения (приближающую плотность вероятности распределения)

28.02.2018, 15:16. Показов 20476. Ответов 13

Студворк — интернет-сервис помощи студентам
есть словарь

dictionary = {5 : 31, 0 : 29, 12 : 29, 7 : 27, 32 : 26, 13 : 25, 4 : 24, 3 : 23, 16 : 23, 17 : 22, 31 : 22, 6 : 21, 9 : 21, 10 : 21, 2 : 20, 20 : 19, 22 : 19, 23 : 17, 1 : 17, 21 : 17, 34 : 17, 24 : 17, 15 : 17, 29 : 16}

так можно построить обычную гистограмму по данным значениям (значение - сколько раз это значение встречается)

plt.bar(list(dictionary.keys()), dictionary.values(), 1, color='g')


Как построить гистограмму распределения значений? (приближающую плотность вероятности распределения)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2018, 15:16
Ответы с готовыми решениями:

Как построить гистограмму и график распределения интервалов из лога?
Задача такова:дан лог файл,где отражены время запросов веб-сервера.Нужно сгруппировать интервалы между запросами по величине интервала(0-10...

Построить гистограмму распределения вероятности
Есть задача. Создайте программу, моделирующую внешнее воздействие дискретной случайной величины. Случайная величина Х – количество выпавших...

Построить функцию распределения и плотность вероятности
Здравствуйте! Есть такая задача: сформулировать функцию распределения и плотность вероятности для случайной величины х, равномерно...

13
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
28.02.2018, 16:27
Что значит "гистограмма"? Просто значения? Какой-то рисунок? plt кагбе намекает, но - - -
Что конкретно не получается?
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
28.02.2018, 16:39  [ТС]
вот пример (на рисунке) того, что нужно построить

в plt.hist нужно передать 1 массив значений, не получается построить нечто подобное примеру
а нужно построить распределение значений в зависимости от того, как часто они встречаются

словарь (значение - количество этих значений)
Изображения
 
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
28.02.2018, 16:41
Что за информация в словаре? Вернее - какова семантика пары "ключ"-"значение"?
Гистограмма - это представление функции плотности вероятности некоторой - чаше всего одномерной - случайной величины, построенное по выборке. А у вас словарь - то есть некоторые пары. Вариантов трактовки могут быть несколько. Например, ваши данные - это какое-то экзотическое представление объекта в двумерном пространстве.
Или это уже посчитанные количества появлений каждого из значений в выборке, которую вы нам не показываете. Или еще какие нибудь другие варианты.
Опишите свои данные и я постараюсь объяснить, как именно строится гистограмма конкретно в вашем случае.
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
28.02.2018, 16:47  [ТС]
(a : b)

a - само значение (объект)
b - сколько раз это значение встречается в некоторой выборке

Пример:
dictionary = {5 : 31, 0 : 29, 12 : 29}

Значение "5" встречается в выборке 31 раз.

Изначально это был просто массив различных, в том числе повторяющихся, значений, к которому применен collections.Counter(meanings)
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
28.02.2018, 17:27
Тогда непонятен ваш вопрос.
Тот график, который вы строите - это и есть "почти" гистограмма.
"Плотность" (для случая конечной выборки с дискретными значениями) - это отношение количества объектов выборки, имеющих данное значение к общему количеству элементов выборки. Т.е. вам следует посчитать количество элементов в выборке
sm=sum(dictionary.values())
затем - разделить каждое значение в dictionary на это число и использовать plt.bar.
plt.bar(list(dictionary.keys()), list(map(lambda x: x/sm, dictionary.values())), 1, color='g')
Использование функции hist в вашем случае невозможно, поскольку у вас нет и быть не может диапазонов (еще говорят - "карманов") которые присутствуют на второй картинке. Разве что вы огрубите исходные данные, что скорее всего бессмысленно, ибо ведет к потере имеющейся информацию.
Вообще-то говоря, если ваш словарь получен из исходной выборки - то мне кажется, вы сделали лишнюю работу. Можно (и нужно) было строить гистограмму сразу по исходной выборке.
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
28.02.2018, 17:36  [ТС]
в таком случае получается изображение, в котором много шума.

Если увеличить размер "столбца", то они начнут накладываться друг на друга - но так быть не должно

а нужно увеличить размер бина (найти наиболее подходящую разбивку по бинам) - то есть построить распределение, где немного шума и видно как значения располагаются.
Миниатюры
Построить гистограмму распределения значения (приближающую плотность вероятности распределения)  
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
28.02.2018, 17:39  [ТС]
например, на этой картинке видно, как столбцы накладываются друг на друга.

как этого избежать и при этом получить нужное изображения распределения?
Миниатюры
Построить гистограмму распределения значения (приближающую плотность вероятности распределения)  
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
28.02.2018, 17:49  [ТС]
ТО ЕСТЬ НУЖНО ОБЪЕДИНИТЬ НЕКОТОРЫЕ СОСЕДНИЕ ЗНАЧЕНИЯ - автоматически посчитать количество бинов разбиения
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
28.02.2018, 18:03
Сами спросили - сами ответили. Вопрос-то в чем? В том, что реальная картинка отличается от заглаженно-теоретических графиков в учебниках? Ну так - Welcome to the Real World. Именно такие, ершистые графики и появляются в реальных задачах. А будете (и надо-ли) их сглаживать путем увеличения карманов - так я уже написал - любое огрубление данных ведет к потере информации. Что вам важнее - красивый график или более информационно-насыщенная модель - решать вам.
0
0 / 0 / 1
Регистрация: 01.07.2017
Сообщений: 22
01.03.2018, 10:19  [ТС]
а есть какие-то "автоматические" способы сглаживания?
или нужно самому писать разбиение на бины -> создавать новый словарь -> строить гистограмму по нему
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
01.03.2018, 13:42
Если речь идет просто о визуальном сглаживании графика - то прямолинейный подход типа скользящего среднего вполне может оказаться достаточным.

Если же цель именно в восстановлении теоретической функции плотности распределения выборки - то в общем случае это весьма нетривиальная задача. Из доступного введения в тему могу навскидку порекомендовать
https://mglerner.github.io/pos... .html?p=28
http://easydan.com/arts/2015/pdf-estimation/
В книге "Allen B. Downey. Think Stats Exploratory Data Analysis in Python" тема также раскрыта весьма подробно и с примерами.
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
01.03.2018, 15:34
Valeriiia, если значений не миллионы, то предложу быстрый, но очень неоптимальный способ: можно "размотать" словарь и построить гистограмму с помощью hist, где уже можно указать количество бинов с точностью до метода их вычисления. В вашем примере будет 520 значений, но понятное дело, что на больших данных так делать не нужно.
Python
1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt
 
dictionary = {5 : 31, 0 : 29, 12 : 29, 7 : 27, 32 : 26, 13 : 25, 4 : 24, 3 : 23, 16 : 23, 17 : 22, 31 : 22, 6 : 21, 9 : 21, 10 : 21, 2 : 20, 20 : 19, 22 : 19, 23 : 17, 1 : 17, 21 : 17, 34 : 17, 24 : 17, 15 : 17, 29 : 16}
 
x = []
for k, v in dictionary.items():
    x += [k for _ in range(v)]
 
plt.hist(x, bins="sturges")
plt.show()
Миниатюры
Построить гистограмму распределения значения (приближающую плотность вероятности распределения)  
0
110 / 36 / 5
Регистрация: 27.12.2012
Сообщений: 130
01.03.2018, 20:46
Цитата Сообщение от Valeriiia Посмотреть сообщение
а есть какие-то "автоматические" способы сглаживания?
или нужно самому писать разбиение на бины -> создавать новый словарь -> строить гистограмму по нему
Можно используя kernel и код, что дал Tsin:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import seaborn as sns
 
dictionary = {5: 31, 0: 29, 12: 29, 7: 27, 32: 26, 13: 25, 4: 24, 3: 23, 16: 23, 17: 22, 31: 22, 6: 21, 9: 21, 10: 21,
              2: 20, 20: 19, 22: 19, 23: 17, 1: 17, 21: 17, 34: 17, 24: 17, 15: 17, 29: 16}
 
x = []
for k, v in dictionary.items():
    x += [k for _ in range(v)]
 
sns.distplot(x)
plt.show()
Но зависит конечно от того, целые у вас числа или реальные. Если целые, то смысла в kernel мало. Размер bin для гистограмм сичтается автоматически, поищите в интернете формулу, если интересно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2018, 20:46
Помогаю со студенческими работами здесь

Построить плотность распределения вероятности для этой программы без использования hist
построить плотность распределения вероятности для этой программы без использования hist.максимальный и минимальный интервал, потом разбить...

Построить функцию распределения и плотности, найти плотность распределения, математическое ожидание
построить функцию распределения и плотности - F(X), f(X), найти плотность распределения f(x), математическое ожидание M(X) Графики я...

Определите плотность распределения вероятности
На плоскости OYZ через точку (а,0), (а>0) наудачу проводится прямая линия. Определите плотность распределения вероятности ординаты Y точкой...

Плотность вероятности и функция распределения
ребят нужна помощь, 3 задачи решил, эту не могу никак....

Плотность вероятности нормального распределения
Доброе время суток!Подскажите,пожалуйста,почему в интегреле в бесконечных пределах функции dnorm(x,µ, σ), µ и σ нельзя задавать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru