ОПИСАНИЕ
Проект анализирует фильмы Wizarding World (основная серия Harry Potter и спин-оффы Fantastic Beasts): бюджеты, мировые сборы и зрительское восприятие. В Pandas выполняется очистка данных и расчёт метрик (включая ROI), а в matplotlib строится серия графиков в едином стиле (шрифт Cinzel Decorative + заданная палитра). Визуализации показывают динамику масштаба франшизы, эффективность отдельных фильмов и связь рейтингов IMDb с кассовыми результатами.
Подготовка датасета и настройка оформления
Загрузка библиотеки
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rcParams import matplotlib.font_manager as fm
Обоснование шрифта
Для проекта выбран шрифт Cinzel Decorative — декоративный serif с “классической” каллиграфической атмосферой, которая хорошо совпадает с визуальным языком мира Harry Potter: старинные книги, пергамент, готические и исторические мотивы Хогвартса. Он особенно выразителен в заголовках и акцентных подписях, поэтому помогает сделать инфографику “кинематографичной” и цельной. Шрифт подключается в matplotlib через .ttf, поэтому типографика полностью задаётся кодом: одинаково воспроизводится на любой машине и сохраняет единый стиль во всех графиках.
Код для подключения кастомного шрифта
import matplotlib.pyplot as plt import matplotlib.font_manager as fm from matplotlib import rcParams import os
font_candidates = [ "CinzelDecorative-Regular.ttf", "/mnt/data/CinzelDecorative-Regular.ttf", ]
font_path = None for p in font_candidates: if os.path.exists(p): font_path = p break
if font_path: try: fm.fontManager.addfont(font_path) prop = fm.FontProperties(fname=font_path) rcParams["font.family"] = prop.get_name() rcParams["font.sans-serif"] = [prop.get_name()] rcParams["axes.unicode_minus"] = False except: pass
Для визуализаций выбрана палитра в стиле “пергамент + гербовая магия”: бордовый
641e1e, золото
c39a1c, тёплый коричневый3d2f22, нейтральный слейт
717679 и светлый пергамент #efeee9. Пергамент используется как фон, чтобы графики выглядели “как страница из хроник” и не утомляли глаз. Бордовый и золото работают как главные акценты (ключевые линии/медианы/важные точки), коричневый — для текста и осей, слейт — для вторичных элементов и сетки. Благодаря ограниченной палитре все визуализации воспринимаются как единая серия.Код для палитры и общего офрмления
import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rcParams
BURGUNDY = "641e1e" GOLD = "c39a1c" BROWN = "3d2f22" SLATE = "717679" PARCHMENT = "efeee9"
PARCHMENT_DIM = "e6e4dd" SLATE_DIM = "8a8f92"
extended_palette = [GOLD, BURGUNDY, BROWN, SLATE, PARCHMENT] sns.set_palette(extended_palette)
sns.set_style("white")
rcParams.update({ "axes.facecolor": PARCHMENT, "figure.facecolor": PARCHMENT, "savefig.facecolor": PARCHMENT,
"axes.edgecolor": BROWN,
"axes.labelcolor": BROWN,
"xtick.color": BROWN,
"ytick.color": BROWN,
"text.color": BROWN,
"axes.titlecolor": BURGUNDY,
"axes.grid": True,
"grid.color": SLATE_DIM,
"grid.linestyle": "-",
"grid.linewidth": 0.6,
"grid.alpha": 0.35,
"font.size": 12,
"axes.titlesize": 16,
"axes.labelsize": 13,
"xtick.labelsize": 11,
"ytick.labelsize": 11,
"legend.fontsize": 11,
"figure.titlesize": 18,
"axes.spines.top": False,
"axes.spines.right": False,
"legend.frameon": True,
"legend.facecolor": PARCHMENT_DIM,
"legend.edgecolor": SLATE_DIM,
"lines.linewidth": 2.2,
"lines.markersize": 6,
})




