fbpx

Dashboard Filmes IMDb

Veja os melhores filmes para assistir neste dashboard

Para uma melhor usabilidade veja no computador (ou gire o seu dispositivo)

Saiba mais sobre este dashboard

Não sei você, mas eu sou o tipo de pessoa que fica mais tempo tentando escolher um bom filme para ver do que vendo o filme em si. Normalmente utilizo as notas fornecidas pelo site do IMDb. 

As notas fornecidas neste site são uma proxy muito boa da qualidade do filme. 

Então eu fiz esse dashboard para justamente otimizar esse tempo de escolha e conseguir analisar os melhores filmes por categoria, ator, diretor, ano, etc. 

Os filmes estão “Rankeados” em função da:

Capítulo 1: Aquisição e Tratamento de Dados

De onde vieram os dados?

Os dados foram obtidos baixando o dados (.tsv – tab separeted values) do banco de dados do site do IMDb e importando para o Power BI as seguintes tabelas

Transformação de Dados

Capítulo 2: Apresentação e Cálculos em DAX

Modelagem de Dados

Após importar os dados e filtrar somente os “titleType” = “movies” é necessário relacionar as tabelas. 

imdb power bi modelagem da dados

Vejo o diagrama relacional entre as tabelas criado no Power BI

Obs1* As tabelas dGenre, dGenreID e dYear foram geradas usando o Power Query a partir da consulta f_Title

Obs2* para filtrar as tabelas que não tem “titleType” = “movies” foi necessário realizar Left Outer Join usando a f_title[“tconst”] e a f_title Crew[“tconts”].

Criando os visuais

bla bla bla

Design

bla bla bla

Imdb Power BI dashboard movies

Como o Rank dos filmes foi calculado usando DAX?

Para calcular corretamente o Rank foi necessário primeiro normalizar o votos, ou seja, transformar um valor que varia de zero votos até 3 milhões de votos o valor vai variar de 0 a 1, onde 1 representa o número de votos máximo e 0 representa o número de votos mínimo. 

				
					Rating (Rank) = 
// Normalizando soma de votos
VAR MAX_global = CALCULATE( MAX(f_Title[numVotes]) , ALL(f_Title) )
VAR soma_atual = AVERAGE(f_Title[numVotes]) 
VAR MIN_global = CALCULATE(MIN(f_Title[numVotes]) , ALL(f_Title) )
VAR normalizado = DIVIDE( soma_atual - MIN_global , MAX_global - MIN_global )
VAR peso_votos = 8
// Normalizando Ano
VAR MAX_Ano = CALCULATE( MAX(f_Title[startYear]) , ALL(f_Title) )
VAR Ano = AVERAGE(f_Title[startYear]) 
VAR MIN_Ano= CALCULATE(MIN(f_Title[startYear]) , ALL(f_Title) )
VAR normalizado_ano = DIVIDE( Ano - MIN_Ano , MAX_Ano- MIN_Ano )
VAR peso_ano = 0.5
// Nota
VAR nota_atual =  AVERAGE(f_Title[AverageRating])
// Nota final
VAR condicion = IF(nota_atual < 4 , BLANK() , nota_atual + normalizado*peso_votos + normalizado_ano*peso_ano)
RETURN condicion
				
			

Após calcular a medida vamos Rankea-la: 

				
					Rank = 
VAR ranke = RANKX( ALLSELECTED(f_Title) , [Rating (Rank)] , , , Skip)
VAR media = AVERAGE(f_Title[AverageRating])
RETURN IF(media < 4 , BLANK() , ranke )
				
			

Capítulo 3: Python & APIs

Como os posteres (imagens) foram obtidos?

A imagens foram obtidas utilizando a linguagem de programação Python e fazendo a conexão com a seguinte API:

O código em Python foi executado no Visual Studio em um arquivo Jupyter Notebook.

As livrarias que foram utilizadas

				
					import pandas as pd
import requests
import json
from IPython.core.display import clear_output
from pandas import json_normalize
from tqdm import tqdm_notebook as tqdm
import time
				
			

Através dos valores já obtidos da tabela “f_Title” é possível gerar um arquivo .csv (commar separeted values) exportando de uma visual de tabela somente o “tconst” e o “Title”. O valor de “tconst” será usado pela API para procurar a imagem 

				
					df2 = pd.read_csv("C:\CAMINHO DO ARQUIVO\Movies2.csv")
df2["URL"] = ""
df2
				
			
Imdb python Pandas Dataframe

Veja abaixo a função que retorna o link da imagem usando o código “tconst”:

As imagens foram prioritariamente buscadas na língua inglesa. 

				
					def get_image( imdbcode: str ):
 KEY = "SUA_CHAVE"   
 IMG_PATTERN = 'http://api.themoviedb.org/3/movie/{imdbid}/images?api_key={key}' 
 r = requests.get(IMG_PATTERN.format(key=KEY,imdbid=imdbcode))
 api_response = r.json()
 posters = api_response['posters']

 a = json.loads(r.text)
 res = json_normalize(a['posters'])
 data = pd.DataFrame(res)
 data = data[ data['iso_639_1'] == 'en' ]
 data2 = data[data['height'] == 3000 ]
 
 if (len(data2) >= 1 ):
  result = data2["file_path"].values[0]
 else:
  result = data["file_path"].values[0]

 result = 'https://image.tmdb.org/t/p/w500' + result
 return result
				
			

Agora vamos procurar para cada linha na tabela exportada o respectivo URL:

				
					for index, row in tqdm(df2.iterrows()):
 Imdb_id = row['tconst']  
 try:
   row['URL'] = get_image(Imdb_id)
 except:
  pass

df = df2
df
				
			
Imdb python - Visual Studio Code

Agora vamos gerar um novo .csv com o dataframe obtido.  

				
					df.to_csv (r"C:\CAMINHO DO ARQUVI\IMDB.csv", index = False, header=True)
				
			

Visual Personalizado

Agora que já temos o URL de todas as imagens é possível utilizar o visual personalizado “Image Grid” e usar a coluna de URL como entrada. 

Lembrando que o dashboard possui diversas ferramente de navegação como botões de “drill-through” e filtros. 

Image Grid Power BI Visual
Imdb Power BI dashboard movies Forrest Gump

Capítulo 4: Navegação de Página

Botões

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Tooltips

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Imdb Power BI dashboard Fight Club

Drill-Through

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

IMDb Power BI Dashboard
IMDb Power BI Dashboard Interstellar

Outros Conteúdos

Autor

Picture of Breno Valinhas

Breno Valinhas

Engenheiro mecânico e certificado como Data Analyst Associate pela Microsoft. Atualmente trabalha como engenheiro de manutenção e há mais de 6 anos analisa as condições de máquinas rotativas e desenvolve diversas soluções em Microsoft Power BI aplicadas ao planejamento de manutenção e gestão de contratos. Desde 2020 cria conteúdos no YouTube e Instagram sobre Power BI, inteligência de negócios e controle financeiro.

Vamos Conversar

Entre em contato para uma consultoria ou projeto personalizado

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *