#pandas #matplotlib #plot #graph #data-visualization
#панды #matplotlib #сюжет #График #визуализация данных
Вопрос:
Предположим, у меня есть фрейм данных, подобный этому:
*Age* *RemoteWork*
18 Sometimes
24 Never
30 Sometimes
15 Never
24 Sometimes
и так продолжается и дальше.
Как бы я построил график, например, «который показывает, СКОЛЬКО 24-летних людей находится в группе Never»?
Предположим, что существует больше возрастов и значений удаленной работы. По сути, я пытаюсь создать гистограмму возраста, которая показывает ценность и количество удаленной работы.
Мне жаль, если это не очень понятно. Если вам нужна дополнительная информация, пожалуйста, скажите мне.
Комментарии:
1.
pd.crosstab(df['Age'], df['RemoteWork']).plot.bar()
2. Это тоже отлично работает, принял бы это, если бы вы опубликовали в качестве ответа. В любом случае спасибо.
Ответ №1:
Очевидно, что ваш образец набора данных ограничен и не имеет дополнительных атрибутов. Вам действительно нужно подумать о том, как вы хотите визуализировать, тогда все будет просто. Использование matplotlib в двух примерах.
- разброс, в котором есть факторизованная ось y (не требуется только для демонстрации)
- столбик с возрастом, разделяющий возрастные диапазоны
import matplotlib.pyplot as plt
df = pd.read_csv(io.StringIO("""*Age* *RemoteWork*
18 Sometimes
24 Never
30 Sometimes
15 Never
24 Sometimes"""), sep="s ")
fig, ax = plt.subplots(1,2, figsize=[10,5],
sharey=False, sharex=False, gridspec_kw={"hspace":0.3})
(df
.assign(a=lambda dfa: ((dfa["*Age*"]//10)*10).astype(str) "-" (((dfa["*Age*"]//10)*10) 9).astype(str))
.groupby(["a","*RemoteWork*"])
.agg("count")
.unstack(0)
.droplevel([0], axis=1)
.plot(ax=ax[1],kind="bar", stacked=True)
)
ax[1].set_xlabel("Stacked", weight='bold', fontsize=12)
(df
.assign(y=lambda dfa: pd.factorize(dfa["*RemoteWork*"])[0])
.plot(ax=ax[0],kind="scatter", x="*Age*", y="y", c="*Age*", s="*Age*", colormap="jet")
)
ax[0].set_xlabel("Scatter", weight='bold', fontsize=12)