listening-analysis/album.ipynb

309 lines
1.0 MiB
Plaintext
Raw Normal View History

{
"metadata": {
"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.8.6-final"
},
"orig_nbformat": 2,
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
}
},
"nbformat": 4,
"nbformat_minor": 2,
"cells": [
{
"source": [
"# Album Investigations"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"342 scrobbles\n1 days spent listening since Nov. 2017\n1.37 minutes/day\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
" acousticness danceability duration_ms energy instrumentalness \\\n",
"mean 0.241967 0.614392 278004.622807 0.700585 0.000010 \n",
"std 0.190477 0.136551 79915.404232 0.111292 0.000028 \n",
"min 0.005890 0.301000 130893.000000 0.489000 0.000000 \n",
"25% 0.110000 0.539000 254200.000000 0.635000 0.000000 \n",
"50% 0.145000 0.615000 271773.000000 0.729000 0.000000 \n",
"75% 0.415000 0.752000 291720.000000 0.766000 0.000004 \n",
"max 0.665000 0.884000 727107.000000 0.896000 0.000115 \n",
"\n",
" key liveness loudness mode speechiness tempo \\\n",
"mean 4.336257 0.254358 -5.601778 0.611111 0.262247 109.402096 \n",
"std 3.598766 0.185445 1.278614 0.488212 0.135878 28.739742 \n",
"min 1.000000 0.082700 -9.043000 0.000000 0.063800 79.036000 \n",
"25% 1.000000 0.129000 -6.562000 0.000000 0.152000 87.948000 \n",
"50% 3.000000 0.202000 -5.233000 1.000000 0.238000 108.005000 \n",
"75% 7.000000 0.285000 -4.708000 1.000000 0.325000 111.914000 \n",
"max 11.000000 0.708000 -4.080000 1.000000 0.750000 176.058000 \n",
"\n",
" time_signature valence \n",
"mean 3.918129 0.451237 \n",
"std 0.705462 0.151781 \n",
"min 1.000000 0.270000 \n",
"25% 4.000000 0.334000 \n",
"50% 4.000000 0.373000 \n",
"75% 4.000000 0.558000 \n",
"max 5.000000 0.897000 "
],
"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>acousticness</th>\n <th>danceability</th>\n <th>duration_ms</th>\n <th>energy</th>\n <th>instrumentalness</th>\n <th>key</th>\n <th>liveness</th>\n <th>loudness</th>\n <th>mode</th>\n <th>speechiness</th>\n <th>tempo</th>\n <th>time_signature</th>\n <th>valence</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>mean</th>\n <td>0.241967</td>\n <td>0.614392</td>\n <td>278004.622807</td>\n <td>0.700585</td>\n <td>0.000010</td>\n <td>4.336257</td>\n <td>0.254358</td>\n <td>-5.601778</td>\n <td>0.611111</td>\n <td>0.262247</td>\n <td>109.402096</td>\n <td>3.918129</td>\n <td>0.451237</td>\n </tr>\n <tr>\n <th>std</th>\n <td>0.190477</td>\n <td>0.136551</td>\n <td>79915.404232</td>\n <td>0.111292</td>\n <td>0.000028</td>\n <td>3.598766</td>\n <td>0.185445</td>\n <td>1.278614</td>\n <td>0.488212</td>\n <td>0.135878</td>\n <td>28.739742</td>\n <td>0.705462</td>\n <td>0.151781</td>\n </tr>\n <tr>\n <th>min</th>\n <td>0.005890</td>\n <td>0.301000</td>\n <td>130893.000000</td>\n <td>0.489000</td>\n <td>0.000000</td>\n <td>1.000000</td>\n <td>0.082700</td>\n <td>-9.043000</td>\n <td>0.000000</td>\n <td>0.063800</td>\n <td>79.036000</td>\n <td>1.000000</td>\n <td>0.270000</td>\n </tr>\n <tr>\n <th>25%</th>\n <td>0.110000</td>\n <td>0.539000</td>\n <td>254200.000000</td>\n <td>0.635000</td>\n <td>0.000000</td>\n <td>1.000000</td>\n <td>0.129000</td>\n <td>-6.562000</td>\n <td>0.000000</td>\n <td>0.152000</td>\n <td>87.948000</td>\n <td>4.000000</td>\n <td>0.334000</td>\n </tr>\n <tr>\n <th>50%</th>\n <td>0.145000</td>\n <td>0.615000</td>\n <td>271773.000000</td>\n <td>0.729000</td>\n <td>0.000000</td>\n <td>3.000000</td>\n <td>0.202000</td>\n <td>-5.233000</td>\n <td>1.000000</td>\n <td>0.238000</td>\n <td>108.005000</td>\n <td>4.000000</td>\n <td>0.373000</td>\n </tr>\n <tr>\n <th>75%</th>\n <td>0.415000</td>\n <td>0.752000</td>\n <td>291720.000000</td>\n <td>0.766000</td>\n <td>0.000004</td>\n <td>7.000000</td>\n <td>0.285000</td>\n <td>-4.708000</td>\n <td>1.000000</td>\n <td>0.325000</td>\n <td>111.914000</td>\n <td>4.000000</td>\n <td>0.558000</td>\n </tr>\n <tr>\n <th>max</th>\n <td>0.665000</td>\n <td>0.884000</td>\n <td>727107.000000</td>\n <td>0.896000</td>\n <td>0.000115</td>\n <td>11.000000</td>\n <td>0.708000</td>\n <td>-4.080000</td>\n <td>1.000000</td>\n <td>0.750000</td>\n <td>176.058000</td>\n <td>5.000000</td>\n <td>0.897000</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {},
"execution_count": 3
}
],
"source": [
"album_name = \"to pimp a butterfly\".lower()\n",
"album_frame = scrobbles[scrobbles[\"album\"].str.lower() == album_name]# FILTER SCROBBLES\n",
"album_frame = album_frame.sort_index(ascending=False) # SORT\n",
"# album_frame = album_frame.loc[:, descriptor_headers] # DESCRIPTORS\n",
"\n",
"total_time = album_frame[\"duration_ms\"].sum() / (1000 * 60) # minutes\n",
"total_days = total_time / (60 * 24) # days\n",
"print(f'{album_frame.count()[0]:,d} scrobbles')\n",
"print(f'{total_days:.0f} days spent listening since Nov. 2017')\n",
"print(f'{total_time / days_since(first_day).days:.2f} minutes/day')\n",
"\n",
"album_frame.describe()[1:]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x480 with 1 Axes>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"288.512187pt\" version=\"1.1\" viewBox=\"0 0 368.925 288.512187\" width=\"368.925pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-02-03T15:44:33.073564</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M -0 288.512187 \nL 368.925 288.512187 \nL 368.925 0 \nL -0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 26.925 239.758125 \nL 361.725 239.758125 \nL 361.725 22.318125 \nL 26.925 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#pe176eb914c)\" d=\"M 26.925 239.758125 \nL 26.925 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"mcc3ea33757\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"26.925\" xlink:href=\"#mcc3ea33757\" y=\"239.758125\"/>\n </g>\n </g>\n </g>\n <g id=\"xtick_2\">\n <g id=\"line2d_3\">\n <path clip-path=\"url(#pe176eb914c)\" d=\"M 42.242647 239.758125 \nL 42.242647 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_4\">\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"42.242647\" xlink:href=\"#mcc3ea33757\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- Jan -->\n <g transform=\"translate(34.534835 254.356562)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 9.8125 72.90625 \nL 19.671875 72.90625 \nL 19.671875 5.078125 \nQ 19.671875 -8.109375 14.671875 -14.0625 \nQ 9.671875 -20.015625 -1.421875 -20.015625 \nL -5.171875 -20.015625 \nL -5.171875 -11.71875 \nL -2.09375 -11.71875 \nQ 4.4375 -11.71875 7.125 -8.046875 \nQ 9.8125 -4.390625 9.8125 5.078125 \nz\n\" id=\"DejaVuSans-74\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"filtered_album = scrobbles[scrobbles[\"album\"].str.lower() == album_name]\n",
"# resample by day and mean\n",
"filtered_album = filtered_album.resample(\"3W\").count()\n",
"\n",
"filtered_album[\"energy\"].plot()\n",
"\n",
"plt.title(f\"{album_name} Scrobbles\")\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 720x480 with 1 Axes>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"288.512187pt\" version=\"1.1\" viewBox=\"0 0 372.103125 288.512187\" width=\"372.103125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-02-03T15:44:34.406154</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 288.512187 \nL 372.103125 288.512187 \nL 372.103125 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 30.103125 239.758125 \nL 364.903125 239.758125 \nL 364.903125 22.318125 \nL 30.103125 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"matplotlib.axis_1\">\n <g id=\"xtick_1\">\n <g id=\"line2d_1\">\n <path clip-path=\"url(#p51e73fe1a7)\" d=\"M 49.234554 239.758125 \nL 49.234554 22.318125 \n\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n </g>\n <g id=\"line2d_2\">\n <defs>\n <path d=\"M 0 0 \nL 0 3.5 \n\" id=\"m0501ee50b7\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n </defs>\n <g>\n <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"49.234554\" xlink:href=\"#m0501ee50b7\" y=\"239.758125\"/>\n </g>\n </g>\n <g id=\"text_1\">\n <!-- Jan -->\n <g transform=\"translate(41.526741 254.356562)scale(0.1 -0.1)\">\n <defs>\n <path d=\"M 9.8125 72.90625 \nL 19.671875 72.90625 \nL 19.671875 5.078125 \nQ 19.671875 -8.109375 14.671875 -14.0625 \nQ 9.671875 -20.015625 -1.421875 -20.015625 \nL -5.171875 -20.015625 \nL -5.171875 -11.71875 \nL -2.09375 -11.71875 \nQ 4.4375 -11.71875 7.125 -8.046875 \nQ 9.8125 -4.390625 9.8125 5.078125 \nz\n\" id=\"DejaVuSans-74\"/>\n <path d=\"M 34.28125 27.484375 \nQ 23.390625 27.484375 19.1875 25 \nQ 14.984375 22.515625 14.984375 16.5 \nQ 14.984375 11.71875 18.140625 8.90625 \nQ 21.296875 6.109375 26.703125 6.109375 \nQ 34.1875 6.109375 38.703125 11.40625 \nQ 43.21875 16.703125 43.21875 25.484375 \nL 43.21875 27.484375 \nz\nM 52.203125 31.203125 \nL 52.203125 0 \nL 43.21875 0 \nL 43.21875 8.296875 \nQ 40.140625 3.328125 35.546875 0.953125 \nQ 30.953125 -1.421875 24.3125 -1.421875 \nQ 15.921875 -1.421875 10.953125 3.296875 \nQ 6 8.015625 6 15.921875 \nQ 6 25.140625 12.171875 29.828125 \nQ 18.359375 34.515625 30.609375 34.515625 \nL 43.21875 34.515625 \nL 43.21875 35.40625 \nQ 43.21875 41.609375 39.140625 45 \nQ 35.0625 48.390625 27.6875 48.390625 \nQ 23 48.390625 18.546875 47.265625 \nQ 14.109375 46.140625 10.015625 43.890625 \nL 10.015625 52.203125 \nQ 14.9375 54.109375 19.578125 55.046875 \nQ 24.21875 56 28.609375 56 \nQ 40.484375 56 46.34375 49.84375 \nQ 52.203125 43.703125 52.203125 31.203125 \nz\n\" id=\"DejaVuSans-97\"/>\n <path d=\"M 54.890625 33.015625 \nL 54.890625 0 \nL 45.90625 0 \nL 45.90625 32.71875 \nQ 45.90625 40.484375 42.875 44.328125 \nQ 39.84375 48.1875 33.796875 48.1875 \nQ 26.515625 48.1875 22.3125 43.546875 \nQ 18.109375 38.921875 18.109375 30.90625 \nL 18.109375 0 \nL 9.078125 0 \nL 9.078125 54.6875 \nL 18.109375 54.6875 \nL 18.109375 46.1875 \nQ 21.34375 51.125 25.703125 53.5625 \nQ 30.078125 56 35.796875 56 \nQ 45.21875 56 50.046875 50.171875 \nQ 54.890625 44.34375 54.890625 33.015625 \nz\n\" id=\"DejaVuSans-110\"/>\n </defs>\n <use xlink
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"filtered_album = scrobbles[scrobbles[\"album\"].str.lower() == album_name]\n",
"# select only descriptor float columns\n",
"filtered_album = filtered_album.loc[:, float_headers]\n",
"# resample by day and mean\n",
"filtered_album = filtered_album.resample(\"1M\").mean()\n",
"\n",
"# filtered_album[\"energy\"].plot()\n",
"filtered_album.plot()\n",
"\n",
"plt.title(f\"{album_name} Characteristics Over Time\")\n",
"plt.legend(loc = \"upper left\", fontsize = \"xx-small\")\n",
"plt.ylim([0, 1])\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"source": [
"# Album Listening Time"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"limit = 50\n",
"albums = fmnet.top_albums(period=fmnet.Range.OVERALL, limit=limit)\n",
"\n",
"filtered_albums = [scrobbles[scrobbles[\"album\"] == i.name] for i in albums]\n",
"\n",
"### STATS ###\n",
"# total time listening to artists \n",
"albums_time = [i[\"duration_ms\"].sum() for i in filtered_albums]\n",
"# total number of tracks\n",
"albums_track_count = np.array([i.drop_duplicates([\"uri\"]).count()[0] for i in filtered_albums])\n",
"# average length of artist's tracks (ms)\n",
"albums_average_track_length = np.array([i.drop_duplicates([\"uri\"])[\"duration_ms\"].mean() for i in filtered_albums])\n",
"\n",
"fig_size = (7,(5/20)*limit)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 840x1500 with 1 Axes>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"739.374375pt\" version=\"1.1\" viewBox=\"0 0 713.873438 739.374375\" width=\"713.873438pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-02-03T16:04:39.973563</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 739.374375 \nL 713.873437 739.374375 \nL 713.873437 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 316.073438 701.818125 \nL 706.673437 701.818125 \nL 706.673437 22.318125 \nL 316.073438 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"patch_3\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 63.127818 \nL 661.110179 63.127818 \nL 661.110179 53.204489 \nL 316.073438 53.204489 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_4\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 75.53198 \nL 674.972212 75.53198 \nL 674.972212 65.608651 \nL 316.073438 65.608651 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_5\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 87.936143 \nL 417.736348 87.936143 \nL 417.736348 78.012813 \nL 316.073438 78.012813 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_6\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 100.340305 \nL 543.972721 100.340305 \nL 543.972721 90.416975 \nL 316.073438 90.416975 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_7\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 112.744467 \nL 688.073437 112.744467 \nL 688.073437 102.821137 \nL 316.073438 102.821137 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_8\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 125.148629 \nL 535.636957 125.148629 \nL 535.636957 115.225299 \nL 316.073438 115.225299 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_9\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 137.552791 \nL 514.302717 137.552791 \nL 514.302717 127.629461 \nL 316.073438 127.629461 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_10\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 149.956953 \nL 482.399405 149.956953 \nL 482.399405 140.033623 \nL 316.073438 140.033623 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_11\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 162.361115 \nL 418.442556 162.361115 \nL 418.442556 152.437785 \nL 316.073438 152.437785 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_12\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 174.765277 \nL 585.664782 174.765277 \nL 585.664782 164.841948 \nL 316.073438 164.841948 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_13\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 187.169439 \nL 519.28481 187.169439 \nL 519.28481 177.24611 \nL 316.073438 177.24611 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_14\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 199.573601 \nL 473.64534 199.573601 \nL 473.64534 189.650272 \nL 316.073438 189.650272 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_15\">\n <path clip-path=\"url(#pad548ca16a)\" d=\"M 316.073438 2
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"plt.figure(figsize=fig_size)\n",
"plt.barh(np.arange(len(albums))[::-1], np.array(albums_time) / (1000 * 60 * 60) )\n",
"plt.yticks(np.arange(len(albums))[::-1], labels=[f'{i.name}, {i.artist[\"name\"]}' for i in albums])\n",
"plt.xlabel(\"Time (Hours)\")\n",
"plt.grid(axis=\"x\")\n",
"plt.title(\"Time Listened (Since Nov 17)\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 840x1500 with 1 Axes>",
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Created with matplotlib (https://matplotlib.org/) -->\n<svg height=\"739.374375pt\" version=\"1.1\" viewBox=\"0 0 713.873438 739.374375\" width=\"713.873438pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <metadata>\n <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <cc:Work>\n <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n <dc:date>2021-02-03T16:04:43.406301</dc:date>\n <dc:format>image/svg+xml</dc:format>\n <dc:creator>\n <cc:Agent>\n <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n </cc:Agent>\n </dc:creator>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <defs>\n <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n </defs>\n <g id=\"figure_1\">\n <g id=\"patch_1\">\n <path d=\"M 0 739.374375 \nL 713.873437 739.374375 \nL 713.873437 0 \nL 0 0 \nz\n\" style=\"fill:none;\"/>\n </g>\n <g id=\"axes_1\">\n <g id=\"patch_2\">\n <path d=\"M 316.073438 701.818125 \nL 706.673437 701.818125 \nL 706.673437 22.318125 \nL 316.073438 22.318125 \nz\n\" style=\"fill:#ffffff;\"/>\n </g>\n <g id=\"patch_3\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 63.127818 \nL 519.347236 63.127818 \nL 519.347236 53.204489 \nL 316.073438 53.204489 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_4\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 75.53198 \nL 481.057761 75.53198 \nL 481.057761 65.608651 \nL 316.073438 65.608651 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_5\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 87.936143 \nL 400.032427 87.936143 \nL 400.032427 78.012813 \nL 316.073438 78.012813 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_6\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 100.340305 \nL 407.900464 100.340305 \nL 407.900464 90.416975 \nL 316.073438 90.416975 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_7\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 112.744467 \nL 457.843478 112.744467 \nL 457.843478 102.821137 \nL 316.073438 102.821137 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_8\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 125.148629 \nL 447.688602 125.148629 \nL 447.688602 115.225299 \nL 316.073438 115.225299 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_9\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 137.552791 \nL 450.790612 137.552791 \nL 450.790612 127.629461 \nL 316.073438 127.629461 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_10\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 149.956953 \nL 440.445201 149.956953 \nL 440.445201 140.033623 \nL 316.073438 140.033623 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_11\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 162.361115 \nL 411.561075 162.361115 \nL 411.561075 152.437785 \nL 316.073438 152.437785 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_12\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 174.765277 \nL 471.005127 174.765277 \nL 471.005127 164.841948 \nL 316.073438 164.841948 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_13\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 187.169439 \nL 478.832617 187.169439 \nL 478.832617 177.24611 \nL 316.073438 177.24611 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_14\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.073438 199.573601 \nL 451.959295 199.573601 \nL 451.959295 189.650272 \nL 316.073438 189.650272 \nz\n\" style=\"fill:#1f77b4;\"/>\n </g>\n <g id=\"patch_15\">\n <path clip-path=\"url(#pfaf981f1b0)\" d=\"M 316.0734
"image/png": "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
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"plt.figure(figsize=fig_size)\n",
"plt.barh(np.arange(len(albums))[::-1], np.array(albums_time) / (albums_track_count * albums_average_track_length) )\n",
"plt.yticks(np.arange(len(albums))[::-1], labels=[f'{i.name}, {i.artist[\"name\"]}' for i in albums])\n",
"plt.xlabel(\"Average plays per song\")\n",
"plt.grid(axis=\"x\")\n",
"plt.title(\"Normalised listening time\")\n",
"plt.show()"
]
},
{
"source": [
"# Imports & Setup"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime\n",
"\n",
"from google.cloud import bigquery\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib as mpl\n",
"mpl.rcParams['figure.dpi'] = 120\n",
"\n",
"from analysis.net import get_spotnet, get_fmnet, get_playlist, track_frame\n",
"from analysis.query import *\n",
"from analysis import float_headers, days_since\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"client = bigquery.Client()\n",
"spotnet = get_spotnet()\n",
"fmnet = get_fmnet()\n",
"cache = 'query.csv'\n",
"first_day = datetime(year=2017, month=11, day=3)"
]
},
{
"source": [
"## Read Scrobble Frame"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"scrobbles = get_query(cache=cache)"
]
},
{
"source": [
"## Write Scrobble Frame"
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scrobbles.reset_index().to_csv(cache, sep='\\t')"
]
}
]
}