Python para Análise de Dados

De forma geral, a Análise de Dados é um processo de inspeção, coleta, limpeza, transformação de dados, etc. com o objetivo de descobrir informações úteis e solucionar problemas. As Análises de Dados podem ser classificados como: descritiva, preditiva, prescritiva e diagnóstica. Mas para este post irei focar na Análise Descritiva.
 
Análise Descritiva
 
Com a análise descritiva é possível entender o que está acontecendo no negócio atualmente, tendo como principal objetivo resumir, sumarizar e explorar o comportamento dos dados.
 
Neste post irei usar o DataSet do MovieLens 100k e responder as seguintes perguntas:
  • Quais são os 20 filmes mais avaliados?
  • Quais filmes são mais bem avaliados?
  • Como estão as classificações dos filmes em relação as idades?
  • Quais filmes homens e mulheres mais avaliam?
  • # Importando a biblioteca Pandas
    import pandas as pd
    Observação: A base de dados já foi importada e mesclada com o Merge
     
    # Mesclando o DataFrame 'filme_classificacao' com os 'usuarios'
    filme_classificacao = pd.merge(filmes, classificacao)
    df = pd.merge(filme_classificacao, usuarios)
    df
    Observação: O DataFrame df possui 10000 linhas, e para exportar a imagem com dataframe-image, a quantidade de linhas precisa diminuir, então criei um novo DataFrame com apenas 10 linhas

    Alt Text
    Quais são os 20 filmes mais avaliados?
    avaliados = df['titulo'].value_counts().sort_values(ascending=False)[:20].to_frame('avaliados') \
    .style.background_gradient(cmap='Blues')
    avaliados
    Quais filmes mais bem avaliados?
    quantidade = df.groupby('titulo').size().to_frame('tamanho')
    quantidade
    quantidade = quantidade[quantidade['tamanho'] > 100]
    quantidade
    media = df.groupby('titulo')['classificacao'].mean().to_frame('media').round(2)
    media = pd.merge(
        left=quantidade,
        right=media,
        left_index=True,
        right_index=True
    )
    media
    bem_avaliados = media[['tamanho', 'media']].sort_values(by='media', ascending=False)[:10] \
    .style.background_gradient(subset=['media'], cmap='YlOrBr')
    bem_avaliados
    Como estão as classificações dos filmes em relação as idades?
     
    Primeiro vamos plotar um gráfico para ver a distribuição entre as idades dos usuários e usar a tabela frequência!
    usuarios.idade.plot.hist(bins=30)
    plt.title('Distribuição das idades dos usuários')
    plt.xlabel('Idades')
    plt.ylabel('Quantidades de usuários')
    plt.show()
    frequencia = df.idade.value_counts().to_frame('frequencia')
    frequencia = frequencia.reset_index().rename(columns={'index':'idade'}).sort_values(by='idade')
    frequencia.index = range(len(frequencia))
    frequencia[:28].style.background_gradient(
        subset='frequencia',
        cmap='Greys'
    )
    labels = ['7-16', '17-26', '27-36', '37-46', '47-56', '48-57', '58-67', '68-77']
    df['idade_agrup'] = pd.cut(df.idade, range(0, 81, 10), right=False, labels=labels)
    df[['idade', 'idade_agrup']].drop_duplicates()[:15]
    df.groupby('idade_agrup').agg({'classificacao': [np.size, np.mean]}).round(2)
    classficacao_media = df.loc[filmes_50.index].groupby(['titulo', 'idade_agrup'])
    classficacao_media.classificacao.mean().head(15)
    classificacao_media.classificacao.mean().unstack(1).fillna(0)[10:20]
    pivot = df.pivot_table(index=['filme_id', 'titulo'],
                          columns=['sexo'],
                          values='classificacao',
                          fill_value=0)
    pivot['diff'] = pivot.M - pivot.F
    pivot.reset_index('filme_id', inplace=True)
    divergencia = pivot[pivot.filme_id.isin(filmes_50.index)]['diff']
    divergencia.sort_values().plot(kind='barh', figsize=[9, 15])
    plt.title('Média masculina vs. feminino')
    plt.ylabel('Título')
    plt.xlabel('Diferença de avaliação média');

    31

    This website collects cookies to deliver better user experience

    Python para Análise de Dados