Saltar navegación

Reto 5 : Análise de datos

Análise de datos de películas

Duración:
50 min
Agrupamento:
2

Ides analizar datos de películas, usando un arquivo de datos descargado de kaggle, limpo, filtrado e seleccionado según as 500 películas mellor puntuadas.

De película
Copilot. De película (CC BY-SA)

Obxectivo:

  • Practicar como cargar e manipular un arquivo CSV.
  • Aprender a realizar unha análise exploratoria simple.
  • Visualizar as relacións entre variables con gráficos e heatmaps.
  • Extraer conclusións útiles para proxectos de IA, empregando un conxunto de datos de películas.

Lembra:A IA está para axudarte, pregúntalle!

Código Python: Cargar e explorar datos

#Importa as bibliotecas necesarias:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

#Carga o ficheiro CSV e aseguramos que se hai , vanse interpretar como números decimais e os . como miles

df = pd.read_csv('movies_top_500.csv',decimal=',', thousands='.')  # Substitúe co nome do teu ficheiro

#Visualiza as primeiras filas para entender os datos:
print("\nEstas son as primeiras filas do arquivo de películas inicial:")
print(df.head())

#Analiza a estrutura dos datos:
print("\nEstas é a información do arquivo de películas inicial:")
print(df.info())  # Estrutura do DataFrame

print("\nEstas é a información estatística do arquivo de películas inicial:")
print(df.describe())  # Estatísticas descritivas das columnas numéricas

#Seleccionar columnas relevantes
#Podes escoller só as columnas necesarias para a túa análise. Por exemplo:
#Título da película.
#Idioma.
#Data de estrea.
#Votos.
#Puntuación.
#Código para seleccionar columnas:
# Seleccionar columnas de interese
columnas_interes = ['titulo', 'puntuación']
df_seleccionado = df[columnas_interes]

# Comprobar as primeiras filas do novo DataFrame
print("\nEstas son as primeiras filas do arquivo de películas seleccionando só título e puntuación:")
print(df_seleccionado.head())

#Ordenar os datos segundo a puntuación
#Queremos coñecer as películas mellor puntuadas. Ordenaremos os datos pola columna puntuación.

#Ordenar as películas por puntuación:
print("\nEstas son as primeiras filas do arquivo de películas ordenado por puntuacións:")
df_ordenado = df_seleccionado.sort_values(by='puntuación', ascending=False)
# Comprobar as primeiras filas do novo DataFrame
print(df_ordenado.head())    

Táboa de Datos das Películas

Primeiras Filas do Arquivo Inicial

titulo idioma fecha votos puntuación
The Godfather Part II en 20/12/74 12271 8.575
Schindler's List en 15/12/93 15676 8.565
12 Angry Men en 10/04/57 8511 8.545
Spirited Away ja 20/07/01 16320 8.537
Dilwale Dulhania Le Jayenge hi 20/10/95 4424 8.529

Información do Arquivo Inicial

Propiedade Valor
Entradas totais 500
Columnas 5
Memoria usada 19.7+ KB

Estatísticas do Arquivo Inicial

Parámetro votos puntuación
count 500.000000 500.000000
mean 5337.870000 8.072394
std 6842.951239 0.187368
min 302.000000 7.809000
25% 737.250000 7.918750
50% 2145.000000 8.039500
75% 7855.500000 8.200000
max 36281.000000 8.700000

Primeiras Filas Seleccionando Título e Puntuación

titulo puntuación
The Godfather Part II 8.575
Schindler's List 8.565
12 Angry Men 8.545
Spirited Away 8.537
Dilwale Dulhania Le Jayenge 8.529

Primeiras Filas Ordenadas por Puntuación

titulo puntuación
The Shawshank Redemption 8.700
The Godfather 8.690
The Godfather Part II 8.575
Schindler's List 8.565
12 Angry Men 8.545

Código Python: Tendencia de votos por ano


import pandas as pd import matplotlib.pyplot as plt # Cargar o ficheiro asegurando interpretación correcta df['fecha'] = pd.to_datetime(df['fecha'], format='%d/%m/%y', errors='coerce') # Corrixir anos interpretados incorrectamente (2060 -> 1960, por exemplo) df['fecha'] = df['fecha'].apply(lambda x: x.replace(year=x.year - 100) if x.year > 2025 else x) # Agrupar por ano e calcular a media dos votos votos_por_ano = df.groupby(df['fecha'].dt.year)['votos'].mean() # Crear o gráfico de liñas plt.figure(figsize=(12, 6)) votos_por_ano.plot(kind='line', color='green') plt.title('Evolución dos Votos por Ano de Estrea', fontsize=16) plt.xlabel('Ano', fontsize=14) plt.ylabel('Votos Medio', fontsize=14) plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show()
Descrición: Podemos crear unha gráfica que analice a evolución dos votos ou puntuacións ao longo dos anos de estrea. Isto permitirá observar como as películas de diferentes décadas foron valoradas ou recibidas polo público.
Aplicación: Esta gráfica pode axudar a identificar períodos históricos con maior interese cinematográfico, destacando anos con moitas películas populares.

Código Python: Número de votos en relación ó votado

import seaborn as sns

# Categorizar películas en rangos de votos
df['votos_rango'] = pd.cut(df['votos'], bins=5, labels=['Baixo', 'Medio-Baixo', 'Medio', 'Medio-Alto', 'Alto'])

# Crear o gráfico de boxplot
plt.figure(figsize=(12, 6))
sns.boxplot(x='votos_rango', y='puntuación', data=df, palette='Set3', hue=None)

plt.title('Distribución de Puntuacións por Rango de Votos', fontsize=16)
plt.xlabel('Rango de Votos', fontsize=14)
plt.ylabel('Puntuación', fontsize=14)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()    
Descrición: Un boxplot que mostre a distribución das puntuacións segundo diferentes rangos de votos. Isto axuda a detectar se hai relación entre o número de votos dunha película e as puntuacións altas ou baixas.
Aplicación: Esta gráfica podería ser útil para axustar modelos de recomendación baseados en votos ou puntuacións, destacando películas que rompen tendencias comúns.

Código Python: Idiomas frente a puntuación e número de votos

# Agrupar por idioma e calcular votos e puntuación media
idioma_popularidade = df.groupby('idioma').agg({'votos': 'mean', 'puntuación': 'mean'})

# Crear unha paleta de cores
palette = sns.color_palette('Set2', n_colors=len(idioma_popularidade))

# Crear a gráfica de dispersión con etiquetas e cores
plt.figure(figsize=(12, 6))
for i, idioma in enumerate(idioma_popularidade.index):
    plt.scatter(idioma_popularidade.loc[idioma, 'votos'], 
                idioma_popularidade.loc[idioma, 'puntuación'], 
                color=palette[i], label=idioma, s=100, alpha=0.7)

# Engadir etiquetas
for idioma in idioma_popularidade.index:
    plt.text(idioma_popularidade.loc[idioma, 'votos'], 
             idioma_popularidade.loc[idioma, 'puntuación'], 
             idioma, fontsize=9, ha='right')

# Personalizar o gráfico
plt.title('Popularidade vs Puntuación por Idioma', fontsize=16)
plt.xlabel('Votos Medio', fontsize=14)
plt.ylabel('Puntuación Media', fontsize=14)
plt.grid(axis='both', linestyle='--', alpha=0.7)
plt.legend(title='Idioma', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()    
Descrición: Un gráfico de dispersión onde se combine a puntuación e os votos medios para cada idioma. Isto ofrece unha vista global de cales idiomas teñen as películas máis populares e ben valoradas.
Aplicación: Usar esta gráfica para identificar idiomas que se destacan por películas de alta calidade e popularidade pode axudar a segmentar recomendacións para distintos mercados lingüísticos.

Rúbrica de avaliación

Rúbrica Reto 5: Análise de datos de películas
Criterio Excelente (9-10) Bo (7-8) Aceptable (5-6) Mellorable (3-4) Moi mellorable (0-2)
Carga e exploración do CSV Carga correcta do arquivo, revisión de estrutura e limpeza de datos. Carga adecuada pero con pequenos problemas na exploración dos datos. Carga do arquivo realizada pero con dificultades na súa manipulación. Arquivo cargado pero sen unha correcta exploración. Non carga correctamente o arquivo ou non realiza a exploración.
Selección e ordenación dos datos Selecciona e ordena columnas correctamente segundo os criterios establecidos. Realiza selección e ordenación con pequenos erros na estrutura. Ordena parcialmente os datos pero con dificultades na comprensión. Datos seleccionados de forma incorrecta ou con erros evidentes. Non realiza ningunha selección ou ordenación dos datos.
Creación do histograma Histograma correctamente configurado co número óptimo de bins e estética axeitada. Histograma ben feito pero con pequenas imprecisións no formato. Histograma con erros na distribución ou interpretación dos datos. Gráfico pouco informativo ou mal configurado. Non realiza o histograma.
Gráfico de barras de idiomas Gráfico ben estruturado mostrando distribución clara dos idiomas. Gráfico correcto pero con pequenos erros na visualización. Datos de idiomas mostrados con dificultades na presentación. Gráfico incompleto ou con valores erróneos. Non realiza esta representación.
Gráfico de dispersión votos/puntuación Gráfico ben estruturado con interpretación clara da relación entre variables. Gráfico de dispersión ben feito pero con pequenos erros. Representación con dificultades na identificación de patróns. Gráfico pouco informativo ou mal configurado. Non realiza esta representación.
Mapa de calor de correlacións Heatmap ben configurado con interpretación adecuada das correlacións. Heatmap correcto pero con pequenos erros na estética. Heatmap con datos erróneos ou pouca claridade na interpretación. Mapa de calor con valores erróneos ou mal configurado. Non realiza esta análise.
Análise das gráficas e conclusións Explicación clara das gráficas e impacto en IA. Análise correcta pero con algunhas ideas pouco desenvolvidas. Análise parcial das gráficas sen conexión clara co uso en IA. Explicación incompleta ou con dificultades interpretativas. Non analiza as gráficas nin extrae conclusións.
Actitude ante os problemas Busca solucións, explora os datos e optimiza as análises. Resolve os problemas con esforzo e consulta a documentación. Resolve con dificultades pero sen explorar melloras. Resígnase ante os erros sen buscar alternativas. Non intenta resolver os problemas ou abandona o traballo.
Traballo colaborativo Comunicación eficaz e traballo equilibrado en parella. Traballo en equipo con pequenas dificultades. Interacción mínima, traballo case independente. Pouca colaboración, realízase gran parte do traballo de forma individual. Non colabora coa parella nin contribúe ao traballo conxunto.