Created
January 29, 2025 12:32
-
-
Save dedemenezes/4e23fdac9be2a0796671ac014e672a7a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "c9d1506a-03f9-46c0-85ca-872c5ba04c04", | |
"metadata": {}, | |
"source": [ | |
"# Imports" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "f5eb327e-3505-4763-a563-0e24f674f6db", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib\n", | |
"%matplotlib inline\n", | |
"import numpy as np\n", | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "22116dc9-e7ae-4eac-9e1c-d3c1f1e013ee", | |
"metadata": {}, | |
"source": [ | |
"# Reading Top Spotify Tracks 2017" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "c5312e17-e846-4e2f-8c3f-1b25834346ce", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"tracks_df = pd.read_csv('./data/featuresdf.csv')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "682c7600-0d80-4832-b0b9-d0940a24c331", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>id</th>\n", | |
" <th>name</th>\n", | |
" <th>artists</th>\n", | |
" <th>danceability</th>\n", | |
" <th>energy</th>\n", | |
" <th>key</th>\n", | |
" <th>loudness</th>\n", | |
" <th>mode</th>\n", | |
" <th>speechiness</th>\n", | |
" <th>acousticness</th>\n", | |
" <th>instrumentalness</th>\n", | |
" <th>liveness</th>\n", | |
" <th>valence</th>\n", | |
" <th>tempo</th>\n", | |
" <th>duration_ms</th>\n", | |
" <th>time_signature</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>68</th>\n", | |
" <td>2cnKEkpVUSV4wnjQiTWfH</td>\n", | |
" <td>Escápate Conmigo</td>\n", | |
" <td>Wisin</td>\n", | |
" <td>0.747</td>\n", | |
" <td>0.864</td>\n", | |
" <td>8.0</td>\n", | |
" <td>-3.181</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0599</td>\n", | |
" <td>0.0245</td>\n", | |
" <td>0.000045</td>\n", | |
" <td>0.0853</td>\n", | |
" <td>0.754</td>\n", | |
" <td>92.028</td>\n", | |
" <td>232787.0</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>0KKkJNfGyhkQ5aFogxQAP</td>\n", | |
" <td>That's What I Like</td>\n", | |
" <td>Bruno Mars</td>\n", | |
" <td>0.853</td>\n", | |
" <td>0.560</td>\n", | |
" <td>1.0</td>\n", | |
" <td>-4.961</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0406</td>\n", | |
" <td>0.0130</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.0944</td>\n", | |
" <td>0.860</td>\n", | |
" <td>134.066</td>\n", | |
" <td>206693.0</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98</th>\n", | |
" <td>7i2DJ88J7jQ8K7zqFX2fW</td>\n", | |
" <td>Now Or Never</td>\n", | |
" <td>Halsey</td>\n", | |
" <td>0.658</td>\n", | |
" <td>0.588</td>\n", | |
" <td>6.0</td>\n", | |
" <td>-4.902</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0367</td>\n", | |
" <td>0.1050</td>\n", | |
" <td>0.000001</td>\n", | |
" <td>0.1250</td>\n", | |
" <td>0.434</td>\n", | |
" <td>110.075</td>\n", | |
" <td>214802.0</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" id name artists danceability \\\n", | |
"68 2cnKEkpVUSV4wnjQiTWfH Escápate Conmigo Wisin 0.747 \n", | |
"8 0KKkJNfGyhkQ5aFogxQAP That's What I Like Bruno Mars 0.853 \n", | |
"98 7i2DJ88J7jQ8K7zqFX2fW Now Or Never Halsey 0.658 \n", | |
"\n", | |
" energy key loudness mode speechiness acousticness instrumentalness \\\n", | |
"68 0.864 8.0 -3.181 0.0 0.0599 0.0245 0.000045 \n", | |
"8 0.560 1.0 -4.961 1.0 0.0406 0.0130 0.000000 \n", | |
"98 0.588 6.0 -4.902 0.0 0.0367 0.1050 0.000001 \n", | |
"\n", | |
" liveness valence tempo duration_ms time_signature \n", | |
"68 0.0853 0.754 92.028 232787.0 4.0 \n", | |
"8 0.0944 0.860 134.066 206693.0 4.0 \n", | |
"98 0.1250 0.434 110.075 214802.0 4.0 " | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# tracks_df.head(3)\n", | |
"tracks_df.sample(3)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "cee0c3eb-6a45-4cd8-8a86-543c5cba925e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(100, 16)" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df.shape #(row, columns)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "6d19a097-73a1-427f-9f3a-e905ebaaf847", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<class 'pandas.core.frame.DataFrame'>\n", | |
"RangeIndex: 100 entries, 0 to 99\n", | |
"Data columns (total 16 columns):\n", | |
" # Column Non-Null Count Dtype \n", | |
"--- ------ -------------- ----- \n", | |
" 0 id 100 non-null object \n", | |
" 1 name 100 non-null object \n", | |
" 2 artists 100 non-null object \n", | |
" 3 danceability 100 non-null float64\n", | |
" 4 energy 100 non-null float64\n", | |
" 5 key 100 non-null float64\n", | |
" 6 loudness 100 non-null float64\n", | |
" 7 mode 100 non-null float64\n", | |
" 8 speechiness 100 non-null float64\n", | |
" 9 acousticness 100 non-null float64\n", | |
" 10 instrumentalness 100 non-null float64\n", | |
" 11 liveness 100 non-null float64\n", | |
" 12 valence 100 non-null float64\n", | |
" 13 tempo 100 non-null float64\n", | |
" 14 duration_ms 100 non-null float64\n", | |
" 15 time_signature 100 non-null float64\n", | |
"dtypes: float64(13), object(3)\n", | |
"memory usage: 12.6+ KB\n" | |
] | |
} | |
], | |
"source": [ | |
"tracks_df.info()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "424f8a25-8785-4493-a934-2bb1e23524e2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Index(['id', 'name', 'artists', 'danceability', 'energy', 'key', 'loudness',\n", | |
" 'mode', 'speechiness', 'acousticness', 'instrumentalness', 'liveness',\n", | |
" 'valence', 'tempo', 'duration_ms', 'time_signature'],\n", | |
" dtype='object')" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df.columns" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "b781f299", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>danceability</th>\n", | |
" <th>energy</th>\n", | |
" <th>key</th>\n", | |
" <th>loudness</th>\n", | |
" <th>mode</th>\n", | |
" <th>speechiness</th>\n", | |
" <th>acousticness</th>\n", | |
" <th>instrumentalness</th>\n", | |
" <th>liveness</th>\n", | |
" <th>valence</th>\n", | |
" <th>tempo</th>\n", | |
" <th>duration_ms</th>\n", | |
" <th>time_signature</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>100.00000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.000000</td>\n", | |
" <td>100.00000</td>\n", | |
" <td>100.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>0.69682</td>\n", | |
" <td>0.660690</td>\n", | |
" <td>5.570000</td>\n", | |
" <td>-5.652650</td>\n", | |
" <td>0.580000</td>\n", | |
" <td>0.103969</td>\n", | |
" <td>0.166306</td>\n", | |
" <td>0.004796</td>\n", | |
" <td>0.150607</td>\n", | |
" <td>0.517049</td>\n", | |
" <td>119.202460</td>\n", | |
" <td>218387.28000</td>\n", | |
" <td>3.99</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>0.12508</td>\n", | |
" <td>0.139207</td>\n", | |
" <td>3.731534</td>\n", | |
" <td>1.802067</td>\n", | |
" <td>0.496045</td>\n", | |
" <td>0.095115</td>\n", | |
" <td>0.166730</td>\n", | |
" <td>0.026038</td>\n", | |
" <td>0.079011</td>\n", | |
" <td>0.216436</td>\n", | |
" <td>27.952928</td>\n", | |
" <td>32851.07772</td>\n", | |
" <td>0.10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>0.25800</td>\n", | |
" <td>0.346000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>-11.462000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.023200</td>\n", | |
" <td>0.000259</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.042400</td>\n", | |
" <td>0.086200</td>\n", | |
" <td>75.016000</td>\n", | |
" <td>165387.00000</td>\n", | |
" <td>3.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>0.63500</td>\n", | |
" <td>0.556500</td>\n", | |
" <td>2.000000</td>\n", | |
" <td>-6.594500</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.043125</td>\n", | |
" <td>0.039100</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.098275</td>\n", | |
" <td>0.375500</td>\n", | |
" <td>99.911750</td>\n", | |
" <td>198490.50000</td>\n", | |
" <td>4.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>0.71400</td>\n", | |
" <td>0.667500</td>\n", | |
" <td>6.000000</td>\n", | |
" <td>-5.437000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.062650</td>\n", | |
" <td>0.106500</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.125000</td>\n", | |
" <td>0.502500</td>\n", | |
" <td>112.468000</td>\n", | |
" <td>214106.00000</td>\n", | |
" <td>4.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>0.77025</td>\n", | |
" <td>0.787500</td>\n", | |
" <td>9.000000</td>\n", | |
" <td>-4.326750</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.123000</td>\n", | |
" <td>0.231250</td>\n", | |
" <td>0.000013</td>\n", | |
" <td>0.179250</td>\n", | |
" <td>0.679000</td>\n", | |
" <td>137.166000</td>\n", | |
" <td>230543.00000</td>\n", | |
" <td>4.00</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>0.92700</td>\n", | |
" <td>0.932000</td>\n", | |
" <td>11.000000</td>\n", | |
" <td>-2.396000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.431000</td>\n", | |
" <td>0.695000</td>\n", | |
" <td>0.210000</td>\n", | |
" <td>0.440000</td>\n", | |
" <td>0.966000</td>\n", | |
" <td>199.864000</td>\n", | |
" <td>343150.00000</td>\n", | |
" <td>4.00</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" danceability energy key loudness mode \\\n", | |
"count 100.00000 100.000000 100.000000 100.000000 100.000000 \n", | |
"mean 0.69682 0.660690 5.570000 -5.652650 0.580000 \n", | |
"std 0.12508 0.139207 3.731534 1.802067 0.496045 \n", | |
"min 0.25800 0.346000 0.000000 -11.462000 0.000000 \n", | |
"25% 0.63500 0.556500 2.000000 -6.594500 0.000000 \n", | |
"50% 0.71400 0.667500 6.000000 -5.437000 1.000000 \n", | |
"75% 0.77025 0.787500 9.000000 -4.326750 1.000000 \n", | |
"max 0.92700 0.932000 11.000000 -2.396000 1.000000 \n", | |
"\n", | |
" speechiness acousticness instrumentalness liveness valence \\\n", | |
"count 100.000000 100.000000 100.000000 100.000000 100.000000 \n", | |
"mean 0.103969 0.166306 0.004796 0.150607 0.517049 \n", | |
"std 0.095115 0.166730 0.026038 0.079011 0.216436 \n", | |
"min 0.023200 0.000259 0.000000 0.042400 0.086200 \n", | |
"25% 0.043125 0.039100 0.000000 0.098275 0.375500 \n", | |
"50% 0.062650 0.106500 0.000000 0.125000 0.502500 \n", | |
"75% 0.123000 0.231250 0.000013 0.179250 0.679000 \n", | |
"max 0.431000 0.695000 0.210000 0.440000 0.966000 \n", | |
"\n", | |
" tempo duration_ms time_signature \n", | |
"count 100.000000 100.00000 100.00 \n", | |
"mean 119.202460 218387.28000 3.99 \n", | |
"std 27.952928 32851.07772 0.10 \n", | |
"min 75.016000 165387.00000 3.00 \n", | |
"25% 99.911750 198490.50000 4.00 \n", | |
"50% 112.468000 214106.00000 4.00 \n", | |
"75% 137.166000 230543.00000 4.00 \n", | |
"max 199.864000 343150.00000 4.00 " | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df.describe()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "bb2c6267", | |
"metadata": {}, | |
"source": [ | |
"# Beginner-Friendly Questions" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "7c64979a", | |
"metadata": {}, | |
"source": [ | |
"### ❓How many unique artists are there in the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "b8b21041", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0 Ed Sheeran\n", | |
"1 Luis Fonsi\n", | |
"2 Luis Fonsi\n", | |
"Name: artists, dtype: object" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['artists'].head(3)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"id": "862f8d13", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"78" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"unique_artists_count = tracks_df['artists'].unique().shape[0]\n", | |
"unique_artists_count" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "37569ffa", | |
"metadata": {}, | |
"source": [ | |
"### ❓What is the average danceability of all songs?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"id": "b94b9aa3", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.6968199999999999" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['danceability'].mean()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "ea1c58c9", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the song with the highest energy score." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"id": "6783095b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.932" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['energy'].max()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "87894cf6", | |
"metadata": {}, | |
"source": [ | |
"### ❓What is the most common time signature in the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"id": "e591ab5d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"4.0" | |
] | |
}, | |
"execution_count": 31, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['time_signature'].median()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "db777aa3", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the five longest songs (based on duration_ms)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 44, | |
"id": "f863c528", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>name</th>\n", | |
" <th>duration_ms</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>48</th>\n", | |
" <td>Bad and Boujee (feat. Lil Uzi Vert)</td>\n", | |
" <td>343150.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>70</th>\n", | |
" <td>Sign of the Times</td>\n", | |
" <td>340707.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>58</th>\n", | |
" <td>Redbone</td>\n", | |
" <td>326933.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>36</th>\n", | |
" <td>Passionfruit</td>\n", | |
" <td>298941.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>I'm the One</td>\n", | |
" <td>288600.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" name duration_ms\n", | |
"48 Bad and Boujee (feat. Lil Uzi Vert) 343150.0\n", | |
"70 Sign of the Times 340707.0\n", | |
"58 Redbone 326933.0\n", | |
"36 Passionfruit 298941.0\n", | |
"4 I'm the One 288600.0" | |
] | |
}, | |
"execution_count": 44, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['name', 'duration_ms']].sort_values(by=\"duration_ms\", ascending=False)[0:5]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "294a5b76", | |
"metadata": {}, | |
"source": [ | |
"### ❓Count how many songs have a speechiness score greater than 0.5." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 60, | |
"id": "5d9fdc8c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"13" | |
] | |
}, | |
"execution_count": 60, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[(tracks_df['speechiness'] > 0.2)].count()['id']" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"id": "939e072d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0" | |
] | |
}, | |
"execution_count": 61, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[(tracks_df['speechiness'] > 0.5)].count()['id']" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "809aab17", | |
"metadata": {}, | |
"source": [ | |
"### ❓What is the average loudness of songs in the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"id": "4ef49faa", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"-5.6526499999999995" | |
] | |
}, | |
"execution_count": 62, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['loudness'].mean()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "34672c3e", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the most frequent key in which songs are composed." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 96, | |
"id": "f2972fc1", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1.0 14\n", | |
"11.0 13\n", | |
"8.0 12\n", | |
"0.0 10\n", | |
"6.0 9\n", | |
"5.0 9\n", | |
"9.0 9\n", | |
"2.0 8\n", | |
"7.0 7\n", | |
"10.0 4\n", | |
"4.0 4\n", | |
"3.0 1\n", | |
"Name: key, dtype: int64" | |
] | |
}, | |
"execution_count": 96, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['key'].value_counts()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 101, | |
"id": "5e54a593", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1.0" | |
] | |
}, | |
"execution_count": 101, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['key'].value_counts().idxmax()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b45ae9af", | |
"metadata": {}, | |
"source": [ | |
"### ❓How many songs have an acousticness score above 0.8?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 107, | |
"id": "0792c51a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>id</th>\n", | |
" <th>name</th>\n", | |
" <th>artists</th>\n", | |
" <th>danceability</th>\n", | |
" <th>energy</th>\n", | |
" <th>key</th>\n", | |
" <th>loudness</th>\n", | |
" <th>mode</th>\n", | |
" <th>speechiness</th>\n", | |
" <th>acousticness</th>\n", | |
" <th>instrumentalness</th>\n", | |
" <th>liveness</th>\n", | |
" <th>valence</th>\n", | |
" <th>tempo</th>\n", | |
" <th>duration_ms</th>\n", | |
" <th>time_signature</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>5uCax9HTNlzGybIStD3vD</td>\n", | |
" <td>Say You Won't Let Go</td>\n", | |
" <td>James Arthur</td>\n", | |
" <td>0.358</td>\n", | |
" <td>0.557</td>\n", | |
" <td>10.0</td>\n", | |
" <td>-7.398</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0590</td>\n", | |
" <td>0.695</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0902</td>\n", | |
" <td>0.494</td>\n", | |
" <td>85.043</td>\n", | |
" <td>211467.0</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>76</th>\n", | |
" <td>1mXVgsBdtIVeCLJnSnmtd</td>\n", | |
" <td>Too Good At Goodbyes</td>\n", | |
" <td>Sam Smith</td>\n", | |
" <td>0.698</td>\n", | |
" <td>0.375</td>\n", | |
" <td>5.0</td>\n", | |
" <td>-8.279</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0491</td>\n", | |
" <td>0.652</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.1730</td>\n", | |
" <td>0.534</td>\n", | |
" <td>91.920</td>\n", | |
" <td>201000.0</td>\n", | |
" <td>4.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" id name artists danceability \\\n", | |
"22 5uCax9HTNlzGybIStD3vD Say You Won't Let Go James Arthur 0.358 \n", | |
"76 1mXVgsBdtIVeCLJnSnmtd Too Good At Goodbyes Sam Smith 0.698 \n", | |
"\n", | |
" energy key loudness mode speechiness acousticness instrumentalness \\\n", | |
"22 0.557 10.0 -7.398 1.0 0.0590 0.695 0.0 \n", | |
"76 0.375 5.0 -8.279 1.0 0.0491 0.652 0.0 \n", | |
"\n", | |
" liveness valence tempo duration_ms time_signature \n", | |
"22 0.0902 0.494 85.043 211467.0 4.0 \n", | |
"76 0.1730 0.534 91.920 201000.0 4.0 " | |
] | |
}, | |
"execution_count": 107, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[tracks_df['acousticness'] > 0.6]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "d38e7012", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the median tempo of all songs." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 109, | |
"id": "735e34cb", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"112.468" | |
] | |
}, | |
"execution_count": 109, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['tempo'].median()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e32880bc", | |
"metadata": {}, | |
"source": [ | |
"# Intermediate-Level Questions" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "a837bca8", | |
"metadata": {}, | |
"source": [ | |
"### ❓Who is the most frequent artist in the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 116, | |
"id": "0f062231", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'Ed Sheeran'" | |
] | |
}, | |
"execution_count": 116, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df['artists'].value_counts().idxmax()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "99356888", | |
"metadata": {}, | |
"source": [ | |
"### ❓What is the most danceable song in the dataset?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 121, | |
"id": "e9d04096", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'rockstar'" | |
] | |
}, | |
"execution_count": 121, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['name', 'danceability']].max()['name']" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "5cf8a02d", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the quietest song (lowest loudness)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 134, | |
"id": "caa6feda", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>name</th>\n", | |
" <th>loudness</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>46</th>\n", | |
" <td>Location</td>\n", | |
" <td>-11.462</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" name loudness\n", | |
"46 Location -11.462" | |
] | |
}, | |
"execution_count": 134, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['name', 'loudness']].sort_values(by=\"loudness\")[0:1]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "db8f3821", | |
"metadata": {}, | |
"source": [ | |
"### ❓What is the average duration of songs per artist?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "26d7d0e1", | |
"metadata": {}, | |
"source": [ | |
"### ❓Identify the artist with the highest average energy across their songs." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 150, | |
"id": "14a729e1", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"energy Steve Aoki\n", | |
"dtype: object" | |
] | |
}, | |
"execution_count": 150, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists').mean()[['energy']].sort_values(by=\"energy\", ascending=False).idxmax()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "f8fa102c", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the top 5 songs with the highest valence scores (happiest songs)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e3e4fc76", | |
"metadata": {}, | |
"source": [ | |
"### ❓Which song has the highest instrumentalness score?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "e0d49927", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the distribution of tempo values using a histogram" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "b91c15fc", | |
"metadata": {}, | |
"source": [ | |
"### ❓Compare the average danceability of songs in major (mode=1) vs. minor (mode=0)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "6a2252d5", | |
"metadata": {}, | |
"source": [ | |
"### ❓Find the artist with the most songs that have a liveness score above 0.8" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "578b3164", | |
"metadata": {}, | |
"source": [ | |
"### ❓Compare the average danceability of songs from artists with more than 5 songs vs. those with 5 or fewer songs." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 164, | |
"id": "53720428", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<AxesSubplot:>" | |
] | |
}, | |
"execution_count": 164, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAIPCAYAAAChRN78AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+uklEQVR4nO3dfXzN9eP/8eeZiw27cLnNxQzxwTIMYRQ+UkJC/VQ+NFf5fCpKrspK64OyykcuvpRctRStkouiD2ku+5gyTCgyVxvZlIvNhmHn/P7wcT6tmRyc85pzHvfb7X27dd4XO899zgfP83q/36+3xWaz2QQAAGCIl+kAAADAs1FGAACAUZQRAABgFGUEAAAYRRkBAABGUUYAAIBRlBEAAGAUZQQAABhV3HSA62G1WvXLL7/Iz89PFovFdBwAAHAdbDabzpw5oypVqsjLq/Dxj9uijPzyyy8KCQkxHQMAANyAtLQ0VatWrdDtt0UZ8fPzk3T5l/H39zecBgAAXI+srCyFhITY/x0vzG1RRq6cmvH396eMAABwm/mzSyy4gBUAABhFGQEAAEZRRgAAgFGUEQAAYBRlBAAAGEUZAQAARlFGAACAUZQRAABgFGUEAAAYRRkBAABG3VQZeeONN2SxWPT8889fc7/PPvtM9erVk4+Pj8LDw/XVV1/dzNsCAAA3csNlZMuWLXrvvffUsGHDa+63adMm9erVSwMHDtT27dvVvXt3de/eXbt27brRtwYAAG7khspIdna2evfurdmzZ6tcuXLX3Hfq1Kl64IEHNGrUKNWvX1/jx49XkyZNNH369BsKDAAA3MsNlZHBgwerS5cu6tChw5/um5iYWGC/jh07KjExsdBjcnNzlZWVlW8BAADuqbijB8THx2vbtm3asmXLde2fnp6uoKCgfOuCgoKUnp5e6DGxsbEaO3aso9FuWo3RK1z+nrfaoTe6mI5wS/BZAIDncGhkJC0tTUOHDtWCBQvk4+PjrEyKjo5WZmamfUlLS3PaewEAALMcGhnZunWrjh8/riZNmtjX5eXlacOGDZo+fbpyc3NVrFixfMcEBwcrIyMj37qMjAwFBwcX+j7e3t7y9vZ2JBoAALhNOTQycu+992rnzp1KTk62L82aNVPv3r2VnJxcoIhIUmRkpBISEvKtW716tSIjI28uOQAAcAsOjYz4+fmpQYMG+daVKVNGFSpUsK+PiopS1apVFRsbK0kaOnSo2rZtq0mTJqlLly6Kj49XUlKSZs2adYt+BQAAcDu75TOwpqam6tixY/bXrVq10sKFCzVr1iw1atRIixYt0tKlSwuUGgAA4Jkcvpvmj9atW3fN15LUs2dP9ezZ82bfCgAAuCGeTQMAAIyijAAAAKMoIwAAwCjKCAAAMIoyAgAAjKKMAAAAoygjAADAKMoIAAAwijICAACMoowAAACjKCMAAMAoyggAADCKMgIAAIyijAAAAKMoIwAAwCjKCAAAMIoyAgAAjKKMAAAAoygjAADAKMoIAAAwijICAACMoowAAACjKCMAAMAoyggAADCKMgIAAIyijAAAAKMoIwAAwCjKCAAAMIoyAgAAjKKMAAAAoygjAADAKMoIAAAwijICAACMcqiMvPvuu2rYsKH8/f3l7++vyMhI/fvf/y50/7i4OFkslnyLj4/PTYcGAADuo7gjO1erVk1vvPGG6tSpI5vNpg8++EDdunXT9u3bdeedd171GH9/f+3du9f+2mKx3FxiAADgVhwqI127ds33+vXXX9e7776rzZs3F1pGLBaLgoODbzwhAABwazd8zUheXp7i4+OVk5OjyMjIQvfLzs5WaGioQkJC1K1bN+3evftPf3Zubq6ysrLyLQAAwD05XEZ27twpX19feXt766mnntKSJUsUFhZ21X3r1q2refPmadmyZfroo49ktVrVqlUrHTly5JrvERsbq4CAAPsSEhLiaEwAAHCbcLiM1K1bV8nJyfruu+/09NNPq2/fvvrxxx+vum9kZKSioqLUuHFjtW3bVosXL1alSpX03nvvXfM9oqOjlZmZaV/S0tIcjQkAAG4TDl0zIkklS5ZU7dq1JUlNmzbVli1bNHXq1D8tGJJUokQJRUREKCUl5Zr7eXt7y9vb29FoAADgNnTT84xYrVbl5uZe1755eXnauXOnKleufLNvCwAA3IRDIyPR0dHq1KmTqlevrjNnzmjhwoVat26dVq1aJUmKiopS1apVFRsbK0kaN26cWrZsqdq1a+v06dOaOHGiDh8+rCeffPLW/yYAAOC25FAZOX78uKKionTs2DEFBASoYcOGWrVqle677z5JUmpqqry8/jfYcurUKQ0aNEjp6ekqV66cmjZtqk2bNhV6wSsAAPA8DpWRuXPnXnP7unXr8r2ePHmyJk+e7HAo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VqyYnn76aU5futCECRM0efJkDR48WH5+fpo6dapq1qypf/zjH6pcubLpeM5ng1M88cQTto4dO9rS0tJsvr6+tv3799tsNptt5cqVtrCwMMPpPE/z5s1tzz77bIH1Q4YMsbVo0cJAIs9ktVptXbp0sVksFlvjxo1tjz/+uO2xxx6zNWzY0GaxWGzdunUzHdEjLFiwwHbPPffYX/v6+tqqVatmq1Gjhq1GjRo2X19f25w5cwwm9DylS5e2HTx40Gaz2Wzly5e3/fDDDzabzWb78ccfbcHBwQaTuQYjI07y9ddfa9WqVQXu2KhTp44OHz5sKJXneuutt9SlSxd98803ioyMlHT5/HhaWhqz4bpQXFycNmzYoISEhALzwKxZs0bdu3fX/Pnzue3Xyd5//30NHjw437r169fbpx2YOXOmPvroIw0cONBEPI9Urlw5+4Pyqlatql27dik8PFynT5/W2bNnDadzPsbgnCQnJ0elS5cusP7kyZPcMmdA27Zt9fPPP6tHjx46ffq0Tp8+rYcfflh79+7VPffcYzqex/j444/10ksvXXVCuvbt22v06NFasGCBgWSeZc+ePWrWrFmh29u2basdO3a4MBHatGmj1atXS5J69uypoUOHatCgQerVq5fuvfdew+mcjwtYnaRz585q2rSpxo8fLz8/P/3www8KDQ3V448/LqvVqkWLFpmOCLhccHCwVq5cqcaNG191O49LcA0fHx/t3r3b/kiEX3/9VRUqVLBfI5KSkqI777zT/kwtON/Jkyd1/vx5ValSRVarVW+99Zb9EQljxoxRuXLlTEd0Kk7TOMlbb72le++9V0lJSbpw4YJeeOEF7d69WydPntR//vMf0/E80vnz5/XDDz/o+PHjslqt+bYxr4VrnDx5UkFBQYVuDwoK0qlTp1yYyDMFBQVp79699jJSqVKlfNt/+uknBQcHm4jmscqXL2//by8vL40ePdpgGtdjZMSJMjMzNX36dO3YsUPZ2dlq0qSJBg8e7BlXRhcxK1euVFRUlH777bcC25jXwnWKFSum9PT0Av/4XZGRkaEqVarweTjZgAEDtHfv3qt+MbLZbGrdurXq1aunefPmGUgHT0QZgUeoU6eO7r//fsXExFzzmzmcy8vLS506dSr0uqnc3FytXLmSMuJk+/fvV5MmTVSvXj2NHDlSf/nLXyRJe/fu1b/+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27evLl26JIvFovbt2yskJMR0JI939913a/jw4WrdurW+//57ffLJJ5Kkn3/+WdWqVTOczvm4gNVJGjRooJkzZ9ovRrpi48aN+vvf/66ffvrJUDIAuKx06dL66aefFBoaajqKx0tNTdUzzzyjtLQ0Pffccxo4cKAkadiwYcrLy/vTCepud4yMOMn+/ftVtmzZAusDAgJ06NAhl+cBgD9q3ry5tm/fThkpAqpXr67ly5cXWD958mQDaVyPkREnadOmjXx8fPThhx8qKChIkpSRkaGoqCidP39e69evN5zQ/TVp0kQJCQkqV66cIiIirnnh6rZt21yYDCgaPv30U0VHR2vYsGFq2rSpypQpk297w4YNDSXzTHl5eVq6dKl95PzOO+/UQw89VOCxIu6IkREnmTdvnnr06KHq1avbz8empaWpTp06Wrp0qdlwHqJbt27y9vaWVPDiYgDS448/Lin/M2iuXHhvsVi40N6FUlJS1LlzZx09elR169aVJMXGxiokJEQrVqxw+6e9MzLiRDabTatXr9aePXskSfXr11eHDh24tRRAkXD48OFrbuf0jet07txZNptNCxYssM/xcuLECfXp00deXl5asWKF4YTORRkBAMCwMmXKaPPmzQoPD8+3fseOHWrdurWys7MNJXMNTtPcYp07d9bHH39sv2//jTfe0FNPPWW/mPXEiRO655579OOPPxpM6Xny8vI0efJkffrpp0pNTdWFCxfybT958qShZIB5P/7441X/XDA5o+t4e3vrzJkzBdZnZ2erZMmSBhK5FiMjt9gfn/Xg7++v5ORk1apVS9Lli1irVKnCuVgXi4mJ0Zw5czRixAiNGTNGL7/8sg4dOqSlS5cqJiYm3zlzwFMcOHBAPXr00M6dO/NN0njlVDJ/T7lOVFSUtm3bprlz56p58+aSpO+++06DBg1S06ZNFRcXZzagk/Fsmlvsj92Orlc0LFiwQLNnz9aIESNUvHhx9erVS3PmzFFMTIw2b95sOh5gxNChQ1WzZk0dP35cpUuX1u7du7VhwwY1a9ZM69atMx3Po0ybNk133HGHIiMj5ePjIx8fH7Vu3Vq1a9fW1KlTTcdzOk7TwCOkp6fbz8X6+voqMzNTkvTggw/qlVdeMRkNMCYxMVFr1qxRxYoV5eXlJS8vL919992KjY3Vc889p+3bt5uO6DHKli2rZcuW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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tracks_df['artists'].value_counts()[0:5].plot(kind='bar')\n", | |
"# .groupby(['artists']).count()['id'].to_frame(name='appearances').sort_values(by='appearances', ascending=False)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "4b7b7241", | |
"metadata": {}, | |
"source": [ | |
"### ❓Compare the average loudness of songs in major (mode=1) vs. minor (mode=0)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 194, | |
"id": "38c6253f", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>loudness</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mode</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0.0</th>\n", | |
" <td>-5.461667</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.0</th>\n", | |
" <td>-5.790948</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" loudness\n", | |
"mode \n", | |
"0.0 -5.461667\n", | |
"1.0 -5.790948" | |
] | |
}, | |
"execution_count": 194, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['loudness', 'mode']].groupby('mode').mean()[['loudness']]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "46d42762", | |
"metadata": {}, | |
"source": [ | |
"When passing the column to calculate the mean or sum or count before it makes the behavior better" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 195, | |
"id": "a4260017", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"mode\n", | |
"0.0 -5.461667\n", | |
"1.0 -5.790948\n", | |
"Name: loudness, dtype: float64" | |
] | |
}, | |
"execution_count": 195, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df.groupby(\"mode\")['loudness'].mean()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 196, | |
"id": "d3f955fa", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>mode</th>\n", | |
" <th>loudness</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0.0</td>\n", | |
" <td>-5.461667</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1.0</td>\n", | |
" <td>-5.790948</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" mode loudness\n", | |
"0 0.0 -5.461667\n", | |
"1 1.0 -5.790948" | |
] | |
}, | |
"execution_count": 196, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df.groupby(\"mode\", as_index=False)['loudness'].mean()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "c0111cac", | |
"metadata": {}, | |
"source": [ | |
"- Find out if higher-energy songs tend to have higher tempos by comparing the average tempo of songs with energy above and below the median.\n", | |
"\n", | |
"- Compare the acousticness of songs in different keys (e.g., find out which key has the most acoustic songs on average).\n", | |
"\n", | |
"- Compare the instrumentalness of songs that have high speechiness (> 0.5) vs. low speechiness (≤ 0.5).\n", | |
"\n", | |
"- Check if more danceable songs (danceability > 0.7) tend to be louder (loudness > median).\n", | |
"\n", | |
"- Compare the average song duration for different time signatures.\n", | |
"\n", | |
"- Find out whether songs with higher valence (happier songs) also tend to have higher energy on average.\n", | |
"\n", | |
"- Compare the top 5 most common keys and their average energy levels.\n", | |
"\n", | |
"- Compare the distribution of tempos between songs in major and minor modes using a violin plot." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "0ef5427c-c2c1-4bc4-ae4f-6e948ea6c0ff", | |
"metadata": {}, | |
"source": [ | |
"GOAL: Pegar a média de energia das musicas de todos os artistas" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 40, | |
"id": "732a4beb-806d-4df9-a001-30b0e88b722b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f5a163f4f10>" | |
] | |
}, | |
"execution_count": 40, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 42, | |
"id": "0d8f26c3-be47-4a95-8a4f-56db8bc7b937", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>energy</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>artists</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>21 Savage</th>\n", | |
" <td>0.346</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AJR</th>\n", | |
" <td>0.637</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Alessia Cara</th>\n", | |
" <td>0.555</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Alok</th>\n", | |
" <td>0.442</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Ariana Grande</th>\n", | |
" <td>0.738</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Travis Scott</th>\n", | |
" <td>0.728</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Wisin</th>\n", | |
" <td>0.864</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ZAYN</th>\n", | |
" <td>0.444</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Zedd</th>\n", | |
" <td>0.634</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Zion & Lennox</th>\n", | |
" <td>0.772</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>78 rows × 1 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" energy\n", | |
"artists \n", | |
"21 Savage 0.346\n", | |
"AJR 0.637\n", | |
"Alessia Cara 0.555\n", | |
"Alok 0.442\n", | |
"Ariana Grande 0.738\n", | |
"... ...\n", | |
"Travis Scott 0.728\n", | |
"Wisin 0.864\n", | |
"ZAYN 0.444\n", | |
"Zedd 0.634\n", | |
"Zion & Lennox 0.772\n", | |
"\n", | |
"[78 rows x 1 columns]" | |
] | |
}, | |
"execution_count": 42, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists').mean()[['energy']]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 45, | |
"id": "cf276052-a712-475e-8f4c-3f2b1ae75f00", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>energy</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>artists</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>Steve Aoki</th>\n", | |
" <td>0.932</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Maggie Lindemann</th>\n", | |
" <td>0.868</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Wisin</th>\n", | |
" <td>0.864</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Starley</th>\n", | |
" <td>0.843</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CNCO</th>\n", | |
" <td>0.838</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Julia Michaels</th>\n", | |
" <td>0.427</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Niall Horan</th>\n", | |
" <td>0.418</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Sam Smith</th>\n", | |
" <td>0.375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Childish Gambino</th>\n", | |
" <td>0.359</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21 Savage</th>\n", | |
" <td>0.346</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>78 rows × 1 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" energy\n", | |
"artists \n", | |
"Steve Aoki 0.932\n", | |
"Maggie Lindemann 0.868\n", | |
"Wisin 0.864\n", | |
"Starley 0.843\n", | |
"CNCO 0.838\n", | |
"... ...\n", | |
"Julia Michaels 0.427\n", | |
"Niall Horan 0.418\n", | |
"Sam Smith 0.375\n", | |
"Childish Gambino 0.359\n", | |
"21 Savage 0.346\n", | |
"\n", | |
"[78 rows x 1 columns]" | |
] | |
}, | |
"execution_count": 45, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists').mean()[['energy']].sort_values(by='energy', ascending=False)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 49, | |
"id": "22e7ca4b-d3a9-425b-b73e-836321c4ece7", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>energy</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>artists</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>Steve Aoki</th>\n", | |
" <td>0.932</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Maggie Lindemann</th>\n", | |
" <td>0.868</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Wisin</th>\n", | |
" <td>0.864</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Starley</th>\n", | |
" <td>0.843</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CNCO</th>\n", | |
" <td>0.838</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Martin Jensen</th>\n", | |
" <td>0.836</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Enrique Iglesias</th>\n", | |
" <td>0.823</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Jason Derulo</th>\n", | |
" <td>0.817</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>The Vamps</th>\n", | |
" <td>0.809</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Danny Ocean</th>\n", | |
" <td>0.804</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" energy\n", | |
"artists \n", | |
"Steve Aoki 0.932\n", | |
"Maggie Lindemann 0.868\n", | |
"Wisin 0.864\n", | |
"Starley 0.843\n", | |
"CNCO 0.838\n", | |
"Martin Jensen 0.836\n", | |
"Enrique Iglesias 0.823\n", | |
"Jason Derulo 0.817\n", | |
"The Vamps 0.809\n", | |
"Danny Ocean 0.804" | |
] | |
}, | |
"execution_count": 49, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists').mean()[['energy']].sort_values(by='energy', ascending=False)[0:10]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 54, | |
"id": "96cbac15-18d9-4d6c-accd-8e2ce4602a8a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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6+uLgQMHwtXVFU2aNEFAQABevXoFHx8fAICXlxcqVaoEf39/AEC3bt2wZMkSODs7o2nTprh58yZmzJiBbt26qUoJERER6S6Ny0jfvn3x6NEj+Pn5ISEhAQ0bNsTevXtVg1rj4+PVzoRMnz4dCoUC06dPx71791C2bFl069YN8+bNe39HQURERLJVpHvTjBkzBmPGjMn1uSNHjqh/A319zJw5EzNnzizKtyIiIiItx3vTEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQhWpjAQGBsLe3h7GxsZo2rQpIiIi8t3/2bNnGD16NCpUqAAjIyPUqFEDe/bsKVJgIiIi0i76mr5g8+bN8PX1RVBQEJo2bYqAgAC4u7sjOjoa5cqVy7F/WloaOnTogHLlymHLli2oVKkS7ty5g1KlSr2P/ERERCRzGpeRJUuWYOjQofDx8QEABAUFYffu3QgODsaUKVNy7B8cHIykpCScPHkSBgYGAAB7e/t3S01ERERaQ6PLNGlpaTh37hzc3Nz+9wWUSri5uSE8PDzX1+zYsQPNmzfH6NGjYWtri7p162L+/PnIzMx8t+RERESkFTQ6M/L48WNkZmbC1tZWbbutrS2uX7+e62tu3bqFQ4cOwdPTE3v27MHNmzcxatQopKenY+bMmbm+JjU1Fampqao/P3/+XJOYREREJCMffDZNVlYWypUrh5UrV6JRo0bo27cvpk2bhqCgoDxf4+/vDysrK9XDzs7uQ8ckIiIiQTQqIzY2NtDT00NiYqLa9sTERJQvXz7X11SoUAE1atSAnp6ealvt2rWRkJCAtLS0XF8zdepUJCcnqx53797VJCYRERHJiEZlxNDQEI0aNUJYWJhqW1ZWFsLCwtC8efNcX9OyZUvcvHkTWVlZqm0xMTGoUKECDA0Nc32NkZERLC0t1R5ERESknTS+TOPr64tVq1Zh3bp1uHbtGkaOHIlXr16pZtd4eXlh6tSpqv1HjhyJpKQkjBs3DjExMdi9ezfmz5+P0aNHv7+jICIiItnSeGpv37598ejRI/j5+SEhIQENGzbE3r17VYNa4+PjoVT+r+PY2dlh3759GD9+POrXr49KlSph3LhxmDx58vs7CiIiIpItjcsIAIwZMwZjxozJ9bkjR47k2Na8eXOcOnWqKN+KiIiItBzvTUNERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCsYwQERGRUCwjREREJBTLCBEREQnFMkJERERCFamMBAYGwt7eHsbGxmjatCkiIiIK9bpNmzZBoVCgZ8+eRfm2REREpIU0LiObN2+Gr68vZs6cifPnz6NBgwZwd3fHw4cP833d7du3MXHiRLRu3brIYYmIiEj7aFxGlixZgqFDh8LHxwdOTk4ICgqCqakpgoOD83xNZmYmPD09MXv2bDg6Or5TYCIiItIuGpWRtLQ0nDt3Dm5ubv/7Akol3NzcEB4enufr5syZg3LlymHw4MGF+j6pqal4/vy52oOIiIi0k0Zl5PHjx8jMzIStra3adltbWyQkJOT6muPHj2PNmjVYtWpVob+Pv78/rKysVA87OztNYhIREZGMfNDZNC9evMCAAQOwatUq2NjYFPp1U6dORXJysupx9+7dD5iSiIiIRNLXZGcbGxvo6ekhMTFRbXtiYiLKly+fY//Y2Fjcvn0b3bp1U23Lysp6+4319REdHY1q1arleJ2RkRGMjIw0iUZEREQypdGZEUNDQzRq1AhhYWGqbVlZWQgLC0Pz5s1z7F+rVi1cvnwZFy9eVD26d++Odu3a4eLFi7z8QkRERJqdGQEAX19fDBw4EK6urmjSpAkCAgLw6tUr+Pj4AAC8vLxQqVIl+Pv7w9jYGHXr1lV7falSpQAgx3YiIiLSTRqXkb59++LRo0fw8/NDQkICGjZsiL1796oGtcbHx0Op5MKuREREVDgalxEAGDNmDMaMGZPrc0eOHMn3tSEhIUX5lkRERKSleAqDiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhGIZISIiIqFYRoiIiEgolhEiIiISimWEiIiIhCpSGQkMDIS9vT2MjY3RtGlTRERE5LnvqlWr0Lp1a1hbW8Pa2hpubm757k9ERES6ReMysnnzZvj6+mLmzJk4f/48GjRoAHd3dzx8+DDX/Y8cOYL+/fvj8OHDCA8Ph52dHTp27Ih79+69c3giIiKSP43LyJIlSzB06FD4+PjAyckJQUFBMDU1RXBwcK77b9iwAaNGjULDhg1Rq1YtrF69GllZWQgLC3vn8ERERCR/GpWRtLQ0nDt3Dm5ubv/7Akol3NzcEB4eXqivkZKSgvT0dJQuXTrPfVJTU/H8+XO1BxEREWknjcrI48ePkZmZCVtbW7Xttra2SEhIKNTXmDx5MipWrKhWaP7N398fVlZWqoednZ0mMYmIiEhGinU2zYIFC7Bp0yZs374dxsbGee43depUJCcnqx53794txpRERERUnPQ12dnGxgZ6enpITExU256YmIjy5cvn+9rvv/8eCxYswMGDB1G/fv189zUyMoKRkZEm0YiIiEimNDozYmhoiEaNGqkNPs0ejNq8efM8X7do0SJ8++232Lt3L1xdXYueloiIiLSORmdGAMDX1xcDBw6Eq6srmjRpgoCAALx69Qo+Pj4AAC8vL1SqVAn+/v4AgIULF8LPzw8bN26Evb29amyJubk5zM3N3+OhEBERkRxpXEb69u2LR48ewc/PDwkJCWjYsCH27t2rGtQaHx8PpfJ/J1x++uknpKWl4bPPPlP7OjNnzsSsWbPeLT0RERHJnsZlBADGjBmDMWPG5PrckSNH1P58+/btonwLIiIi0hG8Nw0REREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQUywgREREJxTJCREREQrGMEBERkVAsI0RERCQU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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tracks_df[['artists', 'energy']].groupby('artists').mean()[['energy']].sort_values(by='energy', ascending=False)[0:10].plot(kind='bar').invert_xaxis()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "2cb54f6b", | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment