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.
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.
Paso 1: Obter o arquivo de películas
Traballaremos co arquivo movies_top_500.csv. Este arquivo contén información sobre 500 películas, como título, idioma, data de estrea, número de votos e puntuación.
( Se este non é o teu arquivo, podes buscar outro en Kaggle ou en calquera fonte, descargalo en formato CSV e usalo en substitución. Probablemente teñas que limpalo e axustalo para usalo.)
Paso 2: Subir o arquivo a Google Colab
- Abre Google Colab.
- Vai á sección de "Arquivos" á esquerda e fai clic no botón "Subir arquivo".
- Carga o arquivo movies_top_500.csv ou o ficheiro que prefiras.
Paso 3: Cargar e explorar o conxunto de datos
- Este programa carga e explora os datos do arquivo en colab, tamén crea outro DataFrame escollendo só certas columnas e ordena os datos por puntuación das películas.
- intenta comprender a estrutura de datos, as columnas, a naturaleza dos valores,etc...
- Proba tamén a seleccionar só determinadas columnas
- Proba a ordenar os datos según outro criterio.
Paso 4: Crear un histograma das puntuacións
Completa e copia este código para xeneralo: (Lembra que en colab, podes facelo noutra cela, porque xa lembra o DataFrame por estar no mesmo caderno de programación.)
plt.hist(♥['puntuación'], bins=♥, color='♥')
plt.title('Distribución das Puntuacións')
plt.xlabel('Puntuación')
plt.ylabel('Frequencia')
plt.show()
Intenta:
- Crear unha figura máis grande para o gráfico con figsize
- Engadir unha cuadrícula para unha mellor visualización con plt.grid
- Engadirlle un borde negro ás barras co parámetro edgecolor='black' a plt.hit
Paso 5: Crear un gráfico de barras cos idiomas máis comúns
Completa e copia este código para xeneralo:
idiomas = df['♥'].value_counts()
idiomas.plot(kind='bar', color='♥')
plt.title('Distribución por Idiomas')
plt.♥label('Idioma')
plt.♥label('Número de Películas')
plt.show()
Propoñoche:
- Cambiar as cores das gráficas.
- Investiga como facer diferentes tipos de gráficos: scatterplots ou gráficos de área.
- Engadirlle un borde negro ás barras co parámetro edgecolor='black'
Paso 6: Relación entre votos e puntuación cun gráfico de dispersión
Completa e copia este código para xeneralo: (Lembra que en colab, podes facelo noutra cela, porque xa lembra o DataFrame por estar no mesmo caderno de programación.)
# Crear unha figura máis grande para o gráfico
# Axustar o rango do eixo X
plt.figure(figsize=(14, 8)) # Define o tamaño da figura
plt.scatter(df['votos'], ♥['puntuación'], color='purple', alpha=♥)
plt.xlim(df['votos'].min(), df['♥'].max())
plt.title('Relación entre Votos e Puntuación')
plt.xticks(rotation=♥)
plt.xlabel('Número de Votos')
plt.ylabel('Puntuación')
plt.tight_layout()
plt.show()
Podes intentar:
- Cambiar as cores das gráficas.
Paso 7: Crear un heatmap para analizar correlacións
Completa e copia este código para xeneralo:
#Correlación entre votos e puntuación
correlacion = df[['votos', '♥♥♥♥']].corr()
print(correlacion)
#Creación do heatmap
sns.heatmap(correlacion, annot=♥, cmap='coolwarm', fmt=".2f")
plt.title('Mapa de Calor das Correlacións')
plt.show()
A maiores, podes intentar:
- Cambiar as cores das gráficas.
- Investiga como facer heatmaps con outras variables.
Paso 8: Analiza gráficas
Que idioma ten o maior número de películas ben puntuadas?
Hai unha relación clara entre o número de votos e a puntuación?
Reflexiona sobre como se poderían usar estas correlacións nun modelo de recomendación ou predición.
Agora, analiza e extrae conclusións de cada gráfica , indicando un posible uso en IA.
Extras
Queres facer máis gráficas ou representar os datos doutro xeito?
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()
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()
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()
Programa solución
Análise das Gráficas e Aplicacións para IA
| Gráfica | Análise | Aplicación en IA |
|---|---|---|
![]() |
O histograma mostra a distribución das puntuacións das películas entre 7.9 e 8.7. A maioría das películas están agrupadas arredor da puntuación mínima (7.9), mentres que poucas acadan puntuacións máis altas. | Este tipo de información pode ser usada para recomendar películas populares ou cunha puntuación alta. As plataformas de entretemento poden destacar títulos de puntuacións superiores para atraer usuarios á busca de contidos de calidade. |
![]() |
O gráfico de barras revela que a maioría das películas están en inglés, seguidas por xaponés e outros idiomas. Este dominio indica unha forte influencia do idioma inglés na industria cinematográfica. |
Para IA de recomendacións, esta análise pode axudar a adaptar as suxestións segundo o idioma preferido dos usuarios. Isto beneficia a personalización, garantindo que os usuarios reciban contido no idioma que prefiren. Usar esta gráfica para detectar idiomas con menos representación permite mellorar a diversidade nas recomendacións ou desenvolver estratexias para promover películas noutros idiomas. |
![]() |
A gráfica de dispersión mostra unha correlación moderada entre votos e puntuacións. Películas con máis votos tenden a ter puntuacións estables, mentres que aquelas con menos votos presentan maior variabilidade. | Esta información pode ser útil para IA que prioricen películas con alto número de votos como indicativo de popularidade ou interese. Podería destacar títulos con puntuación alta e moitos votos nas recomendacións. |
![]() |
O mapa de calor mostra unha correlación moderada (0.33) entre votos e puntuacións. Isto indica que mentres que sí hai unha conexión, non é completamente determinante. | A IA pode usar esta correlación para combinar votos e puntuacións na creación de métricas que prioricen contidos, equilibrando popularidade e calidade. |
Código Python: Análise de datos de películas
#Importa as bibliotecas necesarias:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#Carga o ficheiro CSV asegurándonos que os datos numéricos se comprenden: , para decimal e . para 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())
#Histograma
# Crear unha figura máis grande
plt.figure(figsize=(14, 8)) # Especifica un tamaño maior para a figura (ancho x alto)
# Crear o histograma
plt.hist(df['puntuación'], bins=10, color='skyblue', edgecolor='black')
# Personalizar o rango do eixo X (axustado ao mínimo e máximo)
#plt.xlim(df['puntuación'].min(), df['puntuación'].max())
# Personalizar o gráfico
plt.title('Distribución das Puntuacións', fontsize=20) # Tamaño do título maior
plt.xlabel('Puntuación', fontsize=16) # Etiqueta do eixo X cun tamaño maior
plt.ylabel('Frequencia', fontsize=16) # Etiqueta do eixo Y cun tamaño maior
plt.xticks(fontsize=14) # Tamaño das marcas no eixo X
plt.yticks(fontsize=14) # Tamaño das marcas no eixo Y
# Engadir unha cuadrícula para unha mellor visualización
plt.grid(axis='y', linestyle='--', alpha=0.7)
# Mostrar o gráfico
plt.show()
#Idiomas
idiomas = df['idioma'].value_counts()
idiomas.plot(kind='bar', color='orange',edgecolor='black')
plt.title('Distribución por Idiomas')
plt.xlabel('Idioma')
plt.ylabel('Número de Películas')
plt.show()
#Dispersión
# Crear unha figura máis grande para o gráfico
# Axustar o rango do eixo X
plt.figure(figsize=(14, 8)) # Define o tamaño da figura
plt.scatter(df['votos'], df['puntuación'], color='purple', alpha=0.6)
plt.xlim(df['votos'].min(), df['votos'].max())
plt.title('Relación entre Votos e Puntuación')
plt.xticks(rotation=90)
plt.xlabel('Número de Votos')
plt.ylabel('Puntuación')
plt.tight_layout()
plt.show()
#Correlación e heatmap
correlacion = df[['votos', 'puntuación']].corr()
print(correlacion)
sns.heatmap(correlacion, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Mapa de Calor das Correlacións')
plt.show()