{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "63de2e1c-ddc8-4d89-afe6-cf55c6990fb4",
   "metadata": {},
   "source": [
    "# ETL "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "7a018076-8a65-4ee8-a1ec-03e1dc74583e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os, sys\n",
    "from glob import glob\n",
    "from multiprocessing import Pool\n",
    "from absl import logging\n",
    "import pandas as pd\n",
    "import json\n",
    "\n",
    "logging.set_verbosity(logging.DEBUG)\n",
    "\n",
    "# append accoustic brainz path -- just to avoid re-instanlling on each change\n",
    "sys.path.append('../')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d99abf2d-8b47-4204-b104-de91d5c1c672",
   "metadata": {},
   "source": [
    "## Load Files from lowlevel accoustic brainz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "a6a78663-58c5-4c73-b237-d68ca5789a75",
   "metadata": {},
   "outputs": [],
   "source": [
    "lst_files_00 = glob('/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/*/*.json', recursive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "fe53527c-1b24-4589-9588-ddc761f1852a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/9/009a9469-4808-4af2-9786-73644bbdb86b-0.json',\n",
       " '/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/9/009a3aba-5ca2-41e3-b3c4-da5a883ea86f-0.json',\n",
       " '/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/9/00988c3a-8427-490d-b507-54f2cc590e6e-2.json',\n",
       " '/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/9/009309d2-c260-4808-8f1d-44a5ddc6bc5f-0.json',\n",
       " '/Users/aadam/Downloads/acousticbrainz-lowlevel-json-20220623/lowlevel/00/9/009ab2c0-106e-41e3-a7fe-910a511bbcc1-0.json']"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lst_files_00[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "7626ac1a-beab-4a0e-9348-ba42349d8a24",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of files: 3919\n"
     ]
    }
   ],
   "source": [
    "print(f'Number of files: {len(lst_files_00)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "146ae5a7-a9a4-4365-8542-8f8bca736fdf",
   "metadata": {},
   "source": [
    "## Import Accoustic Brainz Adapter\n",
    "\n",
    "This adapter was implemented to help aid with ETL tasks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "f0caaf77-58ae-4e42-9b65-682905d1b0ec",
   "metadata": {},
   "outputs": [],
   "source": [
    "from track_features.adapters.accoustic_brainz import AccousticBrainzAdapter"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01a5342f-128c-46f7-92a6-df1897138a75",
   "metadata": {},
   "source": [
    "## Define ETL Function Using AccousticBrainzAdapter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "7639ec86-cf47-4632-a09c-794e02d0abf3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import etl_utils"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "615cc4ab-e4bd-42ad-80cb-22b70a7a2a77",
   "metadata": {},
   "source": [
    "## Parallelize ETL "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "e1f39024-76cf-4581-b62a-6c711bb57e4b",
   "metadata": {},
   "outputs": [],
   "source": [
    "with Pool(3) as thread_pool:\n",
    "     lst_data = thread_pool.map(etl_utils.etl_from_raw_file, lst_files_00)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "d5743321-9ebe-41e6-89b1-1ec09ef8b19b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of files processed: 3919\n"
     ]
    }
   ],
   "source": [
    "print(f'Number of files processed: {len(lst_data)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60a4a1cc-d412-4067-bfda-bfb210629542",
   "metadata": {},
   "source": [
    "## Export Data \n",
    "\n",
    "Since we dont have much data - will use pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "fdda1ba9-b2ca-43bc-aa11-d2180a6d533c",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = pd.DataFrame.from_dict(lst_data)\n",
    "data_df.to_json('files_00.json', orient='records')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "c5488902-43d3-4355-9ed3-ee6b5f5c6218",
   "metadata": {},
   "outputs": [],
   "source": [
    "# free up memory \n",
    "del lst_data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1e22b5f-f30b-4cc5-a5fd-a907561e6b7b",
   "metadata": {},
   "source": [
    "## Load Sample from Data \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "fffd3502-3929-488f-ad14-d38b5d1b085f",
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_data_df = data_df.sample(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "5b22f4e6-81d7-4483-80e4-d3256f1e3ad1",
   "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>album</th>\n",
       "      <th>genre</th>\n",
       "      <th>title</th>\n",
       "      <th>artist</th>\n",
       "      <th>script</th>\n",
       "      <th>originaldate</th>\n",
       "      <th>musicbrainz album release country</th>\n",
       "      <th>bit_rate</th>\n",
       "      <th>hfc_mean</th>\n",
       "      <th>gfcc_mean</th>\n",
       "      <th>...</th>\n",
       "      <th>key_strength</th>\n",
       "      <th>chords_key</th>\n",
       "      <th>chords_strength_mean</th>\n",
       "      <th>tuning_frequency</th>\n",
       "      <th>chords_number_rate</th>\n",
       "      <th>chords_changes_rate</th>\n",
       "      <th>tuning_diatonic_strength</th>\n",
       "      <th>chords_histogram</th>\n",
       "      <th>isrc</th>\n",
       "      <th>replaygain_track_gain</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1253</th>\n",
       "      <td>...en their medh ríki fara...</td>\n",
       "      <td>Folk Metal</td>\n",
       "      <td>Galdralag</td>\n",
       "      <td>Falkenbach</td>\n",
       "      <td>Latn</td>\n",
       "      <td>1996</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>32.287041</td>\n",
       "      <td>[26.4973659515, 71.258644104, -122.171707153, ...</td>\n",
       "      <td>...</td>\n",
       "      <td>0.624819</td>\n",
       "      <td>A</td>\n",
       "      <td>0.468385</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.001958</td>\n",
       "      <td>0.067784</td>\n",
       "      <td>0.389626</td>\n",
       "      <td>[1.90872383118, 1.73742806911, 8.25890159607, ...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1698</th>\n",
       "      <td>4x4</td>\n",
       "      <td>Blues</td>\n",
       "      <td>Lionhearted</td>\n",
       "      <td>the 4onthefloor</td>\n",
       "      <td>Latn</td>\n",
       "      <td>2011-02-08</td>\n",
       "      <td>NaN</td>\n",
       "      <td>320000</td>\n",
       "      <td>124.341057</td>\n",
       "      <td>[-13.1731615067, 96.3268356323, -88.6304626465...</td>\n",
       "      <td>...</td>\n",
       "      <td>0.509164</td>\n",
       "      <td>D</td>\n",
       "      <td>0.485971</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.003848</td>\n",
       "      <td>0.084112</td>\n",
       "      <td>0.450875</td>\n",
       "      <td>[1.75920832157, 0.247388675809, 2.69378781319,...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2285</th>\n",
       "      <td>Push Barman to Open Old Wounds</td>\n",
       "      <td>Indie Rock</td>\n",
       "      <td>Belle and Sebastian</td>\n",
       "      <td>Belle and Sebastian</td>\n",
       "      <td>Latn</td>\n",
       "      <td>2005-05-23</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>16.973249</td>\n",
       "      <td>[-36.9283638, 117.101585388, -108.015312195, 1...</td>\n",
       "      <td>...</td>\n",
       "      <td>0.840271</td>\n",
       "      <td>G</td>\n",
       "      <td>0.534835</td>\n",
       "      <td>434.444000</td>\n",
       "      <td>0.001680</td>\n",
       "      <td>0.032421</td>\n",
       "      <td>0.632651</td>\n",
       "      <td>[28.8761978149, 1.81421136856, 29.1449680328, ...</td>\n",
       "      <td>GBCAX9700204</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2262</th>\n",
       "      <td>The Beatles in Mono</td>\n",
       "      <td>genre</td>\n",
       "      <td>Ticket to Ride (1965 stereo mix)</td>\n",
       "      <td>The Beatles</td>\n",
       "      <td>Latn</td>\n",
       "      <td>2009</td>\n",
       "      <td>XW</td>\n",
       "      <td>128000</td>\n",
       "      <td>203.248367</td>\n",
       "      <td>[-24.1748313904, 108.043029785, -105.406455994...</td>\n",
       "      <td>...</td>\n",
       "      <td>0.681666</td>\n",
       "      <td>A</td>\n",
       "      <td>0.481499</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.003403</td>\n",
       "      <td>0.112543</td>\n",
       "      <td>0.522976</td>\n",
       "      <td>[8.21584796906, 4.01069498062, 2.94117641449, ...</td>\n",
       "      <td>GBAYE0900793/GBAYE6500668</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1307</th>\n",
       "      <td>Cartoon Medley</td>\n",
       "      <td>NaN</td>\n",
       "      <td>The Tex Avery Show</td>\n",
       "      <td>Eddie Horst</td>\n",
       "      <td>Latn</td>\n",
       "      <td>1999-07-06</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>17.001656</td>\n",
       "      <td>[-54.2463569641, 69.5889053345, -107.662246704...</td>\n",
       "      <td>...</td>\n",
       "      <td>0.747821</td>\n",
       "      <td>E</td>\n",
       "      <td>0.434401</td>\n",
       "      <td>446.399933</td>\n",
       "      <td>0.023774</td>\n",
       "      <td>0.172363</td>\n",
       "      <td>0.512587</td>\n",
       "      <td>[6.83506679535, 5.34918260574, 7.42942047119, ...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-4.80 dB</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 42 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                               album       genre  \\\n",
       "1253   ...en their medh ríki fara...  Folk Metal   \n",
       "1698                             4x4       Blues   \n",
       "2285  Push Barman to Open Old Wounds  Indie Rock   \n",
       "2262             The Beatles in Mono       genre   \n",
       "1307                  Cartoon Medley         NaN   \n",
       "\n",
       "                                 title               artist script  \\\n",
       "1253                         Galdralag           Falkenbach   Latn   \n",
       "1698                       Lionhearted      the 4onthefloor   Latn   \n",
       "2285               Belle and Sebastian  Belle and Sebastian   Latn   \n",
       "2262  Ticket to Ride (1965 stereo mix)          The Beatles   Latn   \n",
       "1307                The Tex Avery Show          Eddie Horst   Latn   \n",
       "\n",
       "     originaldate musicbrainz album release country  bit_rate    hfc_mean  \\\n",
       "1253         1996                               NaN         0   32.287041   \n",
       "1698   2011-02-08                               NaN    320000  124.341057   \n",
       "2285   2005-05-23                               NaN         0   16.973249   \n",
       "2262         2009                                XW    128000  203.248367   \n",
       "1307   1999-07-06                               NaN         0   17.001656   \n",
       "\n",
       "                                              gfcc_mean  ... key_strength  \\\n",
       "1253  [26.4973659515, 71.258644104, -122.171707153, ...  ...     0.624819   \n",
       "1698  [-13.1731615067, 96.3268356323, -88.6304626465...  ...     0.509164   \n",
       "2285  [-36.9283638, 117.101585388, -108.015312195, 1...  ...     0.840271   \n",
       "2262  [-24.1748313904, 108.043029785, -105.406455994...  ...     0.681666   \n",
       "1307  [-54.2463569641, 69.5889053345, -107.662246704...  ...     0.747821   \n",
       "\n",
       "     chords_key chords_strength_mean tuning_frequency  chords_number_rate  \\\n",
       "1253          A             0.468385       434.193115            0.001958   \n",
       "1698          D             0.485971       434.193115            0.003848   \n",
       "2285          G             0.534835       434.444000            0.001680   \n",
       "2262          A             0.481499       434.193115            0.003403   \n",
       "1307          E             0.434401       446.399933            0.023774   \n",
       "\n",
       "      chords_changes_rate  tuning_diatonic_strength  \\\n",
       "1253             0.067784                  0.389626   \n",
       "1698             0.084112                  0.450875   \n",
       "2285             0.032421                  0.632651   \n",
       "2262             0.112543                  0.522976   \n",
       "1307             0.172363                  0.512587   \n",
       "\n",
       "                                       chords_histogram  \\\n",
       "1253  [1.90872383118, 1.73742806911, 8.25890159607, ...   \n",
       "1698  [1.75920832157, 0.247388675809, 2.69378781319,...   \n",
       "2285  [28.8761978149, 1.81421136856, 29.1449680328, ...   \n",
       "2262  [8.21584796906, 4.01069498062, 2.94117641449, ...   \n",
       "1307  [6.83506679535, 5.34918260574, 7.42942047119, ...   \n",
       "\n",
       "                           isrc  replaygain_track_gain  \n",
       "1253                        NaN                    NaN  \n",
       "1698                        NaN                    NaN  \n",
       "2285               GBCAX9700204                    NaN  \n",
       "2262  GBAYE0900793/GBAYE6500668                    NaN  \n",
       "1307                        NaN               -4.80 dB  \n",
       "\n",
       "[5 rows x 42 columns]"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_data_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "f09db11c-8298-4bb8-b1a9-5c4cbd60b0eb",
   "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>bit_rate</th>\n",
       "      <th>hfc_mean</th>\n",
       "      <th>dissonance_mean</th>\n",
       "      <th>average_loudness</th>\n",
       "      <th>zerocrossingrate_mean</th>\n",
       "      <th>silence_rate_60dB_mean</th>\n",
       "      <th>silence_rate_20dB_mean</th>\n",
       "      <th>silence_rate_30dB_mean</th>\n",
       "      <th>pitch_salience_mean</th>\n",
       "      <th>bpm</th>\n",
       "      <th>onset_rate</th>\n",
       "      <th>beats_count</th>\n",
       "      <th>beats_loudness_mean</th>\n",
       "      <th>danceability</th>\n",
       "      <th>key_strength</th>\n",
       "      <th>chords_strength_mean</th>\n",
       "      <th>tuning_frequency</th>\n",
       "      <th>chords_number_rate</th>\n",
       "      <th>chords_changes_rate</th>\n",
       "      <th>tuning_diatonic_strength</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.0</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.00000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>89600.000000</td>\n",
       "      <td>78.770274</td>\n",
       "      <td>0.464908</td>\n",
       "      <td>0.911223</td>\n",
       "      <td>0.143897</td>\n",
       "      <td>0.075383</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.994088</td>\n",
       "      <td>0.547132</td>\n",
       "      <td>139.322763</td>\n",
       "      <td>3.333916</td>\n",
       "      <td>475.80000</td>\n",
       "      <td>0.043627</td>\n",
       "      <td>1.104103</td>\n",
       "      <td>0.680748</td>\n",
       "      <td>0.481018</td>\n",
       "      <td>436.684656</td>\n",
       "      <td>0.006933</td>\n",
       "      <td>0.093844</td>\n",
       "      <td>0.501743</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>140216.974721</td>\n",
       "      <td>82.713991</td>\n",
       "      <td>0.013466</td>\n",
       "      <td>0.047238</td>\n",
       "      <td>0.102607</td>\n",
       "      <td>0.034484</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.011213</td>\n",
       "      <td>0.043530</td>\n",
       "      <td>15.025056</td>\n",
       "      <td>0.881414</td>\n",
       "      <td>320.39304</td>\n",
       "      <td>0.018699</td>\n",
       "      <td>0.158224</td>\n",
       "      <td>0.125017</td>\n",
       "      <td>0.036241</td>\n",
       "      <td>5.432091</td>\n",
       "      <td>0.009460</td>\n",
       "      <td>0.052587</td>\n",
       "      <td>0.090641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>16.973249</td>\n",
       "      <td>0.445381</td>\n",
       "      <td>0.839374</td>\n",
       "      <td>0.051445</td>\n",
       "      <td>0.039181</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.974155</td>\n",
       "      <td>0.485136</td>\n",
       "      <td>123.429733</td>\n",
       "      <td>2.250135</td>\n",
       "      <td>74.00000</td>\n",
       "      <td>0.024962</td>\n",
       "      <td>0.971575</td>\n",
       "      <td>0.509164</td>\n",
       "      <td>0.434401</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.001680</td>\n",
       "      <td>0.032421</td>\n",
       "      <td>0.389626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>17.001656</td>\n",
       "      <td>0.464919</td>\n",
       "      <td>0.886490</td>\n",
       "      <td>0.080852</td>\n",
       "      <td>0.059446</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.996961</td>\n",
       "      <td>0.533525</td>\n",
       "      <td>132.252869</td>\n",
       "      <td>3.046058</td>\n",
       "      <td>371.00000</td>\n",
       "      <td>0.032105</td>\n",
       "      <td>0.988446</td>\n",
       "      <td>0.624819</td>\n",
       "      <td>0.468385</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.001958</td>\n",
       "      <td>0.067784</td>\n",
       "      <td>0.450875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>32.287041</td>\n",
       "      <td>0.465296</td>\n",
       "      <td>0.938474</td>\n",
       "      <td>0.087522</td>\n",
       "      <td>0.062894</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.999327</td>\n",
       "      <td>0.550927</td>\n",
       "      <td>132.356674</td>\n",
       "      <td>3.209496</td>\n",
       "      <td>391.00000</td>\n",
       "      <td>0.036617</td>\n",
       "      <td>1.066991</td>\n",
       "      <td>0.681666</td>\n",
       "      <td>0.481499</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.003403</td>\n",
       "      <td>0.084112</td>\n",
       "      <td>0.512587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>128000.000000</td>\n",
       "      <td>124.341057</td>\n",
       "      <td>0.465506</td>\n",
       "      <td>0.944225</td>\n",
       "      <td>0.205294</td>\n",
       "      <td>0.085930</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.561150</td>\n",
       "      <td>147.074844</td>\n",
       "      <td>3.483804</td>\n",
       "      <td>604.00000</td>\n",
       "      <td>0.052835</td>\n",
       "      <td>1.130293</td>\n",
       "      <td>0.747821</td>\n",
       "      <td>0.485971</td>\n",
       "      <td>434.444000</td>\n",
       "      <td>0.003848</td>\n",
       "      <td>0.112543</td>\n",
       "      <td>0.522976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>320000.000000</td>\n",
       "      <td>203.248367</td>\n",
       "      <td>0.483441</td>\n",
       "      <td>0.947553</td>\n",
       "      <td>0.294373</td>\n",
       "      <td>0.129464</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.604923</td>\n",
       "      <td>161.499695</td>\n",
       "      <td>4.680086</td>\n",
       "      <td>939.00000</td>\n",
       "      <td>0.071619</td>\n",
       "      <td>1.363209</td>\n",
       "      <td>0.840271</td>\n",
       "      <td>0.534835</td>\n",
       "      <td>446.399933</td>\n",
       "      <td>0.023774</td>\n",
       "      <td>0.172363</td>\n",
       "      <td>0.632651</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            bit_rate    hfc_mean  dissonance_mean  average_loudness  \\\n",
       "count       5.000000    5.000000         5.000000          5.000000   \n",
       "mean    89600.000000   78.770274         0.464908          0.911223   \n",
       "std    140216.974721   82.713991         0.013466          0.047238   \n",
       "min         0.000000   16.973249         0.445381          0.839374   \n",
       "25%         0.000000   17.001656         0.464919          0.886490   \n",
       "50%         0.000000   32.287041         0.465296          0.938474   \n",
       "75%    128000.000000  124.341057         0.465506          0.944225   \n",
       "max    320000.000000  203.248367         0.483441          0.947553   \n",
       "\n",
       "       zerocrossingrate_mean  silence_rate_60dB_mean  silence_rate_20dB_mean  \\\n",
       "count               5.000000                5.000000                     5.0   \n",
       "mean                0.143897                0.075383                     1.0   \n",
       "std                 0.102607                0.034484                     0.0   \n",
       "min                 0.051445                0.039181                     1.0   \n",
       "25%                 0.080852                0.059446                     1.0   \n",
       "50%                 0.087522                0.062894                     1.0   \n",
       "75%                 0.205294                0.085930                     1.0   \n",
       "max                 0.294373                0.129464                     1.0   \n",
       "\n",
       "       silence_rate_30dB_mean  pitch_salience_mean         bpm  onset_rate  \\\n",
       "count                5.000000             5.000000    5.000000    5.000000   \n",
       "mean                 0.994088             0.547132  139.322763    3.333916   \n",
       "std                  0.011213             0.043530   15.025056    0.881414   \n",
       "min                  0.974155             0.485136  123.429733    2.250135   \n",
       "25%                  0.996961             0.533525  132.252869    3.046058   \n",
       "50%                  0.999327             0.550927  132.356674    3.209496   \n",
       "75%                  1.000000             0.561150  147.074844    3.483804   \n",
       "max                  1.000000             0.604923  161.499695    4.680086   \n",
       "\n",
       "       beats_count  beats_loudness_mean  danceability  key_strength  \\\n",
       "count      5.00000             5.000000      5.000000      5.000000   \n",
       "mean     475.80000             0.043627      1.104103      0.680748   \n",
       "std      320.39304             0.018699      0.158224      0.125017   \n",
       "min       74.00000             0.024962      0.971575      0.509164   \n",
       "25%      371.00000             0.032105      0.988446      0.624819   \n",
       "50%      391.00000             0.036617      1.066991      0.681666   \n",
       "75%      604.00000             0.052835      1.130293      0.747821   \n",
       "max      939.00000             0.071619      1.363209      0.840271   \n",
       "\n",
       "       chords_strength_mean  tuning_frequency  chords_number_rate  \\\n",
       "count              5.000000          5.000000            5.000000   \n",
       "mean               0.481018        436.684656            0.006933   \n",
       "std                0.036241          5.432091            0.009460   \n",
       "min                0.434401        434.193115            0.001680   \n",
       "25%                0.468385        434.193115            0.001958   \n",
       "50%                0.481499        434.193115            0.003403   \n",
       "75%                0.485971        434.444000            0.003848   \n",
       "max                0.534835        446.399933            0.023774   \n",
       "\n",
       "       chords_changes_rate  tuning_diatonic_strength  \n",
       "count             5.000000                  5.000000  \n",
       "mean              0.093844                  0.501743  \n",
       "std               0.052587                  0.090641  \n",
       "min               0.032421                  0.389626  \n",
       "25%               0.067784                  0.450875  \n",
       "50%               0.084112                  0.512587  \n",
       "75%               0.112543                  0.522976  \n",
       "max               0.172363                  0.632651  "
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# feature - descriptive stats\n",
    "sample_data_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "0599e471-652f-47ef-91f6-a5cb88ce8c6d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['album', 'genre', 'title', 'artist', 'script', 'originaldate',\n",
       "       'musicbrainz album release country', 'bit_rate', 'hfc_mean',\n",
       "       'gfcc_mean', 'mfcc_mean', 'erbbands_mean', 'melbands_mean',\n",
       "       'barkbands_mean', 'dissonance_mean', 'average_loudness',\n",
       "       'zerocrossingrate_mean', 'silence_rate_60dB_mean',\n",
       "       'silence_rate_20dB_mean', 'silence_rate_30dB_mean',\n",
       "       'pitch_salience_mean', 'bpm', 'onset_rate', 'beats_count',\n",
       "       'beats_loudness_mean', 'danceability', 'beats_position',\n",
       "       'beats_loudness_band_ratio_mean', 'hpcp_mean', 'thpcp', 'key_key',\n",
       "       'key_scale', 'key_strength', 'chords_key', 'chords_strength_mean',\n",
       "       'tuning_frequency', 'chords_number_rate', 'chords_changes_rate',\n",
       "       'tuning_diatonic_strength', 'chords_histogram', 'isrc',\n",
       "       'replaygain_track_gain'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_data_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "f818cbf7-c1aa-42f6-921a-0d295e0a1c89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "album                                0\n",
       "genre                                1\n",
       "title                                0\n",
       "artist                               0\n",
       "script                               0\n",
       "originaldate                         0\n",
       "musicbrainz album release country    4\n",
       "bit_rate                             0\n",
       "hfc_mean                             0\n",
       "gfcc_mean                            0\n",
       "mfcc_mean                            0\n",
       "erbbands_mean                        0\n",
       "melbands_mean                        0\n",
       "barkbands_mean                       0\n",
       "dissonance_mean                      0\n",
       "average_loudness                     0\n",
       "zerocrossingrate_mean                0\n",
       "silence_rate_60dB_mean               0\n",
       "silence_rate_20dB_mean               0\n",
       "silence_rate_30dB_mean               0\n",
       "pitch_salience_mean                  0\n",
       "bpm                                  0\n",
       "onset_rate                           0\n",
       "beats_count                          0\n",
       "beats_loudness_mean                  0\n",
       "danceability                         0\n",
       "beats_position                       0\n",
       "beats_loudness_band_ratio_mean       0\n",
       "hpcp_mean                            0\n",
       "thpcp                                0\n",
       "key_key                              0\n",
       "key_scale                            0\n",
       "key_strength                         0\n",
       "chords_key                           0\n",
       "chords_strength_mean                 0\n",
       "tuning_frequency                     0\n",
       "chords_number_rate                   0\n",
       "chords_changes_rate                  0\n",
       "tuning_diatonic_strength             0\n",
       "chords_histogram                     0\n",
       "isrc                                 3\n",
       "replaygain_track_gain                4\n",
       "dtype: int64"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# missing data points\n",
    "sample_data_df.isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54b8883f-19b0-4f5a-ab3e-7aa464a627c5",
   "metadata": {},
   "source": [
    "## Features Of Interest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "ddcfb80a-99e9-4423-ad0a-cf0407bf0b7b",
   "metadata": {},
   "outputs": [],
   "source": [
    "float_features = ['hfc_mean', 'dissonance_mean', 'average_loudness', 'zerocrossingrate_mean',\n",
    "                  'silence_rate_60dB_mean', 'silence_rate_20dB_mean', 'silence_rate_30dB_mean', 'pitch_salience_mean', \n",
    "                 'bpm', 'onset_rate', 'beats_count', 'beats_loudness_mean', 'danceability', 'key_strength', \n",
    "                  'chords_strength_mean', 'tuning_frequency', 'chords_number_rate', 'chords_changes_rate', 'tuning_diatonic_strength']\n",
    "text_features = ['artist']\n",
    "categorical_features = ['script', 'key_scale', 'key_key', 'key_scale', 'chords_key']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab295691-6494-4f69-9576-112e35452a21",
   "metadata": {},
   "source": [
    "## Floating Point Features "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "cfc72395-f808-4aae-bb68-a75225e2f7da",
   "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>hfc_mean</th>\n",
       "      <th>dissonance_mean</th>\n",
       "      <th>average_loudness</th>\n",
       "      <th>zerocrossingrate_mean</th>\n",
       "      <th>silence_rate_60dB_mean</th>\n",
       "      <th>silence_rate_20dB_mean</th>\n",
       "      <th>silence_rate_30dB_mean</th>\n",
       "      <th>pitch_salience_mean</th>\n",
       "      <th>bpm</th>\n",
       "      <th>onset_rate</th>\n",
       "      <th>beats_count</th>\n",
       "      <th>beats_loudness_mean</th>\n",
       "      <th>danceability</th>\n",
       "      <th>key_strength</th>\n",
       "      <th>chords_strength_mean</th>\n",
       "      <th>tuning_frequency</th>\n",
       "      <th>chords_number_rate</th>\n",
       "      <th>chords_changes_rate</th>\n",
       "      <th>tuning_diatonic_strength</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1253</th>\n",
       "      <td>32.287041</td>\n",
       "      <td>0.483441</td>\n",
       "      <td>0.886490</td>\n",
       "      <td>0.080852</td>\n",
       "      <td>0.062894</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.999327</td>\n",
       "      <td>0.561150</td>\n",
       "      <td>161.499695</td>\n",
       "      <td>3.046058</td>\n",
       "      <td>939</td>\n",
       "      <td>0.036617</td>\n",
       "      <td>0.971575</td>\n",
       "      <td>0.624819</td>\n",
       "      <td>0.468385</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.001958</td>\n",
       "      <td>0.067784</td>\n",
       "      <td>0.389626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1698</th>\n",
       "      <td>124.341057</td>\n",
       "      <td>0.465296</td>\n",
       "      <td>0.947553</td>\n",
       "      <td>0.205294</td>\n",
       "      <td>0.039181</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.974155</td>\n",
       "      <td>0.485136</td>\n",
       "      <td>132.252869</td>\n",
       "      <td>2.250135</td>\n",
       "      <td>371</td>\n",
       "      <td>0.071619</td>\n",
       "      <td>0.988446</td>\n",
       "      <td>0.509164</td>\n",
       "      <td>0.485971</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.003848</td>\n",
       "      <td>0.084112</td>\n",
       "      <td>0.450875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2285</th>\n",
       "      <td>16.973249</td>\n",
       "      <td>0.445381</td>\n",
       "      <td>0.839374</td>\n",
       "      <td>0.051445</td>\n",
       "      <td>0.085930</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.550927</td>\n",
       "      <td>132.356674</td>\n",
       "      <td>3.483804</td>\n",
       "      <td>604</td>\n",
       "      <td>0.032105</td>\n",
       "      <td>1.066991</td>\n",
       "      <td>0.840271</td>\n",
       "      <td>0.534835</td>\n",
       "      <td>434.444000</td>\n",
       "      <td>0.001680</td>\n",
       "      <td>0.032421</td>\n",
       "      <td>0.632651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2262</th>\n",
       "      <td>203.248367</td>\n",
       "      <td>0.465506</td>\n",
       "      <td>0.944225</td>\n",
       "      <td>0.294373</td>\n",
       "      <td>0.059446</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.996961</td>\n",
       "      <td>0.533525</td>\n",
       "      <td>123.429733</td>\n",
       "      <td>3.209496</td>\n",
       "      <td>391</td>\n",
       "      <td>0.052835</td>\n",
       "      <td>1.130293</td>\n",
       "      <td>0.681666</td>\n",
       "      <td>0.481499</td>\n",
       "      <td>434.193115</td>\n",
       "      <td>0.003403</td>\n",
       "      <td>0.112543</td>\n",
       "      <td>0.522976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1307</th>\n",
       "      <td>17.001656</td>\n",
       "      <td>0.464919</td>\n",
       "      <td>0.938474</td>\n",
       "      <td>0.087522</td>\n",
       "      <td>0.129464</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.604923</td>\n",
       "      <td>147.074844</td>\n",
       "      <td>4.680086</td>\n",
       "      <td>74</td>\n",
       "      <td>0.024962</td>\n",
       "      <td>1.363209</td>\n",
       "      <td>0.747821</td>\n",
       "      <td>0.434401</td>\n",
       "      <td>446.399933</td>\n",
       "      <td>0.023774</td>\n",
       "      <td>0.172363</td>\n",
       "      <td>0.512587</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        hfc_mean  dissonance_mean  average_loudness  zerocrossingrate_mean  \\\n",
       "1253   32.287041         0.483441          0.886490               0.080852   \n",
       "1698  124.341057         0.465296          0.947553               0.205294   \n",
       "2285   16.973249         0.445381          0.839374               0.051445   \n",
       "2262  203.248367         0.465506          0.944225               0.294373   \n",
       "1307   17.001656         0.464919          0.938474               0.087522   \n",
       "\n",
       "      silence_rate_60dB_mean  silence_rate_20dB_mean  silence_rate_30dB_mean  \\\n",
       "1253                0.062894                     1.0                0.999327   \n",
       "1698                0.039181                     1.0                0.974155   \n",
       "2285                0.085930                     1.0                1.000000   \n",
       "2262                0.059446                     1.0                0.996961   \n",
       "1307                0.129464                     1.0                1.000000   \n",
       "\n",
       "      pitch_salience_mean         bpm  onset_rate  beats_count  \\\n",
       "1253             0.561150  161.499695    3.046058          939   \n",
       "1698             0.485136  132.252869    2.250135          371   \n",
       "2285             0.550927  132.356674    3.483804          604   \n",
       "2262             0.533525  123.429733    3.209496          391   \n",
       "1307             0.604923  147.074844    4.680086           74   \n",
       "\n",
       "      beats_loudness_mean  danceability  key_strength  chords_strength_mean  \\\n",
       "1253             0.036617      0.971575      0.624819              0.468385   \n",
       "1698             0.071619      0.988446      0.509164              0.485971   \n",
       "2285             0.032105      1.066991      0.840271              0.534835   \n",
       "2262             0.052835      1.130293      0.681666              0.481499   \n",
       "1307             0.024962      1.363209      0.747821              0.434401   \n",
       "\n",
       "      tuning_frequency  chords_number_rate  chords_changes_rate  \\\n",
       "1253        434.193115            0.001958             0.067784   \n",
       "1698        434.193115            0.003848             0.084112   \n",
       "2285        434.444000            0.001680             0.032421   \n",
       "2262        434.193115            0.003403             0.112543   \n",
       "1307        446.399933            0.023774             0.172363   \n",
       "\n",
       "      tuning_diatonic_strength  \n",
       "1253                  0.389626  \n",
       "1698                  0.450875  \n",
       "2285                  0.632651  \n",
       "2262                  0.522976  \n",
       "1307                  0.512587  "
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_data_df[float_features]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "735f7b59-e5aa-46c4-9897-a90d687c32e9",
   "metadata": {},
   "source": [
    "## Categorical Features "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "9a3150ca-6d6b-4abc-9986-02c2c9fa2b49",
   "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>script</th>\n",
       "      <th>key_scale</th>\n",
       "      <th>key_key</th>\n",
       "      <th>key_scale</th>\n",
       "      <th>chords_key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1253</th>\n",
       "      <td>Latn</td>\n",
       "      <td>minor</td>\n",
       "      <td>D</td>\n",
       "      <td>minor</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1698</th>\n",
       "      <td>Latn</td>\n",
       "      <td>minor</td>\n",
       "      <td>F</td>\n",
       "      <td>minor</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2285</th>\n",
       "      <td>Latn</td>\n",
       "      <td>major</td>\n",
       "      <td>C</td>\n",
       "      <td>major</td>\n",
       "      <td>G</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2262</th>\n",
       "      <td>Latn</td>\n",
       "      <td>minor</td>\n",
       "      <td>F</td>\n",
       "      <td>minor</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1307</th>\n",
       "      <td>Latn</td>\n",
       "      <td>major</td>\n",
       "      <td>E</td>\n",
       "      <td>major</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     script key_scale key_key key_scale chords_key\n",
       "1253   Latn     minor       D     minor          A\n",
       "1698   Latn     minor       F     minor          D\n",
       "2285   Latn     major       C     major          G\n",
       "2262   Latn     minor       F     minor          A\n",
       "1307   Latn     major       E     major          E"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_data_df[categorical_features]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8f4ccb51-8cab-426f-9bdf-43f94ba44316",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:artist-discovery] *",
   "language": "python",
   "name": "conda-env-artist-discovery-py"
  },
  "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
}
