В чем основное различие между гистограммой, графиком и распределением в библиотеке Seaborn? - PullRequest
0 голосов
/ 22 января 2019

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

Все они принимают один столбец в качестве входных данных, а ось Y имеет счетчик для всех графиков.

1 Ответ

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

Эти функции построения графиков pyplot.hist, seaborn.countplot и seaborn.displot являются вспомогательными инструментами для построения графика частоты одной переменной. В зависимости от характера этой переменной они могут быть более или менее подходящими для визуализации.

Непрерывная переменная

Непрерывная переменная x может быть гистограммирована, чтобы показать распределение частот.

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(100)*100
hist, edges = np.histogram(x, bins=np.arange(0,101,10))
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))

plt.show()

enter image description here

То же самое может быть достигнуто с помощью pyplot.hist или seaborn.distplot,

plt.hist(x, bins=np.arange(0,101,10), ec="k")

или

sns.distplot(x, bins=np.arange(0,101,10), kde=False, hist_kws=dict(ec="k"))

distplot упаковывает pyplot.hist, но имеет некоторые другие функции, которые позволяют, например, показать оценку плотности ядра.

Дискретная переменная

Для дискретной переменной гистограмма может подходить или не подходить. Если вы используете numpy.histogram, ячейки должны быть точно между ожидаемыми дискретными наблюдениями.

x1 = np.random.randint(1,11,100)

hist, edges = np.histogram(x1, bins=np.arange(1,12)-0.5)
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))
plt.xticks(np.arange(1,11))

enter image description here

Вместо этого можно также считать уникальные элементы в x,

u, counts = np.unique(x1, return_counts=True)
plt.bar(u, counts, align="center", ec="k", width=1)
plt.xticks(u)

в результате получается тот же график, что и выше. Основное отличие состоит в том, что не все возможные наблюдения заняты. Скажем, 5 даже не является частью ваших данных. Гистограммный подход все еще показывает это, хотя он не является частью уникальных элементов.

x2 = np.random.choice([1,2,3,4,6,7,8,9,10], size=100)

plt.subplot(1,2,1)
plt.title("histogram")
hist, edges = np.histogram(x2, bins=np.arange(1,12)-0.5)
plt.bar(edges[:-1], hist, align="edge", ec="k", width=np.diff(edges))
plt.xticks(np.arange(1,11))

plt.subplot(1,2,2)
plt.title("counts")
u, counts = np.unique(x2, return_counts=True)
plt.bar(u.astype(str), counts, align="center", ec="k", width=1)

enter image description here

Последнее - то, что делает seaborn.countplot.

sns.countplot(x2, color="C0")

enter image description here

Следовательно, он подходит для дискретных или категориальных переменных.

Резюме

Все функции pyplot.hist, seaborn.countplot и seaborn.displot действуют как обертки для гистограммы matplotlib и могут использоваться, если создание такой гистограммы вручную считается слишком громоздким.
Для непрерывных переменных можно использовать pyplot.hist или seaborn.distplot. Для дискретных переменных seaborn.countplot более удобно.

...