listening-analysis/stats.ipynb

214 lines
13 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Stats\n",
"\n",
"Some easy numbers about habits"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# % of scrobbles with attached URIs"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"97.01% joined scrobbles\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"no_uri = (\n",
" 'SELECT ' \n",
" ' COUNT(track) '\n",
" 'FROM `sarsooxyz.scrobbles.*` '\n",
" 'WHERE '\n",
" ' uri IS NOT NULL '\n",
")\n",
"\n",
"uri = (\n",
" 'SELECT ' \n",
" ' COUNT(track) '\n",
" 'FROM `sarsooxyz.scrobbles.*` '\n",
")\n",
"\n",
"no_uri_count = list(client.query(no_uri).result())[0][0]\n",
"uri_count = list(client.query(uri).result())[0][0]\n",
"\n",
"print(f'{( no_uri_count / uri_count ) * 100:.2f}% joined scrobbles')\n",
"plt.pie([no_uri_count, uri_count - no_uri_count], labels=[\"No URI\", \"Attached URI\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Most listened to unjoined tracks\n",
"\n",
"Tracks without uris to allow Last.fm -> Spotify join"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"818 missing tracks\n"
]
},
{
"data": {
"text/plain": [
"artist track \n",
"Wiley Bring Them All / Holy Grime (feat. Devlin) 54\n",
"Freddie Gibbs What It B Like 36\n",
"Travi$ Scott Hell of a Night 35\n",
"The Black Eyed Peas Street Livin' 35\n",
"Gorgon City Ready for Your Love (feat. MNEK) 33\n",
" Unmissable (feat. Zak Abel) 33\n",
"Freddie Gibbs How We Do ('93 Til Freestyle #3) 31\n",
"SUMR CAMP Words 28\n",
"Freddie Gibbs Flamboyant (Freestyle #2) 28\n",
"Joey Bada$$ Legendary (feat. J. Cole) 27\n",
"GZA/Genius Gold 26\n",
"Tchami World To Me (feat. Luke James) 25\n",
" Godspell (feat. Taiki Nulight) 24\n",
"Prodigy & Alchemist IMDKV 22\n",
"Tchami Don't Let Me Down (feat. Kaelyn Behr) 21\n",
"Death Grips Lord of the Game (ft. Mexican Girl) 20\n",
"Wait What dead wrong intro 20\n",
"Al-Namrood Atba'a Al-Namrood 19\n",
"bastien keb Fit Rare (feat. Cappo) 19\n",
"Wait What it's all about the crystalizabeths 19\n",
"Name: album, dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(len(scrobbles[scrobbles['uri'].isnull()].drop_duplicates([\"artist\", \"track\"])), \"missing tracks\")\n",
"scrobbles[scrobbles['uri'].isnull()].groupby([\"artist\", \"track\"]).count()[\"album\"].sort_values(ascending=False).head(20)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from google.cloud import bigquery\n",
"import matplotlib.pyplot as plt\n",
"from dotenv import load_dotenv\n",
"from analysis.query import *\n",
"from analysis.net import get_spotnet\n",
"from spotframework.model.uri import Uri\n",
"import string\n",
"\n",
"load_dotenv()\n",
"\n",
"client = bigquery.Client()\n",
"spotnet = get_spotnet()\n",
"cache = 'query.csv'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Read Scrobble Frame"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"query.csv not found, pulling\n"
]
}
],
"source": [
"scrobbles = get_query(cache=cache)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Write Scrobble Frame"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"scrobbles.reset_index().to_csv(cache, sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.8.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}