Вступление
Данные для проекта "Анализ фильмов ужасов" были взяты из csv файла, который содержал базу данных фильмов начиная с 1950 года. Файл был взят с сайта https://www.kaggle.com/datasets/sujaykapadnis/horror-movies-dataset
Мне было интересно анализировать именно эту базу данных, так как я являюсь фанатом фильмов ужасов. Мне было очень интересно узнать тенденции развития индустрии, лучшие фильмы и популярность жанра на сегодняшний день.
Для данного проекта я использовал следующие графики:
1. Гистограмма.
Она использовалась для распределения оценок фильмов и для распределения продолжительности фильмов.
2.Тепловая карта корреляции между числовыми показателями.
Она использовалась, чтобы увидеть корреляцию между такими показателями, как бюджет, доход, популярность, количество голосов и средняя оценка.
3. Графики.
Для анализа динамики популярности фильмов по годам и для сравнение бюджетов и доходов фильмов.
4.Диаграмма.
Она показывает распределения фильмов по языкам.
Этапы работы
Первым делом я загрузил файл csv и прочитал первые строки файла для понимания его структуры.
import pandas as pd
file_path = 'horror_movies.csv' horror_movies_df = pd.read_csv(file_path)
horror_movies_df.head()
Коды для составления графиков
Всем графикам я придал жуткий стиль путем использования красного и черного цвета.
Гистограмма распределения оценок фильмов
import matplotlib.pyplot as plt
plt.style.use('dark_background') plt.rcParams.update({ 'axes.edgecolor': 'red', 'axes.linewidth': 1.2, 'xtick.color': 'red', 'ytick.color': 'red', 'text.color': 'white', 'figure.facecolor': 'black', 'axes.facecolor': 'black' })
fig, ax = plt.subplots() ax.hist(horror_movies_df['vote_average'], bins=15, color='red', edgecolor='black') ax.set_title('Distribution of Movie Ratings', fontsize=15, color='white') ax.set_xlabel('Rating', fontsize=12, color='white') ax.set_ylabel('Frequency', fontsize=12, color='white')
ax.spines['bottom'].set_color('red') ax.spines['top'].set_color('red') ax.spines['left'].set_color('red') ax.spines['right'].set_color('red')
plt.grid(True, linestyle='--', alpha=0.7, color='red') plt.show()
Тепловая карта корреляции между числовыми показателями
import seaborn as sns import numpy as np
numeric_columns = horror_movies_df[['budget', 'revenue', 'popularity', 'vote_count', 'vote_average']] corr_matrix = numeric_columns.corr()
fig, ax = plt.subplots(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, cmap='Reds', linewidths=0.5, linecolor='black', cbar=True, ax=ax)
ax.set_title('Correlation Heatmap', fontsize=15, color='white') plt.xticks(fontsize=12, color='white') plt.yticks(fontsize=12, color='white') ax.figure.set_facecolor('black')
plt.show()
Гистограмма распределения продолжительности фильмов
fig, ax = plt.subplots() ax.hist(horror_movies_df['runtime'], bins=15, color='darkred', edgecolor='black') ax.set_title('Distribution of Movie Runtime', fontsize=15, color='white') ax.set_xlabel('Runtime (minutes)', fontsize=12, color='white') ax.set_ylabel('Frequency', fontsize=12, color='white')
ax.spines['bottom'].set_color('darkred') ax.spines['top'].set_color('darkred') ax.spines['left'].set_color('darkred') ax.spines['right'].set_color('darkred')
plt.grid(True, linestyle='--', alpha=0.7, color='darkred') plt.show()
График динамики популярности фильмов по годам
horror_movies_df['release_year'] = pd.to_datetime(horror_movies_df['release_date'], errors='coerce').dt.year
popularity_by_year = horror_movies_df.groupby('release_year')['popularity'].mean().reset_index()
fig, ax = plt.subplots() ax.plot(popularity_by_year['release_year'], popularity_by_year['popularity'], color='red', marker='o') ax.set_title('Popularity of Horror Movies Over the Years', fontsize=15, color='white') ax.set_xlabel('Year', fontsize=12, color='white') ax.set_ylabel('Average Popularity', fontsize=12, color='white')
ax.spines['bottom'].set_color('red') ax.spines['top'].set_color('red') ax.spines['left'].set_color('red') ax.spines['right'].set_color('red')
plt.grid(True, linestyle='--', alpha=0.7, color='red') plt.show()
Диаграмма распределения фильмов по языкам
language_counts = horror_movies_df['original_language'].value_counts()
fig, ax = plt.subplots(figsize=(25, 6)) language_counts.plot(kind='bar', color='darkred', edgecolor='black') ax.set_title('Distribution of Horror Movies by Original Language', fontsize=15, color='white') ax.set_xlabel('Language', fontsize=12, color='white') ax.set_ylabel('Number of Movies', fontsize=12, color='white')
ax.spines['bottom'].set_color('darkred') ax.spines['top'].set_color('darkred') ax.spines['left'].set_color('darkred') ax.spines['right'].set_color('darkred')
plt.xticks(rotation=45, ha='right', color='white') plt.yticks(color='white') plt.grid(True, linestyle='--', alpha=0.7, color='darkred') plt.show()
Сравнение бюджетов и доходов фильмов
fig, ax = plt.subplots() ax.scatter(horror_movies_df['budget'], horror_movies_df['revenue'], color='darkred', edgecolor='black', alpha=0.7) ax.set_title('Comparison of Movie Budgets and Revenues', fontsize=15, color='white') ax.set_xlabel('Budget ($)', fontsize=12, color='white') ax.set_ylabel('Revenue ($)', fontsize=12, color='white')
ax.spines['bottom'].set_color('darkred') ax.spines['top'].set_color('darkred') ax.spines['left'].set_color('darkred') ax.spines['right'].set_color('darkred')
plt.grid(True, linestyle='--', alpha=0.7, color='darkred') plt.xscale('log') plt.yscale('log') plt.show()
Графики
Выводы на основе анализа
Гистограмма распределения оценок фильмов
Вывод: На гистограмме видно, что большинство фильмов имеют оценки в диапазоне от 6 до 8 баллов. Это говорит о том, что зрители в целом положительно оценивают фильмы ужасов, представленные в датасете. Средние оценки выше 8 или ниже 5 встречаются реже, что может указывать на более узкий круг фильмов, которые зрители считают либо отличными, либо очень плохими.
Тепловая карта корреляции между числовыми показателями
Вывод: Тепловая карта показывает, что существует сильная положительная корреляция между количеством голосов (vote_count) и популярностью (popularity). Это означает, что фильмы с большим количеством голосов, как правило, более популярны. Корреляция между бюджетом и доходом также положительная, но не такая сильная, что может указывать на то, что более высокие бюджеты часто приводят к более высоким доходам, но не всегда.
Гистограмма распределения продолжительности фильмов
Вывод: Большинство фильмов имеют продолжительность от 90 до 120 минут. Это соответствует стандартной длине для полнометражных фильмов. Фильмы короче 60 минут или длиннее 150 минут встречаются редко, что может говорить о том, что режиссеры предпочитают придерживаться классической продолжительности, чтобы удержать внимание зрителей.
График динамики популярности фильмов по годам
Вывод: График показывает, что популярность фильмов ужасов изменялась с годами. Есть периоды значительного роста популярности, что может быть связано с выходом успешных фильмов или возрастанием интереса к жанру. В последние годы наблюдается тенденция к увеличению популярности, что может свидетельствовать о растущем интересе к фильмам ужасов.
Диаграмма распределения фильмов по языкам
Вывод: На диаграмме видно, что подавляющее большинство фильмов ужасов в датасете сняты на английском языке. Это может быть связано с доминированием Голливуда в производстве фильмов ужасов. Другие языки, такие как испанский, французский и японский, также представлены, что показывает наличие международного интереса к жанру.
Сравнение бюджетов и доходов фильмов
Вывод: График показывает, что существует широкий диапазон бюджетов и доходов фильмов. Некоторые фильмы с низким бюджетом могут иметь высокие доходы, что свидетельствует о том, что даже с небольшими ресурсами можно создать коммерчески успешный фильм ужасов. В то же время, высокобюджетные фильмы часто приводят к высоким доходам, что подчеркивает важность инвестиций в качественное производство.
Описание применения генеративной модели
Для создания обложки проекта был использован chatGPT 4o https://openai.com/
Также для создания графиков использовался chatGPT 4o https://openai.com/




