Обучение направлено на то, чтобы быть дружелюбным к новичкам и дать как можно больше объяснений каждому шагу на пути для начинающих. Набор данных содержит 584 лучших оригинальных фильма Netflix разных жанров. Популярность Netflix продолжает расти с каждым годом. Netflix — это потоковый сервис на основе подписки, который позволяет пользователям смотреть телепередачи и фильмы без рекламы на любом устройстве, подключенном к Интернету.

Его содержание зависит от местоположения и может меняться со временем. Вы можете просматривать отмеченные наградами оригинальные фильмы Netflix, телесериалы, фильмы, документальные фильмы и многое другое. В этом EDA будет изучен набор данных Netflix Original Films и IMDB Score с помощью визуализаций и графиков с использованием таких библиотек, как Pandas, NumPy. , Matplotlib и Seaborn.

Набор данных Netflix Original Films & IMDB Scores, используемый для этого EDA, был загружен с Kaggle. Этот набор данных состоит из всех оригинальных фильмов Netflix, выпущенных по состоянию на 1 июня 2021 года, и их оценок на IMDB.

Столбцы, включенные в этот набор данных:

  • Название фильма
  • Жанр фильма
  • Первоначальная дата премьеры
  • Время работы в минутах
  • рейтинги IMDB
  • Доступные языки

Импорт соответствующих библиотек и загрузка набора данных

import matplotlib as plt
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
data=pd.read_csv("NetflixOriginals.csv",encoding='unicode_escape')
print(data.head())

  1. Языком стали долгоиграющие фильмы, созданные в соответствии с набором данных и визуализацией.
data.groupby("Language").agg({"Runtime":"mean"}).sort_values(by="Runtime", ascending=False)
runtimeSort = data.groupby("Language").agg({"Runtime": "mean"}).sort_values(by="Runtime", ascending=False).reset_index()
fig = px.bar(data_frame=runtimeSort, x=runtimeSort.Language, y=runtimeSort.Runtime)
fig.show()

2. Какова продолжительность индийских фильмов?

Hindi = data.loc[(data["Language"] == "Hindi")]
x = Hindi.Runtime
x.mean()
genre = data.Genre.value_counts().nlargest(20)
genre
fig = px.bar(data_frame=genre, x=genre.index, y=genre.values, labels={"y":"Genre Movies", "index":"Genres"})
fig.show()

3. Какова ценность на IMDB фильмов, снятых в жанре «документальный» в период с января 2019 года по июнь 2020 года?

data["Date"] = pd.to_datetime(data.Premiere)
data.loc[(data["Genre"] == "Documentary") & (data["Date"] > "2019-01-31") & (data["Date"] < "2020-06-01")].head()
docum = data.loc[(data["Genre"] == "Documentary") & (data["Date"] > "2019-01-31") & (data["Date"] < "2020-06-01")].head()
docum["Title"].value_counts()
print(data.loc[(data["Genre"] == "Documentary") & (data["Date"] > "2019-01-31") & (data["Date"] < "2020-06-01")].head())
fig = px.bar(data_frame=docum, x=docum.Title, y=docum["IMDB Score"], labels={"y":"IMDB Score", "index":"Titles"})
fig.update_layout(xaxis={"categoryorder":"total descending"})
fig.show()
#Viz.
plt.figure(figsize=(15,10))
sns.barplot(date_range["IMDB Score"], date_range["Title"] )
plt.title("What is the 'Documentary' Genre on IMDB Score by Years?")
plt.legend()
plt.grid()

plt.show()

4. Языковые фильмы имеют самый низкий средний рейтинг IMDB и визуализацию.

low_10_mov = data[["Title","Genre","Premiere","Runtime","IMDB Score","Language"]].sort_values(["IMDB Score"], ascending=True)[:10]
low_10_mov
low_10_mov = data.groupby("Language")["IMDB Score"].mean().nsmallest(15)
low_10_mov
fig = px.bar(low_10_mov, x=low_10_mov.index, y=low_10_mov.values,
labels={'y':'Average Rating Score', 'x':'Language'})
fig.show()

5. Топ-10 фильмов с самым высоким временем выполнения и визуализацией.

df.sort_values(by="IMDB Score", ascending=False)[0:10]

top_10_ratings = df.sort_values(by="IMDB Score", ascending=False)[0:10]
fig = px.scatter(top_10_ratings, y= 'Title', x='IMDB Score', color='Genre', 
                 title = "Top 10 High Rated Programs")

fig.show()

6. Корреляция между оценкой IMDB, временем выполнения и визуализацией.

def correlation_matrix(dataframe, cols):
    fig = plt.gcf()
    fig.set_size_inches(10, 8)
    plt.xticks(fontsize=10)
    plt.yticks(fontsize=10)
    fig = sns.heatmap(dataframe[cols].corr(), annot=True, linewidths=0.5, annot_kws={'size': 12}, linecolor='w',
                      cmap='RdBu')
    plt.show(block=True)

print(df[["IMDB Score", "Runtime"]].corr())
correlation_matrix(df, num_cols)
print("There is no high correlation between Runtime and IMDB Scores")

7. В каком году наибольшая общая продолжительность выполнения?

data.groupby("Year").agg({"Runtime": "sum"}).sort_values(by="Runtime", ascending=False)[0:1]
year = data.Year.value_counts()
RunYear = data.groupby("Year").agg({"Runtime": "sum"}).sort_values(by="Runtime", ascending=False)
plt.figure(figsize=(10,10))
plt.pie(years_runtime["Runtime"], autopct="%.2f%%", labels=years_runtime.index)
plt.legend()
plt.title("Runtimes by Years")
plt.show()

8. Проверка подсчета языка фильма.

lang =df.groupby('Language')['Language'].count().nlargest(15)
y=lang
x=lang.index

fig=plt.figure(figsize=(15,7))
l=sns.barplot(x=y,y=x);
l.set(title='Distribution of Language of Films', xlabel="Count", ylabel="");

9. Есть ли какие-либо выбросы в наборе данных? Объясните.

def grab_col_names(dataframe, cat_th=10, car_th=20):
    # cat_cols, cat_but_car
    cat_cols = [col for col in dataframe.columns if dataframe[col].dtypes == "O"]
    num_but_cat = [col for col in dataframe.columns if dataframe[col].nunique() < cat_th and
                   dataframe[col].dtypes != "O"]
    cat_but_car = [col for col in dataframe.columns if dataframe[col].nunique() > car_th and
                   dataframe[col].dtypes == "O"]
    cat_cols = cat_cols + num_but_cat
    cat_cols = [col for col in cat_cols if col not in cat_but_car]

    # num_cols
    num_cols = [col for col in dataframe.columns if dataframe[col].dtypes != "O"]
    num_cols = [col for col in num_cols if col not in num_but_cat]

    # print(f"Observations: {dataframe.shape[0]}")
    # print(f"Variables: {dataframe.shape[1]}")
    # print(f'cat_cols: {len(cat_cols)}')
    # print(f'num_cols: {len(num_cols)}')
     # print(f'cat_but_car: {len(cat_but_car)}')
    # print(f'num_but_cat: {len(num_but_cat)}')
    return cat_cols, num_cols, cat_but_car


cat_cols, num_cols, cat_but_car = grab_col_names(df, cat_th=5, car_th=20)


def outlier_thresholds(dataframe, col_name, q1=0.25, q3=0.75):
    quartile1 = dataframe[col_name].quantile(q1)
    quartile3 = dataframe[col_name].quantile(q3)
    interquantile_range = quartile3 - quartile1
    up_limit = quartile3 + 1.5 * interquantile_range
    low_limit = quartile1 - 1.5 * interquantile_range
    return low_limit, up_limit


def check_outlier(dataframe, col_name, q1=0.25, q3=0.75):
    low_limit, up_limit = outlier_thresholds(dataframe, col_name, q1, q3)
    if dataframe[(dataframe[col_name] > up_limit) | (dataframe[col_name] < low_limit)].any(axis=None):
        return True
    else:
        return False


for col in num_cols:
    print(col, check_outlier(df, col, 0.1, 0.9))

10. Фильтрация жанров, в которых количество фильмов больше 5.

genre_filter=df.groupby('Genre').filter(lambda x : len(x)>5).sort_values(by="Release Year")
#the filter() method subsets the dataframe rows or columns according to the specified index labels.

# plotting the genre_filter in a line plot along with the years 
g=sns.lineplot(data=genre_filter, x=genre_filter["Release Year"], y=genre_filter['IMDB Score'], hue=genre_filter["Genre"], ci=None,linewidth = 2, palette="Set2")
g.legend(loc='upper right', bbox_to_anchor=(1.35, 1), prop={'size': 15})
fig = plt.gcf()
fig.set_size_inches(12, 8)

График временной шкалы показывает оценки IMDB для каждого жанра за годы. В тройку лучших жанров с самыми высокими оценками на IMDB вошли концертный фильм, криминальная драма и документальный фильм.

Заключение

Это конец нашего исследовательского анализа набора данных Netflix. Основная цель этого анализа состояла в том, чтобы ознакомиться с основными понятиями анализа и визуализации данных, как задавать и отвечать на вопросы, основанные на данных, а также получить хорошее представление о python pandas, NumPy, Matplotlib и seaborn.

Наряду с визуализациями выше были отмечены некоторые довольно интересные инсайты. Есть еще так много вопросов, на которые еще предстоит ответить об этих данных, но пока что даны ответы лишь на некоторые из них, чтобы быть краткими.

Этот проект для начинающих стал для меня отличным опытом обучения, поскольку он дал мне представление о том, как начать работу с аналитикой данных и как решать проблемы, связанные с данными.