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

Introdução a algoritmos nao supervisionados aula 2

import pandas as pd
uri_filmes = 'https://raw.githubusercontent.com/alura-cursos/machine-learning-algoritmos-nao-supervisionados/master/movies.csv'
filmes = pd.read_csv(uri_filmes) #filmes eh um dataframe
filmes.columns = ['filme_id', 'titulo', 'generos']   #alteramos o nome das colunas no arquivo .csv original
filmes.head() #mostrar os 5 primeiros filmes apenas
#filmes.generos --> #imprime a coluna generos do dataframe
generos = filmes.generos.str.get_dummies() #retorna um novo dataframe com os dummies do primeiro dataframe
#vamos concatenar o dataframe generos com o dataframe original filmes
dados_dos_filmes = pd.concat([filmes, generos], axis=1) #axis=1 eh para que a concatenacao seja lateral, um ao lado do outro
print(dados_dos_filmes.head())
from sklearn.preprocessing import StandardScaler #essa biblioteca permite criar um escalador para quantificar os dummies da coluna genero
#vamos criar um objeto a partir do StandardScaler
scaler = StandardScaler()
generos_escalados = scaler.fit_transform(generos) # scaler vai aprender e escalar os generos
#dessa forma a gente sabe que o genero de um filme influencia mais que o outro genero
#por exemplo, em toy story animacao influencia mais que comedia
print(generos_escalados.shape)  #retorna as linhas e colunas
from sklearn.cluster import KMeans #da biblioteca SKlearn usaremos o modulo cluster KMeans para agrupar os filmes, clusterizar
#o Kmeans vai pegar os filmes e vai tentar colocar os filmes parecidos nos mesmos grupos e para isso precisamos informar quantos grupos ele vai trabalhar
#qual o numero de clusters
modelo = KMeans(n_clusters=3) #podemos nomear o numero de grupos
modelo.fit(generos_escalados)
print('Grupos {}'.format(modelo.labels_)) #mostra o resultado da classificacao dos grupos
print(f'Grupos {modelo.labels_}') #mostra o resultado da classificacao dos grupos
#no caso dos filmes, cada centroide do KMeans vai estar em um ponto (3 pontos dos 3 grupos) com 20 dimensões (os 20 generos).
#quanto mais pesar um genero, mais proximo de determinado ponto o filme estara agrupado. O centroide eh o ponto central de
#cada grupo
#queremos dar uma olhada no centro de cada grupo e para isso vamos imprimir o centro de cada grupo
print(generos.columns)
print(modelo.cluster_centers_) #teremos 3 grupos e cada grupo tem um valor para cada genero
#vamos transformar dados em DataFrame para fazer graficos
#comecando pelo centro de cada grupo
grupos = pd.DataFrame(modelo.cluster_centers_, columns=generos.columns) #vamos nomear cada coluna com o nome dos generos. Eu posso imprimir isso para ver. Teremos os 3 centroides.
print(grupos)
#vamos plotar um grafico a partir do centro de cada grupo
#grafico de barras
grupos.plot.bar()
grupos.plot.bar(subplots=True)
#vamos aumentar o tamanho da imagem
grupos.plot.bar(subplots=True, figsize=(25,25))
grupos.plot.bar(subplots=True, figsize=(25,25), sharex=False)
#em vez de plotar 20 subgraficos queremos que plote apenas 3, um por grupo
#vamos tirar a matriz transposta, para inverter linhas e colunas
grupos.transpose()
grupos.transpose().plot.bar(subplots=True, figsize=(25,25), sharex=False)
#vamos analisar em cada grupo a qualidade da separacao em grupos
grupo = 0
filtro = modelo.labels_ == grupo
#vamos pegar o dataframe com os dados dos filmes e aplicar o filtro a esse dataframe maior
dados_dos_filmes[filtro].sample(10) #vamos reduzir a exibicao do resultado em 10 exemplos
#podemos ver que os generos sao bem parecidos

1) Estou rodando o codigo no python 3 para testar na prática e nao apenas no ambiente virtual colaborativo 2)nao consigo visualizar os graficos, qual o comando que devo usar ? O python acata os comandos dados mas nao plota os graficos.

Aguardo orientações.

Muito obrigado

4 respostas
solução!

Fala Fernando, beleza?

Cara, pelo que eu entendi você está executando o código por linha de comando é isso?

Se sim, não acredito que as libraries consigam plotar gráficos sem utilizar os recursos do navegador (CSS, JavaScript).

De toda forma, caso não queira usar o Colab, instala o jupyter usando o comando 'pip install jupyter' e iniciar o Notebook Jupyter com o comando 'python jupyter'.

Espero ter ajudado, valeu!

Estou usando o PyCharm para rodar o programa com o interpretador Python3.7. Instalei a biblioteca sugerida jupyter e rodei o programa acima mas os graficos não aparecem. Por favor, me orientar como plotar esses graficos. Obrigado.

Resolvido, instalei as bibliotecas e funcionou!! obrigado!!

Cara, eu ia sugerir justamente o que você fez. Que bom que você foi pro ativo! ;)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software