Netflix e IMdb Data cleaning + EDA com Python
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á!