Обложка создана с. помощью 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()




