Почему я выбрала данные о японских традиционных фестивалях
Я выбрала эту тему, потому что японские фестивали — это не просто праздники, а живое культурное наследие, которое объединяет религию, историю, искусство и современную жизнь. Мне было интересно взглянуть на них не через туристические фотографии, а через данные: сколько людей приезжает, какие типы фестивалей существуют, есть ли у них сезонность, как менялась их популярность с веками.
Такой анализ позволяет увидеть не только эстетику, но и скрытые закономерности: например, почему летом проходит так много фестивалей, какие регионы особенно активны, а какие типы праздников собирают миллионы посетителей. Кроме того, этот датасет идеально подходит для демонстрации разных видов визуализации: от столбчатых диаграмм до тепловых карт и временных рядов.
Структуирование данных
Фестивали в Японии — это не просто праздники, а живая традиция, которая веками передаётся из поколения в поколение. От тихих религиозных шествий до грандиозных фейерверков, собирающих миллионы зрителей, — каждый фестиваль рассказывает свою историю: о связи человека с природой, о почитании предков, о силе единства.
В этом проекте я исследую датасет, содержащий информацию о 50 крупнейших традиционных фестивалях Японии. В него вошли данные о названии, городе и префектуре проведения, типе фестиваля, месяце, количестве посетителей, а также годе основания. Эти данные позволяют взглянуть на культурное наследие через призму чисел и закономерностей.
С помощью пяти типов визуализации — горизонтальной столбчатой диаграммы, кольцевой диаграммы, тепловой карты, столбчатой диаграммы средних значений и линейного графика временно́й динамики — я попыталась найти скрытые закономерности в мире японских праздников и ответить на вопросы: какие фестивали собирают больше всего людей, какие типы праздников наиболее популярны, есть ли у них ярко выраженная сезонность и как менялась традиция с веками.
Визуализации выполнены в едином стиле: светлая тема с акцентными цветами и читаемыми шрифтами, что позволяет сосредоточиться на данных, а не на оформлении. Каждый график сопровождается кратким выводом, чтобы зрителю было легко увидеть главные инсайты.
Визуализация
· Горизонтальная столбчатая диаграмма · Кольцевая диаграмма · Тепловая карта · Столбчатая диаграмма · Линейный график
Графики оформлены в прилушенных и в ярких оттенках, создавая динамику самого прздника, как сочетание нежного розовых цветов сакуры и ярких воздушных змеев.
Загрузка данных
Для работы я импортировала библиотеки: pandas для обработки и анализа данных, matplotlib.pyplot и seaborn для визуализации, а также numpy для математических операций. Все графики я создавала в Google Colab.
Поскольку я решила исследовать именно японские традиционные фестивали, я создала собственный датасет на основе открытых источников (Japan National Tourism Organization, официальные сайты префектур). В таблицу вошли 50 фестивалей с такими характеристиками: название, город, префектура, тип фестиваля, месяц проведения, количество посетителей и год основания.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Создание датасета
data = {… } # словарь с данными
df = pd.DataFrame (data)
После загрузки данных я провела предварительный анализ с помощью df.info () и df.describe (), чтобы понять структуру и основные статистики. Затем добавила два новых столбца: season (время года) на основе месяца и century (век основания) на основе года. Это позволило глубже изучить сезонность и историческую динамику.
Горизонтальная диаграмма
Для того чтобы определить, какие японские фестивали привлекают наибольшее количество зрителей, я построила горизонтальную столбчатую диаграмму. Сначала я отсортировала данные по столбцу visitors (количество посетителей) и выбрала первые 10 строк с максимальными значениями. Это позволило сконцентрироваться на самых масштабных праздниках.
Построение графика выполнено с помощью библиотеки matplotlib.pyplot. Для наглядности значения посещаемости переведены в миллионы человек, а столбцы расположены горизонтально — так удобнее читать названия фестивалей, которые могут быть длинными. Каждый столбец подписан значением посещаемости, чтобы зритель сразу видел точные цифры.
top10 = df.nlargest (10, 'visitors')
bars = ax1.barh (top10['festival_name'], top10['visitors']/1e6, color='#ff7f0e')
for bar in bars:
width = bar.get_width ()
ax1.text (width \+ 0.05, bar.get_y () \+ bar.get_height ()/2, f'{width:.1f} млн',
ha='left', va='center')
Для стилизации я использовала единую светлую тему (seaborn-v0_8-whitegrid), подобрала акцентный оранжевый цвет для столбцов и настроила размеры шрифтов, чтобы подписи оставались читаемыми.
Вывод: Лидерами по посещаемости стали фестивали Aomori Nebuta, Nebuta Matsuri и Tenjin Matsuri — каждый из них собирает более 1,3 миллиона человек. Самый популярный фестиваль (Aomori Nebuta) привлекает около 3 миллионов зрителей, что сопоставимо с населением крупного города. Это подтверждает, что традиционные праздники в Японии сохраняют массовый интерес и играют важную роль в культурной жизни.
После того как датасет был создан и предварительно просмотрен, я построила горизонтальную столбчатую диаграмму, чтобы наглядно показать, какие фестивали собирают наибольшее количество посетителей.
Загрузка данных и подготовка Данные были загружены в pandas в виде DataFrame. Для построения диаграммы я сначала отсортировала строки по убыванию количества посетителей и отобрала первые 10 записей:
top10 = df.nlargest (10, 'visitors')
Значения посещаемости переведены в миллионы человек для удобства чтения.
Построение диаграммы График создан с помощью matplotlib.pyplot. Я выбрала горизонтальную ориентацию (barh), чтобы длинные названия фестивалей полностью помещались на оси. Столбцам задан акцентный оранжевый цвет (#ff7f0e). Для каждого столбца добавлена текстовая подпись с точным значением посещаемости.
fig1, ax1 = plt.subplots ()
bars = ax1.barh (top10['festival_name'], top10['visitors']/1e6, color='#ff7f0e')
for bar in bars:
width = bar.get_width ()
ax1.text (width \+ 0.05, bar.get_y () \+ bar.get_height ()/2, f'{width:.1f} млн',
ha='left', va='center', fontsize=10)
Стилизация Для всех графиков я использовала единый светлый стиль (seaborn-v0_8-whitegrid), чтобы визуализации выглядели аккуратно и профессионально. Размеры шрифтов подобраны так, чтобы подписи оставались читаемыми.
Кольцевая диаграмма
Чтобы понять, какие типы японских фестивалей встречаются чаще всего, а какие являются редкими и уникальными, я построила кольцевую диаграмму. Такой формат позволяет не только увидеть доли, но и оставить центр для дополнительных подписей, а также визуально объединить основные категории.
Подготовка данных Сначала я посчитала количество фестивалей каждого типа с помощью value_counts ():
type_counts = df['type'].value_counts ()
Поскольку некоторые типы встречаются только 1–2 раза, я объединила их в одну группу «Другие». Для этого я задала порог threshold = 3 и суммировала все категории, частота которых ниже порога.
threshold = 3
other = type_counts[type_counts < threshold].sum ()
main_types = type_counts[type_counts >= threshold]
if other > 0:
main_types['Другие'] = other
Теперь у нас есть несколько основных типов и одна собирательная категория.
Построение диаграммы Для визуализации я использовала библиотеку matplotlib.pyplot. Кольцевая диаграмма создаётся с помощью plt.pie с параметром wedgeprops={'width': 0.3}, который делает отверстие в центре (в отличие от обычной круговой). Цвета взяты из палитры pastel библиотеки seaborn, чтобы они были приятными и не отвлекали от данных.
colors = sns.color_palette («pastel», len (main_types))
wedges, texts, autotexts = ax2.pie (main_types, labels=main_types.index, autopct='%1.1f%%',
colors=colors, startangle=90, pctdistance=0.85,
wedgeprops=dict (width=0.3))
ax2.set_title ('Разнообразие типов фестивалей', fontweight='bold')
Я добавила процентные доли (autopct) и расположила подписи внутри колец, сдвинув их наружу (pctdistance=0.85). Начальный угол startangle=90 позволяет развернуть диаграмму так, чтобы самые крупные сектора оказались сверху.
Тепловая карта
Чтобы выявить сезонность фестивалей и понять, в каких регионах Японии праздники проходят в определённые месяцы, я построила тепловую карту. Такой тип визуализации позволяет одновременно увидеть два измерения: префектуру и месяц, а интенсивность цвета показывает количество фестивалей.
Подготовка данных Сначала я создала сводную таблицу с помощью pivot_table, где строки — префектуры, столбцы — месяцы, а значения — количество фестивалей (агрегация через count). Пропущенные значения (месяцы, в которых в данной префектуре нет фестивалей) были заполнены нулями.
pivot = pd.pivot_table (df, values='festival_name', index='prefecture', columns='month',
aggfunc='count', fill_value=0)
Поскольку префектур много, я решила сосредоточиться на десяти регионах с наибольшим количеством фестивалей. Для этого я выбрала топ‑10 префектур по частоте встречаемости и отфильтровала сводную таблицу:
top_prefs = df['prefecture'].value_counts ().head (10).index
pivot_top = pivot.loc[top_prefs]
Построение тепловой карты Для визуализации я использовала библиотеку seaborn — функцию heatmap. Я задала аннотацию ячеек (annot=True) с целыми числами (fmt='d'), чтобы на каждой ячейке было видно точное количество фестивалей. Цветовая гамма выбрана YlOrRd (от жёлтого к красному), что интуитивно связывает насыщенность цвета с интенсивностью событий. Дополнительно добавлена цветовая шкала (colorbar) с подписью «Количество фестивалей».
fig3, ax3 = plt.subplots (figsize=(12, 8))
sns.heatmap (pivot_top, annot=True, fmt='d', cmap='YlOrRd', linewidths=0.5,
cbar_kws={'label': 'Количество фестивалей'}, ax=ax3)
ax3.set_title ('Тепловая карта фестивалей: префектуры × месяцы', fontweight='bold')
ax3.set_xlabel ('Месяц')
ax3.set_ylabel ('Префектура')
Стилизация В рамках общего стиля проекта я использовала светлый фон и чёткие подписи. Размеры шрифтов были увеличены для лучшей читаемости, а сетка между ячейками (linewidths=0.5) облегчает визуальное разделение.
Столбчатпя диаграмма
Чтобы оценить, какие форматы праздников привлекают наибольшее количество зрителей в среднем, я построила столбчатую диаграмму средней посещаемости по типам фестивалей. Такой график позволяет сравнить масштаб разных категорий и выявить типы, которые собирают миллионные аудитории.
Подготовка данных Сначала я сгруппировала данные по типу фестиваля и вычислила среднее количество посетителей с помощью groupby () и mean (). Затем отсортировала результаты по убыванию, чтобы самые посещаемые типы оказались в начале.
avg_visitors = df.groupby ('type')['visitors'].mean ().sort_values (ascending=False)
Поскольку типов достаточно много, я решила отобразить только топ‑10, чтобы диаграмма оставалась читаемой:
top_types = avg_visitors.head (10)
Значения посещаемости переведены в миллионы человек для наглядности.
Построение диаграммы График создан с помощью matplotlib.pyplot. Я использовала вертикальные столбцы (bar) и выбрала спокойную голубую заливку с тёмной обводкой, чтобы столбцы хорошо выделялись на светлом фоне. Для каждого столбца добавлена текстовая подпись со значением в миллионах.
bars = ax4.bar (top_types.index, top_types.values / 1e6, color='skyblue', edgecolor='navy')
for bar in bars:
height = bar.get_height ()
ax4.text (bar.get_x () \+ bar.get_width ()/2., height \+ 0.05,
f'{height:.1f} млн', ha='center', va='bottom', fontsize=9)
Подписи на оси X были повёрнуты на 45 градусов, чтобы длинные названия типов не наезжали друг на друга.
ax4.tick_params (axis='x', rotation=45, labelsize=10)
Стилизация В рамках единого стиля проекта я использовала светлую тему (seaborn-v0_8-whitegrid), задала размеры шрифтов и добавила сетку для удобства считывания значений.
Линейный график
Чтобы проследить, как менялась традиция проведения фестивалей на протяжении столетий, я построила линейный график, отражающий количество новых фестивалей, основанных в каждом веке. Такой тип визуализации идеально подходит для анализа временны́х рядов и выявления исторических трендов.
Подготовка данных Для анализа я преобразовала год основания каждого фестиваля в век. Это позволило объединить события, происходившие в пределах одного столетия, и увидеть долгосрочную динамику. Расчёт века выполнен по формуле: (год основания // 100) + 1.
df['century'] = (df['year_founded'] // 100) \+ 1
Затем я сгруппировала данные по векам и подсчитала количество фестивалей, возникших в каждом столетии, с помощью value_counts () с последующей сортировкой по индексу (векам).
century_counts = df['century'].value_counts ().sort_index ()
Построение графика График создан с помощью matplotlib.pyplot. Я использовала линию с маркерами (marker='o'), чтобы подчеркнуть конкретные точки данных, и добавила заливку под линией (fill_between) для визуального акцента на площади. Цвет линии выбран ярко‑голубой (cyan), заливка — полупрозрачная того же оттенка.
ax5.plot (century_counts.index, century_counts.values, marker='o', linestyle='-', color='cyan', linewidth=2)
ax5.fill_between (century_counts.index, century_counts.values, alpha=0.3, color='cyan')
Для каждой точки добавлена аннотация с точным количеством фестивалей в данном веке, что облегчает чтение значений.
for i, (cent, cnt) in enumerate (zip (century_counts.index, century_counts.values)):
ax5.annotate (f'{cnt}', (cent, cnt), textcoords="offset points», xytext=(0,10), ha='center')
Стилизация В рамках единого стиля проекта я использовала светлую тему (seaborn-v0_8-whitegrid), настроила размеры шрифтов и добавила сетку с низкой прозрачностью для удобства ориентирования по осям.
Использованные генеративные модели
На протяжении всей работы я использовала DeepSeek только как инструмент для уточнения отдельных технических моментов и оформления текста. Весь код я писала самостоятельно, анализировала данные, подбирала типы графиков и формулировала выводы. DeepSeek помог мне:
· исправить ошибку в коде при построении boxplot (я заменила его на столбчатую диаграмму), · сформулировать описания графиков в едином стиле, · структурировать текст презентации.
Таким образом, роль ИИ свелась к технической консультации и редактуре, а все ключевые решения — выбор датасета, методы анализа, стилизация, интерпретация результатов — я принимала самостоятельно.
Заключение
В этом проекте я исследовала 50 крупнейших традиционных фестивалей Японии с помощью методов описательной статистики и визуализации данных. Были построены пять типов графиков: горизонтальная столбчатая диаграмма топ‑10 фестивалей по посещаемости, кольцевая диаграмма распределения типов, тепловая карта сезонности по префектурам и месяцам, столбчатая диаграмма средней посещаемости по типам и линейный график исторической динамики основания фестивалей.
Анализ показал, что:
· Фестивали с фонарями (Lantern) и огненные (Fire) собирают наибольшую аудиторию (до 3 млн человек); · Летние месяцы (июль–август) являются пиком сезона фестивалей, особенно в префектурах Токио, Киото и Аомори; · Традиция проведения праздников имеет древние корни (VII–VIII века), но наибольший расцвет пришёлся на XVII век (период Эдо) и XX век.
Все визуализации выполнены в едином стиле (светлая тема, читаемые шрифты, акцентные цвета), что позволило представить данные в аккуратном и профессиональном виде. Проект демонстрирует, как с помощью Pandas и Matplotlib можно анализировать культурные явления и находить в них скрытые закономерности.



