#python #python-3.x #pandas #matplotlib
#python #python-3.x #панды #matplotlib
Вопрос:
Я хочу получить относительную частоту весов людей на основе метки категории, а затем отобразить это в виде гистограммы, которая будет выглядеть примерно так:
Фрейм данных выглядит следующим образом:
Weight Category
83.8 A
87.3 A
75.1 B
70.9 A
69.8 C
75.5 B
... ...
Я думал о том, чтобы извлечь вес каждой категории в ее собственный фрейм данных, и мне удалось получить относительную частоту одной категории, но я не уверен, как построить их все вместе.
# This holds the total number of people in each category, with categories in alphabetical order
counts = df.groupby("Category")["Weight"].count()
catA = df.loc[df["Category"] == "A"]["Weight"].reset_index().drop(columns="index")
catA["bucket"] = pd.cut(catA["Weight"], 10)
newA = catA[["bucket", "Weight"]].groupby("bucket").count()
newE["relative"] = newE["Weight"] / counts[0]
ax = newA["relative"].plot(kind="bar", title="Relative Frequency of Weight for Category A")
ax.set(xlabel="Weight Bucket", ylabel="Relative Frequency (%)")
ax.tick_params(axis="x", labelrotation=45)
plt.show()
Ответ №1:
Seaborn — это библиотека визуализации данных Python, основанная на matplotlib. Он предоставляет высокоуровневый интерфейс для рисования привлекательных и информативных статистических графиков. (https://seaborn.pydata.org /)
у вас не будет такой гибкости, как с необработанным matplotlib, но, возможно, это просто работает для вас и дает вам мощные настройки по умолчанию.
использование гистограммы с hue и multiple= dodge, похоже, делает то, что вы ищете. из официальных документов по адресу https://seaborn.pydata.org/generated/seaborn.histplot.html#seaborn.histplot
sns.histplot(data=tips, x="day", hue="sex", multiple="dodge", shrink=.8)
Ответ №2:
pd.cut
Используйте для определения вашей частоты и для подсчета pd.crosstab
:
(pd.crosstab(pd.cut(df['Weight'], bins=np.linspace(0,100,10)),
df['Category'])
.plot.bar()
)
Комментарии:
1. Это выглядит многообещающе! Однако есть ли способ преобразовать его в график относительной частоты?
2. Передайте normalize=’index’ в перекрестную вкладку?
3. Кроме того, вы можете передать ‘вероятность’ атрибуту ‘stat’ функции histplot.