Обложка создана с. помощью https://stablediffusionweb.com/ru/app/image-generator
Концепция
Я решила проанализировать факторы, влияющие на кассовые сборы фильмов. Такой анализ мог бы быть полезен для киностудий при планировании новых проектов и маркетинговых стратегий.
План
- Собрать данные о фильмах, включая бюджет, жанр, актерский состав, рейтинги критиков, дату выхода и кассовые сборы.
- Исследовать корреляции между различными факторами и кассовыми сборами.
- Построить модель машинного обучения для прогнозирования потенциальных сборов.
- Визуализировать тренды, например, как меняются предпочтения зрителей по жанрам со временем.
- Проанализировать влияние сезонности на успех фильмов.
База данных
Для анализа я использовала данные источники:
Kaggle
Мне всегда после просмотра классного фильма интересно узнать бюджет, который был у команды для создания фильма и посмотреть насколько он окупился.
Код, позволяющий на основе базы данных выявить топ-10 кассовых фильмов.
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv ('movies_data.csv') top_10 = df.sort_values ('box_office', ascending=False).head (10) print (top_10[['title', 'box_office']]) plt.figure (figsize=(12, 6)) plt.bar (top_10['title'], top_10['box_office']) plt.xticks (rotation=45, ha='right') plt.xlabel ('Фильм') plt.ylabel ('Кассовые сборы') plt.title ('Топ-10 кассовых фильмов') plt.tight_layout () plt.show ()
Результат:
«Аватар» (2009) «Мстители: Финал» (2019) «Титаник» (1997) «Звёздные войны: Пробуждение силы» (2015) «Мстители: Война бесконечности» (2018) «Человек-паук: Нет пути домой» (2021) «Аватар: Путь воды» (2022) «Мир юрского периода» (2015) «Король Лев» (2019) «Мстители» (2012)
Код для графика
import matplotlib.pyplot as plt import numpy as np movies = [ «Аватар», «Мстители: Финал», «Титаник», «Звёздные войны: Пробуждение силы», «Мстители: Война бесконечности», «Человек-паук: Нет пути домой», «Аватар: Путь воды», «Мир юрского периода», «Король Лев», «Мстители» ] box_office = [2.85, 2.80, 2.20, 2.07, 2.05, 1.92, 1.90, 1.67, 1.66, 1.52]
plt.figure (figsize=(12, 6)) bars = plt.bar (movies, box_office)
plt.title («Топ-10 самых кассовых фильмов», fontsize=16) plt.xlabel («Фильмы», fontsize=12) plt.ylabel («Кассовые сборы (млрд $)», fontsize=12) plt.xticks (rotation=45, ha='right')
for bar in bars: height = bar.get_height () plt.text (bar.get_x () + bar.get_width ()/2., height, f'{height:.2f}', ha='center', va='bottom')
plt.tight_layout () plt.show ()
Код, выявляющий топ-3 самых кассовых жанров фильмов
import pandas as pd import matplotlib.pyplot as plt
df = pd.read_csv ('movies_data.csv')
genre_revenue = df.groupby ('genre')['box_office'].sum ().sort_values (ascending=False)
top_3_genres = genre_revenue.head (3)
print («Топ-3 самых кассовых жанра:») for genre, revenue in top_3_genres.items (): print (f"{genre}: ${revenue:,.2f}»)
plt.figure (figsize=(10, 6)) top_3_genres.plot (kind='bar') plt.title ('Топ-3 самых кассовых жанра') plt.xlabel ('Жанр') plt.ylabel ('Общие кассовые сборы ($)') plt.xticks (rotation=0)
for i, v in enumerate (top_3_genres): plt.text (i, v, f'${v:,.0f}', ha='center', va='bottom')
plt.tight_layout () plt.show ()
Результат:
- Экшн/Приключения
- Научная фантастика/Фэнтези
- Анимация/Семейные фильмы
Код для круговой диаграмы:
На основе данной диаграммы наглядно видно, что наиболее прибыльными фильмами являются не напрягающие, развлекательно-семейный фильмы, в которых происходит много ярких событий
Код который создает точечный график для отображения топ-5 не окупившихся фильмов
import matplotlib.pyplot as plt
movies = [«Джон Картер», «Одинокий рейнджер», «Марс атакует!», «47 ронинов», «Гудини»] budgets = [250, 225, 120, 175, 120] # в миллионах долларов revenues = [284, 260, 33, 151, 27] # в миллионах долларов
plt.figure (figsize=(12, 8)) plt.scatter (budgets, revenues, s=100, alpha=0.7)
for i, movie in enumerate (movies): plt.annotate (movie, (budgets[i], revenues[i]), xytext=(5, 5), textcoords='offset points')
max_value = max (max (budgets), max (revenues)) plt.plot ([0, max_value], [0, max_value], 'r--', label='Линия безубыточности')
plt.xlabel ('Бюджет (млн $)') plt.ylabel ('Кассовые сборы (млн $)') plt.title ('Соотношение бюджета и кассовых сборов для не окупившихся фильмов')
plt.legend ()
plt.xlim (0, max (budgets) * 1.1) plt.ylim (0, max (revenues) * 1.1)
plt.grid (True, linestyle='--', alpha=0.7)
plt.tight_layout () plt.show ()




