Исходный размер 1860x2625

Визуализация данных о пингвинах

PROTECT STATUS: not protected

Я выбрал для визуализации данные о популяции пингвинов на трех маленьких островах в Антарктике, который я нашел на сайте kaggle.com. Датасет включает в себя информацию о виде, поле, острове обитания, размерах клюва и крыла 324-х разных пингвинов. Я выбрал этот датасет потому что с детства люблю пингвинов и мне было интересно сделать что-то связанное с ними. В ходе визуализации я использовал гистограммы, круговые диаграммы, диаграммы рассеяния и boxplot.

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

Код:

df = df[df['sex'] != '.'] grouped = df.groupby(['species', 'sex'])[['culmen_depth_mm', 'culmen_length_mm']].mean() grouped

grouped.plot.bar(figsize=(12, 6), color=['green', 'pink']) plt.title('Средние размеры клюва') plt.xlabel('Вид, пол') plt.ylabel('Размер (мм)') plt.xticks(rotation=0) plt.legend()

big
Исходный размер 2130x1114

Затем я сделал диаграмму рассеяния, показывающую корреляцию между весом пингвина и длиной его крыла. Это пример изучающего формата визуализации данных.

Код:

plt.scatter(df['body_mass_g'],df['flipper_length_mm'], color=['purple']) plt.title('Корреляция веса и длины крыла') plt.xlabel('Вес, г') plt.ylabel('Длина крыла, мм')

big
Исходный размер 1316x916

Далее я сделал круговую диаграмму, показывающую распределение видов пингвинов по трем островам в процентах. Я не сразу понял как поменять цвета в этом виде диаграмм, но нашел ответ на сайте для программистов stackoverflow.com.

Код: cross_tab = pd.crosstab(df['island'], df['species'], normalize='index') * 100 fig, axes = plt.subplots(1, 3, figsize=(15, 5))

for i, island in enumerate(cross_tab.index): sizes_filtered = cross_tab.loc[island][cross_tab.loc[island] > 0]

colors_all = ['silver', 'khaki', 'plum']
colors_filtered = [colors_all[j] for j, is_non_zero in enumerate(cross_tab.loc[island] > 0) if is_non_zero]

axes[i].pie(sizes_filtered, labels=sizes_filtered.index, autopct='%1.1f%%',
            colors=colors_filtered, startangle=90)
axes[i].set_title(f'Остров: {island}\nВсего: {df[df["island"] == island].shape[0]} пингвинов')

plt.suptitle('Распределение видов пингвинов по островам (%)', fontsize=16, y=1.05)

Исходный размер 2392x1048

И последняя диаграмма что я сделал - boxplot, показывающий медиану и распределение длины крыла пингвина по виду и полу.

Код:

fig, ax = plt.subplots(figsize=(12, 7))

df.boxplot(column='flipper_length_mm', by=['species','sex'], ax=ax, patch_artist=True, boxprops=dict(facecolor='gainsboro', alpha=0.7, lw=1.5), medianprops=dict(color='plum', lw=2), whiskerprops=dict(color='black', lw=1.5) ) plt.suptitle('') ax.set_title('Медиана и распределение длины крыла по виду и полу')

ax.set_ylabel('длина, мм') ax.set_xlabel('вид и пол')

Исходный размер 2214x1248
Визуализация данных о пингвинах
Проект создан 11.02.2026
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше