In [1]:
from IPython.display import HTML
HTML("""
<style>
/* ocultar la primera celda */
.jp-CodeCell:first-child {
display:none;
}
/* tipografía general */
body {
font-family: 'Segoe UI', Arial, sans-serif;
line-height: 1.7;
background:#fafafc;
}
/* títulos */
h1 {
color:#6B8EEC;
border-bottom:3px solid #BFD3FF;
padding-bottom:6px;
}
h2 {
color:#5A5A7A;
margin-top:30px;
}
/* párrafos */
p {
font-size:16px;
color:#444;
}
/* bloques de código */
.jp-CodeCell pre {
background:#f4f6ff !important;
color:#333 !important;
border-left:4px solid #9FB8FF;
padding:12px;
border-radius:6px;
}
/* resultados */
.jp-OutputArea pre {
background:#fdf6ff;
border-left:4px solid #D7B8FF;
padding:10px;
border-radius:6px;
}
/* tablas de pandas */
.dataframe {
border-collapse: collapse !important;
margin-top:15px;
background:white;
border-radius:8px;
overflow:hidden;
}
.dataframe th {
background:#C9D8FF !important;
color:#333 !important;
padding:8px;
}
.dataframe td {
padding:8px;
border-bottom:1px solid #eee;
}
/* cajas informativas */
.note {
background:#EEF3FF;
padding:15px;
border-radius:8px;
border-left:6px solid #9FB8FF;
}
/* listas */
ul {
line-height:1.8;
}
</style>
""")
Out[1]:
IDEA¶
I: Idea
Analizar los géneros musicales del dataset para identificar cuáles tienen un mejor balance entre popularidad, energía y danceability.
D: Datos
Utilizar las columnas track_genre, track_id, popularity, energy y danceability para realizar el análisis.
E: Estrategia
Agrupar las canciones por género utilizando groupby y calcular métricas agregadas con agg, como número de canciones y promedios de popularidad, energía y danceability.
A: Análisis
Filtrar los géneros con al menos 200 canciones y ordenar los resultados por popularidad promedio para identificar los géneros más destacados.
In [4]:
import pandas as pd
df = pd.read_csv("dataset.csv")
generos = df.groupby("track_genre").agg(
tracks=("track_id", "count"),
avg_popularity=("popularity", "mean"),
avg_energy=("energy", "mean"),
avg_danceability=("danceability", "mean")
)
generos = generos[generos["tracks"] >= 200]
generos = generos.sort_values(by="avg_popularity", ascending=False)
generos
Out[4]:
| tracks | avg_popularity | avg_energy | avg_danceability | |
|---|---|---|---|---|
| track_genre | ||||
| pop-film | 1000 | 59.283 | 0.604562 | 0.597146 |
| k-pop | 1000 | 56.896 | 0.675654 | 0.647732 |
| chill | 1000 | 53.651 | 0.426723 | 0.664346 |
| sad | 1000 | 52.379 | 0.462470 | 0.692378 |
| grunge | 1000 | 49.594 | 0.803290 | 0.457062 |
| ... | ... | ... | ... | ... |
| chicago-house | 1000 | 12.339 | 0.733215 | 0.766176 |
| detroit-techno | 1000 | 11.174 | 0.710512 | 0.722568 |
| latin | 1000 | 8.297 | 0.727080 | 0.721902 |
| romance | 1000 | 3.245 | 0.294304 | 0.432133 |
| iranian | 1000 | 2.210 | 0.545846 | 0.300686 |
114 rows × 4 columns
In [ ]: