
Контекст
Я решила проанализировать дата базу фильмов. За основу взяла TMDB с сайта Kagle. Сделаю оговорку, база не супер актуальная, но может дать много интересной информации.
Работа
Для начала я структурировала данные и проверила что включают в себя файлы с сайта.
import pandas as pd
file_paths = [ r’C:\Users\User\Desktop\film\tmdb_5000_credits.csv', r’C:\Users\User\Desktop\film\tmdb_5000_movies.csv' ]
df_credits = pd.read_csv (file_paths[0]) df_movies = pd.read_csv (file_paths[1])
print («Информация о данных в файле tmdb_5000_credits.csv:») print (df_credits.info ()) print ()
print («Информация о данных в файле tmdb_5000_movies.csv:») print (df_movies.info ())
Итог
Информация о данных в файле tmdb_5000_credits.csv:
RangeIndex: 4803 entries, 0 to 4802 Data columns (total 4 columns): Column Non-Null Count Dtype
0 movie_id 4803 non-null int64 1 title 4803 non-null object 2 cast 4803 non-null object 3 crew 4803 non-null object dtypes: int64(1), object (3) memory usage: 150.2+ KB None
Информация о данных в файле tmdb_5000_movies.csv:
RangeIndex: 4803 entries, 0 to 4802 Data columns (total 20 columns): Column Non-Null Count Dtype
0 budget 4803 non-null int64 1 genres 4803 non-null object 2 homepage 1712 non-null object 3 id 4803 non-null int64 4 keywords 4803 non-null object 5 original_language 4803 non-null object 6 original_title 4803 non-null object 7 overview 4800 non-null object 8 popularity 4803 non-null float64 9 production_companies 480
После чего я попросила ChatGPT структурировать и изобразить графики с данными
Гистограмма распределения рейтингов фильмов
plt.figure (figsize=(10, 6)) sns.histplot (df_movies['vote_average'], bins=20, kde=True, color='b') plt.title ('Распределение рейтингов фильмов') plt.xlabel ('Рейтинг') plt.ylabel ('Частота') plt.grid (True) plt.show ()
Исходя из данного графика мы можем понять что большинство фильмов оцениваются в среднем на 6-7
Столбчатая диаграмма с жанрами
Преобразование списка жанров в отдельные строки genres = df_movies['genres'].apply (lambda x: [genre['name'] for genre in eval (x)])
Создание отдельного DataFrame с жанрами df_genres = pd.DataFrame (genres.tolist (), index=df_movies['title']).stack ().reset_index (level=1, drop=True) df_genres.name = 'genre'
Построение графика с жанрами plt.figure (figsize=(12, 8)) sns.countplot (y=df_genres, order=df_genres.value_counts ().index, palette='viridis') plt.title ('Распределение фильмов по жанрам', fontsize=15) plt.xlabel ('Количество фильмов', fontsize=12) plt.ylabel ('Жанр', fontsize=12) plt.xticks (fontsize=11) plt.yticks (fontsize=11) plt.tight_layout () plt.show ()
Данный график нам даёт понять что самый популярный жанр это Драма, а самый не популярный TV Movie. Хотя мне всегда казалось что Боевики и Комедия соперничают за первое место.
Рейтинг самых бюджетных фильмов TMDB
Отбор фильмов с положительным бюджетом и выбор топ-10 с наименьшим бюджетом low_budget_movies = df_movies[df_movies['budget'] > 0][['title', 'budget']].sort_values ('budget').head (10)
Оформление графика plt.figure (figsize=(12, 8)) sns.barplot (x='budget', y='title', data=low_budget_movies, palette='Greens_r') plt.title ('Топ-10 фильмов с наименьшим бюджетом', fontsize=15) plt.xlabel ('Бюджет, в десятках миллионов $', fontsize=12) plt.ylabel ('Название фильма', fontsize=12) plt.xticks (fontsize=11) plt.yticks (fontsize=11) plt.grid (axis='x') plt.tight_layout () plt.show ()
График с топом самых худших фильмов
worst_movies = df_movies[df_movies['vote_average'] > 0][['title', 'vote_average']].sort_values ('vote_average').head (10)
Оформление графика plt.figure (figsize=(12, 8)) sns.barplot (x='vote_average', y='title', data=worst_movies, palette='Reds_r') plt.title ('Топ-10 худших фильмов', fontsize=15) plt.xlabel ('Средний рейтинг', fontsize=12) plt.ylabel ('Название фильма', fontsize=12) plt.xticks (fontsize=11) plt.yticks (fontsize=11) plt.grid (axis='x') plt.tight_layout () plt.show ()
Этот график особо не даёт какой-то информации по фильмам, но мы можем увидеть худших из худших. Если интересно, можно посмотреть на досуге.
Гистограмма распределения длительности фильмов
Преобразование длительности фильмов в минутах df_movies['runtime'] = df_movies['runtime'].fillna (0).astype (int)
plt.figure (figsize=(10, 6)) sns.histplot (df_movies['runtime'], bins=30, kde=True, color='g') plt.title ('Распределение длительности фильмов') plt.xlabel ('Длительность, минуты') plt.ylabel ('Частота') plt.grid (True) plt.show ()
Тут мы можем понять что большинство фильмов не длиннее 100 минут.