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 [ ]: