Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Trabalhar com a coluna genres do tmdb_5000_movies

Estava tentando fazer uma análise/exploração em cima da coluna genres do arquivo tmdb_5000_movies.csv, exemplo: Qual gênero aparece mais? qual o mais votado? a média por gênero, etc. Contudo não consegui, pois mesmo apresentando uma estrutura de dicionário trata-se de uma string. Poderiam me orientar em como estruturar estas informações?

5 respostas
solução!

Olá Wellington!

Seguindo esses passos você conseguirá trabalhar com as informações que você precisa. Apenas importe a biblioteca do json.

import json
import pandas as pd
tmdb = pd.read_csv("tmdb_5000_movies.csv")
tmdb.head()

Depois mude o nome da coluna de id para movie_id, porque no campo genêro tem um parâmetro que também chama a id.

tmdb=tmdb.rename(columns = {'id':'movie_id'})

Agora crie uma lista com os campos que apresentam os dados em forma de dicionário como o campo gênero. E passe para json.

json_cols = 'genres','keywords','production_companies','production_countries','spoken_languages'
for c in json_cols:
    tmdb[c] = tmdb[c].map(json.loads)

Defina essas funções, no caso eu mantive a coluna title e movie_id


def value_update(s, d, idxes):
    for idx in idxes:
        d[idx] = s[idx]

def calculate_json_col(row, src_col, kept_cols):
    df = None
    if row[src_col]:
        df = pd.DataFrame.from_records(row[src_col])

    else:
        df = pd.DataFrame()
    if kept_cols:
        value_update(row, df, kept_cols)
    return df

def collect_json_col(src_df, src_col, kept_cols):
    return pd.concat(\
                   map(lambda x: calculate_json_col(src_df.loc[x],\
                                               src_col, kept_cols),\
                                               src_df.index),\
                   axis=0, ignore_index=True)
kept_cols = ['title', 'movie_id']

Agora é só chamar a função com o campo que você precisa alterar no caso é o genêros (genres)

genres_df = collect_json_col(tmdb, 'genres', kept_cols)
genres_df.info()

Você vai perceber que mantive a coluna movie_id, title acrescentando as colunas name e id que antes fazia parte de genres.

Olá Wellington!O meu exemplo ajudou a tirar sua dúvida de como trabalhar com o campo 'gênero' ?

Oi Wellington,

O Pandas possui uma função chamada get_dummies que transforma todas essas Strings em várias colunas booleanas:

dados['genres'].str.get_dummies()

Alguns cursos nossos como o de recomendação com machine learning usam essa função.

[]s

Olá Henrique Lustosa, muito obrigado pelo ajuda, consegui colocar para funcionar e gerar as visões que gostaria. Guilherme vou estudar a função que você passou.

novamente obrigado pelo apoio

Olá Welington, Que bom que deu certo! Poderia colocar como solucionado o post. Abraço