Netflix e IMdb Data cleaning + EDA com Python

João Escórcio
6 min readOct 29, 2021

--

Parte 1 : Fazendo o trabalho pesado!

Olá! Nesse artigo iremos iniciar uma análise exploratória da base de dados do Netflix e do Imdb utilizando python e suas bibliotecas. Nessa primeira parte iremos fazer o trabalho pesado, organizar e limpar os dados. Alterar tipos de colunas, criar colunas e preencher dados faltantes serão alguns dos nossos desafios a serem solucionados aqui.

Netflix é uma das principais plataformas de streaming de todo o mundo, milhares de pessoas assistem filmes e tv shows através desse serviço todos
os dias. Esse serviço virou tão comum no nosso dia a dia que talvez você nunca tenha se perguntado sobre uma visão geral do menu de filmes e tv shows. Quais os principais gêneros, os principais países produtores de conteúdo, quais gêneros são melhores avaliados, qual a fatia de filmes
com mais de 10 anos no seu menu? Esses e outros insights iremos abordar nesse projeto, antes, porém, precisamos iniciar o processo de limpeza e organização dos dados.

A nossa base de dados está disponível no Kaggle, possuímos informações sobre todos os filmes e programas de TV disponíveis no Netflix, junto com detalhes como — elenco, diretores, classificações, ano de lançamento, duração, etc.

Então vamos lá começar organizar a casa?

Importando bibliotecas:

import numpy as npimport pandas as pd

Abrindo o dataset no nosso Notebook:

df = pd.read_csv('netflix_titles.csv')df.head()

out

Checando o tamanho do Dataset e se há valores nulos:

df.info()

out

Aqui podemos identificar que nosso Dataset possui 7787 Linhas e 12 colunas. Logo de cara, podemos observar que há dados nulos em algumas dessas colunas e que a coluna de data de adição não está no type de data.

Iremos perguntar ao Dataset se há valores nulos e logo em seguida soma-los:

df.isna().sum()

Limpeza e Organização do Dataframe

Agora, sabendo o tamanho do nosso dataset, os tipos das variáveis e as informações nulas, poderemos dar seguimento à limpeza e a organização dos nossos dados! Vamos lá aos primeiros passos:

  • Excluir a coluna ‘Cast’ e ‘Description’ (Não utilizaremos nesse estudo)
  • Alterar o tipo da coluna ‘Date_added’ para datetime, dessa forma poderemos criar uma coluna secundária ‘Year_added’ e analisar as alterações do menu da Netflix ano a ano. ( Se for de interesse, pode-se ir além! E dividir a coluna para Mês, Dia e Semana do mês.)
  • Na coluna “Duration” a duração de filmes (em minutos) se misturam com a duração de Tv Shows (Temporadas). Para organizar, iremos criar uma nova coluna “Season_count” e “Duration_movie” no dataframe para fixar a duração dos Tv Shows e filmes ,atráves de uma função Lambda.
# Excluindo colunas
df.drop(['cast','description', 'director'], axis=1, inplace=True)
#Alterando tipo da coluna e extraindo o ano
df["date_added"] = pd.to_datetime(df['date_added'])
df['year_added'] = df['date_added'].dt.year
#Criando 2 colunas novas apartir da coluna "Duration"df['season_count'] = df.apply(lambda x : x['duration'].split(" ")[0] if "Season" in x['duration'] else "", axis = 1)df['duration_movie'] = df.apply(lambda x : x['duration'].split(" ")[0] if "Season" not in x['duration'] else "", axis = 1)df.head()

out

Extraindo o primeiro gênero listado e criando a coluna ‘principal_genero’

No nosso Dataframe existe a coluna “listed_in” que informa as tags principais do gênero da produçao. Na linha 0 podemos observar a série “3%” que é classificada como “Internacional TV Shows, TV Dramas, TV SCI-fi &…” para nossa melhor análise vamos extrair de todas as linhas o primeiro gênero que aparece listado.

Iremos extrair o gênero principal usando mais uma vez a função lambda para cortar (split) a célula na ocorrência da primeira virgula encontrada e retiraremos o primeiro item recortado.

df['principal_genero'] = df['listed_in'].apply(lambda x: x.split(", ")[0])df['principal_genero'].head()

out

Alterando as classificações etárias para melhor entendimento

Nossa base de dadostem uma classificação etária de dificil compreensão, para melhorar nosso entendimento fizemos uma conversão de tags seguindo o sistema de classificação de filmes da Motion Picture Association, que é usado nos Estados Unidos para classificar a adequação de um filme para determinados públicos com base em seu conteúdo.

Com base nisso, vamos lá:

#Criando dicionário de indicações etáriasratings_ages = {'TV-PG': 'Older Kids','TV-MA': 'Adults','TV-Y7-FV': 'Older Kids','TV-Y7': 'Older Kids','TV-14': 'Teens','R': 'Adults','TV-Y': 'Kids','NR': 'Adults','PG-13': 'Teens','TV-G': 'Kids','PG': 'Older Kids','G': 'Kids','UR': 'Adults','NC-17': 'Adults'}#Transformando os valores da coluna com base no dicionáriodf['target_ages'] = df['rating'].replace(ratings_ages)df['target_ages'].unique(0out:array(['Adults', 'Teens', 'Older Kids', 'Kids', nan], dtype=object)

Transformando dados categóricos e númericos

Para termos um estudo melhor organizado e eficiente nas suas análises precisamos redefinir os tipos de algumas colunas transformando-as em dados categóricos ou númericos, de acordo com a nossa necessidade, vamos lá:

df['type'] = pd.Categorical(df['type'])df['target_ages'] = pd.Categorical(df['target_ages'], categories=['Kids', 'Older Kids', 'Teens', 'Adults'])df['duration_movie'] = pd.to_numeric(df['duration_movie'])df['year_added'] = pd.to_numeric(df['year_added'])df.info()

Limpando dados faltantes

Vamos conferir de novo como estão as informações sobre dados faltantes no nosso DataFrame. A bem da verdade, checar informações sobre dados nulos/faltantes é algo recorrente no seu processo de Data Cleaning. Isto porque, é necessário ter bastante cuidado para não jogar no lixo dados que podem ser tratados, pois podem ser valiosos.

df.isna().sum()

Aqui detectamos dados faltantes nas colunas “country”, “data_added” , “rating”, “duration_movie”, “target_ages”.

Usando o método mode( ) e utilizando a moda para preencher os valores ausentes

Existe inúmeros métodos de preenchermos os dados nulos/faltantes. Podemos preencher com o valor da linha seguinte, da linha anterior, da média da coluna e de muitas outras formas que não seja apenas mandar um dropna e apagar as informações nulas. No nosso caso escolhemos o método mode que irá preencher os dados faltantes utilizando o valor que mais aparece na coluna, ou seja, a moda.

o método mode() retorna uma series, ainda que tenha apenas um valor. dito isto precisamos indicar que iremos capturar apenas o primeiro elemento da series, por isso na nossa linha de código mode() vem seguido de [0]

#Preenchendo a coluna de países
df['country'] = df['country'].fillna(df['country'].mode()[0])
#Preenchendo a coluna de faixa etária indicativadf['target_ages'] = df['target_ages'].fillna(df['target_ages'].mode()[0])#Preenchendo a coluna de ano de adiçãodf['year_added'] = df['year_added'].fillna(df['year_added'].mode()[0])

vamos checar mais uma vez os valores nulos:

df.isna().sum()

Criando a coluna do ‘principal_country’ que acomodará o principal país produtor

Iremos fazer na coluna “country” o mesmo que fizemos na coluna “listed_in” e extrair o principal país produtor.

df['principal_country'] = df['country'].apply(lambda x: x.split(",")[0])

Para finalizar, podemos excluir algumas colunas que agora já não são mais necessárias para o nosso estudo, tais como: ‘date_added’,’rating’, ‘duration’, ‘listed_in’ que foram as colunas que manipulamos para transformar nosso Dataframe.

df.drop([‘date_added’,’rating’, ‘duration’, ‘listed_in’,], axis=1, inplace=True)

Separando o DataFrame de Movies e Tv Show’s

Por fim, vamos separar nosso Dataset em dois Dataframes: um apenas com filmes e outro apenas com Tv Shows.

#Separando os Filmes
filmes_df=df[df['type']=='Movie']
.#Separando as Series/Tv shows
tv_show_df=df[df['type']=='TV Show']
#Contando os valoresdf_types_ = df['type'].value_counts()#Criando um dataframe de controle de valoresdf_types_= pd.DataFrame(df_types_)df_types_ = df_types_.reset_index()df_types_ = df_types_.rename({'index': 'type','type': 'quantidade'}, axis = 1)df_types_

Pronto, a primeira parte do nosso projeto já fizemos! A parte 2 desse artigo será uma Análise Exploratória de Dados desse Dataset, posteriormente iremos unir neste Dataset as avaliações das produções do Netflix no IMdb.

Até lá!

--

--

João Escórcio

Hello! I'm João Escórcio, or just João :). Data Analyst | Economist from UFC | Master's student in Economics and Public Policy at ISCTE-IUL.