
Вступление
Данные для проекта «Анализ фильмов ужасов» были взяты из csv файла, который содержал базу данных фильмов начиная с 1950 года. Файл был взят с сайта https://www.kaggle.com/datasets/sujaykapadnis/horror-movies-dataset
Мне было интересно анализировать именно эту базу данных, так как я являюсь фанатом фильмов ужасов. Мне было очень интересно узнать тенденции развития индустрии, лучшие фильмы и популярность жанра на сегодняшний день.
Для данного проекта я использовал следующие графики:
Она использовалась для распределения оценок фильмов и для распределения продолжительности фильмов.
Она использовалась, чтобы увидеть корреляцию между такими показателями, как бюджет, доход, популярность, количество голосов и средняя оценка.
Для анализа динамики популярности фильмов по годам и для сравнение бюджетов и доходов фильмов.
Она показывает распределения фильмов по языкам.
Этапы работы
Первым делом я загрузил файл 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/
Ссылка на GoogleColab
https://colab.research.google.com/drive/1LNU6jMfxlq0WnIFvX71ek34rMK6EYsEF?usp=sharing