mirror of
https://github.com/agresdominik/predictify.git
synced 2026-04-21 17:55:49 +00:00
4821 lines
261 KiB
Plaintext
4821 lines
261 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Read out data from Database, get preview URL-s and save to file\n",
|
|
"## This should be run only once"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import sqlite3\n",
|
|
"from spotify_preview import get_spotify_preview_url\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"\n",
|
|
"# -- Query Database for all unique track IDs and their first given genre by Spotify --\n",
|
|
"database_suffix = \"PRODUCTION\" # Can be: TEST or PRODUCTION\n",
|
|
"conn = sqlite3.connect(f\"../../data/spotify_scrape_{database_suffix}.db\")\n",
|
|
"cursor = conn.cursor()\n",
|
|
"query = \"\"\"\n",
|
|
" SELECT DISTINCT rp.track_id, rp.artist_id, ai.genres\n",
|
|
" FROM recently_played rp\n",
|
|
" JOIN artist_information ai ON rp.artist_id = ai.artist_id\n",
|
|
" WHERE ai.genres IS NOT NULL AND ai.genres <> ''\n",
|
|
"\"\"\"\n",
|
|
"cursor.execute(query)\n",
|
|
"\n",
|
|
"results = cursor.fetchall()\n",
|
|
"conn.close()\n",
|
|
"\n",
|
|
"# -- Build a list of dictionaries for valid tracks --\n",
|
|
"rows = []\n",
|
|
"for entry in results:\n",
|
|
" track_id = entry[0]\n",
|
|
" genre = entry[2]\n",
|
|
" preview_url = get_spotify_preview_url(track_id)\n",
|
|
" if preview_url:\n",
|
|
" rows.append({\n",
|
|
" 'id': track_id,\n",
|
|
" 'genre': genre,\n",
|
|
" 'preview': preview_url\n",
|
|
" })\n",
|
|
" else:\n",
|
|
" print(f\"Preview URL not found for track ID: {track_id}\")\n",
|
|
"\n",
|
|
"tracks_info_df = pd.DataFrame(rows)\n",
|
|
"tracks_info_df.to_csv('data.csv', index=False)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Read out Data from Kaggle Dataset, get preview URL-s and save to file\n",
|
|
"\n",
|
|
"## this should be run only once"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"from spotify_preview import get_spotify_preview_url\n",
|
|
"\n",
|
|
"tracks_info_df_kaggle_dataset = pd.read_csv('./kaggle_data/dataset.csv')\n",
|
|
"tracks_info_df_kaggle_dataset = tracks_info_df_kaggle_dataset.drop_duplicates(subset=['track_id'])\n",
|
|
"tracks_info_df_kaggle_dataset = tracks_info_df_kaggle_dataset.dropna(subset=['track_genre'])\n",
|
|
"\n",
|
|
"rows = []\n",
|
|
"\n",
|
|
"for idx, row in tracks_info_df_kaggle_dataset.iterrows():\n",
|
|
" track_id = row['track_id']\n",
|
|
" genre = row['track_genre']\n",
|
|
" preview_url = get_spotify_preview_url(track_id)\n",
|
|
" if preview_url:\n",
|
|
" rows.append({\n",
|
|
" 'id': track_id,\n",
|
|
" 'genre': genre,\n",
|
|
" 'preview': preview_url\n",
|
|
" })\n",
|
|
" else:\n",
|
|
" print(f\"Preview URL not found for track ID: {track_id}\")\n",
|
|
"\n",
|
|
"tracks_info_df_kaggle_dataset_preview = pd.DataFrame(rows)\n",
|
|
"tracks_info_df_kaggle_dataset_preview.to_csv('./dataset.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Code to merge the datasets into one file"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#raise Exception(\"Stop here to check the dataset\")\n",
|
|
"\n",
|
|
"df_1 = pd.read_csv('./data_combined_dominik_chris_kaggle.csv')\n",
|
|
"df_1 = df_1.drop_duplicates(subset=['id'])\n",
|
|
"\n",
|
|
"df_2 = pd.read_csv('./track_genre_balanced_url.csv')\n",
|
|
"df_2 = df_2.drop_duplicates(subset=['track_id'])\n",
|
|
"df_2 = df_2.rename(columns={'track_id': 'id'})\n",
|
|
"\n",
|
|
"combined_df = pd.concat([df_1, df_2], ignore_index=True)\n",
|
|
"combined_df = combined_df.drop_duplicates(subset=['id'])\n",
|
|
"combined_df = combined_df.reset_index(drop=True)\n",
|
|
"combined_df.to_csv('./final_dataset.csv', index=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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6quvHm6++eam33/55Zdh3333DXPOOWeYZZZZwjbbbBPeeeedZs8xduzYMHjw4DDTTDOFvn37hsMOOyx88803zR5z5513hpVXXjn06NEjLLbYYuHiiy+u7D1KkiRJkiSpnQWlFlhggXDKKaeExx57LDz66KNhgw02CFtuuWV49tln4+8POuig8Pe//z1cddVV4a677gpvvvlm2HrrrZv+fsKECTEgNX78+HD//feHSy65JAacjj766KbHvPrqq/Ex66+/fnjiiSfCgQceGPbYY48wevTohrxnSZIkSZIkhdClVqvVQjsyxxxzhNNOOy386Ec/CnPPPXe4/PLL4//jhRdeCEsvvXR44IEHwmqrrRazqjbbbLMYrJpnnnniY0aMGBGGDh0a3nvvvdC9e/f4/yNHjgzPPPNM02tsv/324aOPPgqjRo2aqmMaN25c6NOnT/j4449jRpckSZIkSZLaFkfpFtoJsp7IiPrss8/iND6yp77++uuw0UYbNT1mqaWWCgsttFBTUIp/BwwY0BSQwiabbBL22WefmG210korxcfkz5EeQ8bU5Hz11VfxKz+ZU2PhI0aGtnjtlMFt+ntJkiRJkqTpRcMXOn/66afjelGs97T33nuH6667LiyzzDLh7bffjplOs802W7PHE4Did+DfPCCVfp9+N6XHEGj64osvWjymk08+OUb00teCCy5Y6HuWJEmSJEnq7BoelFpyySXjWk8PPfRQzHDaddddw3PPPdfQYxo2bFhMMUtfr7/+ekOPR5IkSZIkqaNp+PQ9sqHYEQ8DBw4MjzzySDjnnHPCdtttFxcwZ+2nPFuK3ffmnXfe+P/8+/DDDzd7vrQ7X/6Y+h37+J45jb169WrxmMja4kuSJEmSJEkdNChVb+LEiXE9JwJUM844YxgzZkzYZptt4u9efPHFMHbs2LjmFPj317/+dXj33XdD3759489uvfXWGHBiCmB6zE033dTsNXhMeo6OxDWtJEmSJEnS9KJbo6fJbbrppnHx8k8++STutHfnnXeG0aNHx7Wcdt9993DwwQfHHfkINO2///4xmMQi5xg0aFAMPu28885h+PDhcf2oI488Muy7775NmU6sU/Xb3/42HH744eFnP/tZuP3228OVV14Zd+STJEmSJElSJwxKkeG0yy67hLfeeisGoZZffvkYkNp4443j788666zQtWvXmClF9hS75p1//vlNfz/DDDOEG2+8Ma5FRbBq5plnjmtSHX/88U2PWWSRRWIA6qCDDorTAhdYYIHw+9//Pj6XJEmSJEmSGqNLrVarNei1pxvs1EfQjEXPydhqr9PnGv36kiRJkiRJUxtHafjue5IkSZIkSep82t1C55q+NTpbq9GvL0mSJEmSpo6ZUpIkSZIkSaqcQSlJkiRJkiRVzul7UsGcQihJkiRJ0rczU0qSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOXffkzoYd/+TJEmSJE0PzJSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkirXrfqXlNTRLXzEyDb9/WunDC7sWCRJkiRJ7ZOZUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqXLfqX1KSyrXwESPb9PevnTK4sGORJEmSJLXMoJQklcDAmCRJkiRNmdP3JEmSJEmSVDmDUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOYNSkiRJkiRJqpxBKUmSJEmSJFWuW/UvKUkq28JHjGzT3792yuDCjkWSJEmSWmKmlCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOYNSkiRJkiRJqpxBKUmSJEmSJFXOoJQkSZIkSZIqZ1BKkiRJkiRJlTMoJUmSJEmSpM4VlDr55JPDd7/73TDrrLOGvn37hq222iq8+OKLzR6z3nrrhS5dujT72nvvvZs9ZuzYsWHw4MFhpplmis9z2GGHhW+++abZY+68886w8sorhx49eoTFFlssXHzxxZW8R0mSJEmSJLWzoNRdd90V9t133/Dggw+GW2+9NXz99ddh0KBB4bPPPmv2uD333DO89dZbTV/Dhw9v+t2ECRNiQGr8+PHh/vvvD5dcckkMOB199NFNj3n11VfjY9Zff/3wxBNPhAMPPDDsscceYfTo0ZW+X0mSJEmSJP2vbqGBRo0a1ex7gklkOj322GNhnXXWafo5GVDzzjtvi89xyy23hOeeey7cdtttYZ555gkrrrhiOOGEE8LQoUPDscceG7p37x5GjBgRFllkkXDGGWfEv1l66aXDvffeG84666ywySablPwuJUmSJEmS1K7XlPr444/jv3PMMUezn1922WVhrrnmCsstt1wYNmxY+Pzzz5t+98ADD4QBAwbEgFRCoGncuHHh2WefbXrMRhtt1Ow5eQw/b8lXX30V/z7/kiRJkiRJUgfJlMpNnDgxTqtbc801Y/Ap2XHHHUP//v1Dv379wlNPPRUzoFh36tprr42/f/vtt5sFpJC+53dTegzBpi+++CL06tVrkrWujjvuuNLeqyRJkiRJUmfXboJSrC31zDPPxGl1ub322qvp/8mImm+++cKGG24YXn755bDooouWcixkYx188MFN3xO8WnDBBUt5LUmSJEmSpM6oXUzf22+//cKNN94Y7rjjjrDAAgtM8bGrrrpq/Pell16K/7LW1DvvvNPsMen7tA7V5B7Tu3fvSbKkwA59/C7/kiRJkiRJUgcJStVqtRiQuu6668Ltt98eFyP/NuyeBzKmsPrqq4enn346vPvuu02PYSc/AknLLLNM02PGjBnT7Hl4DD+XJEmSJElSJwtKMWXv0ksvDZdffnmYddZZ49pPfLHOE5iix0567Mb32muvhb/97W9hl112iTvzLb/88vExgwYNisGnnXfeOTz55JNh9OjR4cgjj4zPTcYT9t577/DKK6+Eww8/PLzwwgvh/PPPD1deeWU46KCDGvn2JUmSJEmSOq2GBqUuuOCCuOPeeuutFzOf0tcVV1wRf9+9e/dw2223xcDTUkstFQ455JCwzTbbhL///e9NzzHDDDPEqX/8S+bTT37ykxi4Ov7445seQwbWyJEjY3bUCiusEM4444zw+9//Pu7AJ0mSJEmSpE620DnT96aExcXvuuuub30edue76aabpvgYAl+PP/54q49RkiRJkiRJHXShc0mSJEmSJHUuBqUkSZIkSZJUOYNSkiRJkiRJ6lxrSkmSOq6FjxjZpr9/7ZTBhR2LJEmS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p512imtCPfPMMzEgtcMOO8RFxCVJkiRJkqTC15Tq1atX3MmOQNS2224b7r777rDLLruE0047rbVPJUmSSrTwESPb/ByvnTK4kGORJEmSpikoNW7cuGbfd+3aNVxxxRVh4403jlP2jjrqqKbH9O7de2qeUpIkSZIkSZ3YVAWlZpttttClS5dJfs70vREjRoTf/e538f95zIQJE8o4TkmSJEmSJHW2oNQdd9xR/pFIkqQOp61TCJ0+KEmS1MmDUuuuu275RyJJkiRJkqROo9W771100UXhqquumuTn/OySSy4p6rgkSZIkSZLUgbU6KHXyySeHueaaa5Kf9+3bN5x00klFHZckSZIkSZI6sFYHpcaOHRsWWWSRSX7ev3//+DtJkiRJkiSp8KAUGVFPPfXUJD9/8sknw5xzztnap5MkSZIkSVIn1Oqg1A477BAOOOCAuCPfhAkT4tftt98ehgwZErbffvtyjlKSJEmSJEmdb/e93AknnBBee+21sOGGG4Zu3f73zydOnBh22WUX15SSJEmSJElSOUGp7t27hyuuuCIGp5iy16tXrzBgwIC4ppQkSZIkSZJUSlAqWWKJJeKXJEmSJEmSVElQ6o033gh/+9vf4m5748ePb/a7M888c1qeUpIkSZIkSZ1Iq4NSY8aMCVtssUX4zne+E1544YWw3HLLxTWmarVaWHnllcs5SkmSJEmSJHXu3feGDRsWDj300PD000+Hnj17hmuuuSa8/vrrYd111w0//vGPyzlKSZIkSZIkde6g1PPPPx932gO7733xxRdhlllmCccff3w49dRTyzhGSZIkSZIkdfag1Mwzz9y0jtR8880XXn755abf/fe//y326CRJkiRJktQhtXpNqdVWWy3ce++9Yemllw4/+MEPwiGHHBKn8l177bXxd5IkSZIkSVLhQSl21/v000/j/x933HHx/6+44oqw+OKLu/OeJEmSJEmSig9KTZgwIbzxxhth+eWXb5rKN2LEiNY8hSRJkiRJktS6NaVmmGGGMGjQoPDhhx+Wd0SSJEmSJEnq8Fq90Plyyy0XXnnllXKORpIkSZIkSZ1Cq4NSJ554Yjj00EPDjTfeGN56660wbty4Zl+SJEmSJElSYWtKHX/88XGnPXbcwxZbbBG6dOnS9PtarRa/Z90pSZIkSZIkqZCgFDvt7b333uGOO+6Y2j+RJEmSJEmS2haUIhMK66677tT+iSRJkiRJktT2NaXy6XqSJEmSJElS6ZlSWGKJJb41MPXBBx9M88FIkiRJkiSpc2hVUIp1pfr06VPe0UiSJEmSJKlTaFVQavvttw99+/Yt72gkSZIkSZLUKUz1mlKuJyVJkiRJkqTKg1Jp9z1JkiRJkiSpsul7EydObPOLSZIkVWnhI0a2+TleO2VwIcciSZKkacyUkiRJkiRJkopiUEqSJEmSJEmVMyglSZIkSZKk9hmUWnnllcOHH34Y///4448Pn3/+ednHJUmSJEmSpM4elHr++efDZ599Fv//uOOOC59++mnZxyVJkiRJkqTOvvveiiuuGHbbbbew1lprhVqtFk4//fQwyyyztPjYo48+uuhjlCRJkiRJUmcMSl188cXhmGOOCTfeeGPo0qVLuPnmm0O3bpP+Kb8zKCVJkiRJkqRCglJLLrlk+Otf/xr/v2vXrmHMmDGhb9++U/OnkiRJkiRJ0rQFpXITJ05s7Z9IkiRJkiRJbQtK4eWXXw5nn312XAAdyyyzTBgyZEhYdNFFp+XpJEmSJEmS1MlM1e57udGjR8cg1MMPPxyWX375+PXQQw+FZZddNtx6663lHKUkSZIkSZI6d6bUEUccEQ466KBwyimnTPLzoUOHho033rjI45MkSZIkSVIH1OpMKabs7b777pP8/Gc/+1l47rnnijouSZIkSZIkdWCtDkrNPffc4Yknnpjk5/zMHfkkSZIkSZJUyvS9PffcM+y1117hlVdeCWussUb82X333RdOPfXUcPDBB7f26SRJkiRJktQJtTooddRRR4VZZ501nHHGGWHYsGHxZ/369QvHHntsOOCAA8o4RkmSJEmSJHX2oFSXLl3iQud8ffLJJ/FnBKkkSZIkSZKk0oJSOYNRkiRJkiRJqmShc0mSJEmSJKmtDEpJkiRJkiSpcgalJEmSJEmS1L6DUl9//XXYcMMNw7/+9a/yjkiSJEmSJEkdXquCUjPOOGN46qmnCnvxu+++O2y++eahX79+cVe/66+/vtnvf/rTn8af51/f//73mz3mgw8+CDvttFPo3bt3mG222cLuu+8ePv3002aP4ZjXXnvt0LNnz7DggguG4cOHF/YeJEmSJEmSVMH0vZ/85CfhD3/4QyjCZ599FlZYYYVw3nnnTfYxBKHeeuutpq+//OUvzX5PQOrZZ58Nt956a7jxxhtjoGuvvfZq+v24cePCoEGDQv/+/cNjjz0WTjvttHDssceGCy+8sJD3IEmSJEmSpNbr1to/+Oabb8If//jHcNttt4WBAweGmWeeudnvzzzzzKl+rk033TR+TUmPHj3CvPPO2+Lvnn/++TBq1KjwyCOPhFVWWSX+7Nxzzw0/+MEPwumnnx4zsC677LIwfvz4eMzdu3cPyy67bHjiiSficebBK0mSJEmSJLXjoNQzzzwTVl555fj///znP5v9jul1RbvzzjtD3759w+yzzx422GCDcOKJJ4Y555wz/u6BBx6IU/ZSQAobbbRR6Nq1a3jooYfCD3/4w/iYddZZJwakkk022SSceuqp4cMPP4zPW++rr76KX3m2lSRJkiRJkhoYlLrjjjtCVZi6t/XWW4dFFlkkvPzyy+GXv/xlzKwi0DTDDDOEt99+Owasct26dQtzzDFH/B34l7/PzTPPPE2/aykodfLJJ4fjjjuu1PcmSZIkSZLUmbU6KJW89NJLMVBEFlKvXr1CrVYrPFNq++23b/r/AQMGhOWXXz4suuiiMXuKXQDLMmzYsHDwwQc3y5RigXRJkiRJkiQ1aKHz999/PwaEllhiibh2E4uPg13vDjnkkFCm73znO2GuueaKATGw1tS77747yZpX7MiX1qHi33feeafZY9L3k1urinWs2M0v/5IkSZIkSVIDg1IHHXRQmHHGGcPYsWPDTDPN1PTz7bbbLi46XqY33ngjBsXmm2+++P3qq68ePvroo7irXnL77beHiRMnhlVXXbXpMezI9/XXXzc9hp36llxyyRan7kmSJEmSJKkdBqVuueWWuEj4Agss0Ozniy++ePj3v//dquf69NNP4054fOHVV1+N/0/Ai98ddthh4cEHHwyvvfZaGDNmTNhyyy3DYostFhcqx9JLLx3Xndpzzz3Dww8/HO67776w3377xWl/7LyHHXfcMS5yTibXs88+G6644opwzjnnNJueJ0mSJEmSpHYelPrss8+aZUglTJlj2ltrPProo2GllVaKXyBQxP8fffTRcSHzp556KmyxxRZxqiBBpYEDB4Z77rmn2etcdtllYamllopTCplOuNZaa4ULL7yw6fd9+vSJgTQCXvw9Uwx5/r322qu1b12SJEmSJEmNWuh87bXXDn/605/CCSecEL9ncXOmyw0fPjysv/76rXqu9dZbLy6QPjmjR4/+1udgp73LL798io9hgXSCWZIkSZIkSZpOg1IEn8hKIstp/Pjx4fDDD4/T4siUYvqcJEmSJEmSVPj0veWWWy7885//jNPkWOOJ6Xxbb711ePzxx8Oiiy7a2qeTJEmSJElSJ9TqTKm0TtOvfvWr4o9GkiRJkiRJncI0BaU+/PDD8Ic//CE8//zz8ftlllkm7LbbbnF9J0mSJEmSJKnw6Xt33313WHjhhcNvfvObGJzii/9fZJFF4u8kSZIkSZKkwjOl9t1337DddtuFCy64IMwwwwzxZxMmTAi/+MUv4u+efvrp1j6lJEmSJEmSOplWZ0q99NJL4ZBDDmkKSIH/P/jgg+PvJEmSJEmSpMKDUiuvvHLTWlI5frbCCiu09ukkSZIkSZLUCU3V9L2nnnqq6f8POOCAMGTIkJgVtdpqq8WfPfjgg+G8884Lp5xySnlHKkmSJEmSpM4VlFpxxRVDly5dQq1Wa/rZ4YcfPsnjdtxxx7jelCRJkiRJktTmoNSrr746NQ+TJEmSJEmSigtK9e/ff+qeTZIkSZIkSSoqKFXvzTffDPfee2949913w8SJE5v9jjWnJEmSJEmSpEKDUhdffHH4+c9/Hrp37x7mnHPOuNZUwv8blJIkSZIkSVLhQamjjjoqHH300WHYsGGha9eurf1zSZIkSZIkKbQ6qvT555+H7bff3oCUJEmSJEmSplmrI0u77757uOqqq6b9FSVJkiRJktTptXr63sknnxw222yzMGrUqDBgwIAw44wzNvv9mWeeWeTxSZIkSZIkqQOapqDU6NGjw5JLLhm/r1/oXJIkSZIkSSo8KHXGGWeEP/7xj+GnP/1pa/9UkiRJkiRJmrY1pXr06BHWXHPN1v6ZJEmSJEmSNO1BqSFDhoRzzz23tX8mSZIkSZIkTfv0vYcffjjcfvvt4cYbbwzLLrvsJAudX3vtta19SkmSJEmSJHUyrQ5KzTbbbGHrrbcu52gkSZIkSZLUKbQ6KHXRRReVcySSJEmSJEnqNFq9ppQkSZIkSZJUeabUIossErp06TLZ37/yyittPSZJkiRJkiR1cK0OSh144IHNvv/666/D448/HkaNGhUOO+ywIo9NkiRJkiRJHVSrg1JDhgxp8efnnXdeePTRR4s4JkmSJEmSJHVwha0ptemmm4ZrrrmmqKeTJEmSJElSB1ZYUOrqq68Oc8wxR1FPJ0mSJEmSpA6s1dP3VlpppWYLnddqtfD222+H9957L5x//vlFH58kSZIkSZI6oFYHpbbaaqtm33ft2jXMPffcYb311gtLLbVUkccmSZIkSZKkDqrVQaljjjmmnCORJEmSJElSp1HYmlKSJEmSJElS4ZlSTNPL15JqCb//5ptvpvrFJUmSJEmS1DlNdVDquuuum+zvHnjggfCb3/wmTJw4sajjkiRJkiRJUgc21UGpLbfccpKfvfjii+GII44If//738NOO+0Ujj/++KKPT5IkSZIkSR3QNK0p9eabb4Y999wzDBgwIE7Xe+KJJ8Ill1wS+vfvX/wRSpIkSZIkqXMHpT7++OMwdOjQsNhii4Vnn302jBkzJmZJLbfccuUdoSRJkiRJkjrv9L3hw4eHU089Ncw777zhL3/5S4vT+SRJkiRJkqRCg1KsHdWrV6+YJcVUPb5acu21107tU0qSJEmSJKmTmuqg1C677BK6dOlS7tFIkiRJkiSpU5jqoNTFF19c7pFIkiRJkiSp05im3fckSZIkSZKktjAoJUmSJEmSpMoZlJIkSZIkSVLlDEpJkiRJkiSpcgalJEmSJEmSVDmDUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZXrVv1LSpIkdR4LHzGyTX//2imDCzsWSZKk9sRMKUmSJEmSJFXOoJQkSZIkSZIqZ1BKkiRJkiRJlTMoJUmSJEmSpMoZlJIkSZIkSVLlDEpJkiRJkiSpcwWl7r777rD55puHfv36hS5duoTrr7++2e9rtVo4+uijw3zzzRd69eoVNtpoo/Cvf/2r2WM++OCDsNNOO4XevXuH2WabLey+++7h008/bfaYp556Kqy99tqhZ8+eYcEFFwzDhw+v5P1JkiRJkiSpHQalPvvss7DCCiuE8847r8XfEzz6zW9+E0aMGBEeeuihMPPMM4dNNtkkfPnll02PISD17LPPhltvvTXceOONMdC11157Nf1+3LhxYdCgQaF///7hscceC6eddlo49thjw4UXXljJe5QkSZIkSdKkuoUG2nTTTeNXS8iSOvvss8ORRx4Zttxyy/izP/3pT2GeeeaJGVXbb799eP7558OoUaPCI488ElZZZZX4mHPPPTf84Ac/CKeffnrMwLrsssvC+PHjwx//+MfQvXv3sOyyy4YnnnginHnmmc2CV5IkSZIkSapOu11T6tVXXw1vv/12nLKX9OnTJ6y66qrhgQceiN/zL1P2UkAKPL5r164xsyo9Zp111okBqYRsqxdffDF8+OGHLb72V199FTOs8i9JkiRJkiR1kEypKSEgBTKjcnyffse/ffv2bfb7bt26hTnmmKPZYxZZZJFJniP9bvbZZ5/ktU8++eRw3HHHFfyOJEmSqrfwESPb/ByvnTK4kGORJEmaLoJSjTRs2LBw8MEHN31PphQLpEuSJKn6wJhBMUmSOqZ2O31v3nnnjf++8847zX7O9+l3/Pvuu+82+/0333wTd+TLH9PSc+SvUa9Hjx5xN7/8S5IkSZIkSZ0gU4opdwSNxowZE1ZcccWmjCXWitpnn33i96uvvnr46KOP4q56AwcOjD+7/fbbw8SJE+PaU+kxv/rVr8LXX38dZpxxxvgzdupbcsklW5y6J0mSpI7FKYySJLVPDQ1Kffrpp+Gll15qtrg5O+OxJtRCCy0UDjzwwHDiiSeGxRdfPAapjjrqqLij3lZbbRUfv/TSS4fvf//7Yc899wwjRoyIgaf99tsv7szH47DjjjvG9aF23333MHTo0PDMM8+Ec845J5x11lkNe9+SJEnqXJzCKElSOwtKPfroo2H99ddv+j6t47TrrruGiy++OBx++OHhs88+C3vttVfMiFprrbXCqFGjQs+ePZv+5rLLLouBqA033DDuurfNNtuE3/zmN8127LvlllvCvvvuG7Op5pprrnD00UfH55QkSZIkSVInDEqtt956oVarTfb3Xbp0Cccff3z8mhyyqi6//PIpvs7yyy8f7rnnnjYdqyRJkiRJkjrBmlKSJEmSOs66Wk5hlCRNN7vvSZIkSZIkqeMyU0qSJElSh9cessUkSc0ZlJIkSZKkCjiFUZKac/qeJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklS5btW/pCRJkiSpagsfMbLNz/HaKYMLORZJgplSkiRJkiRJqpxBKUmSJEmSJFXOoJQkSZIkSZIq55pSkiRJkqTpYl0r17SSOhYzpSRJkiRJklQ5g1KSJEmSJEmqnNP3JEmSJEmdhlMIpfbDoJQkSZIkSZ0oKNYejkGC0/ckSZIkSZJUOYNSkiRJkiRJqpzT9yRJkiRJUmWcPqjETClJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOYNSkiRJkiRJqpxBKUmSJEmSJFXOoJQkSZIkSZIqZ1BKkiRJkiRJlTMoJUmSJEmSpMoZlJIkSZIkSVLlDEpJkiRJkiSpcgalJEmSJEmSVDmDUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuXadVDq2GOPDV26dGn2tdRSSzX9/ssvvwz77rtvmHPOOcMss8wSttlmm/DOO+80e46xY8eGwYMHh5lmmin07ds3HHbYYeGbb75pwLuRJEmSJElS0i20c8suu2y47bbbmr7v1u3/H/JBBx0URo4cGa666qrQp0+fsN9++4Wtt9463HffffH3EyZMiAGpeeedN9x///3hrbfeCrvsskuYccYZw0knndSQ9yNJkiRJkqTpIChFEIqgUr2PP/44/OEPfwiXX3552GCDDeLPLrroorD00kuHBx98MKy22mrhlltuCc8991wMas0zzzxhxRVXDCeccEIYOnRozMLq3r17A96RJEmSJEmS2vX0PfzrX/8K/fr1C9/5znfCTjvtFKfj4bHHHgtff/112GijjZoey9S+hRZaKDzwwAPxe/4dMGBADEglm2yySRg3blx49tlnG/BuJEmSJEmS1O4zpVZdddVw8cUXhyWXXDJOvTvuuOPC2muvHZ555pnw9ttvx0yn2WabrdnfEIDid+DfPCCVfp9+NzlfffVV/EoIYkmSJEmSJKmTBKU23XTTpv9ffvnlY5Cqf//+4corrwy9evUq7XVPPvnkGACTJEmSJEkdz8JHjGzT3792yuDCjqUza/fT93JkRS2xxBLhpZdeiutMjR8/Pnz00UfNHsPue2kNKv6t340vfd/SOlXJsGHD4ppV6ev1118v5f1IkiRJkiR1VtNVUOrTTz8NL7/8cphvvvnCwIED4y56Y8aMafr9iy++GNecWn311eP3/Pv000+Hd999t+kxt956a+jdu3dYZpllJvs6PXr0iI/JvyRJkiRJktRJpu8deuihYfPNN49T9t58881wzDHHhBlmmCHssMMOoU+fPmH33XcPBx98cJhjjjli4Gj//fePgSh23sOgQYNi8GnnnXcOw4cPj+tIHXnkkWHfffeNgSdJkiRJkiQ1RrsOSr3xxhsxAPX++++HueeeO6y11lrhwQcfjP+Ps846K3Tt2jVss802cWFydtY7//zzm/6eANaNN94Y9tlnnxismnnmmcOuu+4ajj/++Aa+K0mSJEmSJLXroNRf//rXKf6+Z8+e4bzzzotfk0OW1U033VTC0UmSJEmSJKlTrCklSZIkSZKkjqFdZ0pJkiRJkiR1NAsfMbJNf//aKYNDR2CmlCRJkiRJkipnUEqSJEmSJEmVc/qeJEmSJElSJ7NwO5hCaKaUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOYNSkiRJkiRJqpxBKUmSJEmSJFXOoJQkSZIkSZIqZ1BKkiRJkiRJlTMoJUmSJEmSpMoZlJIkSZIkSVLlDEpJkiRJkiSpcgalJEmSJEmSVDmDUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSZJUOYNSkiRJkiRJqpxBKUmSJEmSJFXOoJQkSZIkSZIqZ1BKkiRJkiRJlTMoJUmSJEmSpMoZlJIkSZIkSVLlDEpJkiRJkiSpcgalJEmSJEmSVDmDUpIkSZIkSaqcQSlJkiRJkiRVzqCUJEmSJEmSKmdQSpIkSZIkSZUzKCVJkiRJkqTKGZSSJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqXKcKSp133nlh4YUXDj179gyrrrpqePjhhxt9SJIkSZIkSZ1SpwlKXXHFFeHggw8OxxxzTPjHP/4RVlhhhbDJJpuEd999t9GHJkmSJEmS1Ol0mqDUmWeeGfbcc8+w2267hWWWWSaMGDEizDTTTOGPf/xjow9NkiRJkiSp0+kWOoHx48eHxx57LAwbNqzpZ127dg0bbbRReOCBByZ5/FdffRW/ko8//jj+O27cuCm+zsSvPm/TcX7b83+bRr9+eziGRr9+eziGRr9+eziGRr9+eziGRr9+eziGRr9+eziGtr5+eziGRr9+eziGRr9+eziGRr9+eziGRr9+eziGRr9+eziGRr9+ezgG62fPQRGv3x6OodGvX/YxpN/VarUpPkeX2rc9ogN48803w/zzzx/uv//+sPrqqzf9/PDDDw933XVXeOihh5o9/thjjw3HHXdcA45UkiRJkiSpY3j99dfDAgss0LkzpVqLjCrWn0omTpwYPvjggzDnnHOGLl26TNNzEiVccMEF4wfSu3fvAo92+nj99nAMjX799nAMjX799nAMjX799nAMjX799nAMjX799nAMjX799nAMjX799nAMjX799nAMjX59j6F9vH57OIZGv357OIZGv357OIZGv357OIZGv357OIZxHeAckP/0ySefhH79+k3xcZ0iKDXXXHOFGWaYIbzzzjvNfs7388477ySP79GjR/zKzTbbbIUcCx9moy6q9vD67eEYGv367eEYGv367eEYGv367eEYGv367eEYGv367eEYGv367eEYGv367eEYGv367eEYGv36HkP7eP32cAyNfv32cAyNfv32cAyNfv32cAyNfv32cAy9p/Nz0KdPn299TKdY6Lx79+5h4MCBYcyYMc2yn/g+n84nSZIkSZKkanSKTCkwHW/XXXcNq6yySvje974Xzj777PDZZ5/F3fgkSZIkSZJUrU4TlNpuu+3Ce++9F44++ujw9ttvhxVXXDGMGjUqzDPPPJW8PtMBjznmmEmmBVal0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/fHo6h0a/vMbSP128Px9Do128Px9Do128Px9Do128Px9Do128Px9CjE52DTrH7niRJkiRJktqXTrGmlCRJkiRJktoXg1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiR1YC4jLKm9MiglqTCducEzceLE0B40+jNo9OtLktpn/aTGmTBhQujSpYvXgqR2yaBUQZ2vr776qqHHIjXKeeedF1ZaaaWmBk9nDErQyOva9X+L0/vvv78hxzB06NDwj3/8I34GjXDGGWeEK664otNeA2qZ10Ln9etf/zrcc889obNr5D1w9913x9enfvJe7LwuuuiiMHjw4PDll1/Ga8HAVGNcddVV4ZFHHmn0YUjtkkGpNkidv9///vfhD3/4Q/z/qip9K5T2q7M1/AhI/fe//w2DBg1qaGAqveabb77ZsIAUnbANN9ww/O1vf6v0GF555ZXY2JxhhhmaHVdVPv744/DUU0+F3XbbLdxwww0Nvwbq/78RGv36jdDSNcd1qc6Hjte1114bTj311PDwww83+nAaWh5RHo4ePTpccMEFlb7+HXfcEfbcc89w5JFHxmNxwKB9qPozoFz+4osvwrvvvhvr6M4cmErnfty4ceHrr7+u9LWfe+65MHz48HDssceGJ554otLXbs8a3VYcP3586GwmTubeb3T9YFCqANddd1247LLL4v9XkaWQd4Iff/zxmB1BYdfoi/qbb75p6DE0Klst3cRjx46N/1adqdJSIVJlY2ONNdaI98Crr74aAzKNCEylBvddd90Vtttuu/DZZ59Vcg54r+lePOCAA8JJJ50UevbsGd5+++1QlSOOOCIcffTRMSC2wgorhFtuuSV2CKscGe/Tp09saO2xxx5hl112Cddff33l1wDlT7r3aPhV3QGsx3tvL43+qo6Da+7ll1+OdRKuueaasNNOO4XPP/88dCYtne+qG3vp9WgjUCZU7bvf/W445phjYhl53HHHhYceeqgh7//999+P9cFHH31U2Wvffvvt8V/KIzq+dHpOPPHE0KNHj1Al6oPNN9883HnnnbGOaHRginrpgw8+CJ1d1W1EyuXdd9897L///rF8po6uOjCVrrnnn38+jBkzJtx7773hnXfemeT3ZR8D537kyJFhr732ilmcVfYblllmmXDQQQfFtgr3I2Vz1Vr6vKtup6TPOgUFG5Hdn16Tz+Evf/lL5a8/ueu9VsF9kMcQuAf4SgNHjZpp0aSmafbNN9/Ef59//vnaoosuWrv88stLf82JEyc2/f/QoUNr/fv3ry244IK1Xr161Q488MDaP//5z1oVJkyY0PT/55xzTm2PPfaoffe7361dcskl8XxUfQwjRoyo/f73v6+99dZbtSqlz+Nvf/tbbamllqr9+c9/bvYZVfX6Y8aMqR199NG1k046qfbGG29Mcn6q8PDDD9cWWWSR2rrrrtt0b5R5Lk477bR47eX+53/+p/b9738//n86hiocfPDBtT59+tReeeWV2m677Vb75S9/WclnwP3Wo0eP2r/+9a/4/SeffFLbaaedal26dKk9+uijlRxD/vyvvvpq7Re/+EWtd+/eteuuuy7+rOz74cwzz2z6/6+++qo2fvz42oABA2qjRo2qNcp5551X23777Wtbbrll7Ve/+lVlr8s1n873p59+Wvvss8+a/b7sz4JrYbvttov10cknnxyvQ8rERuB1KSNOOOGE2n/+85/KysP8dZ555pnas88+23R/ViV9zldffXVt/vnnrw0bNqyytkH++rjhhhtqgwYNqv3gBz+oPfjgg5W+Pq+91lpr1ZZccsnaaqutVrvgggtKf+2nn346XvcHHXRQs5+vuuqqtUsvvbRWlXQdfvjhh7XDDjssvv6RRx7ZdG7KLgsof3IvvfRSvBZfeOGFWtXSe6V9+N///rf273//u9YI559/fu2AAw6IbYS77rqr9vnnn1f6/r/88svaH/7wh9hW//GPf1z74osv4s+rKhspj+aaa67asssuW5txxhlr66+/fu3CCy+sVen666+vzTTTTLXjjjuusjKR/snhhx/e9P1f/vKX2oYbbljbfPPNa//4xz9qVck/5yeffLJ2//33x/uUdlNV0rU4evTo2j777BPvBfoOqbwos1z605/+FMuhhPthjTXWqN177721KqX3SH1IH+aUU06JdVUV8vNLHTXPPPPU5pxzzlg2//CHP5yk3K6aQakCvP/++7Utttiitvfee8fvqwhKcCFTuN99992xEXTttdfG73feeefam2++WasKgTEu6hNPPDEW8rPNNlvtZz/7We2DDz6o7BhocM0999y1iy++uPb222/Xqkbnm0rurLPOip2QemVfDzfddFNt5plnrq255poxMMa5SBVd2Y2N/L3xWg899FAlgalx48bFIGzPnj2bNWqOPfbY2uDBg2tly9/T2WefHTshVPIgKERAoorA2G9+85vaxhtvHP+fIAyVLg3uHXfcsTbr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H7DXXnvFvsNtt90WH0udxdccc8wRevfuHf8tEnXdj3/841gufv755+Gll14Kt99+e7jqqqvCZpttFv//oosuCh9//HGYf/75w/77799UfzZaFXWT1J4ZlGrHLr744nDQQQeFMWPGxM4Fld6uu+4aPvjgg9jw3nLLLWMHhEKYQMQmm2zS5te84IILwmqrrdbUgaFS5fnfe++9sPTSS8eG/oABA8LGG28cA1MEzb73ve9N8jzffPNNrJBUvjfffDP8+9//jpUZ18k888zT6EOSVKI777wzbLvttuG///1vuOKKK2IjPHn99ddjcOr++++PQRDK6YUXXjh0BHR4CL6svfbacQCEzsTuu+8ef3fjjTeGM844I8w+++xh++23j+eGuouOBwG8GWecsdKBkgceeCCcf/75oU+fPmGfffYJyy67bJufk04v7ztHwO2+++4L55xzThy4opPHQNX1118f3n///diOmHXWWZv9zRFHHBHP0YorrtjmY5I6qxREuPnmm8Of//zn8Mwzz8T7iuAwAfR0rxEIoW0255xzxrLo6aefLqQ8aE8YIKUsZtCA9ihlFX0FguScE/5/1KhRpR4DZSH9IoLxJ598cvwZAzS//OUvY9+GwQGOY/z48aF79+72U6T2ptGpWprygomkuuZbN7/xxhu1VVddNS4knhZKJFW/iGkBrFPErnnsBME6HewQwoKpvA5bSTMdgi1t2VWPBVPT4udsXypJKietP02HZjHYtGsauwQxnZp1O9K0tc6AXWBZA4Ttu9lxMMf0dqaLsJtT/ULfjVg/Kd+AoojnSqif2XSEej/V/VwbL7zwQlxgmGmc1M9MVWF6X+I6j1KxaB/PNNNMceMA1pBad91147Qx1jDKp62xHiu/e/LJJ2sdDdMQWdw87XDK9yzpwdTFNJWP8oiFnMv8HFgvaumll44bXKTyjnIzLXTOWouUl6kusDyU2heDUu1QKihZl4LGd1o8NTU+b7/99lgJrr322s3WkihiYWvmXg8cOLA2ZMiQ2t57710788wzm37HdtPMye7Zs2cMRDEPm+Ng7rwkqTgjR46Ma/8kbC3OgASBqM033zyum8FAQlrnL+2M2hka2yyMy/tmHcP6RXKpE1nPKd9dbno/H3lAio4eHa8+ffrExdTpCKZAZXLbbbfF9gPXi4uZS+V49tln47144YUXNi2uzfp2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0YcnSZJUum7lv4QkSZJyr7zySgxAzTbbbOGkk04KAwYMCD169AhPP/10uPDCC8P8888ftthii1Jee/z48aF79+6lPLckSVJrmCklSZJUsV/84hehW7du4dFHHw3bbrttWHrppcN3vvOdsOWWW4aRI0eGzTffPD7uo48+CnvssUeYe+65Q+/evcMGG2wQnnzyyabnOfbYY8OKK64Y/vznP4eFF1449OnTJ2y//fbhk08+aXrMeuutF/bbb79w4IEHhrnmmitssskm8efPPPNM2HTTTcMss8wSs7R23nnn8N///rcBZ0OSJHVWBqUkSZIq9P7774dbbrkl7LvvvmHmmWdu8TFdunSJ//74xz8O7777brj55pvDY489FlZeeeWw4YYbhg8++KDpsS+//HK4/vrrw4033hi/7rrrrnDKKac0e75LLrkkZkfdd999YcSIETHYRYBrpZVWioGxUaNGhXfeeScGyCRJkqri9D1JkqQKvfTSS6FWq4Ull1yy2c/JYvryyy/j/xOwIlvq4YcfjkEppvbh9NNPjwGoq6++Ouy1117xZxMnTgwXX3xxmHXWWeP3ZDyNGTMm/PrXv2567sUXXzwMHz686fsTTzwxBqSYOpj88Y9/DAsuuGD45z//GZZYYomSz4IkSZJBKUmSpHaBABQBpp122il89dVXcZrep59+Guacc85mj/viiy9idlTCtL0UkMJ8880XA1m5gQMHNvue577jjjvi1L16PLdBKUmSVAWDUpIkSRVitz2m57344ovNfs6aUujVq1f8l4AUAaY777xzkudggfRkxhlnbPY7npvgVq5+miDPTSbWqaeeOslz85qSJElVMCglSZJUITKfNt544/Db3/427L///pNdV4r1o95+++24IDrZUEXiua+55pr4vDy/JElSI7jQuSRJUsXOP//88M0334RVVlklXHHFFeH555+PmVOXXnppeOGFF8IMM8wQNtpoo7D66quHrbbaKi6M/tprr4X7778//OpXv4qLk7cFa1axWPoOO+wQHnnkkThlb/To0WG33XYLEyZMKOx9SpIkTYlDY5IkSRVbdNFFw+OPPx4XGh82bFh444034mLmyyyzTDj00EPDL37xizgN76abbopBKIJF7733Xph33nnDOuusE+aZZ542vX6/fv3iTnxDhw4NgwYNimtY9e/fP3z/+98PXbs6ZilJkqrRpcb2L5IkSZIkSVKFHAqTJEmSJElS5QxKSZIkSZIkqXIGpSRJkiRJklQ5g1KSJEmSJEmqnEEpSZIkSZIkVc6glCRJkiRJkipnUEqSJEmSJEmVMyglSZIkSZKkyhmUkiRJkiRJUuUMSkmSJEmSJKlyBqUkSZIkSf+vHTsmAAAAQBhk/9S22AUxAMhJKQAAAABWO26iaKRJz9KVAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 1200x600 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"df = pd.read_csv('./final_dataset.csv')\n",
|
|
"\n",
|
|
"import pandas as pd\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# 1. Define your set of popular genres\n",
|
|
"popular_genres = {\n",
|
|
" 'country', 'metal', 'heavy-metal', 'hardstyle',\n",
|
|
" 'blues', 'rap', 'hip hop', 'hip-hop', 'classical', 'folk',\n",
|
|
" 'jazz', 'lo-fi', 'soul', 'punk', 'r&b', 'latin',\n",
|
|
" 'rock', 'rock-n-roll', 'techno', 'pop', 'house', 'phonk',\n",
|
|
" 'indie', 'idm', 'reggae', 'funk', 'acid',\n",
|
|
" 'death-metal', 'bluegrass', 'acoustic', 'electronic',\n",
|
|
" 'tango', 'forro', 'breakbeat', 'grindcore'\n",
|
|
"}\n",
|
|
"\n",
|
|
"# 2. (Re)load your CSV if needed:\n",
|
|
"# df = pd.read_csv('your_file.csv')\n",
|
|
"\n",
|
|
"# 3. Filter to just the rows whose genre is in that set\n",
|
|
"df_filtered = df[df['genre'].isin(popular_genres)]\n",
|
|
"\n",
|
|
"# 4. Count how many of each genre you have\n",
|
|
"genre_counts = df_filtered['genre'].value_counts()\n",
|
|
"\n",
|
|
"# 5. Plot as a bar chart\n",
|
|
"plt.figure(figsize=(12,6))\n",
|
|
"genre_counts.plot(kind='bar')\n",
|
|
"plt.xlabel('Genre')\n",
|
|
"plt.ylabel('Number of Tracks')\n",
|
|
"plt.title('Distribution of Popular Genres')\n",
|
|
"plt.xticks(rotation=45, ha='right')\n",
|
|
"plt.tight_layout()\n",
|
|
"plt.show()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Read File"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"tracks_info_df = pd.read_csv('./combined_dataset.csv')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Download all preview mp3 files"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"import requests\n",
|
|
"\n",
|
|
"# -- Prepare Download Directory --\n",
|
|
"download_folder = \"audio_previews\"\n",
|
|
"os.makedirs(download_folder, exist_ok=True)\n",
|
|
"\n",
|
|
"\n",
|
|
"for idx, row in tracks_info_df.iterrows():\n",
|
|
"\n",
|
|
" track_id = row['id']\n",
|
|
" preview_url = row['preview']\n",
|
|
"\n",
|
|
" # Form the output filename for the preview\n",
|
|
" output_filename = os.path.join(download_folder, f\"{track_id}.mp3\")\n",
|
|
" \n",
|
|
" # Skip if the file already exists\n",
|
|
" if os.path.exists(output_filename):\n",
|
|
" print(f\"Preview for track {track_id} already exists. Skipping...\")\n",
|
|
" continue\n",
|
|
"\n",
|
|
" # Download the preview\n",
|
|
" try:\n",
|
|
" response = requests.get(preview_url, timeout=30) # you can adjust timeout\n",
|
|
" if response.status_code == 200:\n",
|
|
" with open(output_filename, \"wb\") as f:\n",
|
|
" f.write(response.content)\n",
|
|
" print(f\"Downloaded preview for track {track_id}\")\n",
|
|
" else:\n",
|
|
" print(f\"Failed to download track {track_id}: HTTP {response.status_code}\")\n",
|
|
" except Exception as e:\n",
|
|
" print(f\"Error downloading track {track_id}: {e}\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Extract Track Features"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Loaded 22320 processed tracks\n",
|
|
"Processing file 1/78071...\n",
|
|
"Processing file 2/78071...\n",
|
|
"Processing file 3/78071...\n",
|
|
"Processing file 4/78071...\n",
|
|
"Processing file 5/78071...\n",
|
|
"Processing file 6/78071...\n",
|
|
"Processing file 7/78071...\n",
|
|
"Processing file 8/78071...\n",
|
|
"Processing file 9/78071...\n",
|
|
"Processing file 10/78071...\n",
|
|
"Processing file 11/78071...\n",
|
|
"Processing file 12/78071...\n",
|
|
"Processing file 13/78071...\n",
|
|
"Processing file 14/78071...\n",
|
|
"Processing file 15/78071...\n",
|
|
"Processing file 16/78071...\n",
|
|
"Processing file 17/78071...\n",
|
|
"Processing file 18/78071...\n",
|
|
"Processing file 19/78071...\n",
|
|
"Processing file 20/78071...\n",
|
|
"Processing file 21/78071...\n",
|
|
"Processing file 22/78071...\n",
|
|
"Processing file 23/78071...\n",
|
|
"Processing file 24/78071...\n",
|
|
"Processing file 25/78071...\n",
|
|
"Processing file 26/78071...\n",
|
|
"Processing file 27/78071...\n",
|
|
"Processing file 28/78071...\n",
|
|
"Processing file 29/78071...\n",
|
|
"Processing file 30/78071...\n",
|
|
"Processing file 31/78071...\n",
|
|
"Processing file 32/78071...\n",
|
|
"Processing file 33/78071...\n",
|
|
"Processing file 34/78071...\n",
|
|
"Processing file 35/78071...\n",
|
|
"Processing file 36/78071...\n",
|
|
"Processing file 37/78071...\n",
|
|
"Processing file 38/78071...\n",
|
|
"Processing file 39/78071...\n",
|
|
"Processing file 40/78071...\n",
|
|
"Processing file 41/78071...\n",
|
|
"Processing file 42/78071...\n",
|
|
"Processing file 43/78071...\n",
|
|
"Processing file 44/78071...\n",
|
|
"Processing file 45/78071...\n",
|
|
"Processing file 46/78071...\n",
|
|
"Processing file 47/78071...\n",
|
|
"Processing file 48/78071...\n",
|
|
"Processing file 49/78071...\n",
|
|
"Processing file 50/78071...\n",
|
|
"Processing file 51/78071...\n",
|
|
"Processing file 52/78071...\n",
|
|
"Processing file 53/78071...\n",
|
|
"Processing file 54/78071...\n",
|
|
"Processing file 55/78071...\n",
|
|
"Processing file 56/78071...\n",
|
|
"Processing file 57/78071...\n",
|
|
"Processing file 58/78071...\n",
|
|
"Processing file 59/78071...\n",
|
|
"Processing file 60/78071...\n",
|
|
"Processing file 61/78071...\n",
|
|
"Processing file 62/78071...\n",
|
|
"Processing file 63/78071...\n",
|
|
"Processing file 64/78071...\n",
|
|
"Processing file 65/78071...\n",
|
|
"Processing file 66/78071...\n",
|
|
"Processing file 67/78071...\n",
|
|
"Processing file 68/78071...\n",
|
|
"Processing file 69/78071...\n",
|
|
"Processing file 70/78071...\n",
|
|
"Processing file 71/78071...\n",
|
|
"Processing file 72/78071...\n",
|
|
"Processing file 73/78071...\n",
|
|
"Processing file 74/78071...\n",
|
|
"Processing file 75/78071...\n",
|
|
"Processing file 76/78071...\n",
|
|
"Processing file 77/78071...\n",
|
|
"Processing file 78/78071...\n",
|
|
"Processing file 79/78071...\n",
|
|
"Processing file 80/78071...\n",
|
|
"Processing file 81/78071...\n",
|
|
"Processing file 82/78071...\n",
|
|
"Processing file 83/78071...\n",
|
|
"Processing file 84/78071...\n",
|
|
"Processing file 85/78071...\n",
|
|
"Processing file 86/78071...\n",
|
|
"Processing file 87/78071...\n",
|
|
"Processing file 88/78071...\n",
|
|
"Processing file 89/78071...\n",
|
|
"Processing file 90/78071...\n",
|
|
"Processing file 91/78071...\n",
|
|
"Processing file 92/78071...\n",
|
|
"Processing file 93/78071...\n",
|
|
"Processing file 94/78071...\n",
|
|
"Processing file 95/78071...\n",
|
|
"Processing file 96/78071...\n",
|
|
"Processing file 97/78071...\n",
|
|
"Processing file 98/78071...\n",
|
|
"Processing file 99/78071...\n",
|
|
"Processing file 100/78071...\n",
|
|
"Processing file 101/78071...\n",
|
|
"Processing file 102/78071...\n",
|
|
"Processing file 103/78071...\n",
|
|
"Processing file 104/78071...\n",
|
|
"Processing file 105/78071...\n",
|
|
"Processing file 106/78071...\n",
|
|
"Processing file 107/78071...\n",
|
|
"Processing file 108/78071...\n",
|
|
"Processing file 109/78071...\n",
|
|
"Processing file 110/78071...\n",
|
|
"Processing file 111/78071...\n",
|
|
"Processing file 112/78071...\n",
|
|
"Processing file 113/78071...\n",
|
|
"Processing file 114/78071...\n",
|
|
"Processing file 115/78071...\n",
|
|
"Processing file 116/78071...\n",
|
|
"Processing file 117/78071...\n",
|
|
"Processing file 118/78071...\n",
|
|
"Processing file 119/78071...\n",
|
|
"Processing file 120/78071...\n",
|
|
"Processing file 121/78071...\n",
|
|
"Processing file 122/78071...\n",
|
|
"Processing file 123/78071...\n",
|
|
"Processing file 124/78071...\n",
|
|
"Processing file 125/78071...\n",
|
|
"Processing file 126/78071...\n",
|
|
"Processing file 127/78071...\n",
|
|
"Processing file 128/78071...\n",
|
|
"Processing file 129/78071...\n",
|
|
"Processing file 130/78071...\n",
|
|
"Processing file 131/78071...\n",
|
|
"Processing file 132/78071...\n",
|
|
"Processing file 133/78071...\n",
|
|
"Processing file 134/78071...\n",
|
|
"Processing file 135/78071...\n",
|
|
"Processing file 136/78071...\n",
|
|
"Processing file 137/78071...\n",
|
|
"Processing file 138/78071...\n",
|
|
"Processing file 139/78071...\n",
|
|
"Processing file 140/78071...\n",
|
|
"Processing file 141/78071...\n",
|
|
"Processing file 142/78071...\n",
|
|
"Processing file 143/78071...\n",
|
|
"Processing file 144/78071...\n",
|
|
"Processing file 145/78071...\n",
|
|
"Processing file 146/78071...\n",
|
|
"Processing file 147/78071...\n",
|
|
"Processing file 148/78071...\n",
|
|
"Processing file 149/78071...\n",
|
|
"Processing file 150/78071...\n",
|
|
"Processing file 151/78071...\n",
|
|
"Processing file 152/78071...\n",
|
|
"Processing file 153/78071...\n",
|
|
"Processing file 154/78071...\n",
|
|
"Processing file 155/78071...\n",
|
|
"Processing file 156/78071...\n",
|
|
"Processing file 157/78071...\n",
|
|
"Processing file 158/78071...\n",
|
|
"Processing file 159/78071...\n",
|
|
"Processing file 160/78071...\n",
|
|
"Processing file 161/78071...\n",
|
|
"Processing file 162/78071...\n",
|
|
"Processing file 163/78071...\n",
|
|
"Processing file 164/78071...\n",
|
|
"Processing file 165/78071...\n",
|
|
"Processing file 166/78071...\n",
|
|
"Processing file 167/78071...\n",
|
|
"Processing file 168/78071...\n",
|
|
"Processing file 169/78071...\n",
|
|
"Processing file 170/78071...\n",
|
|
"Processing file 171/78071...\n",
|
|
"Processing file 172/78071...\n",
|
|
"Processing file 173/78071...\n",
|
|
"Processing file 174/78071...\n",
|
|
"Processing file 175/78071...\n",
|
|
"Processing file 176/78071...\n",
|
|
"Processing file 177/78071...\n",
|
|
"Processing file 178/78071...\n",
|
|
"Processing file 179/78071...\n",
|
|
"Processing file 180/78071...\n",
|
|
"Processing file 181/78071...\n",
|
|
"Processing file 182/78071...\n",
|
|
"Processing file 183/78071...\n",
|
|
"Processing file 184/78071...\n",
|
|
"Processing file 185/78071...\n",
|
|
"Processing file 186/78071...\n",
|
|
"Processing file 187/78071...\n",
|
|
"Processing file 188/78071...\n",
|
|
"Processing file 189/78071...\n",
|
|
"Processing file 190/78071...\n",
|
|
"Processing file 191/78071...\n",
|
|
"Processing file 192/78071...\n",
|
|
"Processing file 193/78071...\n",
|
|
"Processing file 194/78071...\n",
|
|
"Processing file 195/78071...\n",
|
|
"Processing file 196/78071...\n",
|
|
"Processing file 197/78071...\n",
|
|
"Processing file 198/78071...\n",
|
|
"Processing file 199/78071...\n",
|
|
"Processing file 200/78071...\n",
|
|
"Processing file 201/78071...\n",
|
|
"Processing file 202/78071...\n",
|
|
"Processing file 203/78071...\n",
|
|
"Processing file 204/78071...\n",
|
|
"Processing file 205/78071...\n",
|
|
"Processing file 206/78071...\n",
|
|
"Processing file 207/78071...\n",
|
|
"Processing file 208/78071...\n",
|
|
"Processing file 209/78071...\n",
|
|
"Processing file 210/78071...\n",
|
|
"Processing file 211/78071...\n",
|
|
"Processing file 212/78071...\n",
|
|
"Processing file 213/78071...\n",
|
|
"Processing file 214/78071...\n",
|
|
"Processing file 215/78071...\n",
|
|
"Processing file 216/78071...\n",
|
|
"Processing file 217/78071...\n",
|
|
"Processing file 218/78071...\n",
|
|
"Processing file 219/78071...\n",
|
|
"Processing file 220/78071...\n",
|
|
"Processing file 221/78071...\n",
|
|
"Processing file 222/78071...\n",
|
|
"Processing file 223/78071...\n",
|
|
"Processing file 224/78071...\n",
|
|
"Processing file 225/78071...\n",
|
|
"Processing file 226/78071...\n",
|
|
"Processing file 227/78071...\n",
|
|
"Processing file 228/78071...\n",
|
|
"Processing file 229/78071...\n",
|
|
"Processing file 230/78071...\n",
|
|
"Processing file 231/78071...\n",
|
|
"Processing file 232/78071...\n",
|
|
"Processing file 233/78071...\n",
|
|
"Processing file 234/78071...\n",
|
|
"Processing file 235/78071...\n",
|
|
"Processing file 236/78071...\n",
|
|
"Processing file 237/78071...\n",
|
|
"Processing file 238/78071...\n",
|
|
"Processing file 239/78071...\n",
|
|
"Processing file 240/78071...\n",
|
|
"Processing file 241/78071...\n",
|
|
"Processing file 242/78071...\n",
|
|
"Processing file 243/78071...\n",
|
|
"Processing file 244/78071...\n",
|
|
"Processing file 245/78071...\n",
|
|
"Processing file 246/78071...\n",
|
|
"Processing file 247/78071...\n",
|
|
"Processing file 248/78071...\n",
|
|
"Processing file 249/78071...\n",
|
|
"Processing file 250/78071...\n",
|
|
"Processing file 251/78071...\n",
|
|
"Processing file 252/78071...\n",
|
|
"Processing file 253/78071...\n",
|
|
"Processing file 254/78071...\n",
|
|
"Processing file 255/78071...\n",
|
|
"Processing file 256/78071...\n",
|
|
"Processing file 257/78071...\n",
|
|
"Processing file 258/78071...\n",
|
|
"Processing file 259/78071...\n",
|
|
"Processing file 260/78071...\n",
|
|
"Processing file 261/78071...\n",
|
|
"Processing file 262/78071...\n",
|
|
"Processing file 263/78071...\n",
|
|
"Processing file 264/78071...\n",
|
|
"Processing file 265/78071...\n",
|
|
"Processing file 266/78071...\n",
|
|
"Processing file 267/78071...\n",
|
|
"Processing file 268/78071...\n",
|
|
"Processing file 269/78071...\n",
|
|
"Processing file 270/78071...\n",
|
|
"Processing file 271/78071...\n",
|
|
"Processing file 272/78071...\n",
|
|
"Processing file 273/78071...\n",
|
|
"Processing file 274/78071...\n",
|
|
"Processing file 275/78071...\n",
|
|
"Processing file 276/78071...\n",
|
|
"Processing file 277/78071...\n",
|
|
"Processing file 278/78071...\n",
|
|
"Processing file 279/78071...\n",
|
|
"Processing file 280/78071...\n",
|
|
"Processing file 281/78071...\n",
|
|
"Processing file 282/78071...\n",
|
|
"Processing file 283/78071...\n",
|
|
"Processing file 284/78071...\n",
|
|
"Processing file 285/78071...\n",
|
|
"Processing file 286/78071...\n",
|
|
"Processing file 287/78071...\n",
|
|
"Processing file 288/78071...\n",
|
|
"Processing file 289/78071...\n",
|
|
"Processing file 290/78071...\n",
|
|
"Processing file 291/78071...\n",
|
|
"Processing file 292/78071...\n",
|
|
"Processing file 293/78071...\n",
|
|
"Processing file 294/78071...\n",
|
|
"Processing file 295/78071...\n",
|
|
"Processing file 296/78071...\n",
|
|
"Processing file 297/78071...\n",
|
|
"Processing file 298/78071...\n",
|
|
"Processing file 299/78071...\n",
|
|
"Processing file 300/78071...\n",
|
|
"Processing file 301/78071...\n",
|
|
"Processing file 302/78071...\n",
|
|
"Processing file 303/78071...\n",
|
|
"Processing file 304/78071...\n",
|
|
"Processing file 305/78071...\n",
|
|
"Processing file 306/78071...\n",
|
|
"Processing file 307/78071...\n",
|
|
"Processing file 308/78071...\n",
|
|
"Processing file 309/78071...\n",
|
|
"Processing file 310/78071...\n",
|
|
"Processing file 311/78071...\n",
|
|
"Processing file 312/78071...\n",
|
|
"Processing file 313/78071...\n",
|
|
"Processing file 314/78071...\n",
|
|
"Processing file 315/78071...\n",
|
|
"Processing file 316/78071...\n",
|
|
"Processing file 317/78071...\n",
|
|
"Processing file 318/78071...\n",
|
|
"Processing file 319/78071...\n",
|
|
"Processing file 320/78071...\n",
|
|
"Processing file 321/78071...\n",
|
|
"Processing file 322/78071...\n",
|
|
"Processing file 323/78071...\n",
|
|
"Processing file 324/78071...\n",
|
|
"Processing file 325/78071...\n",
|
|
"Processing file 326/78071...\n",
|
|
"Processing file 327/78071...\n",
|
|
"Processing file 328/78071...\n",
|
|
"Processing file 329/78071...\n",
|
|
"Processing file 330/78071...\n",
|
|
"Processing file 331/78071...\n",
|
|
"Processing file 332/78071...\n",
|
|
"Processing file 333/78071...\n",
|
|
"Processing file 334/78071...\n",
|
|
"Processing file 335/78071...\n",
|
|
"Processing file 336/78071...\n",
|
|
"Processing file 337/78071...\n",
|
|
"Processing file 338/78071...\n",
|
|
"Processing file 339/78071...\n",
|
|
"Processing file 340/78071...\n",
|
|
"Processing file 341/78071...\n",
|
|
"Processing file 342/78071...\n",
|
|
"Processing file 343/78071...\n",
|
|
"Processing file 344/78071...\n",
|
|
"Processing file 345/78071...\n",
|
|
"Processing file 346/78071...\n",
|
|
"Processing file 347/78071...\n",
|
|
"Processing file 348/78071...\n",
|
|
"Processing file 349/78071...\n",
|
|
"Processing file 350/78071...\n",
|
|
"Processing file 351/78071...\n",
|
|
"Processing file 352/78071...\n",
|
|
"Processing file 353/78071...\n",
|
|
"Processing file 354/78071...\n",
|
|
"Processing file 355/78071...\n",
|
|
"Processing file 356/78071...\n",
|
|
"Processing file 357/78071...\n",
|
|
"Processing file 358/78071...\n",
|
|
"Processing file 359/78071...\n",
|
|
"Processing file 360/78071...\n",
|
|
"Processing file 361/78071...\n",
|
|
"Processing file 362/78071...\n",
|
|
"Processing file 363/78071...\n",
|
|
"Processing file 364/78071...\n",
|
|
"Processing file 365/78071...\n",
|
|
"Processing file 366/78071...\n",
|
|
"Processing file 367/78071...\n",
|
|
"Processing file 368/78071...\n",
|
|
"Processing file 369/78071...\n",
|
|
"Processing file 370/78071...\n",
|
|
"Processing file 371/78071...\n",
|
|
"Processing file 372/78071...\n",
|
|
"Processing file 373/78071...\n",
|
|
"Processing file 374/78071...\n",
|
|
"Processing file 375/78071...\n",
|
|
"Processing file 376/78071...\n",
|
|
"Processing file 377/78071...\n",
|
|
"Processing file 378/78071...\n",
|
|
"Processing file 379/78071...\n",
|
|
"Processing file 380/78071...\n",
|
|
"Processing file 381/78071...\n",
|
|
"Processing file 382/78071...\n",
|
|
"Processing file 383/78071...\n",
|
|
"Processing file 384/78071...\n",
|
|
"Processing file 385/78071...\n",
|
|
"Processing file 386/78071...\n",
|
|
"Processing file 387/78071...\n",
|
|
"Processing file 388/78071...\n",
|
|
"Processing file 389/78071...\n",
|
|
"Processing file 390/78071...\n",
|
|
"Processing file 391/78071...\n",
|
|
"Processing file 392/78071...\n",
|
|
"Processing file 393/78071...\n",
|
|
"Processing file 394/78071...\n",
|
|
"Processing file 395/78071...\n",
|
|
"Processing file 396/78071...\n",
|
|
"Processing file 397/78071...\n",
|
|
"Processing file 398/78071...\n",
|
|
"Processing file 399/78071...\n",
|
|
"Processing file 400/78071...\n",
|
|
"Processing file 401/78071...\n",
|
|
"Processing file 402/78071...\n",
|
|
"Processing file 403/78071...\n",
|
|
"Processing file 404/78071...\n",
|
|
"Processing file 405/78071...\n",
|
|
"Processing file 406/78071...\n",
|
|
"Processing file 407/78071...\n",
|
|
"Processing file 408/78071...\n",
|
|
"Processing file 409/78071...\n",
|
|
"Processing file 410/78071...\n",
|
|
"Processing file 411/78071...\n",
|
|
"Processing file 412/78071...\n",
|
|
"Processing file 413/78071...\n",
|
|
"Processing file 414/78071...\n",
|
|
"Processing file 415/78071...\n",
|
|
"Processing file 416/78071...\n",
|
|
"Processing file 417/78071...\n",
|
|
"Processing file 418/78071...\n",
|
|
"Processing file 419/78071...\n",
|
|
"Processing file 420/78071...\n",
|
|
"Processing file 421/78071...\n",
|
|
"Processing file 422/78071...\n",
|
|
"Processing file 423/78071...\n",
|
|
"Processing file 424/78071...\n",
|
|
"Processing file 425/78071...\n",
|
|
"Processing file 426/78071...\n",
|
|
"Processing file 427/78071...\n",
|
|
"Processing file 428/78071...\n",
|
|
"Processing file 429/78071...\n",
|
|
"Processing file 430/78071...\n",
|
|
"Processing file 431/78071...\n",
|
|
"Processing file 432/78071...\n",
|
|
"Processing file 433/78071...\n",
|
|
"Processing file 434/78071...\n",
|
|
"Processing file 435/78071...\n",
|
|
"Processing file 436/78071...\n",
|
|
"Processing file 437/78071...\n",
|
|
"Processing file 438/78071...\n",
|
|
"Processing file 439/78071...\n",
|
|
"Processing file 440/78071...\n",
|
|
"Processing file 441/78071...\n",
|
|
"Processing file 442/78071...\n",
|
|
"Processing file 443/78071...\n",
|
|
"Processing file 444/78071...\n",
|
|
"Processing file 445/78071...\n",
|
|
"Processing file 446/78071...\n",
|
|
"Processing file 447/78071...\n",
|
|
"Processing file 448/78071...\n",
|
|
"Processing file 449/78071...\n",
|
|
"Processing file 450/78071...\n",
|
|
"Processing file 451/78071...\n",
|
|
"Processing file 452/78071...\n",
|
|
"Processing file 453/78071...\n",
|
|
"Processing file 454/78071...\n",
|
|
"Processing file 455/78071...\n",
|
|
"Processing file 456/78071...\n",
|
|
"Processing file 457/78071...\n",
|
|
"Processing file 458/78071...\n",
|
|
"Processing file 459/78071...\n",
|
|
"Processing file 460/78071...\n",
|
|
"Processing file 461/78071...\n",
|
|
"Processing file 462/78071...\n",
|
|
"Processing file 463/78071...\n",
|
|
"Processing file 464/78071...\n",
|
|
"Processing file 465/78071...\n",
|
|
"Processing file 466/78071...\n",
|
|
"Processing file 467/78071...\n",
|
|
"Processing file 468/78071...\n",
|
|
"Processing file 469/78071...\n",
|
|
"Processing file 470/78071...\n",
|
|
"Processing file 471/78071...\n",
|
|
"Processing file 472/78071...\n",
|
|
"Processing file 473/78071...\n",
|
|
"Processing file 474/78071...\n",
|
|
"Processing file 475/78071...\n",
|
|
"Processing file 476/78071...\n",
|
|
"Processing file 477/78071...\n",
|
|
"Processing file 478/78071...\n",
|
|
"Processing file 479/78071...\n",
|
|
"Processing file 480/78071...\n",
|
|
"Processing file 481/78071...\n",
|
|
"Processing file 482/78071...\n",
|
|
"Processing file 483/78071...\n",
|
|
"Processing file 484/78071...\n",
|
|
"Processing file 485/78071...\n",
|
|
"Processing file 486/78071...\n",
|
|
"Processing file 487/78071...\n",
|
|
"Processing file 488/78071...\n",
|
|
"Processing file 489/78071...\n",
|
|
"Processing file 490/78071...\n",
|
|
"Processing file 491/78071...\n",
|
|
"Processing file 492/78071...\n",
|
|
"Processing file 493/78071...\n",
|
|
"Processing file 494/78071...\n",
|
|
"Processing file 495/78071...\n",
|
|
"Processing file 496/78071...\n",
|
|
"Processing file 497/78071...\n",
|
|
"Processing file 498/78071...\n",
|
|
"Processing file 499/78071...\n",
|
|
"Processing file 500/78071...\n",
|
|
"Processing file 501/78071...\n",
|
|
"Processing file 502/78071...\n",
|
|
"Processing file 503/78071...\n",
|
|
"Processing file 504/78071...\n",
|
|
"Processing file 505/78071...\n",
|
|
"Processing file 506/78071...\n",
|
|
"Processing file 507/78071...\n",
|
|
"Processing file 508/78071...\n",
|
|
"Processing file 509/78071...\n",
|
|
"Processing file 510/78071...\n",
|
|
"Processing file 511/78071...\n",
|
|
"Processing file 512/78071...\n",
|
|
"Processing file 513/78071...\n",
|
|
"Processing file 514/78071...\n",
|
|
"Processing file 515/78071...\n",
|
|
"Processing file 516/78071...\n",
|
|
"Processing file 517/78071...\n",
|
|
"Processing file 518/78071...\n",
|
|
"Processing file 519/78071...\n",
|
|
"Processing file 520/78071...\n",
|
|
"Processing file 521/78071...\n",
|
|
"Processing file 522/78071...\n",
|
|
"Processing file 523/78071...\n",
|
|
"Processing file 524/78071...\n",
|
|
"Processing file 525/78071...\n",
|
|
"Processing file 526/78071...\n",
|
|
"Processing file 527/78071...\n",
|
|
"Processing file 528/78071...\n",
|
|
"Processing file 529/78071...\n",
|
|
"Processing file 530/78071...\n",
|
|
"Processing file 531/78071...\n",
|
|
"Processing file 532/78071...\n",
|
|
"Processing file 533/78071...\n",
|
|
"Processing file 534/78071...\n",
|
|
"Processing file 535/78071...\n",
|
|
"Processing file 536/78071...\n",
|
|
"Processing file 537/78071...\n",
|
|
"Processing file 538/78071...\n",
|
|
"Processing file 539/78071...\n",
|
|
"Processing file 540/78071...\n",
|
|
"Processing file 541/78071...\n",
|
|
"Processing file 542/78071...\n",
|
|
"Processing file 543/78071...\n",
|
|
"Processing file 544/78071...\n",
|
|
"Processing file 545/78071...\n",
|
|
"Processing file 546/78071...\n",
|
|
"Processing file 547/78071...\n",
|
|
"Processing file 548/78071...\n",
|
|
"Processing file 549/78071...\n",
|
|
"Processing file 550/78071...\n",
|
|
"Processing file 551/78071...\n",
|
|
"Processing file 552/78071...\n",
|
|
"Processing file 553/78071...\n",
|
|
"Processing file 554/78071...\n",
|
|
"Processing file 555/78071...\n",
|
|
"Processing file 556/78071...\n",
|
|
"Processing file 557/78071...\n",
|
|
"Processing file 558/78071...\n",
|
|
"Processing file 559/78071...\n",
|
|
"Processing file 560/78071...\n",
|
|
"Processing file 561/78071...\n",
|
|
"Processing file 562/78071...\n",
|
|
"Processing file 563/78071...\n",
|
|
"Processing file 564/78071...\n",
|
|
"Processing file 565/78071...\n",
|
|
"Processing file 566/78071...\n",
|
|
"Processing file 567/78071...\n",
|
|
"Processing file 568/78071...\n",
|
|
"Processing file 569/78071...\n",
|
|
"Processing file 570/78071...\n",
|
|
"Processing file 571/78071...\n",
|
|
"Processing file 572/78071...\n",
|
|
"Processing file 573/78071...\n",
|
|
"Processing file 574/78071...\n",
|
|
"Processing file 575/78071...\n",
|
|
"Processing file 576/78071...\n",
|
|
"Processing file 577/78071...\n",
|
|
"Processing file 578/78071...\n",
|
|
"Processing file 579/78071...\n",
|
|
"Processing file 580/78071...\n",
|
|
"Processing file 581/78071...\n",
|
|
"Processing file 582/78071...\n",
|
|
"Processing file 583/78071...\n",
|
|
"Processing file 584/78071...\n",
|
|
"Processing file 585/78071...\n",
|
|
"Processing file 586/78071...\n",
|
|
"Processing file 587/78071...\n",
|
|
"Processing file 588/78071...\n",
|
|
"Processing file 589/78071...\n",
|
|
"Processing file 590/78071...\n",
|
|
"Processing file 591/78071...\n",
|
|
"Processing file 592/78071...\n",
|
|
"Processing file 593/78071...\n",
|
|
"Processing file 594/78071...\n",
|
|
"Processing file 595/78071...\n",
|
|
"Processing file 596/78071...\n",
|
|
"Processing file 597/78071...\n",
|
|
"Processing file 598/78071...\n",
|
|
"Processing file 599/78071...\n",
|
|
"Processing file 600/78071...\n",
|
|
"Processing file 601/78071...\n",
|
|
"Processing file 602/78071...\n",
|
|
"Processing file 603/78071...\n",
|
|
"Processing file 604/78071...\n",
|
|
"Processing file 605/78071...\n",
|
|
"Processing file 606/78071...\n",
|
|
"Processing file 607/78071...\n",
|
|
"Processing file 608/78071...\n",
|
|
"Processing file 609/78071...\n",
|
|
"Processing file 610/78071...\n",
|
|
"Processing file 611/78071...\n",
|
|
"Processing file 612/78071...\n",
|
|
"Processing file 613/78071...\n",
|
|
"Processing file 614/78071...\n",
|
|
"Processing file 615/78071...\n",
|
|
"Processing file 616/78071...\n",
|
|
"Processing file 617/78071...\n",
|
|
"Processing file 618/78071...\n",
|
|
"Processing file 619/78071...\n",
|
|
"Processing file 620/78071...\n",
|
|
"Processing file 621/78071...\n",
|
|
"Processing file 622/78071...\n",
|
|
"Processing file 623/78071...\n",
|
|
"Processing file 624/78071...\n",
|
|
"Processing file 625/78071...\n",
|
|
"Processing file 626/78071...\n",
|
|
"Processing file 627/78071...\n",
|
|
"Processing file 628/78071...\n",
|
|
"Processing file 629/78071...\n",
|
|
"Processing file 630/78071...\n",
|
|
"Processing file 631/78071...\n",
|
|
"Processing file 632/78071...\n",
|
|
"Processing file 633/78071...\n",
|
|
"Processing file 634/78071...\n",
|
|
"Processing file 635/78071...\n",
|
|
"Processing file 636/78071...\n",
|
|
"Processing file 637/78071...\n",
|
|
"Processing file 638/78071...\n",
|
|
"Processing file 639/78071...\n",
|
|
"Processing file 640/78071...\n",
|
|
"Processing file 641/78071...\n",
|
|
"Processing file 642/78071...\n",
|
|
"Processing file 643/78071...\n",
|
|
"Processing file 644/78071...\n",
|
|
"Processing file 645/78071...\n",
|
|
"Processing file 646/78071...\n",
|
|
"Processing file 647/78071...\n",
|
|
"Processing file 648/78071...\n",
|
|
"Processing file 649/78071...\n",
|
|
"Processing file 650/78071...\n",
|
|
"Processing file 651/78071...\n",
|
|
"Processing file 652/78071...\n",
|
|
"Processing file 653/78071...\n",
|
|
"Processing file 654/78071...\n",
|
|
"Processing file 655/78071...\n",
|
|
"Processing file 656/78071...\n",
|
|
"Processing file 657/78071...\n",
|
|
"Processing file 658/78071...\n",
|
|
"Processing file 659/78071...\n",
|
|
"Processing file 660/78071...\n",
|
|
"Processing file 661/78071...\n",
|
|
"Processing file 662/78071...\n",
|
|
"Processing file 663/78071...\n",
|
|
"Processing file 664/78071...\n",
|
|
"Processing file 665/78071...\n",
|
|
"Processing file 666/78071...\n",
|
|
"Processing file 667/78071...\n",
|
|
"Processing file 668/78071...\n",
|
|
"Processing file 669/78071...\n",
|
|
"Processing file 670/78071...\n",
|
|
"Processing file 671/78071...\n",
|
|
"Processing file 672/78071...\n",
|
|
"Processing file 673/78071...\n",
|
|
"Processing file 674/78071...\n",
|
|
"Processing file 675/78071...\n",
|
|
"Processing file 676/78071...\n",
|
|
"Processing file 677/78071...\n",
|
|
"Processing file 678/78071...\n",
|
|
"Processing file 679/78071...\n",
|
|
"Processing file 680/78071...\n",
|
|
"Processing file 681/78071...\n",
|
|
"Processing file 682/78071...\n",
|
|
"Processing file 683/78071...\n",
|
|
"Processing file 684/78071...\n",
|
|
"Processing file 685/78071...\n",
|
|
"Processing file 686/78071...\n",
|
|
"Processing file 687/78071...\n",
|
|
"Processing file 688/78071...\n",
|
|
"Processing file 689/78071...\n",
|
|
"Processing file 690/78071...\n",
|
|
"Processing file 691/78071...\n",
|
|
"Processing file 692/78071...\n",
|
|
"Processing file 693/78071...\n",
|
|
"Processing file 694/78071...\n",
|
|
"Processing file 695/78071...\n",
|
|
"Processing file 696/78071...\n",
|
|
"Processing file 697/78071...\n",
|
|
"Processing file 698/78071...\n",
|
|
"Processing file 699/78071...\n",
|
|
"Processing file 700/78071...\n",
|
|
"Processing file 701/78071...\n",
|
|
"Processing file 702/78071...\n",
|
|
"Processing file 703/78071...\n",
|
|
"Processing file 704/78071...\n",
|
|
"Processing file 705/78071...\n",
|
|
"Processing file 706/78071...\n",
|
|
"Processing file 707/78071...\n",
|
|
"Processing file 708/78071...\n",
|
|
"Processing file 709/78071...\n",
|
|
"Processing file 710/78071...\n",
|
|
"Processing file 711/78071...\n",
|
|
"Processing file 712/78071...\n",
|
|
"Processing file 713/78071...\n",
|
|
"Processing file 714/78071...\n",
|
|
"Processing file 715/78071...\n",
|
|
"Processing file 716/78071...\n",
|
|
"Processing file 717/78071...\n",
|
|
"Processing file 718/78071...\n",
|
|
"Processing file 719/78071...\n",
|
|
"Processing file 720/78071...\n",
|
|
"Processing file 721/78071...\n",
|
|
"Processing file 722/78071...\n",
|
|
"Processing file 723/78071...\n",
|
|
"Processing file 724/78071...\n",
|
|
"Processing file 725/78071...\n",
|
|
"Processing file 726/78071...\n",
|
|
"Processing file 727/78071...\n",
|
|
"Processing file 728/78071...\n",
|
|
"Processing file 729/78071...\n",
|
|
"Processing file 730/78071...\n",
|
|
"Processing file 731/78071...\n",
|
|
"Processing file 732/78071...\n",
|
|
"Processing file 733/78071...\n",
|
|
"Processing file 734/78071...\n",
|
|
"Processing file 735/78071...\n",
|
|
"Processing file 736/78071...\n",
|
|
"Processing file 737/78071...\n",
|
|
"Processing file 738/78071...\n",
|
|
"Processing file 739/78071...\n",
|
|
"Processing file 740/78071...\n",
|
|
"Processing file 741/78071...\n",
|
|
"Processing file 742/78071...\n",
|
|
"Processing file 743/78071...\n",
|
|
"Processing file 744/78071...\n",
|
|
"Processing file 745/78071...\n",
|
|
"Processing file 746/78071...\n",
|
|
"Processing file 747/78071...\n",
|
|
"Processing file 748/78071...\n",
|
|
"Processing file 749/78071...\n",
|
|
"Processing file 750/78071...\n",
|
|
"Processing file 751/78071...\n",
|
|
"Processing file 752/78071...\n",
|
|
"Processing file 753/78071...\n",
|
|
"Processing file 754/78071...\n",
|
|
"Processing file 755/78071...\n",
|
|
"Processing file 756/78071...\n",
|
|
"Processing file 757/78071...\n",
|
|
"Processing file 758/78071...\n",
|
|
"Processing file 759/78071...\n",
|
|
"Processing file 760/78071...\n",
|
|
"Processing file 761/78071...\n",
|
|
"Processing file 762/78071...\n",
|
|
"Processing file 763/78071...\n",
|
|
"Processing file 764/78071...\n",
|
|
"Processing file 765/78071...\n",
|
|
"Processing file 766/78071...\n",
|
|
"Processing file 767/78071...\n",
|
|
"Processing file 768/78071...\n",
|
|
"Processing file 769/78071...\n",
|
|
"Processing file 770/78071...\n",
|
|
"Processing file 771/78071...\n",
|
|
"Processing file 772/78071...\n",
|
|
"Processing file 773/78071...\n",
|
|
"Processing file 774/78071...\n",
|
|
"Processing file 775/78071...\n",
|
|
"Processing file 776/78071...\n",
|
|
"Processing file 777/78071...\n",
|
|
"Processing file 778/78071...\n",
|
|
"Processing file 779/78071...\n",
|
|
"Processing file 780/78071...\n",
|
|
"Processing file 781/78071...\n",
|
|
"Processing file 782/78071...\n",
|
|
"Processing file 783/78071...\n",
|
|
"Processing file 784/78071...\n",
|
|
"Processing file 785/78071...\n",
|
|
"Processing file 786/78071...\n",
|
|
"Processing file 787/78071...\n",
|
|
"Processing file 788/78071...\n",
|
|
"Processing file 789/78071...\n",
|
|
"Processing file 790/78071...\n",
|
|
"Processing file 791/78071...\n",
|
|
"Processing file 792/78071...\n",
|
|
"Processing file 793/78071...\n",
|
|
"Processing file 794/78071...\n",
|
|
"Processing file 795/78071...\n",
|
|
"Processing file 796/78071...\n",
|
|
"Processing file 797/78071...\n",
|
|
"Processing file 798/78071...\n",
|
|
"Processing file 799/78071...\n",
|
|
"Processing file 800/78071...\n",
|
|
"Processing file 801/78071...\n",
|
|
"Processing file 802/78071...\n",
|
|
"Processing file 803/78071...\n",
|
|
"Processing file 804/78071...\n",
|
|
"Processing file 805/78071...\n",
|
|
"Processing file 806/78071...\n",
|
|
"Processing file 807/78071...\n",
|
|
"Processing file 808/78071...\n",
|
|
"Processing file 809/78071...\n",
|
|
"Processing file 810/78071...\n",
|
|
"Processing file 811/78071...\n",
|
|
"Processing file 812/78071...\n",
|
|
"Processing file 813/78071...\n",
|
|
"Processing file 814/78071...\n",
|
|
"Processing file 815/78071...\n",
|
|
"Processing file 816/78071...\n",
|
|
"Processing file 817/78071...\n",
|
|
"Processing file 818/78071...\n",
|
|
"Processing file 819/78071...\n",
|
|
"Processing file 820/78071...\n",
|
|
"Processing file 821/78071...\n",
|
|
"Processing file 822/78071...\n",
|
|
"Processing file 823/78071...\n",
|
|
"Processing file 824/78071...\n",
|
|
"Processing file 825/78071...\n",
|
|
"Processing file 826/78071...\n",
|
|
"Processing file 827/78071...\n",
|
|
"Processing file 828/78071...\n",
|
|
"Processing file 829/78071...\n",
|
|
"Processing file 830/78071...\n",
|
|
"Processing file 831/78071...\n",
|
|
"Processing file 832/78071...\n",
|
|
"Processing file 833/78071...\n",
|
|
"Processing file 834/78071...\n",
|
|
"Processing file 835/78071...\n",
|
|
"Processing file 836/78071...\n",
|
|
"Processing file 837/78071...\n",
|
|
"Processing file 838/78071...\n",
|
|
"Processing file 839/78071...\n",
|
|
"Processing file 840/78071...\n",
|
|
"Processing file 841/78071...\n",
|
|
"Processing file 842/78071...\n",
|
|
"Processing file 843/78071...\n",
|
|
"Processing file 844/78071...\n",
|
|
"Processing file 845/78071...\n",
|
|
"Processing file 846/78071...\n",
|
|
"Processing file 847/78071...\n",
|
|
"Processing file 848/78071...\n",
|
|
"Processing file 849/78071...\n",
|
|
"Processing file 850/78071...\n",
|
|
"Processing file 851/78071...\n",
|
|
"Processing file 852/78071...\n",
|
|
"Processing file 853/78071...\n",
|
|
"Processing file 854/78071...\n",
|
|
"Processing file 855/78071...\n",
|
|
"Processing file 856/78071...\n",
|
|
"Processing file 857/78071...\n",
|
|
"Processing file 858/78071...\n",
|
|
"Processing file 859/78071...\n",
|
|
"Processing file 860/78071...\n",
|
|
"Processing file 861/78071...\n",
|
|
"Processing file 862/78071...\n",
|
|
"Processing file 863/78071...\n",
|
|
"Processing file 864/78071...\n",
|
|
"Processing file 865/78071...\n",
|
|
"Processing file 866/78071...\n",
|
|
"Processing file 867/78071...\n",
|
|
"Processing file 868/78071...\n",
|
|
"Processing file 869/78071...\n",
|
|
"Processing file 870/78071...\n",
|
|
"Processing file 871/78071...\n",
|
|
"Processing file 872/78071...\n",
|
|
"Processing file 873/78071...\n",
|
|
"Processing file 874/78071...\n",
|
|
"Processing file 875/78071...\n",
|
|
"Processing file 876/78071...\n",
|
|
"Processing file 877/78071...\n",
|
|
"Processing file 878/78071...\n",
|
|
"Processing file 879/78071...\n",
|
|
"Processing file 880/78071...\n",
|
|
"Processing file 881/78071...\n",
|
|
"Processing file 882/78071...\n",
|
|
"Processing file 883/78071...\n",
|
|
"Processing file 884/78071...\n",
|
|
"Processing file 885/78071...\n",
|
|
"Processing file 886/78071...\n",
|
|
"Processing file 887/78071...\n",
|
|
"Processing file 888/78071...\n",
|
|
"Processing file 889/78071...\n",
|
|
"Processing file 890/78071...\n",
|
|
"Processing file 891/78071...\n",
|
|
"Processing file 892/78071...\n",
|
|
"Processing file 893/78071...\n",
|
|
"Processing file 894/78071...\n",
|
|
"Processing file 895/78071...\n",
|
|
"Processing file 896/78071...\n",
|
|
"Processing file 897/78071...\n",
|
|
"Processing file 898/78071...\n",
|
|
"Processing file 899/78071...\n",
|
|
"Processing file 900/78071...\n",
|
|
"Processing file 901/78071...\n",
|
|
"Processing file 902/78071...\n",
|
|
"Processing file 903/78071...\n",
|
|
"Processing file 904/78071...\n",
|
|
"Processing file 905/78071...\n",
|
|
"Processing file 906/78071...\n",
|
|
"Processing file 907/78071...\n",
|
|
"Processing file 908/78071...\n",
|
|
"Processing file 909/78071...\n",
|
|
"Processing file 910/78071...\n",
|
|
"Processing file 911/78071...\n",
|
|
"Processing file 912/78071...\n",
|
|
"Processing file 913/78071...\n",
|
|
"Processing file 914/78071...\n",
|
|
"Processing file 915/78071...\n",
|
|
"Processing file 916/78071...\n",
|
|
"Processing file 917/78071...\n",
|
|
"Processing file 918/78071...\n",
|
|
"Processing file 919/78071...\n",
|
|
"Processing file 920/78071...\n",
|
|
"Processing file 921/78071...\n",
|
|
"Processing file 922/78071...\n",
|
|
"Processing file 923/78071...\n",
|
|
"Processing file 924/78071...\n",
|
|
"Processing file 925/78071...\n",
|
|
"Processing file 926/78071...\n",
|
|
"Processing file 927/78071...\n",
|
|
"Processing file 928/78071...\n",
|
|
"Processing file 929/78071...\n",
|
|
"Processing file 930/78071...\n",
|
|
"Processing file 931/78071...\n",
|
|
"Processing file 932/78071...\n",
|
|
"Processing file 933/78071...\n",
|
|
"Processing file 934/78071...\n",
|
|
"Processing file 935/78071...\n",
|
|
"Processing file 936/78071...\n",
|
|
"Processing file 937/78071...\n",
|
|
"Processing file 938/78071...\n",
|
|
"Processing file 939/78071...\n",
|
|
"Processing file 940/78071...\n",
|
|
"Processing file 941/78071...\n",
|
|
"Processing file 942/78071...\n",
|
|
"Processing file 943/78071...\n",
|
|
"Processing file 944/78071...\n",
|
|
"Processing file 945/78071...\n",
|
|
"Processing file 946/78071...\n",
|
|
"Processing file 947/78071...\n",
|
|
"Processing file 948/78071...\n",
|
|
"Processing file 949/78071...\n",
|
|
"Processing file 950/78071...\n",
|
|
"Processing file 951/78071...\n",
|
|
"Processing file 952/78071...\n",
|
|
"Processing file 953/78071...\n",
|
|
"Processing file 954/78071...\n",
|
|
"Processing file 955/78071...\n",
|
|
"Processing file 956/78071...\n",
|
|
"Processing file 957/78071...\n",
|
|
"Processing file 958/78071...\n",
|
|
"Processing file 959/78071...\n",
|
|
"Processing file 960/78071...\n",
|
|
"Processing file 961/78071...\n",
|
|
"Processing file 962/78071...\n",
|
|
"Processing file 963/78071...\n",
|
|
"Processing file 964/78071...\n",
|
|
"Processing file 965/78071...\n",
|
|
"Processing file 966/78071...\n",
|
|
"Processing file 967/78071...\n",
|
|
"Processing file 968/78071...\n",
|
|
"Processing file 969/78071...\n",
|
|
"Processing file 970/78071...\n",
|
|
"Processing file 971/78071...\n",
|
|
"Processing file 972/78071...\n",
|
|
"Processing file 973/78071...\n",
|
|
"Processing file 974/78071...\n",
|
|
"Processing file 975/78071...\n",
|
|
"Processing file 976/78071...\n",
|
|
"Processing file 977/78071...\n",
|
|
"Processing file 978/78071...\n",
|
|
"Processing file 979/78071...\n",
|
|
"Processing file 980/78071...\n",
|
|
"Processing file 981/78071...\n",
|
|
"Processing file 982/78071...\n",
|
|
"Processing file 983/78071...\n",
|
|
"Processing file 984/78071...\n",
|
|
"Processing file 985/78071...\n",
|
|
"Processing file 986/78071...\n",
|
|
"Processing file 987/78071...\n",
|
|
"Processing file 988/78071...\n",
|
|
"Processing file 989/78071...\n",
|
|
"Processing file 990/78071...\n",
|
|
"Processing file 991/78071...\n",
|
|
"Processing file 992/78071...\n",
|
|
"Processing file 993/78071...\n",
|
|
"Processing file 994/78071...\n",
|
|
"Processing file 995/78071...\n",
|
|
"Processing file 996/78071...\n",
|
|
"Processing file 997/78071...\n",
|
|
"Processing file 998/78071...\n",
|
|
"Processing file 999/78071...\n",
|
|
"Processing file 1000/78071...\n",
|
|
"Processing file 1001/78071...\n",
|
|
"Processing file 1002/78071...\n",
|
|
"Processing file 1003/78071...\n",
|
|
"Processing file 1004/78071...\n",
|
|
"Processing file 1005/78071...\n",
|
|
"Processing file 1006/78071...\n",
|
|
"Processing file 1007/78071...\n",
|
|
"Processing file 1008/78071...\n",
|
|
"Processing file 1009/78071...\n",
|
|
"Processing file 1010/78071...\n",
|
|
"Processing file 1011/78071...\n",
|
|
"Processing file 1012/78071...\n",
|
|
"Processing file 1013/78071...\n",
|
|
"Processing file 1014/78071...\n",
|
|
"Processing file 1015/78071...\n",
|
|
"Processing file 1016/78071...\n",
|
|
"Processing file 1017/78071...\n",
|
|
"Processing file 1018/78071...\n",
|
|
"Processing file 1019/78071...\n",
|
|
"Processing file 1020/78071...\n",
|
|
"Processing file 1021/78071...\n",
|
|
"Processing file 1022/78071...\n",
|
|
"Processing file 1023/78071...\n",
|
|
"Processing file 1024/78071...\n",
|
|
"Processing file 1025/78071...\n",
|
|
"Processing file 1026/78071...\n",
|
|
"Processing file 1027/78071...\n",
|
|
"Processing file 1028/78071...\n",
|
|
"Processing file 1029/78071...\n",
|
|
"Processing file 1030/78071...\n",
|
|
"Processing file 1031/78071...\n",
|
|
"Processing file 1032/78071...\n",
|
|
"Processing file 1033/78071...\n",
|
|
"Processing file 1034/78071...\n",
|
|
"Processing file 1035/78071...\n",
|
|
"Processing file 1036/78071...\n",
|
|
"Processing file 1037/78071...\n",
|
|
"Processing file 1038/78071...\n",
|
|
"Processing file 1039/78071...\n",
|
|
"Processing file 1040/78071...\n",
|
|
"Processing file 1041/78071...\n",
|
|
"Processing file 1042/78071...\n",
|
|
"Processing file 1043/78071...\n",
|
|
"Processing file 1044/78071...\n",
|
|
"Processing file 1045/78071...\n",
|
|
"Processing file 1046/78071...\n",
|
|
"Processing file 1047/78071...\n",
|
|
"Processing file 1048/78071...\n",
|
|
"Processing file 1049/78071...\n",
|
|
"Processing file 1050/78071...\n",
|
|
"Processing file 1051/78071...\n",
|
|
"Processing file 1052/78071...\n",
|
|
"Processing file 1053/78071...\n",
|
|
"Processing file 1054/78071...\n",
|
|
"Processing file 1055/78071...\n",
|
|
"Processing file 1056/78071...\n",
|
|
"Processing file 1057/78071...\n",
|
|
"Processing file 1058/78071...\n",
|
|
"Processing file 1059/78071...\n",
|
|
"Processing file 1060/78071...\n",
|
|
"Processing file 1061/78071...\n",
|
|
"Processing file 1062/78071...\n",
|
|
"Processing file 1063/78071...\n",
|
|
"Processing file 1064/78071...\n",
|
|
"Processing file 1065/78071...\n",
|
|
"Processing file 1066/78071...\n",
|
|
"Processing file 1067/78071...\n",
|
|
"Processing file 1068/78071...\n",
|
|
"Processing file 1069/78071...\n",
|
|
"Processing file 1070/78071...\n",
|
|
"Processing file 1071/78071...\n",
|
|
"Processing file 1072/78071...\n",
|
|
"Processing file 1073/78071...\n",
|
|
"Processing file 1074/78071...\n",
|
|
"Processing file 1075/78071...\n",
|
|
"Processing file 1076/78071...\n",
|
|
"Processing file 1077/78071...\n",
|
|
"Processing file 1078/78071...\n",
|
|
"Processing file 1079/78071...\n",
|
|
"Processing file 1080/78071...\n",
|
|
"Processing file 1081/78071...\n",
|
|
"Processing file 1082/78071...\n",
|
|
"Processing file 1083/78071...\n",
|
|
"Processing file 1084/78071...\n",
|
|
"Processing file 1085/78071...\n",
|
|
"Processing file 1086/78071...\n",
|
|
"Processing file 1087/78071...\n",
|
|
"Processing file 1088/78071...\n",
|
|
"Processing file 1089/78071...\n",
|
|
"Processing file 1090/78071...\n",
|
|
"Processing file 1091/78071...\n",
|
|
"Processing file 1092/78071...\n",
|
|
"Processing file 1093/78071...\n",
|
|
"Processing file 1094/78071...\n",
|
|
"Processing file 1095/78071...\n",
|
|
"Processing file 1096/78071...\n",
|
|
"Processing file 1097/78071...\n",
|
|
"Processing file 1098/78071...\n",
|
|
"Processing file 1099/78071...\n",
|
|
"Processing file 1100/78071...\n",
|
|
"Processing file 1101/78071...\n",
|
|
"Processing file 1102/78071...\n",
|
|
"Processing file 1103/78071...\n",
|
|
"Processing file 1104/78071...\n",
|
|
"Processing file 1105/78071...\n",
|
|
"Processing file 1106/78071...\n",
|
|
"Processing file 1107/78071...\n",
|
|
"Processing file 1108/78071...\n",
|
|
"Processing file 1109/78071...\n",
|
|
"Processing file 1110/78071...\n",
|
|
"Processing file 1111/78071...\n",
|
|
"Processing file 1112/78071...\n",
|
|
"Processing file 1113/78071...\n",
|
|
"Processing file 1114/78071...\n",
|
|
"Processing file 1115/78071...\n",
|
|
"Processing file 1116/78071...\n",
|
|
"Processing file 1117/78071...\n",
|
|
"Processing file 1118/78071...\n",
|
|
"Processing file 1119/78071...\n",
|
|
"Processing file 1120/78071...\n",
|
|
"Processing file 1121/78071...\n",
|
|
"Processing file 1122/78071...\n",
|
|
"Processing file 1123/78071...\n",
|
|
"Processing file 1124/78071...\n",
|
|
"Processing file 1125/78071...\n",
|
|
"Processing file 1126/78071...\n",
|
|
"Processing file 1127/78071...\n",
|
|
"Processing file 1128/78071...\n",
|
|
"Processing file 1129/78071...\n",
|
|
"Processing file 1130/78071...\n",
|
|
"Processing file 1131/78071...\n",
|
|
"Processing file 1132/78071...\n",
|
|
"Processing file 1133/78071...\n",
|
|
"Processing file 1134/78071...\n",
|
|
"Processing file 1135/78071...\n",
|
|
"Processing file 1136/78071...\n",
|
|
"Processing file 1137/78071...\n",
|
|
"Processing file 1138/78071...\n",
|
|
"Processing file 1139/78071...\n",
|
|
"Processing file 1140/78071...\n",
|
|
"Processing file 1141/78071...\n",
|
|
"Processing file 1142/78071...\n",
|
|
"Processing file 1143/78071...\n",
|
|
"Processing file 1144/78071...\n",
|
|
"Processing file 1145/78071...\n",
|
|
"Processing file 1146/78071...\n",
|
|
"Processing file 1147/78071...\n",
|
|
"Processing file 1148/78071...\n",
|
|
"Processing file 1149/78071...\n",
|
|
"Processing file 1150/78071...\n",
|
|
"Processing file 1151/78071...\n",
|
|
"Processing file 1152/78071...\n",
|
|
"Processing file 1153/78071...\n",
|
|
"Processing file 1154/78071...\n",
|
|
"Processing file 1155/78071...\n",
|
|
"Processing file 1156/78071...\n",
|
|
"Processing file 1157/78071...\n",
|
|
"Processing file 1158/78071...\n",
|
|
"Processing file 1159/78071...\n",
|
|
"Processing file 1160/78071...\n",
|
|
"Processing file 1161/78071...\n",
|
|
"Processing file 1162/78071...\n",
|
|
"Processing file 1163/78071...\n",
|
|
"Processing file 1164/78071...\n",
|
|
"Processing file 1165/78071...\n",
|
|
"Processing file 1166/78071...\n",
|
|
"Processing file 1167/78071...\n",
|
|
"Processing file 1168/78071...\n",
|
|
"Processing file 1169/78071...\n",
|
|
"Processing file 1170/78071...\n",
|
|
"Processing file 1171/78071...\n",
|
|
"Processing file 1172/78071...\n",
|
|
"Processing file 1173/78071...\n",
|
|
"Processing file 1174/78071...\n",
|
|
"Processing file 1175/78071...\n",
|
|
"Processing file 1176/78071...\n",
|
|
"Processing file 1177/78071...\n",
|
|
"Processing file 1178/78071...\n",
|
|
"Processing file 1179/78071...\n",
|
|
"Processing file 1180/78071...\n",
|
|
"Processing file 1181/78071...\n",
|
|
"Processing file 1182/78071...\n",
|
|
"Processing file 1183/78071...\n",
|
|
"Processing file 1184/78071...\n",
|
|
"Processing file 1185/78071...\n",
|
|
"Processing file 1186/78071...\n",
|
|
"Processing file 1187/78071...\n",
|
|
"Processing file 1188/78071...\n",
|
|
"Processing file 1189/78071...\n",
|
|
"Processing file 1190/78071...\n",
|
|
"Processing file 1191/78071...\n",
|
|
"Processing file 1192/78071...\n",
|
|
"Processing file 1193/78071...\n",
|
|
"Processing file 1194/78071...\n",
|
|
"Processing file 1195/78071...\n",
|
|
"Processing file 1196/78071...\n",
|
|
"Processing file 1197/78071...\n",
|
|
"Processing file 1198/78071...\n",
|
|
"Processing file 1199/78071...\n",
|
|
"Processing file 1200/78071...\n",
|
|
"Processing file 1201/78071...\n",
|
|
"Processing file 1202/78071...\n",
|
|
"Processing file 1203/78071...\n",
|
|
"Processing file 1204/78071...\n",
|
|
"Processing file 1205/78071...\n",
|
|
"Processing file 1206/78071...\n",
|
|
"Processing file 1207/78071...\n",
|
|
"Processing file 1208/78071...\n",
|
|
"Processing file 1209/78071...\n",
|
|
"Processing file 1210/78071...\n",
|
|
"Processing file 1211/78071...\n",
|
|
"Processing file 1212/78071...\n",
|
|
"Processing file 1213/78071...\n",
|
|
"Processing file 1214/78071...\n",
|
|
"Processing file 1215/78071...\n",
|
|
"Processing file 1216/78071...\n",
|
|
"Processing file 1217/78071...\n",
|
|
"Processing file 1218/78071...\n",
|
|
"Processing file 1219/78071...\n",
|
|
"Processing file 1220/78071...\n",
|
|
"Processing file 1221/78071...\n",
|
|
"Processing file 1222/78071...\n",
|
|
"Processing file 1223/78071...\n",
|
|
"Processing file 1224/78071...\n",
|
|
"Processing file 1225/78071...\n",
|
|
"Processing file 1226/78071...\n",
|
|
"Processing file 1227/78071...\n",
|
|
"Processing file 1228/78071...\n",
|
|
"Processing file 1229/78071...\n",
|
|
"Processing file 1230/78071...\n",
|
|
"Processing file 1231/78071...\n",
|
|
"Processing file 1232/78071...\n",
|
|
"Processing file 1233/78071...\n",
|
|
"Processing file 1234/78071...\n",
|
|
"Processing file 1235/78071...\n",
|
|
"Processing file 1236/78071...\n",
|
|
"Processing file 1237/78071...\n",
|
|
"Processing file 1238/78071...\n",
|
|
"Processing file 1239/78071...\n",
|
|
"Processing file 1240/78071...\n",
|
|
"Processing file 1241/78071...\n",
|
|
"Processing file 1242/78071...\n",
|
|
"Processing file 1243/78071...\n",
|
|
"Processing file 1244/78071...\n",
|
|
"Processing file 1245/78071...\n",
|
|
"Processing file 1246/78071...\n",
|
|
"Processing file 1247/78071...\n",
|
|
"Processing file 1248/78071...\n",
|
|
"Processing file 1249/78071...\n",
|
|
"Processing file 1250/78071...\n",
|
|
"Processing file 1251/78071...\n",
|
|
"Processing file 1252/78071...\n",
|
|
"Processing file 1253/78071...\n",
|
|
"Processing file 1254/78071...\n",
|
|
"Processing file 1255/78071...\n",
|
|
"Processing file 1256/78071...\n",
|
|
"Processing file 1257/78071...\n",
|
|
"Processing file 1258/78071...\n",
|
|
"Processing file 1259/78071...\n",
|
|
"Processing file 1260/78071...\n",
|
|
"Processing file 1261/78071...\n",
|
|
"Processing file 1262/78071...\n",
|
|
"Processing file 1263/78071...\n",
|
|
"Processing file 1264/78071...\n",
|
|
"Processing file 1265/78071...\n",
|
|
"Processing file 1266/78071...\n",
|
|
"Processing file 1267/78071...\n",
|
|
"Processing file 1268/78071...\n",
|
|
"Processing file 1269/78071...\n",
|
|
"Processing file 1270/78071...\n",
|
|
"Processing file 1271/78071...\n",
|
|
"Processing file 1272/78071...\n",
|
|
"Processing file 1273/78071...\n",
|
|
"Processing file 1274/78071...\n",
|
|
"Processing file 1275/78071...\n",
|
|
"Processing file 1276/78071...\n",
|
|
"Processing file 1277/78071...\n",
|
|
"Processing file 1278/78071...\n",
|
|
"Processing file 1279/78071...\n",
|
|
"Processing file 1280/78071...\n",
|
|
"Processing file 1281/78071...\n",
|
|
"Processing file 1282/78071...\n",
|
|
"Processing file 1283/78071...\n",
|
|
"Processing file 1284/78071...\n",
|
|
"Processing file 1285/78071...\n",
|
|
"Processing file 1286/78071...\n",
|
|
"Processing file 1287/78071...\n",
|
|
"Processing file 1288/78071...\n",
|
|
"Processing file 1289/78071...\n",
|
|
"Processing file 1290/78071...\n",
|
|
"Processing file 1291/78071...\n",
|
|
"Processing file 1292/78071...\n",
|
|
"Processing file 1293/78071...\n",
|
|
"Processing file 1294/78071...\n",
|
|
"Processing file 1295/78071...\n",
|
|
"Processing file 1296/78071...\n",
|
|
"Processing file 1297/78071...\n",
|
|
"Processing file 1298/78071...\n",
|
|
"Processing file 1299/78071...\n",
|
|
"Processing file 1300/78071...\n",
|
|
"Processing file 1301/78071...\n",
|
|
"Processing file 1302/78071...\n",
|
|
"Processing file 1303/78071...\n",
|
|
"Processing file 1304/78071...\n",
|
|
"Processing file 1305/78071...\n",
|
|
"Processing file 1306/78071...\n",
|
|
"Processing file 1307/78071...\n",
|
|
"Processing file 1308/78071...\n",
|
|
"Processing file 1309/78071...\n",
|
|
"Processing file 1310/78071...\n",
|
|
"Processing file 1311/78071...\n",
|
|
"Processing file 1312/78071...\n",
|
|
"Processing file 1313/78071...\n",
|
|
"Processing file 1314/78071...\n",
|
|
"Processing file 1315/78071...\n",
|
|
"Processing file 1316/78071...\n",
|
|
"Processing file 1317/78071...\n",
|
|
"Processing file 1318/78071...\n",
|
|
"Processing file 1319/78071...\n",
|
|
"Processing file 1320/78071...\n",
|
|
"Processing file 1321/78071...\n",
|
|
"Processing file 1322/78071...\n",
|
|
"Processing file 1323/78071...\n",
|
|
"Processing file 1324/78071...\n",
|
|
"Processing file 1325/78071...\n",
|
|
"Processing file 1326/78071...\n",
|
|
"Processing file 1327/78071...\n",
|
|
"Processing file 1328/78071...\n",
|
|
"Processing file 1329/78071...\n",
|
|
"Processing file 1330/78071...\n",
|
|
"Processing file 1331/78071...\n",
|
|
"Processing file 1332/78071...\n",
|
|
"Processing file 1333/78071...\n",
|
|
"Processing file 1334/78071...\n",
|
|
"Processing file 1335/78071...\n",
|
|
"Processing file 1336/78071...\n",
|
|
"Processing file 1337/78071...\n",
|
|
"Processing file 1338/78071...\n",
|
|
"Processing file 1339/78071...\n",
|
|
"Processing file 1340/78071...\n",
|
|
"Processing file 1341/78071...\n",
|
|
"Processing file 1342/78071...\n",
|
|
"Processing file 1343/78071...\n",
|
|
"Processing file 1344/78071...\n",
|
|
"Processing file 1345/78071...\n",
|
|
"Processing file 1346/78071...\n",
|
|
"Processing file 1347/78071...\n",
|
|
"Processing file 1348/78071...\n",
|
|
"Processing file 1349/78071...\n",
|
|
"Processing file 1350/78071...\n",
|
|
"Processing file 1351/78071...\n",
|
|
"Processing file 1352/78071...\n",
|
|
"Processing file 1353/78071...\n",
|
|
"Processing file 1354/78071...\n",
|
|
"Processing file 1355/78071...\n",
|
|
"Processing file 1356/78071...\n",
|
|
"Processing file 1357/78071...\n",
|
|
"Processing file 1358/78071...\n",
|
|
"Processing file 1359/78071...\n",
|
|
"Processing file 1360/78071...\n",
|
|
"Processing file 1361/78071...\n",
|
|
"Processing file 1362/78071...\n",
|
|
"Processing file 1363/78071...\n",
|
|
"Processing file 1364/78071...\n",
|
|
"Processing file 1365/78071...\n",
|
|
"Processing file 1366/78071...\n",
|
|
"Processing file 1367/78071...\n",
|
|
"Processing file 1368/78071...\n",
|
|
"Processing file 1369/78071...\n",
|
|
"Processing file 1370/78071...\n",
|
|
"Processing file 1371/78071...\n",
|
|
"Processing file 1372/78071...\n",
|
|
"Processing file 1373/78071...\n",
|
|
"Processing file 1374/78071...\n",
|
|
"Processing file 1375/78071...\n",
|
|
"Processing file 1376/78071...\n",
|
|
"Processing file 1377/78071...\n",
|
|
"Processing file 1378/78071...\n",
|
|
"Processing file 1379/78071...\n",
|
|
"Processing file 1380/78071...\n",
|
|
"Processing file 1381/78071...\n",
|
|
"Processing file 1382/78071...\n",
|
|
"Processing file 1383/78071...\n",
|
|
"Processing file 1384/78071...\n",
|
|
"Processing file 1385/78071...\n",
|
|
"Processing file 1386/78071...\n",
|
|
"Processing file 1387/78071...\n",
|
|
"Processing file 1388/78071...\n",
|
|
"Processing file 1389/78071...\n",
|
|
"Processing file 1390/78071...\n",
|
|
"Processing file 1391/78071...\n",
|
|
"Processing file 1392/78071...\n",
|
|
"Processing file 1393/78071...\n",
|
|
"Processing file 1394/78071...\n",
|
|
"Processing file 1395/78071...\n",
|
|
"Processing file 1396/78071...\n",
|
|
"Processing file 1397/78071...\n",
|
|
"Processing file 1398/78071...\n",
|
|
"Processing file 1399/78071...\n",
|
|
"Processing file 1400/78071...\n",
|
|
"Processing file 1401/78071...\n",
|
|
"Processing file 1402/78071...\n",
|
|
"Processing file 1403/78071...\n",
|
|
"Processing file 1404/78071...\n",
|
|
"Processing file 1405/78071...\n",
|
|
"Processing file 1406/78071...\n",
|
|
"Processing file 1407/78071...\n",
|
|
"Processing file 1408/78071...\n",
|
|
"Processing file 1409/78071...\n",
|
|
"Processing file 1410/78071...\n",
|
|
"Processing file 1411/78071...\n",
|
|
"Processing file 1412/78071...\n",
|
|
"Processing file 1413/78071...\n",
|
|
"Processing file 1414/78071...\n",
|
|
"Processing file 1415/78071...\n",
|
|
"Processing file 1416/78071...\n",
|
|
"Processing file 1417/78071...\n",
|
|
"Processing file 1418/78071...\n",
|
|
"Processing file 1419/78071...\n",
|
|
"Processing file 1420/78071...\n",
|
|
"Processing file 1421/78071...\n",
|
|
"Processing file 1422/78071...\n",
|
|
"Processing file 1423/78071...\n",
|
|
"Processing file 1424/78071...\n",
|
|
"Processing file 1425/78071...\n",
|
|
"Processing file 1426/78071...\n",
|
|
"Processing file 1427/78071...\n",
|
|
"Processing file 1428/78071...\n",
|
|
"Processing file 1429/78071...\n",
|
|
"Processing file 1430/78071...\n",
|
|
"Processing file 1431/78071...\n",
|
|
"Processing file 1432/78071...\n",
|
|
"Processing file 1433/78071...\n",
|
|
"Processing file 1434/78071...\n",
|
|
"Processing file 1435/78071...\n",
|
|
"Processing file 1436/78071...\n",
|
|
"Processing file 1437/78071...\n",
|
|
"Processing file 1438/78071...\n",
|
|
"Processing file 1439/78071...\n",
|
|
"Processing file 1440/78071...\n",
|
|
"Processing file 1441/78071...\n",
|
|
"Processing file 1442/78071...\n",
|
|
"Processing file 1443/78071...\n",
|
|
"Processing file 1444/78071...\n",
|
|
"Processing file 1445/78071...\n",
|
|
"Processing file 1446/78071...\n",
|
|
"Processing file 1447/78071...\n",
|
|
"Processing file 1448/78071...\n",
|
|
"Processing file 1449/78071...\n",
|
|
"Processing file 1450/78071...\n",
|
|
"Processing file 1451/78071...\n",
|
|
"Processing file 1452/78071...\n",
|
|
"Processing file 1453/78071...\n",
|
|
"Processing file 1454/78071...\n",
|
|
"Processing file 1455/78071...\n",
|
|
"Processing file 1456/78071...\n",
|
|
"Processing file 1457/78071...\n",
|
|
"Processing file 1458/78071...\n",
|
|
"Processing file 1459/78071...\n",
|
|
"Processing file 1460/78071...\n",
|
|
"Processing file 1461/78071...\n",
|
|
"Processing file 1462/78071...\n",
|
|
"Processing file 1463/78071...\n",
|
|
"Processing file 1464/78071...\n",
|
|
"Processing file 1465/78071...\n",
|
|
"Processing file 1466/78071...\n",
|
|
"Processing file 1467/78071...\n",
|
|
"Processing file 1468/78071...\n",
|
|
"Processing file 1469/78071...\n",
|
|
"Processing file 1470/78071...\n",
|
|
"Processing file 1471/78071...\n",
|
|
"Processing file 1472/78071...\n",
|
|
"Processing file 1473/78071...\n",
|
|
"Processing file 1474/78071...\n",
|
|
"Processing file 1475/78071...\n",
|
|
"Processing file 1476/78071...\n",
|
|
"Processing file 1477/78071...\n",
|
|
"Processing file 1478/78071...\n",
|
|
"Processing file 1479/78071...\n",
|
|
"Processing file 1480/78071...\n",
|
|
"Processing file 1481/78071...\n",
|
|
"Processing file 1482/78071...\n",
|
|
"Processing file 1483/78071...\n",
|
|
"Processing file 1484/78071...\n",
|
|
"Processing file 1485/78071...\n",
|
|
"Processing file 1486/78071...\n",
|
|
"Processing file 1487/78071...\n",
|
|
"Processing file 1488/78071...\n",
|
|
"Processing file 1489/78071...\n",
|
|
"Processing file 1490/78071...\n",
|
|
"Processing file 1491/78071...\n",
|
|
"Processing file 1492/78071...\n",
|
|
"Processing file 1493/78071...\n",
|
|
"Processing file 1494/78071...\n",
|
|
"Processing file 1495/78071...\n",
|
|
"Processing file 1496/78071...\n",
|
|
"Processing file 1497/78071...\n",
|
|
"Processing file 1498/78071...\n",
|
|
"Processing file 1499/78071...\n",
|
|
"Processing file 1500/78071...\n",
|
|
"Processing file 1501/78071...\n",
|
|
"Processing file 1502/78071...\n",
|
|
"Processing file 1503/78071...\n",
|
|
"Processing file 1504/78071...\n",
|
|
"Processing file 1505/78071...\n",
|
|
"Processing file 1506/78071...\n",
|
|
"Processing file 1507/78071...\n",
|
|
"Processing file 1508/78071...\n",
|
|
"Processing file 1509/78071...\n",
|
|
"Processing file 1510/78071...\n",
|
|
"Processing file 1511/78071...\n",
|
|
"Processing file 1512/78071...\n",
|
|
"Processing file 1513/78071...\n",
|
|
"Processing file 1514/78071...\n",
|
|
"Processing file 1515/78071...\n",
|
|
"Processing file 1516/78071...\n",
|
|
"Processing file 1517/78071...\n",
|
|
"Processing file 1518/78071...\n",
|
|
"Processing file 1519/78071...\n",
|
|
"Processing file 1520/78071...\n",
|
|
"Processing file 1521/78071...\n",
|
|
"Processing file 1522/78071...\n",
|
|
"Processing file 1523/78071...\n",
|
|
"Processing file 1524/78071...\n",
|
|
"Processing file 1525/78071...\n",
|
|
"Processing file 1526/78071...\n",
|
|
"Processing file 1527/78071...\n",
|
|
"Processing file 1528/78071...\n",
|
|
"Processing file 1529/78071...\n",
|
|
"Processing file 1530/78071...\n",
|
|
"Processing file 1531/78071...\n",
|
|
"Processing file 1532/78071...\n",
|
|
"Processing file 1533/78071...\n",
|
|
"Processing file 1534/78071...\n",
|
|
"Processing file 1535/78071...\n",
|
|
"Processing file 1536/78071...\n",
|
|
"Processing file 1537/78071...\n",
|
|
"Processing file 1538/78071...\n",
|
|
"Processing file 1539/78071...\n",
|
|
"Processing file 1540/78071...\n",
|
|
"Processing file 1541/78071...\n",
|
|
"Processing file 1542/78071...\n",
|
|
"Processing file 1543/78071...\n",
|
|
"Processing file 1544/78071...\n",
|
|
"Processing file 1545/78071...\n",
|
|
"Processing file 1546/78071...\n",
|
|
"Processing file 1547/78071...\n",
|
|
"Processing file 1548/78071...\n",
|
|
"Processing file 1549/78071...\n",
|
|
"Processing file 1550/78071...\n",
|
|
"Processing file 1551/78071...\n",
|
|
"Processing file 1552/78071...\n",
|
|
"Processing file 1553/78071...\n",
|
|
"Processing file 1554/78071...\n",
|
|
"Processing file 1555/78071...\n",
|
|
"Processing file 1556/78071...\n",
|
|
"Processing file 1557/78071...\n",
|
|
"Processing file 1558/78071...\n",
|
|
"Processing file 1559/78071...\n",
|
|
"Processing file 1560/78071...\n",
|
|
"Processing file 1561/78071...\n",
|
|
"Processing file 1562/78071...\n",
|
|
"Processing file 1563/78071...\n",
|
|
"Processing file 1564/78071...\n",
|
|
"Processing file 1565/78071...\n",
|
|
"Processing file 1566/78071...\n",
|
|
"Processing file 1567/78071...\n",
|
|
"Processing file 1568/78071...\n",
|
|
"Processing file 1569/78071...\n",
|
|
"Processing file 1570/78071...\n",
|
|
"Processing file 1571/78071...\n",
|
|
"Processing file 1572/78071...\n",
|
|
"Processing file 1573/78071...\n",
|
|
"Processing file 1574/78071...\n",
|
|
"Processing file 1575/78071...\n",
|
|
"Processing file 1576/78071...\n",
|
|
"Processing file 1577/78071...\n",
|
|
"Processing file 1578/78071...\n",
|
|
"Processing file 1579/78071...\n",
|
|
"Processing file 1580/78071...\n",
|
|
"Processing file 1581/78071...\n",
|
|
"Processing file 1582/78071...\n",
|
|
"Processing file 1583/78071...\n",
|
|
"Processing file 1584/78071...\n",
|
|
"Processing file 1585/78071...\n",
|
|
"Processing file 1586/78071...\n",
|
|
"Processing file 1587/78071...\n",
|
|
"Processing file 1588/78071...\n",
|
|
"Processing file 1589/78071...\n",
|
|
"Processing file 1590/78071...\n",
|
|
"Processing file 1591/78071...\n",
|
|
"Processing file 1592/78071...\n",
|
|
"Processing file 1593/78071...\n",
|
|
"Processing file 1594/78071...\n",
|
|
"Processing file 1595/78071...\n",
|
|
"Processing file 1596/78071...\n",
|
|
"Processing file 1597/78071...\n",
|
|
"Processing file 1598/78071...\n",
|
|
"Processing file 1599/78071...\n",
|
|
"Processing file 1600/78071...\n",
|
|
"Processing file 1601/78071...\n",
|
|
"Processing file 1602/78071...\n",
|
|
"Processing file 1603/78071...\n",
|
|
"Processing file 1604/78071...\n",
|
|
"Processing file 1605/78071...\n",
|
|
"Processing file 1606/78071...\n",
|
|
"Processing file 1607/78071...\n",
|
|
"Processing file 1608/78071...\n",
|
|
"Processing file 1609/78071...\n",
|
|
"Processing file 1610/78071...\n",
|
|
"Processing file 1611/78071...\n",
|
|
"Processing file 1612/78071...\n",
|
|
"Processing file 1613/78071...\n",
|
|
"Processing file 1614/78071...\n",
|
|
"Processing file 1615/78071...\n",
|
|
"Processing file 1616/78071...\n",
|
|
"Processing file 1617/78071...\n",
|
|
"Processing file 1618/78071...\n",
|
|
"Processing file 1619/78071...\n",
|
|
"Processing file 1620/78071...\n",
|
|
"Processing file 1621/78071...\n",
|
|
"Processing file 1622/78071...\n",
|
|
"Processing file 1623/78071...\n",
|
|
"Processing file 1624/78071...\n",
|
|
"Processing file 1625/78071...\n",
|
|
"Processing file 1626/78071...\n",
|
|
"Processing file 1627/78071...\n",
|
|
"Processing file 1628/78071...\n",
|
|
"Processing file 1629/78071...\n",
|
|
"Processing file 1630/78071...\n",
|
|
"Processing file 1631/78071...\n",
|
|
"Processing file 1632/78071...\n",
|
|
"Processing file 1633/78071...\n",
|
|
"Processing file 1634/78071...\n",
|
|
"Processing file 1635/78071...\n",
|
|
"Processing file 1636/78071...\n",
|
|
"Processing file 1637/78071...\n",
|
|
"Processing file 1638/78071...\n",
|
|
"Processing file 1639/78071...\n",
|
|
"Processing file 1640/78071...\n",
|
|
"Processing file 1641/78071...\n",
|
|
"Processing file 1642/78071...\n",
|
|
"Processing file 1643/78071...\n",
|
|
"Processing file 1644/78071...\n",
|
|
"Processing file 1645/78071...\n",
|
|
"Processing file 1646/78071...\n",
|
|
"Processing file 1647/78071...\n",
|
|
"Processing file 1648/78071...\n",
|
|
"Processing file 1649/78071...\n",
|
|
"Processing file 1650/78071...\n",
|
|
"Processing file 1651/78071...\n",
|
|
"Processing file 1652/78071...\n",
|
|
"Processing file 1653/78071...\n",
|
|
"Processing file 1654/78071...\n",
|
|
"Processing file 1655/78071...\n",
|
|
"Processing file 1656/78071...\n",
|
|
"Processing file 1657/78071...\n",
|
|
"Processing file 1658/78071...\n",
|
|
"Processing file 1659/78071...\n",
|
|
"Processing file 1660/78071...\n",
|
|
"Processing file 1661/78071...\n",
|
|
"Processing file 1662/78071...\n",
|
|
"Processing file 1663/78071...\n",
|
|
"Processing file 1664/78071...\n",
|
|
"Processing file 1665/78071...\n",
|
|
"Processing file 1666/78071...\n",
|
|
"Processing file 1667/78071...\n",
|
|
"Processing file 1668/78071...\n",
|
|
"Processing file 1669/78071...\n",
|
|
"Processing file 1670/78071...\n",
|
|
"Processing file 1671/78071...\n",
|
|
"Processing file 1672/78071...\n",
|
|
"Processing file 1673/78071...\n",
|
|
"Processing file 1674/78071...\n",
|
|
"Processing file 1675/78071...\n",
|
|
"Processing file 1676/78071...\n",
|
|
"Processing file 1677/78071...\n",
|
|
"Processing file 1678/78071...\n",
|
|
"Processing file 1679/78071...\n",
|
|
"Processing file 1680/78071...\n",
|
|
"Processing file 1681/78071...\n",
|
|
"Processing file 1682/78071...\n",
|
|
"Processing file 1683/78071...\n",
|
|
"Processing file 1684/78071...\n",
|
|
"Processing file 1685/78071...\n",
|
|
"Processing file 1686/78071...\n",
|
|
"Processing file 1687/78071...\n",
|
|
"Processing file 1688/78071...\n",
|
|
"Processing file 1689/78071...\n",
|
|
"Processing file 1690/78071...\n",
|
|
"Processing file 1691/78071...\n",
|
|
"Processing file 1692/78071...\n",
|
|
"Processing file 1693/78071...\n",
|
|
"Processing file 1694/78071...\n",
|
|
"Processing file 1695/78071...\n",
|
|
"Processing file 1696/78071...\n",
|
|
"Processing file 1697/78071...\n",
|
|
"Processing file 1698/78071...\n",
|
|
"Processing file 1699/78071...\n",
|
|
"Processing file 1700/78071...\n",
|
|
"Processing file 1701/78071...\n",
|
|
"Processing file 1702/78071...\n",
|
|
"Processing file 1703/78071...\n",
|
|
"Processing file 1704/78071...\n",
|
|
"Processing file 1705/78071...\n",
|
|
"Processing file 1706/78071...\n",
|
|
"Processing file 1707/78071...\n",
|
|
"Processing file 1708/78071...\n",
|
|
"Processing file 1709/78071...\n",
|
|
"Processing file 1710/78071...\n",
|
|
"Processing file 1711/78071...\n",
|
|
"Processing file 1712/78071...\n",
|
|
"Processing file 1713/78071...\n",
|
|
"Processing file 1714/78071...\n",
|
|
"Processing file 1715/78071...\n",
|
|
"Processing file 1716/78071...\n",
|
|
"Processing file 1717/78071...\n",
|
|
"Processing file 1718/78071...\n",
|
|
"Processing file 1719/78071...\n",
|
|
"Processing file 1720/78071...\n",
|
|
"Processing file 1721/78071...\n",
|
|
"Processing file 1722/78071...\n",
|
|
"Processing file 1723/78071...\n",
|
|
"Processing file 1724/78071...\n",
|
|
"Processing file 1725/78071...\n",
|
|
"Processing file 1726/78071...\n",
|
|
"Processing file 1727/78071...\n",
|
|
"Processing file 1728/78071...\n",
|
|
"Processing file 1729/78071...\n",
|
|
"Processing file 1730/78071...\n",
|
|
"Processing file 1731/78071...\n",
|
|
"Processing file 1732/78071...\n",
|
|
"Processing file 1733/78071...\n",
|
|
"Processing file 1734/78071...\n",
|
|
"Processing file 1735/78071...\n",
|
|
"Processing file 1736/78071...\n",
|
|
"Processing file 1737/78071...\n",
|
|
"Processing file 1738/78071...\n",
|
|
"Processing file 1739/78071...\n",
|
|
"Processing file 1740/78071...\n",
|
|
"Processing file 1741/78071...\n",
|
|
"Processing file 1742/78071...\n",
|
|
"Processing file 1743/78071...\n",
|
|
"Processing file 1744/78071...\n",
|
|
"Processing file 1745/78071...\n",
|
|
"Processing file 1746/78071...\n",
|
|
"Processing file 1747/78071...\n",
|
|
"Processing file 1748/78071...\n",
|
|
"Processing file 1749/78071...\n",
|
|
"Processing file 1750/78071...\n",
|
|
"Processing file 1751/78071...\n",
|
|
"Processing file 1752/78071...\n",
|
|
"Processing file 1753/78071...\n",
|
|
"Processing file 1754/78071...\n",
|
|
"Processing file 1755/78071...\n",
|
|
"Processing file 1756/78071...\n",
|
|
"Processing file 1757/78071...\n",
|
|
"Processing file 1758/78071...\n",
|
|
"Processing file 1759/78071...\n",
|
|
"Processing file 1760/78071...\n",
|
|
"Processing file 1761/78071...\n",
|
|
"Processing file 1762/78071...\n",
|
|
"Processing file 1763/78071...\n",
|
|
"Processing file 1764/78071...\n",
|
|
"Processing file 1765/78071...\n",
|
|
"Processing file 1766/78071...\n",
|
|
"Processing file 1767/78071...\n",
|
|
"Processing file 1768/78071...\n",
|
|
"Processing file 1769/78071...\n",
|
|
"Processing file 1770/78071...\n",
|
|
"Processing file 1771/78071...\n",
|
|
"Processing file 1772/78071...\n",
|
|
"Processing file 1773/78071...\n",
|
|
"Processing file 1774/78071...\n",
|
|
"Processing file 1775/78071...\n",
|
|
"Processing file 1776/78071...\n",
|
|
"Processing file 1777/78071...\n",
|
|
"Processing file 1778/78071...\n",
|
|
"Processing file 1779/78071...\n",
|
|
"Processing file 1780/78071...\n",
|
|
"Processing file 1781/78071...\n",
|
|
"Processing file 1782/78071...\n",
|
|
"Processing file 1783/78071...\n",
|
|
"Processing file 1784/78071...\n",
|
|
"Processing file 1785/78071...\n",
|
|
"Processing file 1786/78071...\n",
|
|
"Processing file 1787/78071...\n",
|
|
"Processing file 1788/78071...\n",
|
|
"Processing file 1789/78071...\n",
|
|
"Processing file 1790/78071...\n",
|
|
"Processing file 1791/78071...\n",
|
|
"Processing file 1792/78071...\n",
|
|
"Processing file 1793/78071...\n",
|
|
"Processing file 1794/78071...\n",
|
|
"Processing file 1795/78071...\n",
|
|
"Processing file 1796/78071...\n",
|
|
"Processing file 1797/78071...\n",
|
|
"Processing file 1798/78071...\n",
|
|
"Processing file 1799/78071...\n",
|
|
"Processing file 1800/78071...\n",
|
|
"Processing file 1801/78071...\n",
|
|
"Processing file 1802/78071...\n",
|
|
"Processing file 1803/78071...\n",
|
|
"Processing file 1804/78071...\n",
|
|
"Processing file 1805/78071...\n",
|
|
"Processing file 1806/78071...\n",
|
|
"Processing file 1807/78071...\n",
|
|
"Processing file 1808/78071...\n",
|
|
"Processing file 1809/78071...\n",
|
|
"Processing file 1810/78071...\n",
|
|
"Processing file 1811/78071...\n",
|
|
"Processing file 1812/78071...\n",
|
|
"Processing file 1813/78071...\n",
|
|
"Processing file 1814/78071...\n",
|
|
"Processing file 1815/78071...\n",
|
|
"Processing file 1816/78071...\n",
|
|
"Processing file 1817/78071...\n",
|
|
"Processing file 1818/78071...\n",
|
|
"Processing file 1819/78071...\n",
|
|
"Processing file 1820/78071...\n",
|
|
"Processing file 1821/78071...\n",
|
|
"Processing file 1822/78071...\n",
|
|
"Processing file 1823/78071...\n",
|
|
"Processing file 1824/78071...\n",
|
|
"Processing file 1825/78071...\n",
|
|
"Processing file 1826/78071...\n",
|
|
"Processing file 1827/78071...\n",
|
|
"Processing file 1828/78071...\n",
|
|
"Processing file 1829/78071...\n",
|
|
"Processing file 1830/78071...\n",
|
|
"Processing file 1831/78071...\n",
|
|
"Processing file 1832/78071...\n",
|
|
"Processing file 1833/78071...\n",
|
|
"Processing file 1834/78071...\n",
|
|
"Processing file 1835/78071...\n",
|
|
"Processing file 1836/78071...\n",
|
|
"Processing file 1837/78071...\n",
|
|
"Processing file 1838/78071...\n",
|
|
"Processing file 1839/78071...\n",
|
|
"Processing file 1840/78071...\n",
|
|
"Processing file 1841/78071...\n",
|
|
"Processing file 1842/78071...\n",
|
|
"Processing file 1843/78071...\n",
|
|
"Processing file 1844/78071...\n",
|
|
"Processing file 1845/78071...\n",
|
|
"Processing file 1846/78071...\n",
|
|
"Processing file 1847/78071...\n",
|
|
"Processing file 1848/78071...\n",
|
|
"Processing file 1849/78071...\n",
|
|
"Processing file 1850/78071...\n",
|
|
"Processing file 1851/78071...\n",
|
|
"Processing file 1852/78071...\n",
|
|
"Processing file 1853/78071...\n",
|
|
"Processing file 1854/78071...\n",
|
|
"Processing file 1855/78071...\n",
|
|
"Processing file 1856/78071...\n",
|
|
"Processing file 1857/78071...\n",
|
|
"Processing file 1858/78071...\n",
|
|
"Processing file 1859/78071...\n",
|
|
"Processing file 1860/78071...\n",
|
|
"Processing file 1861/78071...\n",
|
|
"Processing file 1862/78071...\n",
|
|
"Processing file 1863/78071...\n",
|
|
"Processing file 1864/78071...\n",
|
|
"Processing file 1865/78071...\n",
|
|
"Processing file 1866/78071...\n",
|
|
"Processing file 1867/78071...\n",
|
|
"Processing file 1868/78071...\n",
|
|
"Processing file 1869/78071...\n",
|
|
"Processing file 1870/78071...\n",
|
|
"Processing file 1871/78071...\n",
|
|
"Processing file 1872/78071...\n",
|
|
"Processing file 1873/78071...\n",
|
|
"Processing file 1874/78071...\n",
|
|
"Processing file 1875/78071...\n",
|
|
"Processing file 1876/78071...\n",
|
|
"Processing file 1877/78071...\n",
|
|
"Processing file 1878/78071...\n",
|
|
"Processing file 1879/78071...\n",
|
|
"Processing file 1880/78071...\n",
|
|
"Processing file 1881/78071...\n",
|
|
"Processing file 1882/78071...\n",
|
|
"Processing file 1883/78071...\n",
|
|
"Processing file 1884/78071...\n",
|
|
"Processing file 1885/78071...\n",
|
|
"Processing file 1886/78071...\n",
|
|
"Processing file 1887/78071...\n",
|
|
"Processing file 1888/78071...\n",
|
|
"Processing file 1889/78071...\n",
|
|
"Processing file 1890/78071...\n",
|
|
"Processing file 1891/78071...\n",
|
|
"Processing file 1892/78071...\n",
|
|
"Processing file 1893/78071...\n",
|
|
"Processing file 1894/78071...\n",
|
|
"Processing file 1895/78071...\n",
|
|
"Processing file 1896/78071...\n",
|
|
"Processing file 1897/78071...\n",
|
|
"Processing file 1898/78071...\n",
|
|
"Processing file 1899/78071...\n",
|
|
"Processing file 1900/78071...\n",
|
|
"Processing file 1901/78071...\n",
|
|
"Processing file 1902/78071...\n",
|
|
"Processing file 1903/78071...\n",
|
|
"Processing file 1904/78071...\n",
|
|
"Processing file 1905/78071...\n",
|
|
"Processing file 1906/78071...\n",
|
|
"Processing file 1907/78071...\n",
|
|
"Processing file 1908/78071...\n",
|
|
"Processing file 1909/78071...\n",
|
|
"Processing file 1910/78071...\n",
|
|
"Processing file 1911/78071...\n",
|
|
"Processing file 1912/78071...\n",
|
|
"Processing file 1913/78071...\n",
|
|
"Processing file 1914/78071...\n",
|
|
"Processing file 1915/78071...\n",
|
|
"Processing file 1916/78071...\n",
|
|
"Processing file 1917/78071...\n",
|
|
"Processing file 1918/78071...\n",
|
|
"Processing file 1919/78071...\n",
|
|
"Processing file 1920/78071...\n",
|
|
"Processing file 1921/78071...\n",
|
|
"Processing file 1922/78071...\n",
|
|
"Processing file 1923/78071...\n",
|
|
"Processing file 1924/78071...\n",
|
|
"Processing file 1925/78071...\n",
|
|
"Processing file 1926/78071...\n",
|
|
"Processing file 1927/78071...\n",
|
|
"Processing file 1928/78071...\n",
|
|
"Processing file 1929/78071...\n",
|
|
"Processing file 1930/78071...\n",
|
|
"Processing file 1931/78071...\n",
|
|
"Processing file 1932/78071...\n",
|
|
"Processing file 1933/78071...\n",
|
|
"Processing file 1934/78071...\n",
|
|
"Processing file 1935/78071...\n",
|
|
"Processing file 1936/78071...\n",
|
|
"Processing file 1937/78071...\n",
|
|
"Processing file 1938/78071...\n",
|
|
"Processing file 1939/78071...\n",
|
|
"Processing file 1940/78071...\n",
|
|
"Processing file 1941/78071...\n",
|
|
"Processing file 1942/78071...\n",
|
|
"Processing file 1943/78071...\n",
|
|
"Processing file 1944/78071...\n",
|
|
"Processing file 1945/78071...\n",
|
|
"Processing file 1946/78071...\n",
|
|
"Processing file 1947/78071...\n",
|
|
"Processing file 1948/78071...\n",
|
|
"Processing file 1949/78071...\n",
|
|
"Processing file 1950/78071...\n",
|
|
"Processing file 1951/78071...\n",
|
|
"Processing file 1952/78071...\n",
|
|
"Processing file 1953/78071...\n",
|
|
"Processing file 1954/78071...\n",
|
|
"Processing file 1955/78071...\n",
|
|
"Processing file 1956/78071...\n",
|
|
"Processing file 1957/78071...\n",
|
|
"Processing file 1958/78071...\n",
|
|
"Processing file 1959/78071...\n",
|
|
"Processing file 1960/78071...\n",
|
|
"Processing file 1961/78071...\n",
|
|
"Processing file 1962/78071...\n",
|
|
"Processing file 1963/78071...\n",
|
|
"Processing file 1964/78071...\n",
|
|
"Processing file 1965/78071...\n",
|
|
"Processing file 1966/78071...\n",
|
|
"Processing file 1967/78071...\n",
|
|
"Processing file 1968/78071...\n",
|
|
"Processing file 1969/78071...\n",
|
|
"Processing file 1970/78071...\n",
|
|
"Processing file 1971/78071...\n",
|
|
"Processing file 1972/78071...\n",
|
|
"Processing file 1973/78071...\n",
|
|
"Processing file 1974/78071...\n",
|
|
"Processing file 1975/78071...\n",
|
|
"Processing file 1976/78071...\n",
|
|
"Processing file 1977/78071...\n",
|
|
"Processing file 1978/78071...\n",
|
|
"Processing file 1979/78071...\n",
|
|
"Processing file 1980/78071...\n",
|
|
"Processing file 1981/78071...\n",
|
|
"Processing file 1982/78071...\n",
|
|
"Processing file 1983/78071...\n",
|
|
"Processing file 1984/78071...\n",
|
|
"Processing file 1985/78071...\n",
|
|
"Processing file 1986/78071...\n",
|
|
"Processing file 1987/78071...\n",
|
|
"Processing file 1988/78071...\n",
|
|
"Processing file 1989/78071...\n",
|
|
"Processing file 1990/78071...\n",
|
|
"Processing file 1991/78071...\n",
|
|
"Processing file 1992/78071...\n",
|
|
"Processing file 1993/78071...\n",
|
|
"Processing file 1994/78071...\n",
|
|
"Processing file 1995/78071...\n",
|
|
"Processing file 1996/78071...\n",
|
|
"Processing file 1997/78071...\n",
|
|
"Processing file 1998/78071...\n",
|
|
"Processing file 1999/78071...\n",
|
|
"Processing file 2000/78071...\n",
|
|
"Processing file 2001/78071...\n",
|
|
"Processing file 2002/78071...\n",
|
|
"Processing file 2003/78071...\n",
|
|
"Processing file 2004/78071...\n",
|
|
"Processing file 2005/78071...\n",
|
|
"Processing file 2006/78071...\n",
|
|
"Processing file 2007/78071...\n",
|
|
"Processing file 2008/78071...\n",
|
|
"Processing file 2009/78071...\n",
|
|
"Processing file 2010/78071...\n",
|
|
"Processing file 2011/78071...\n",
|
|
"Processing file 2012/78071...\n",
|
|
"Processing file 2013/78071...\n",
|
|
"Processing file 2014/78071...\n",
|
|
"Processing file 2015/78071...\n",
|
|
"Processing file 2016/78071...\n",
|
|
"Processing file 2017/78071...\n",
|
|
"Processing file 2018/78071...\n",
|
|
"Processing file 2019/78071...\n",
|
|
"Processing file 2020/78071...\n",
|
|
"Processing file 2021/78071...\n",
|
|
"Processing file 2022/78071...\n",
|
|
"Processing file 2023/78071...\n",
|
|
"Processing file 2024/78071...\n",
|
|
"Processing file 2025/78071...\n",
|
|
"Processing file 2026/78071...\n",
|
|
"Processing file 2027/78071...\n",
|
|
"Processing file 2028/78071...\n",
|
|
"Processing file 2029/78071...\n",
|
|
"Processing file 2030/78071...\n",
|
|
"Processing file 2031/78071...\n",
|
|
"Processing file 2032/78071...\n",
|
|
"Processing file 2033/78071...\n",
|
|
"Processing file 2034/78071...\n",
|
|
"Processing file 2035/78071...\n",
|
|
"Processing file 2036/78071...\n",
|
|
"Processing file 2037/78071...\n",
|
|
"Processing file 2038/78071...\n",
|
|
"Processing file 2039/78071...\n",
|
|
"Processing file 2040/78071...\n",
|
|
"Processing file 2041/78071...\n",
|
|
"Processing file 2042/78071...\n",
|
|
"Processing file 2043/78071...\n",
|
|
"Processing file 2044/78071...\n",
|
|
"Processing file 2045/78071...\n",
|
|
"Processing file 2046/78071...\n",
|
|
"Processing file 2047/78071...\n",
|
|
"Processing file 2048/78071...\n",
|
|
"Processing file 2049/78071...\n",
|
|
"Processing file 2050/78071...\n",
|
|
"Processing file 2051/78071...\n",
|
|
"Processing file 2052/78071...\n",
|
|
"Processing file 2053/78071...\n",
|
|
"Processing file 2054/78071...\n",
|
|
"Processing file 2055/78071...\n",
|
|
"Processing file 2056/78071...\n",
|
|
"Processing file 2057/78071...\n",
|
|
"Processing file 2058/78071...\n",
|
|
"Processing file 2059/78071...\n",
|
|
"Processing file 2060/78071...\n",
|
|
"Processing file 2061/78071...\n",
|
|
"Processing file 2062/78071...\n",
|
|
"Processing file 2063/78071...\n",
|
|
"Processing file 2064/78071...\n",
|
|
"Processing file 2065/78071...\n",
|
|
"Processing file 2066/78071...\n",
|
|
"Processing file 2067/78071...\n",
|
|
"Processing file 2068/78071...\n",
|
|
"Processing file 2069/78071...\n",
|
|
"Processing file 2070/78071...\n",
|
|
"Processing file 2071/78071...\n",
|
|
"Processing file 2072/78071...\n",
|
|
"Processing file 2073/78071...\n",
|
|
"Processing file 2074/78071...\n",
|
|
"Processing file 2075/78071...\n",
|
|
"Processing file 2076/78071...\n",
|
|
"Processing file 2077/78071...\n",
|
|
"Processing file 2078/78071...\n",
|
|
"Processing file 2079/78071...\n",
|
|
"Processing file 2080/78071...\n",
|
|
"Processing file 2081/78071...\n",
|
|
"Processing file 2082/78071...\n",
|
|
"Processing file 2083/78071...\n",
|
|
"Processing file 2084/78071...\n",
|
|
"Processing file 2085/78071...\n",
|
|
"Processing file 2086/78071...\n",
|
|
"Processing file 2087/78071...\n",
|
|
"Processing file 2088/78071...\n",
|
|
"Processing file 2089/78071...\n",
|
|
"Processing file 2090/78071...\n",
|
|
"Processing file 2091/78071...\n",
|
|
"Processing file 2092/78071...\n",
|
|
"Processing file 2093/78071...\n",
|
|
"Processing file 2094/78071...\n",
|
|
"Processing file 2095/78071...\n",
|
|
"Processing file 2096/78071...\n",
|
|
"Processing file 2097/78071...\n",
|
|
"Processing file 2098/78071...\n",
|
|
"Processing file 2099/78071...\n",
|
|
"Processing file 2100/78071...\n",
|
|
"Processing file 2101/78071...\n",
|
|
"Processing file 2102/78071...\n",
|
|
"Processing file 2103/78071...\n",
|
|
"Processing file 2104/78071...\n",
|
|
"Processing file 2105/78071...\n",
|
|
"Processing file 2106/78071...\n",
|
|
"Processing file 2107/78071...\n",
|
|
"Processing file 2108/78071...\n",
|
|
"Processing file 2109/78071...\n",
|
|
"Processing file 2110/78071...\n",
|
|
"Processing file 2111/78071...\n",
|
|
"Processing file 2112/78071...\n",
|
|
"Processing file 2113/78071...\n",
|
|
"Processing file 2114/78071...\n",
|
|
"Processing file 2115/78071...\n",
|
|
"Processing file 2116/78071...\n",
|
|
"Processing file 2117/78071...\n",
|
|
"Processing file 2118/78071...\n",
|
|
"Processing file 2119/78071...\n",
|
|
"Processing file 2120/78071...\n",
|
|
"Processing file 2121/78071...\n",
|
|
"Processing file 2122/78071...\n",
|
|
"Processing file 2123/78071...\n",
|
|
"Processing file 2124/78071...\n",
|
|
"Processing file 2125/78071...\n",
|
|
"Processing file 2126/78071...\n",
|
|
"Processing file 2127/78071...\n",
|
|
"Processing file 2128/78071...\n",
|
|
"Processing file 2129/78071...\n",
|
|
"Processing file 2130/78071...\n",
|
|
"Processing file 2131/78071...\n",
|
|
"Processing file 2132/78071...\n",
|
|
"Processing file 2133/78071...\n",
|
|
"Processing file 2134/78071...\n",
|
|
"Processing file 2135/78071...\n",
|
|
"Processing file 2136/78071...\n",
|
|
"Processing file 2137/78071...\n",
|
|
"Processing file 2138/78071...\n",
|
|
"Processing file 2139/78071...\n",
|
|
"Processing file 2140/78071...\n",
|
|
"Processing file 2141/78071...\n",
|
|
"Processing file 2142/78071...\n",
|
|
"Processing file 2143/78071...\n",
|
|
"Processing file 2144/78071...\n",
|
|
"Processing file 2145/78071...\n",
|
|
"Processing file 2146/78071...\n",
|
|
"Processing file 2147/78071...\n",
|
|
"Processing file 2148/78071...\n",
|
|
"Processing file 2149/78071...\n",
|
|
"Processing file 2150/78071...\n",
|
|
"Processing file 2151/78071...\n",
|
|
"Processing file 2152/78071...\n",
|
|
"Processing file 2153/78071...\n",
|
|
"Processing file 2154/78071...\n",
|
|
"Processing file 2155/78071...\n",
|
|
"Processing file 2156/78071...\n",
|
|
"Processing file 2157/78071...\n",
|
|
"Processing file 2158/78071...\n",
|
|
"Processing file 2159/78071...\n",
|
|
"Processing file 2160/78071...\n",
|
|
"Processing file 2161/78071...\n",
|
|
"Processing file 2162/78071...\n",
|
|
"Processing file 2163/78071...\n",
|
|
"Processing file 2164/78071...\n",
|
|
"Processing file 2165/78071...\n",
|
|
"Processing file 2166/78071...\n",
|
|
"Processing file 2167/78071...\n",
|
|
"Processing file 2168/78071...\n",
|
|
"Processing file 2169/78071...\n",
|
|
"Processing file 2170/78071...\n",
|
|
"Processing file 2171/78071...\n",
|
|
"Processing file 2172/78071...\n",
|
|
"Processing file 2173/78071...\n",
|
|
"Processing file 2174/78071...\n",
|
|
"Processing file 2175/78071...\n",
|
|
"Processing file 2176/78071...\n",
|
|
"Processing file 2177/78071...\n",
|
|
"Processing file 2178/78071...\n",
|
|
"Processing file 2179/78071...\n",
|
|
"Processing file 2180/78071...\n",
|
|
"Processing file 2181/78071...\n",
|
|
"Processing file 2182/78071...\n",
|
|
"Processing file 2183/78071...\n",
|
|
"Processing file 2184/78071...\n",
|
|
"Processing file 2185/78071...\n",
|
|
"Processing file 2186/78071...\n",
|
|
"Processing file 2187/78071...\n",
|
|
"Processing file 2188/78071...\n",
|
|
"Processing file 2189/78071...\n",
|
|
"Processing file 2190/78071...\n",
|
|
"Processing file 2191/78071...\n",
|
|
"Processing file 2192/78071...\n",
|
|
"Processing file 2193/78071...\n",
|
|
"Processing file 2194/78071...\n",
|
|
"Processing file 2195/78071...\n",
|
|
"Processing file 2196/78071...\n",
|
|
"Processing file 2197/78071...\n",
|
|
"Processing file 2198/78071...\n",
|
|
"Processing file 2199/78071...\n",
|
|
"Processing file 2200/78071...\n",
|
|
"Processing file 2201/78071...\n",
|
|
"Processing file 2202/78071...\n",
|
|
"Processing file 2203/78071...\n",
|
|
"Processing file 2204/78071...\n",
|
|
"Processing file 2205/78071...\n",
|
|
"Processing file 2206/78071...\n",
|
|
"Processing file 2207/78071...\n",
|
|
"Processing file 2208/78071...\n",
|
|
"Processing file 2209/78071...\n",
|
|
"Processing file 2210/78071...\n",
|
|
"Processing file 2211/78071...\n",
|
|
"Processing file 2212/78071...\n",
|
|
"Processing file 2213/78071...\n",
|
|
"Processing file 2214/78071...\n",
|
|
"Processing file 2215/78071...\n",
|
|
"Processing file 2216/78071...\n",
|
|
"Processing file 2217/78071...\n",
|
|
"Processing file 2218/78071...\n",
|
|
"Processing file 2219/78071...\n",
|
|
"Processing file 2220/78071...\n",
|
|
"Processing file 2221/78071...\n",
|
|
"Processing file 2222/78071...\n",
|
|
"Processing file 2223/78071...\n",
|
|
"Processing file 2224/78071...\n",
|
|
"Processing file 2225/78071...\n",
|
|
"Processing file 2226/78071...\n",
|
|
"Processing file 2227/78071...\n",
|
|
"Processing file 2228/78071...\n",
|
|
"Processing file 2229/78071...\n",
|
|
"Processing file 2230/78071...\n",
|
|
"Processing file 2231/78071...\n",
|
|
"Processing file 2232/78071...\n",
|
|
"Processing file 2233/78071...\n",
|
|
"Processing file 2234/78071...\n",
|
|
"Processing file 2235/78071...\n",
|
|
"Processing file 2236/78071...\n",
|
|
"Processing file 2237/78071...\n",
|
|
"Processing file 2238/78071...\n",
|
|
"Processing file 2239/78071...\n",
|
|
"Processing file 2240/78071...\n",
|
|
"Processing file 2241/78071...\n",
|
|
"Processing file 2242/78071...\n",
|
|
"Processing file 2243/78071...\n",
|
|
"Processing file 2244/78071...\n",
|
|
"Processing file 2245/78071...\n",
|
|
"Processing file 2246/78071...\n",
|
|
"Processing file 2247/78071...\n",
|
|
"Processing file 2248/78071...\n",
|
|
"Processing file 2249/78071...\n",
|
|
"Processing file 2250/78071...\n",
|
|
"Processing file 2251/78071...\n",
|
|
"Processing file 2252/78071...\n",
|
|
"Processing file 2253/78071...\n",
|
|
"Processing file 2254/78071...\n",
|
|
"Processing file 2255/78071...\n",
|
|
"Processing file 2256/78071...\n",
|
|
"Processing file 2257/78071...\n",
|
|
"Processing file 2258/78071...\n",
|
|
"Processing file 2259/78071...\n",
|
|
"Processing file 2260/78071...\n",
|
|
"Processing file 2261/78071...\n",
|
|
"Processing file 2262/78071...\n",
|
|
"Processing file 2263/78071...\n",
|
|
"Processing file 2264/78071...\n",
|
|
"Processing file 2265/78071...\n",
|
|
"Processing file 2266/78071...\n",
|
|
"Processing file 2267/78071...\n",
|
|
"Processing file 2268/78071...\n",
|
|
"Processing file 2269/78071...\n",
|
|
"Processing file 2270/78071...\n",
|
|
"Processing file 2271/78071...\n",
|
|
"Processing file 2272/78071...\n",
|
|
"Processing file 2273/78071...\n",
|
|
"Processing file 2274/78071...\n",
|
|
"Processing file 2275/78071...\n",
|
|
"Processing file 2276/78071...\n",
|
|
"Processing file 2277/78071...\n",
|
|
"Processing file 2278/78071...\n",
|
|
"Processing file 2279/78071...\n",
|
|
"Processing file 2280/78071...\n",
|
|
"Processing file 2281/78071...\n",
|
|
"Processing file 2282/78071...\n",
|
|
"Processing file 2283/78071...\n",
|
|
"Processing file 2284/78071...\n",
|
|
"Processing file 2285/78071...\n",
|
|
"Processing file 2286/78071...\n",
|
|
"Processing file 2287/78071...\n",
|
|
"Processing file 2288/78071...\n",
|
|
"Processing file 2289/78071...\n",
|
|
"Processing file 2290/78071...\n",
|
|
"Processing file 2291/78071...\n",
|
|
"Processing file 2292/78071...\n",
|
|
"Processing file 2293/78071...\n",
|
|
"Processing file 2294/78071...\n",
|
|
"Processing file 2295/78071...\n",
|
|
"Processing file 2296/78071...\n",
|
|
"Processing file 2297/78071...\n",
|
|
"Processing file 2298/78071...\n",
|
|
"Processing file 2299/78071...\n",
|
|
"Processing file 2300/78071...\n",
|
|
"Processing file 2301/78071...\n",
|
|
"Processing file 2302/78071...\n",
|
|
"Processing file 2303/78071...\n",
|
|
"Processing file 2304/78071...\n",
|
|
"Processing file 2305/78071...\n",
|
|
"Processing file 2306/78071...\n",
|
|
"Processing file 2307/78071...\n",
|
|
"Processing file 2308/78071...\n",
|
|
"Processing file 2309/78071...\n",
|
|
"Processing file 2310/78071...\n",
|
|
"Processing file 2311/78071...\n",
|
|
"Processing file 2312/78071...\n",
|
|
"Processing file 2313/78071...\n",
|
|
"Processing file 2314/78071...\n",
|
|
"Processing file 2315/78071...\n",
|
|
"Processing file 2316/78071...\n",
|
|
"Processing file 2317/78071...\n",
|
|
"Processing file 2318/78071...\n",
|
|
"Processing file 2319/78071...\n",
|
|
"Processing file 2320/78071...\n",
|
|
"Processing file 2321/78071...\n",
|
|
"Processing file 2322/78071...\n",
|
|
"Processing file 2323/78071...\n",
|
|
"Processing file 2324/78071...\n",
|
|
"Processing file 2325/78071...\n",
|
|
"Processing file 2326/78071...\n",
|
|
"Processing file 2327/78071...\n",
|
|
"Processing file 2328/78071...\n",
|
|
"Processing file 2329/78071...\n",
|
|
"Processing file 2330/78071...\n",
|
|
"Processing file 2331/78071...\n",
|
|
"Processing file 2332/78071...\n",
|
|
"Processing file 2333/78071...\n",
|
|
"Processing file 2334/78071...\n",
|
|
"Processing file 2335/78071...\n",
|
|
"Processing file 2336/78071...\n",
|
|
"Processing file 2337/78071...\n",
|
|
"Processing file 2338/78071...\n",
|
|
"Processing file 2339/78071...\n",
|
|
"Processing file 2340/78071...\n",
|
|
"Processing file 2341/78071...\n",
|
|
"Processing file 2342/78071...\n",
|
|
"Processing file 2343/78071...\n",
|
|
"Processing file 2344/78071...\n",
|
|
"Processing file 2345/78071...\n",
|
|
"Processing file 2346/78071...\n",
|
|
"Processing file 2347/78071...\n",
|
|
"Processing file 2348/78071...\n",
|
|
"Processing file 2349/78071...\n",
|
|
"Processing file 2350/78071...\n",
|
|
"Processing file 2351/78071...\n",
|
|
"Processing file 2352/78071...\n",
|
|
"Processing file 2353/78071...\n",
|
|
"Processing file 2354/78071...\n",
|
|
"Processing file 2355/78071...\n",
|
|
"Processing file 2356/78071...\n",
|
|
"Processing file 2357/78071...\n",
|
|
"Processing file 2358/78071...\n",
|
|
"Processing file 2359/78071...\n",
|
|
"Processing file 2360/78071...\n",
|
|
"Processing file 2361/78071...\n",
|
|
"Processing file 2362/78071...\n",
|
|
"Processing file 2363/78071...\n",
|
|
"Processing file 2364/78071...\n",
|
|
"Processing file 2365/78071...\n",
|
|
"Processing file 2366/78071...\n",
|
|
"Processing file 2367/78071...\n",
|
|
"Processing file 2368/78071...\n",
|
|
"Processing file 2369/78071...\n",
|
|
"Processing file 2370/78071...\n",
|
|
"Processing file 2371/78071...\n",
|
|
"Processing file 2372/78071...\n",
|
|
"Processing file 2373/78071...\n",
|
|
"Processing file 2374/78071...\n",
|
|
"Processing file 2375/78071...\n",
|
|
"Processing file 2376/78071...\n",
|
|
"Processing file 2377/78071...\n",
|
|
"Processing file 2378/78071...\n",
|
|
"Processing file 2379/78071...\n",
|
|
"Processing file 2380/78071...\n",
|
|
"Processing file 2381/78071...\n",
|
|
"Processing file 2382/78071...\n",
|
|
"Processing file 2383/78071...\n",
|
|
"Processing file 2384/78071...\n",
|
|
"Processing file 2385/78071...\n",
|
|
"Processing file 2386/78071...\n",
|
|
"Processing file 2387/78071...\n",
|
|
"Processing file 2388/78071...\n",
|
|
"Processing file 2389/78071...\n",
|
|
"Processing file 2390/78071...\n",
|
|
"Processing file 2391/78071...\n",
|
|
"Processing file 2392/78071...\n",
|
|
"Processing file 2393/78071...\n",
|
|
"Processing file 2394/78071...\n",
|
|
"Processing file 2395/78071...\n",
|
|
"Processing file 2396/78071...\n",
|
|
"Processing file 2397/78071...\n",
|
|
"Processing file 2398/78071...\n",
|
|
"Processing file 2399/78071...\n",
|
|
"Processing file 2400/78071...\n",
|
|
"Processing file 2401/78071...\n",
|
|
"Processing file 2402/78071...\n",
|
|
"Processing file 2403/78071...\n",
|
|
"Processing file 2404/78071...\n",
|
|
"Processing file 2405/78071...\n",
|
|
"Processing file 2406/78071...\n",
|
|
"Processing file 2407/78071...\n",
|
|
"Processing file 2408/78071...\n",
|
|
"Processing file 2409/78071...\n",
|
|
"Processing file 2410/78071...\n",
|
|
"Processing file 2411/78071...\n",
|
|
"Processing file 2412/78071...\n",
|
|
"Processing file 2413/78071...\n",
|
|
"Processing file 2414/78071...\n",
|
|
"Processing file 2415/78071...\n",
|
|
"Processing file 2416/78071...\n",
|
|
"Processing file 2417/78071...\n",
|
|
"Processing file 2418/78071...\n",
|
|
"Processing file 2419/78071...\n",
|
|
"Processing file 2420/78071...\n",
|
|
"Processing file 2421/78071...\n",
|
|
"Processing file 2422/78071...\n",
|
|
"Processing file 2423/78071...\n",
|
|
"Processing file 2424/78071...\n",
|
|
"Processing file 2425/78071...\n",
|
|
"Processing file 2426/78071...\n",
|
|
"Processing file 2427/78071...\n",
|
|
"Processing file 2428/78071...\n",
|
|
"Processing file 2429/78071...\n",
|
|
"Processing file 2430/78071...\n",
|
|
"Processing file 2431/78071...\n",
|
|
"Processing file 2432/78071...\n",
|
|
"Processing file 2433/78071...\n",
|
|
"Processing file 2434/78071...\n",
|
|
"Processing file 2435/78071...\n",
|
|
"Processing file 2436/78071...\n",
|
|
"Processing file 2437/78071...\n",
|
|
"Processing file 2438/78071...\n",
|
|
"Processing file 2439/78071...\n",
|
|
"Processing file 2440/78071...\n",
|
|
"Processing file 2441/78071...\n",
|
|
"Processing file 2442/78071...\n",
|
|
"Processing file 2443/78071...\n",
|
|
"Processing file 2444/78071...\n",
|
|
"Processing file 2445/78071...\n",
|
|
"Processing file 2446/78071...\n",
|
|
"Processing file 2447/78071...\n",
|
|
"Processing file 2448/78071...\n",
|
|
"Processing file 2449/78071...\n",
|
|
"Processing file 2450/78071...\n",
|
|
"Processing file 2451/78071...\n",
|
|
"Processing file 2452/78071...\n",
|
|
"Processing file 2453/78071...\n",
|
|
"Processing file 2454/78071...\n",
|
|
"Processing file 2455/78071...\n",
|
|
"Processing file 2456/78071...\n",
|
|
"Processing file 2457/78071...\n",
|
|
"Processing file 2458/78071...\n",
|
|
"Processing file 2459/78071...\n",
|
|
"Processing file 2460/78071...\n",
|
|
"Processing file 2461/78071...\n",
|
|
"Processing file 2462/78071...\n",
|
|
"Processing file 2463/78071...\n",
|
|
"Processing file 2464/78071...\n",
|
|
"Processing file 2465/78071...\n",
|
|
"Processing file 2466/78071...\n",
|
|
"Processing file 2467/78071...\n",
|
|
"Processing file 2468/78071...\n",
|
|
"Processing file 2469/78071...\n",
|
|
"Processing file 2470/78071...\n",
|
|
"Processing file 2471/78071...\n",
|
|
"Processing file 2472/78071...\n",
|
|
"Processing file 2473/78071...\n",
|
|
"Processing file 2474/78071...\n",
|
|
"Processing file 2475/78071...\n",
|
|
"Processing file 2476/78071...\n",
|
|
"Processing file 2477/78071...\n",
|
|
"Processing file 2478/78071...\n",
|
|
"Processing file 2479/78071...\n",
|
|
"Processing file 2480/78071...\n",
|
|
"Processing file 2481/78071...\n",
|
|
"Processing file 2482/78071...\n",
|
|
"Processing file 2483/78071...\n",
|
|
"Processing file 2484/78071...\n",
|
|
"Processing file 2485/78071...\n",
|
|
"Processing file 2486/78071...\n",
|
|
"Processing file 2487/78071...\n",
|
|
"Processing file 2488/78071...\n",
|
|
"Processing file 2489/78071...\n",
|
|
"Processing file 2490/78071...\n",
|
|
"Processing file 2491/78071...\n",
|
|
"Processing file 2492/78071...\n",
|
|
"Processing file 2493/78071...\n",
|
|
"Processing file 2494/78071...\n",
|
|
"Processing file 2495/78071...\n",
|
|
"Processing file 2496/78071...\n",
|
|
"Processing file 2497/78071...\n",
|
|
"Processing file 2498/78071...\n",
|
|
"Processing file 2499/78071...\n",
|
|
"Processing file 2500/78071...\n",
|
|
"Processing file 2501/78071...\n",
|
|
"Processing file 2502/78071...\n",
|
|
"Processing file 2503/78071...\n",
|
|
"Processing file 2504/78071...\n",
|
|
"Processing file 2505/78071...\n",
|
|
"Processing file 2506/78071...\n",
|
|
"Processing file 2507/78071...\n",
|
|
"Processing file 2508/78071...\n",
|
|
"Processing file 2509/78071...\n",
|
|
"Processing file 2510/78071...\n",
|
|
"Processing file 2511/78071...\n",
|
|
"Processing file 2512/78071...\n",
|
|
"Processing file 2513/78071...\n",
|
|
"Processing file 2514/78071...\n",
|
|
"Processing file 2515/78071...\n",
|
|
"Processing file 2516/78071...\n",
|
|
"Processing file 2517/78071...\n",
|
|
"Processing file 2518/78071...\n",
|
|
"Processing file 2519/78071...\n",
|
|
"Processing file 2520/78071...\n",
|
|
"Processing file 2521/78071...\n",
|
|
"Processing file 2522/78071...\n",
|
|
"Processing file 2523/78071...\n",
|
|
"Processing file 2524/78071...\n",
|
|
"Processing file 2525/78071...\n",
|
|
"Processing file 2526/78071...\n",
|
|
"Processing file 2527/78071...\n",
|
|
"Processing file 2528/78071...\n",
|
|
"Processing file 2529/78071...\n",
|
|
"Processing file 2530/78071...\n",
|
|
"Processing file 2531/78071...\n",
|
|
"Processing file 2532/78071...\n",
|
|
"Processing file 2533/78071...\n",
|
|
"Processing file 2534/78071...\n",
|
|
"Processing file 2535/78071...\n",
|
|
"Processing file 2536/78071...\n",
|
|
"Processing file 2537/78071...\n",
|
|
"Processing file 2538/78071...\n",
|
|
"Processing file 2539/78071...\n",
|
|
"Processing file 2540/78071...\n",
|
|
"Processing file 2541/78071...\n",
|
|
"Processing file 2542/78071...\n",
|
|
"Processing file 2543/78071...\n",
|
|
"Processing file 2544/78071...\n",
|
|
"Processing file 2545/78071...\n",
|
|
"Processing file 2546/78071...\n",
|
|
"Processing file 2547/78071...\n",
|
|
"Processing file 2548/78071...\n",
|
|
"Processing file 2549/78071...\n",
|
|
"Processing file 2550/78071...\n",
|
|
"Processing file 2551/78071...\n",
|
|
"Processing file 2552/78071...\n",
|
|
"Processing file 2553/78071...\n",
|
|
"Processing file 2554/78071...\n",
|
|
"Processing file 2555/78071...\n",
|
|
"Processing file 2556/78071...\n",
|
|
"Processing file 2557/78071...\n",
|
|
"Processing file 2558/78071...\n",
|
|
"Processing file 2559/78071...\n",
|
|
"Processing file 2560/78071...\n",
|
|
"Processing file 2561/78071...\n",
|
|
"Processing file 2562/78071...\n",
|
|
"Processing file 2563/78071...\n",
|
|
"Processing file 2564/78071...\n",
|
|
"Processing file 2565/78071...\n",
|
|
"Processing file 2566/78071...\n",
|
|
"Processing file 2567/78071...\n",
|
|
"Processing file 2568/78071...\n",
|
|
"Processing file 2569/78071...\n",
|
|
"Processing file 2570/78071...\n",
|
|
"Processing file 2571/78071...\n",
|
|
"Processing file 2572/78071...\n",
|
|
"Processing file 2573/78071...\n",
|
|
"Processing file 2574/78071...\n",
|
|
"Processing file 2575/78071...\n",
|
|
"Processing file 2576/78071...\n",
|
|
"Processing file 2577/78071...\n",
|
|
"Processing file 2578/78071...\n",
|
|
"Processing file 2579/78071...\n",
|
|
"Processing file 2580/78071...\n",
|
|
"Processing file 2581/78071...\n",
|
|
"Processing file 2582/78071...\n",
|
|
"Processing file 2583/78071...\n",
|
|
"Processing file 2584/78071...\n",
|
|
"Processing file 2585/78071...\n",
|
|
"Processing file 2586/78071...\n",
|
|
"Processing file 2587/78071...\n",
|
|
"Processing file 2588/78071...\n",
|
|
"Processing file 2589/78071...\n",
|
|
"Processing file 2590/78071...\n",
|
|
"Processing file 2591/78071...\n",
|
|
"Processing file 2592/78071...\n",
|
|
"Processing file 2593/78071...\n",
|
|
"Processing file 2594/78071...\n",
|
|
"Processing file 2595/78071...\n",
|
|
"Processing file 2596/78071...\n",
|
|
"Processing file 2597/78071...\n",
|
|
"Processing file 2598/78071...\n",
|
|
"Processing file 2599/78071...\n",
|
|
"Processing file 2600/78071...\n",
|
|
"Processing file 2601/78071...\n",
|
|
"Processing file 2602/78071...\n",
|
|
"Processing file 2603/78071...\n",
|
|
"Processing file 2604/78071...\n",
|
|
"Processing file 2605/78071...\n",
|
|
"Processing file 2606/78071...\n",
|
|
"Processing file 2607/78071...\n",
|
|
"Processing file 2608/78071...\n",
|
|
"Processing file 2609/78071...\n",
|
|
"Processing file 2610/78071...\n",
|
|
"Processing file 2611/78071...\n",
|
|
"Processing file 2612/78071...\n",
|
|
"Processing file 2613/78071...\n",
|
|
"Processing file 2614/78071...\n",
|
|
"Processing file 2615/78071...\n",
|
|
"Processing file 2616/78071...\n",
|
|
"Processing file 2617/78071...\n",
|
|
"Processing file 2618/78071...\n",
|
|
"Processing file 2619/78071...\n",
|
|
"Processing file 2620/78071...\n",
|
|
"Processing file 2621/78071...\n",
|
|
"Processing file 2622/78071...\n",
|
|
"Processing file 2623/78071...\n",
|
|
"Processing file 2624/78071...\n",
|
|
"Processing file 2625/78071...\n",
|
|
"Processing file 2626/78071...\n",
|
|
"Processing file 2627/78071...\n",
|
|
"Processing file 2628/78071...\n",
|
|
"Processing file 2629/78071...\n",
|
|
"Processing file 2630/78071...\n",
|
|
"Processing file 2631/78071...\n",
|
|
"Processing file 2632/78071...\n",
|
|
"Processing file 2633/78071...\n",
|
|
"Processing file 2634/78071...\n",
|
|
"Processing file 2635/78071...\n",
|
|
"Processing file 2636/78071...\n",
|
|
"Processing file 2637/78071...\n",
|
|
"Processing file 2638/78071...\n",
|
|
"Processing file 2639/78071...\n",
|
|
"Processing file 2640/78071...\n",
|
|
"Processing file 2641/78071...\n",
|
|
"Processing file 2642/78071...\n",
|
|
"Processing file 2643/78071...\n",
|
|
"Processing file 2644/78071...\n",
|
|
"Processing file 2645/78071...\n",
|
|
"Processing file 2646/78071...\n",
|
|
"Processing file 2647/78071...\n",
|
|
"Processing file 2648/78071...\n",
|
|
"Processing file 2649/78071...\n",
|
|
"Processing file 2650/78071...\n",
|
|
"Processing file 2651/78071...\n",
|
|
"Processing file 2652/78071...\n",
|
|
"Processing file 2653/78071...\n",
|
|
"Processing file 2654/78071...\n",
|
|
"Processing file 2655/78071...\n",
|
|
"Processing file 2656/78071...\n",
|
|
"Processing file 2657/78071...\n",
|
|
"Processing file 2658/78071...\n",
|
|
"Processing file 2659/78071...\n",
|
|
"Processing file 2660/78071...\n",
|
|
"Processing file 2661/78071...\n",
|
|
"Processing file 2662/78071...\n",
|
|
"Processing file 2663/78071...\n",
|
|
"Processing file 2664/78071...\n",
|
|
"Processing file 2665/78071...\n",
|
|
"Processing file 2666/78071...\n",
|
|
"Processing file 2667/78071...\n",
|
|
"Processing file 2668/78071...\n",
|
|
"Processing file 2669/78071...\n",
|
|
"Processing file 2670/78071...\n",
|
|
"Processing file 2671/78071...\n",
|
|
"Processing file 2672/78071...\n",
|
|
"Processing file 2673/78071...\n",
|
|
"Processing file 2674/78071...\n",
|
|
"Processing file 2675/78071...\n",
|
|
"Processing file 2676/78071...\n",
|
|
"Processing file 2677/78071...\n",
|
|
"Processing file 2678/78071...\n",
|
|
"Processing file 2679/78071...\n",
|
|
"Processing file 2680/78071...\n",
|
|
"Processing file 2681/78071...\n",
|
|
"Processing file 2682/78071...\n",
|
|
"Processing file 2683/78071...\n",
|
|
"Processing file 2684/78071...\n",
|
|
"Processing file 2685/78071...\n",
|
|
"Processing file 2686/78071...\n",
|
|
"Processing file 2687/78071...\n",
|
|
"Processing file 2688/78071...\n",
|
|
"Processing file 2689/78071...\n",
|
|
"Processing file 2690/78071...\n",
|
|
"Processing file 2691/78071...\n",
|
|
"Processing file 2692/78071...\n",
|
|
"Processing file 2693/78071...\n",
|
|
"Processing file 2694/78071...\n",
|
|
"Processing file 2695/78071...\n",
|
|
"Processing file 2696/78071...\n",
|
|
"Processing file 2697/78071...\n",
|
|
"Processing file 2698/78071...\n",
|
|
"Processing file 2699/78071...\n",
|
|
"Processing file 2700/78071...\n",
|
|
"Processing file 2701/78071...\n",
|
|
"Processing file 2702/78071...\n",
|
|
"Processing file 2703/78071...\n",
|
|
"Processing file 2704/78071...\n",
|
|
"Processing file 2705/78071...\n",
|
|
"Processing file 2706/78071...\n",
|
|
"Processing file 2707/78071...\n",
|
|
"Processing file 2708/78071...\n",
|
|
"Processing file 2709/78071...\n",
|
|
"Processing file 2710/78071...\n",
|
|
"Processing file 2711/78071...\n",
|
|
"Processing file 2712/78071...\n",
|
|
"Processing file 2713/78071...\n",
|
|
"Processing file 2714/78071...\n",
|
|
"Processing file 2715/78071...\n",
|
|
"Processing file 2716/78071...\n",
|
|
"Processing file 2717/78071...\n",
|
|
"Processing file 2718/78071...\n",
|
|
"Processing file 2719/78071...\n",
|
|
"Processing file 2720/78071...\n",
|
|
"Processing file 2721/78071...\n",
|
|
"Processing file 2722/78071...\n",
|
|
"Processing file 2723/78071...\n",
|
|
"Processing file 2724/78071...\n",
|
|
"Processing file 2725/78071...\n",
|
|
"Processing file 2726/78071...\n",
|
|
"Processing file 2727/78071...\n",
|
|
"Processing file 2728/78071...\n",
|
|
"Processing file 2729/78071...\n",
|
|
"Processing file 2730/78071...\n",
|
|
"Processing file 2731/78071...\n",
|
|
"Processing file 2732/78071...\n",
|
|
"Processing file 2733/78071...\n",
|
|
"Processing file 2734/78071...\n",
|
|
"Processing file 2735/78071...\n",
|
|
"Processing file 2736/78071...\n",
|
|
"Processing file 2737/78071...\n",
|
|
"Processing file 2738/78071...\n",
|
|
"Processing file 2739/78071...\n",
|
|
"Processing file 2740/78071...\n",
|
|
"Processing file 2741/78071...\n",
|
|
"Processing file 2742/78071...\n",
|
|
"Processing file 2743/78071...\n",
|
|
"Processing file 2744/78071...\n",
|
|
"Processing file 2745/78071...\n",
|
|
"Processing file 2746/78071...\n",
|
|
"Processing file 2747/78071...\n",
|
|
"Processing file 2748/78071...\n",
|
|
"Processing file 2749/78071...\n",
|
|
"Processing file 2750/78071...\n",
|
|
"Processing file 2751/78071...\n",
|
|
"Processing file 2752/78071...\n",
|
|
"Processing file 2753/78071...\n",
|
|
"Processing file 2754/78071...\n",
|
|
"Processing file 2755/78071...\n",
|
|
"Processing file 2756/78071...\n",
|
|
"Processing file 2757/78071...\n",
|
|
"Processing file 2758/78071...\n",
|
|
"Processing file 2759/78071...\n",
|
|
"Processing file 2760/78071...\n",
|
|
"Processing file 2761/78071...\n",
|
|
"Processing file 2762/78071...\n",
|
|
"Processing file 2763/78071...\n",
|
|
"Processing file 2764/78071...\n",
|
|
"Processing file 2765/78071...\n",
|
|
"Processing file 2766/78071...\n",
|
|
"Processing file 2767/78071...\n",
|
|
"Processing file 2768/78071...\n",
|
|
"Processing file 2769/78071...\n",
|
|
"Processing file 2770/78071...\n",
|
|
"Processing file 2771/78071...\n",
|
|
"Processing file 2772/78071...\n",
|
|
"Processing file 2773/78071...\n",
|
|
"Processing file 2774/78071...\n",
|
|
"Processing file 2775/78071...\n",
|
|
"Processing file 2776/78071...\n",
|
|
"Processing file 2777/78071...\n",
|
|
"Processing file 2778/78071...\n",
|
|
"Processing file 2779/78071...\n",
|
|
"Processing file 2780/78071...\n",
|
|
"Processing file 2781/78071...\n",
|
|
"Processing file 2782/78071...\n",
|
|
"Processing file 2783/78071...\n",
|
|
"Processing file 2784/78071...\n",
|
|
"Processing file 2785/78071...\n",
|
|
"Processing file 2786/78071...\n",
|
|
"Processing file 2787/78071...\n",
|
|
"Processing file 2788/78071...\n",
|
|
"Processing file 2789/78071...\n",
|
|
"Processing file 2790/78071...\n",
|
|
"Processing file 2791/78071...\n",
|
|
"Processing file 2792/78071...\n",
|
|
"Processing file 2793/78071...\n",
|
|
"Processing file 2794/78071...\n",
|
|
"Processing file 2795/78071...\n",
|
|
"Processing file 2796/78071...\n",
|
|
"Processing file 2797/78071...\n",
|
|
"Processing file 2798/78071...\n",
|
|
"Processing file 2799/78071...\n",
|
|
"Processing file 2800/78071...\n",
|
|
"Processing file 2801/78071...\n",
|
|
"Processing file 2802/78071...\n",
|
|
"Processing file 2803/78071...\n",
|
|
"Processing file 2804/78071...\n",
|
|
"Processing file 2805/78071...\n",
|
|
"Processing file 2806/78071...\n",
|
|
"Processing file 2807/78071...\n",
|
|
"Processing file 2808/78071...\n",
|
|
"Processing file 2809/78071...\n",
|
|
"Processing file 2810/78071...\n",
|
|
"Processing file 2811/78071...\n",
|
|
"Processing file 2812/78071...\n",
|
|
"Processing file 2813/78071...\n",
|
|
"Processing file 2814/78071...\n",
|
|
"Processing file 2815/78071...\n",
|
|
"Processing file 2816/78071...\n",
|
|
"Processing file 2817/78071...\n",
|
|
"Processing file 2818/78071...\n",
|
|
"Processing file 2819/78071...\n",
|
|
"Processing file 2820/78071...\n",
|
|
"Processing file 2821/78071...\n",
|
|
"Processing file 2822/78071...\n",
|
|
"Processing file 2823/78071...\n",
|
|
"Processing file 2824/78071...\n",
|
|
"Processing file 2825/78071...\n",
|
|
"Processing file 2826/78071...\n",
|
|
"Processing file 2827/78071...\n",
|
|
"Processing file 2828/78071...\n",
|
|
"Processing file 2829/78071...\n",
|
|
"Processing file 2830/78071...\n",
|
|
"Processing file 2831/78071...\n",
|
|
"Processing file 2832/78071...\n",
|
|
"Processing file 2833/78071...\n",
|
|
"Processing file 2834/78071...\n",
|
|
"Processing file 2835/78071...\n",
|
|
"Processing file 2836/78071...\n",
|
|
"Processing file 2837/78071...\n",
|
|
"Processing file 2838/78071...\n",
|
|
"Processing file 2839/78071...\n",
|
|
"Processing file 2840/78071...\n",
|
|
"Processing file 2841/78071...\n",
|
|
"Processing file 2842/78071...\n",
|
|
"Processing file 2843/78071...\n",
|
|
"Processing file 2844/78071...\n",
|
|
"Processing file 2845/78071...\n",
|
|
"Processing file 2846/78071...\n",
|
|
"Processing file 2847/78071...\n",
|
|
"Processing file 2848/78071...\n",
|
|
"Processing file 2849/78071...\n",
|
|
"Processing file 2850/78071...\n",
|
|
"Processing file 2851/78071...\n",
|
|
"Processing file 2852/78071...\n",
|
|
"Processing file 2853/78071...\n",
|
|
"Processing file 2854/78071...\n",
|
|
"Processing file 2855/78071...\n",
|
|
"Processing file 2856/78071...\n",
|
|
"Processing file 2857/78071...\n",
|
|
"Processing file 2858/78071...\n",
|
|
"Processing file 2859/78071...\n",
|
|
"Processing file 2860/78071...\n",
|
|
"Processing file 2861/78071...\n",
|
|
"Processing file 2862/78071...\n",
|
|
"Processing file 2863/78071...\n",
|
|
"Processing file 2864/78071...\n",
|
|
"Processing file 2865/78071...\n",
|
|
"Processing file 2866/78071...\n",
|
|
"Processing file 2867/78071...\n",
|
|
"Processing file 2868/78071...\n",
|
|
"Processing file 2869/78071...\n",
|
|
"Processing file 2870/78071...\n",
|
|
"Processing file 2871/78071...\n",
|
|
"Processing file 2872/78071...\n",
|
|
"Processing file 2873/78071...\n",
|
|
"Processing file 2874/78071...\n",
|
|
"Processing file 2875/78071...\n",
|
|
"Processing file 2876/78071...\n",
|
|
"Processing file 2877/78071...\n",
|
|
"Processing file 2878/78071...\n",
|
|
"Processing file 2879/78071...\n",
|
|
"Processing file 2880/78071...\n",
|
|
"Processing file 2881/78071...\n",
|
|
"Processing file 2882/78071...\n",
|
|
"Processing file 2883/78071...\n",
|
|
"Processing file 2884/78071...\n",
|
|
"Processing file 2885/78071...\n",
|
|
"Processing file 2886/78071...\n",
|
|
"Processing file 2887/78071...\n",
|
|
"Processing file 2888/78071...\n",
|
|
"Processing file 2889/78071...\n",
|
|
"Processing file 2890/78071...\n",
|
|
"Processing file 2891/78071...\n",
|
|
"Processing file 2892/78071...\n",
|
|
"Processing file 2893/78071...\n",
|
|
"Processing file 2894/78071...\n",
|
|
"Processing file 2895/78071...\n",
|
|
"Processing file 2896/78071...\n",
|
|
"Processing file 2897/78071...\n",
|
|
"Processing file 2898/78071...\n",
|
|
"Processing file 2899/78071...\n",
|
|
"Processing file 2900/78071...\n",
|
|
"Processing file 2901/78071...\n",
|
|
"Processing file 2902/78071...\n",
|
|
"Processing file 2903/78071...\n",
|
|
"Processing file 2904/78071...\n",
|
|
"Processing file 2905/78071...\n",
|
|
"Processing file 2906/78071...\n",
|
|
"Processing file 2907/78071...\n",
|
|
"Processing file 2908/78071...\n",
|
|
"Processing file 2909/78071...\n",
|
|
"Processing file 2910/78071...\n",
|
|
"Processing file 2911/78071...\n",
|
|
"Processing file 2912/78071...\n",
|
|
"Processing file 2913/78071...\n",
|
|
"Processing file 2914/78071...\n",
|
|
"Processing file 2915/78071...\n",
|
|
"Processing file 2916/78071...\n",
|
|
"Processing file 2917/78071...\n",
|
|
"Processing file 2918/78071...\n",
|
|
"Processing file 2919/78071...\n",
|
|
"Processing file 2920/78071...\n",
|
|
"Processing file 2921/78071...\n",
|
|
"Processing file 2922/78071...\n",
|
|
"Processing file 2923/78071...\n",
|
|
"Processing file 2924/78071...\n",
|
|
"Processing file 2925/78071...\n",
|
|
"Processing file 2926/78071...\n",
|
|
"Processing file 2927/78071...\n",
|
|
"Processing file 2928/78071...\n",
|
|
"Processing file 2929/78071...\n",
|
|
"Processing file 2930/78071...\n",
|
|
"Processing file 2931/78071...\n",
|
|
"Processing file 2932/78071...\n",
|
|
"Processing file 2933/78071...\n",
|
|
"Processing file 2934/78071...\n",
|
|
"Processing file 2935/78071...\n",
|
|
"Processing file 2936/78071...\n",
|
|
"Processing file 2937/78071...\n",
|
|
"Processing file 2938/78071...\n",
|
|
"Processing file 2939/78071...\n",
|
|
"Processing file 2940/78071...\n",
|
|
"Processing file 2941/78071...\n",
|
|
"Processing file 2942/78071...\n",
|
|
"Processing file 2943/78071...\n",
|
|
"Processing file 2944/78071...\n",
|
|
"Processing file 2945/78071...\n",
|
|
"Processing file 2946/78071...\n",
|
|
"Processing file 2947/78071...\n",
|
|
"Processing file 2948/78071...\n",
|
|
"Processing file 2949/78071...\n",
|
|
"Processing file 2950/78071...\n",
|
|
"Processing file 2951/78071...\n",
|
|
"Processing file 2952/78071...\n",
|
|
"Processing file 2953/78071...\n",
|
|
"Processing file 2954/78071...\n",
|
|
"Processing file 2955/78071...\n",
|
|
"Processing file 2956/78071...\n",
|
|
"Processing file 2957/78071...\n",
|
|
"Processing file 2958/78071...\n",
|
|
"Processing file 2959/78071...\n",
|
|
"Processing file 2960/78071...\n",
|
|
"Processing file 2961/78071...\n",
|
|
"Processing file 2962/78071...\n",
|
|
"Processing file 2963/78071...\n",
|
|
"Processing file 2964/78071...\n",
|
|
"Processing file 2965/78071...\n",
|
|
"Processing file 2966/78071...\n",
|
|
"Processing file 2967/78071...\n",
|
|
"Processing file 2968/78071...\n",
|
|
"Processing file 2969/78071...\n",
|
|
"Processing file 2970/78071...\n",
|
|
"Processing file 2971/78071...\n",
|
|
"Processing file 2972/78071...\n",
|
|
"Processing file 2973/78071...\n",
|
|
"Processing file 2974/78071...\n",
|
|
"Processing file 2975/78071...\n",
|
|
"Processing file 2976/78071...\n",
|
|
"Processing file 2977/78071...\n",
|
|
"Processing file 2978/78071...\n",
|
|
"Processing file 2979/78071...\n",
|
|
"Processing file 2980/78071...\n",
|
|
"Processing file 2981/78071...\n",
|
|
"Processing file 2982/78071...\n",
|
|
"Processing file 2983/78071...\n",
|
|
"Processing file 2984/78071...\n",
|
|
"Processing file 2985/78071...\n",
|
|
"Processing file 2986/78071...\n",
|
|
"Processing file 2987/78071...\n",
|
|
"Processing file 2988/78071...\n",
|
|
"Processing file 2989/78071...\n",
|
|
"Processing file 2990/78071...\n",
|
|
"Processing file 2991/78071...\n",
|
|
"Processing file 2992/78071...\n",
|
|
"Processing file 2993/78071...\n",
|
|
"Processing file 2994/78071...\n",
|
|
"Processing file 2995/78071...\n",
|
|
"Processing file 2996/78071...\n",
|
|
"Processing file 2997/78071...\n",
|
|
"Processing file 2998/78071...\n",
|
|
"Processing file 2999/78071...\n",
|
|
"Processing file 3000/78071...\n",
|
|
"Processing file 3001/78071...\n",
|
|
"Processing file 3002/78071...\n",
|
|
"Processing file 3003/78071...\n",
|
|
"Processing file 3004/78071...\n",
|
|
"Processing file 3005/78071...\n",
|
|
"Processing file 3006/78071...\n",
|
|
"Processing file 3007/78071...\n",
|
|
"Processing file 3008/78071...\n",
|
|
"Processing file 3009/78071...\n",
|
|
"Processing file 3010/78071...\n",
|
|
"Processing file 3011/78071...\n",
|
|
"Processing file 3012/78071...\n",
|
|
"Processing file 3013/78071...\n",
|
|
"Processing file 3014/78071...\n",
|
|
"Processing file 3015/78071...\n",
|
|
"Processing file 3016/78071...\n",
|
|
"Processing file 3017/78071...\n",
|
|
"Processing file 3018/78071...\n",
|
|
"Processing file 3019/78071...\n",
|
|
"Processing file 3020/78071...\n",
|
|
"Processing file 3021/78071...\n",
|
|
"Processing file 3022/78071...\n",
|
|
"Processing file 3023/78071...\n",
|
|
"Processing file 3024/78071...\n",
|
|
"Processing file 3025/78071...\n",
|
|
"Processing file 3026/78071...\n",
|
|
"Processing file 3027/78071...\n",
|
|
"Processing file 3028/78071...\n",
|
|
"Processing file 3029/78071...\n",
|
|
"Processing file 3030/78071...\n",
|
|
"Processing file 3031/78071...\n",
|
|
"Processing file 3032/78071...\n",
|
|
"Processing file 3033/78071...\n",
|
|
"Processing file 3034/78071...\n",
|
|
"Processing file 3035/78071...\n",
|
|
"Processing file 3036/78071...\n",
|
|
"Processing file 3037/78071...\n",
|
|
"Processing file 3038/78071...\n",
|
|
"Processing file 3039/78071...\n",
|
|
"Processing file 3040/78071...\n",
|
|
"Processing file 3041/78071...\n",
|
|
"Processing file 3042/78071...\n",
|
|
"Processing file 3043/78071...\n",
|
|
"Processing file 3044/78071...\n",
|
|
"Processing file 3045/78071...\n",
|
|
"Processing file 3046/78071...\n",
|
|
"Processing file 3047/78071...\n",
|
|
"Processing file 3048/78071...\n",
|
|
"Processing file 3049/78071...\n",
|
|
"Processing file 3050/78071...\n",
|
|
"Processing file 3051/78071...\n",
|
|
"Processing file 3052/78071...\n",
|
|
"Processing file 3053/78071...\n",
|
|
"Processing file 3054/78071...\n",
|
|
"Processing file 3055/78071...\n",
|
|
"Processing file 3056/78071...\n",
|
|
"Processing file 3057/78071...\n",
|
|
"Processing file 3058/78071...\n",
|
|
"Processing file 3059/78071...\n",
|
|
"Processing file 3060/78071...\n",
|
|
"Processing file 3061/78071...\n",
|
|
"Processing file 3062/78071...\n",
|
|
"Processing file 3063/78071...\n",
|
|
"Processing file 3064/78071...\n",
|
|
"Processing file 3065/78071...\n",
|
|
"Processing file 3066/78071...\n",
|
|
"Processing file 3067/78071...\n",
|
|
"Processing file 3068/78071...\n",
|
|
"Processing file 3069/78071...\n",
|
|
"Processing file 3070/78071...\n",
|
|
"Processing file 3071/78071...\n",
|
|
"Processing file 3072/78071...\n",
|
|
"Processing file 3073/78071...\n",
|
|
"Processing file 3074/78071...\n",
|
|
"Processing file 3075/78071...\n",
|
|
"Processing file 3076/78071...\n",
|
|
"Processing file 3077/78071...\n",
|
|
"Processing file 3078/78071...\n",
|
|
"Processing file 3079/78071...\n",
|
|
"Processing file 3080/78071...\n",
|
|
"Processing file 3081/78071...\n",
|
|
"Processing file 3082/78071...\n",
|
|
"Processing file 3083/78071...\n",
|
|
"Processing file 3084/78071...\n",
|
|
"Processing file 3085/78071...\n",
|
|
"Processing file 3086/78071...\n",
|
|
"Processing file 3087/78071...\n",
|
|
"Processing file 3088/78071...\n",
|
|
"Processing file 3089/78071...\n",
|
|
"Processing file 3090/78071...\n",
|
|
"Processing file 3091/78071...\n",
|
|
"Processing file 3092/78071...\n",
|
|
"Processing file 3093/78071...\n",
|
|
"Processing file 3094/78071...\n",
|
|
"Processing file 3095/78071...\n",
|
|
"Processing file 3096/78071...\n",
|
|
"Processing file 3097/78071...\n",
|
|
"Processing file 3098/78071...\n",
|
|
"Processing file 3099/78071...\n",
|
|
"Processing file 3100/78071...\n",
|
|
"Processing file 3101/78071...\n",
|
|
"Processing file 3102/78071...\n",
|
|
"Processing file 3103/78071...\n",
|
|
"Processing file 3104/78071...\n",
|
|
"Processing file 3105/78071...\n",
|
|
"Processing file 3106/78071...\n",
|
|
"Processing file 3107/78071...\n",
|
|
"Processing file 3108/78071...\n",
|
|
"Processing file 3109/78071...\n",
|
|
"Processing file 3110/78071...\n",
|
|
"Processing file 3111/78071...\n",
|
|
"Processing file 3112/78071...\n",
|
|
"Processing file 3113/78071...\n",
|
|
"Processing file 3114/78071...\n",
|
|
"Processing file 3115/78071...\n",
|
|
"Processing file 3116/78071...\n",
|
|
"Processing file 3117/78071...\n",
|
|
"Processing file 3118/78071...\n",
|
|
"Processing file 3119/78071...\n",
|
|
"Processing file 3120/78071...\n",
|
|
"Processing file 3121/78071...\n",
|
|
"Processing file 3122/78071...\n",
|
|
"Processing file 3123/78071...\n",
|
|
"Processing file 3124/78071...\n",
|
|
"Processing file 3125/78071...\n",
|
|
"Processing file 3126/78071...\n",
|
|
"Processing file 3127/78071...\n",
|
|
"Processing file 3128/78071...\n",
|
|
"Processing file 3129/78071...\n",
|
|
"Processing file 3130/78071...\n",
|
|
"Processing file 3131/78071...\n",
|
|
"Processing file 3132/78071...\n",
|
|
"Processing file 3133/78071...\n",
|
|
"Processing file 3134/78071...\n",
|
|
"Processing file 3135/78071...\n",
|
|
"Processing file 3136/78071...\n",
|
|
"Processing file 3137/78071...\n",
|
|
"Processing file 3138/78071...\n",
|
|
"Processing file 3139/78071...\n",
|
|
"Processing file 3140/78071...\n",
|
|
"Processing file 3141/78071...\n",
|
|
"Processing file 3142/78071...\n",
|
|
"Processing file 3143/78071...\n",
|
|
"Processing file 3144/78071...\n",
|
|
"Processing file 3145/78071...\n",
|
|
"Processing file 3146/78071...\n",
|
|
"Processing file 3147/78071...\n",
|
|
"Processing file 3148/78071...\n",
|
|
"Processing file 3149/78071...\n",
|
|
"Processing file 3150/78071...\n",
|
|
"Processing file 3151/78071...\n",
|
|
"Processing file 3152/78071...\n",
|
|
"Processing file 3153/78071...\n",
|
|
"Processing file 3154/78071...\n",
|
|
"Processing file 3155/78071...\n",
|
|
"Processing file 3156/78071...\n",
|
|
"Processing file 3157/78071...\n",
|
|
"Processing file 3158/78071...\n",
|
|
"Processing file 3159/78071...\n",
|
|
"Processing file 3160/78071...\n",
|
|
"Processing file 3161/78071...\n",
|
|
"Processing file 3162/78071...\n",
|
|
"Processing file 3163/78071...\n",
|
|
"Processing file 3164/78071...\n",
|
|
"Processing file 3165/78071...\n",
|
|
"Processing file 3166/78071...\n",
|
|
"Processing file 3167/78071...\n",
|
|
"Processing file 3168/78071...\n",
|
|
"Processing file 3169/78071...\n",
|
|
"Processing file 3170/78071...\n",
|
|
"Processing file 3171/78071...\n",
|
|
"Processing file 3172/78071...\n",
|
|
"Processing file 3173/78071...\n",
|
|
"Processing file 3174/78071...\n",
|
|
"Processing file 3175/78071...\n",
|
|
"Processing file 3176/78071...\n",
|
|
"Processing file 3177/78071...\n",
|
|
"Processing file 3178/78071...\n",
|
|
"Processing file 3179/78071...\n",
|
|
"Processing file 3180/78071...\n",
|
|
"Processing file 3181/78071...\n",
|
|
"Processing file 3182/78071...\n",
|
|
"Processing file 3183/78071...\n",
|
|
"Processing file 3184/78071...\n",
|
|
"Processing file 3185/78071...\n",
|
|
"Processing file 3186/78071...\n",
|
|
"Processing file 3187/78071...\n",
|
|
"Processing file 3188/78071...\n",
|
|
"Processing file 3189/78071...\n",
|
|
"Processing file 3190/78071...\n",
|
|
"Processing file 3191/78071...\n",
|
|
"Processing file 3192/78071...\n",
|
|
"Processing file 3193/78071...\n",
|
|
"Processing file 3194/78071...\n",
|
|
"Processing file 3195/78071...\n",
|
|
"Processing file 3196/78071...\n",
|
|
"Processing file 3197/78071...\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "KeyboardInterrupt",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[0;32mIn[3], line 111\u001b[0m\n\u001b[1;32m 108\u001b[0m file_path \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(folder_path, file)\n\u001b[1;32m 109\u001b[0m file_id \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39msplitext(file)[\u001b[38;5;241m0\u001b[39m]\n\u001b[0;32m--> 111\u001b[0m features \u001b[38;5;241m=\u001b[39m \u001b[43mextract_features_librosa\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_path\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 112\u001b[0m X\u001b[38;5;241m.\u001b[39mappend(features)\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 115\u001b[0m \u001b[38;5;66;03m#genre = tracks_info_df.loc[tracks_info_df['id'] == file_id, 'genre'].iloc[0]\u001b[39;00m\n",
|
|
"Cell \u001b[0;32mIn[3], line 27\u001b[0m, in \u001b[0;36mextract_features_librosa\u001b[0;34m(file_path)\u001b[0m\n\u001b[1;32m 25\u001b[0m chroma_stft \u001b[38;5;241m=\u001b[39m librosa\u001b[38;5;241m.\u001b[39mfeature\u001b[38;5;241m.\u001b[39mchroma_stft(y\u001b[38;5;241m=\u001b[39my, sr\u001b[38;5;241m=\u001b[39msr)\n\u001b[1;32m 26\u001b[0m chroma_cqt \u001b[38;5;241m=\u001b[39m librosa\u001b[38;5;241m.\u001b[39mfeature\u001b[38;5;241m.\u001b[39mchroma_cqt(y\u001b[38;5;241m=\u001b[39my, sr\u001b[38;5;241m=\u001b[39msr)\n\u001b[0;32m---> 27\u001b[0m chroma_cens \u001b[38;5;241m=\u001b[39m \u001b[43mlibrosa\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfeature\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchroma_cens\u001b[49m\u001b[43m(\u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 28\u001b[0m chroma_vqt \u001b[38;5;241m=\u001b[39m librosa\u001b[38;5;241m.\u001b[39mfeature\u001b[38;5;241m.\u001b[39mchroma_vqt(y\u001b[38;5;241m=\u001b[39my, sr\u001b[38;5;241m=\u001b[39msr, intervals\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mequal\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 29\u001b[0m melspectogram \u001b[38;5;241m=\u001b[39m librosa\u001b[38;5;241m.\u001b[39mfeature\u001b[38;5;241m.\u001b[39mmelspectrogram(y\u001b[38;5;241m=\u001b[39my, sr\u001b[38;5;241m=\u001b[39msr)\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/feature/spectral.py:1524\u001b[0m, in \u001b[0;36mchroma_cens\u001b[0;34m(y, sr, C, hop_length, fmin, tuning, n_chroma, n_octaves, bins_per_octave, cqt_mode, window, norm, win_len_smooth, smoothing_window)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\n\u001b[1;32m 1517\u001b[0m (win_len_smooth \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[1;32m 1518\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m (\u001b[38;5;28misinstance\u001b[39m(win_len_smooth, (\u001b[38;5;28mint\u001b[39m, np\u001b[38;5;241m.\u001b[39minteger)) \u001b[38;5;129;01mand\u001b[39;00m win_len_smooth \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 1519\u001b[0m ):\n\u001b[1;32m 1520\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ParameterError(\n\u001b[1;32m 1521\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwin_len_smooth=\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mwin_len_smooth\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must be a positive integer or None\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1522\u001b[0m )\n\u001b[0;32m-> 1524\u001b[0m chroma \u001b[38;5;241m=\u001b[39m \u001b[43mchroma_cqt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1525\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1526\u001b[0m \u001b[43m \u001b[49m\u001b[43mC\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mC\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1527\u001b[0m \u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1528\u001b[0m \u001b[43m \u001b[49m\u001b[43mhop_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhop_length\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1529\u001b[0m \u001b[43m \u001b[49m\u001b[43mfmin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfmin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1530\u001b[0m \u001b[43m \u001b[49m\u001b[43mbins_per_octave\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbins_per_octave\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1531\u001b[0m \u001b[43m \u001b[49m\u001b[43mtuning\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtuning\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1532\u001b[0m \u001b[43m \u001b[49m\u001b[43mnorm\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1533\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_chroma\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_chroma\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1534\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_octaves\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_octaves\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1535\u001b[0m \u001b[43m \u001b[49m\u001b[43mcqt_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcqt_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1536\u001b[0m \u001b[43m \u001b[49m\u001b[43mwindow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwindow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1537\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1539\u001b[0m \u001b[38;5;66;03m# L1-Normalization\u001b[39;00m\n\u001b[1;32m 1540\u001b[0m chroma \u001b[38;5;241m=\u001b[39m util\u001b[38;5;241m.\u001b[39mnormalize(chroma, norm\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m2\u001b[39m)\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/feature/spectral.py:1388\u001b[0m, in \u001b[0;36mchroma_cqt\u001b[0;34m(y, sr, C, hop_length, fmin, norm, threshold, tuning, n_chroma, n_octaves, window, bins_per_octave, cqt_mode)\u001b[0m\n\u001b[1;32m 1383\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m y \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1384\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ParameterError(\n\u001b[1;32m 1385\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAt least one of C or y must be provided to compute chroma\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1386\u001b[0m )\n\u001b[1;32m 1387\u001b[0m C \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mabs(\n\u001b[0;32m-> 1388\u001b[0m \u001b[43mcqt_func\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcqt_mode\u001b[49m\u001b[43m]\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1389\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1390\u001b[0m \u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1391\u001b[0m \u001b[43m \u001b[49m\u001b[43mhop_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhop_length\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1392\u001b[0m \u001b[43m \u001b[49m\u001b[43mfmin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfmin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1393\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_bins\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_octaves\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mbins_per_octave\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1394\u001b[0m \u001b[43m \u001b[49m\u001b[43mbins_per_octave\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbins_per_octave\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1395\u001b[0m \u001b[43m \u001b[49m\u001b[43mtuning\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtuning\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1396\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1397\u001b[0m )\n\u001b[1;32m 1399\u001b[0m \u001b[38;5;66;03m# Map to chroma\u001b[39;00m\n\u001b[1;32m 1400\u001b[0m cq_to_chr \u001b[38;5;241m=\u001b[39m filters\u001b[38;5;241m.\u001b[39mcq_to_chroma(\n\u001b[1;32m 1401\u001b[0m C\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m2\u001b[39m],\n\u001b[1;32m 1402\u001b[0m bins_per_octave\u001b[38;5;241m=\u001b[39mbins_per_octave,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1405\u001b[0m window\u001b[38;5;241m=\u001b[39mwindow,\n\u001b[1;32m 1406\u001b[0m )\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/core/constantq.py:171\u001b[0m, in \u001b[0;36mcqt\u001b[0;34m(y, sr, hop_length, fmin, n_bins, bins_per_octave, tuning, filter_scale, norm, sparsity, window, scale, pad_mode, res_type, dtype)\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Compute the constant-Q transform of an audio signal.\u001b[39;00m\n\u001b[1;32m 47\u001b[0m \n\u001b[1;32m 48\u001b[0m \u001b[38;5;124;03mThis implementation is based on the recursive sub-sampling method\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 168\u001b[0m \u001b[38;5;124;03m [5.147e-02, 6.959e-02, ..., 1.694e-05, 5.811e-06]])\u001b[39;00m\n\u001b[1;32m 169\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 170\u001b[0m \u001b[38;5;66;03m# CQT is the special case of VQT with gamma=0\u001b[39;00m\n\u001b[0;32m--> 171\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mvqt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 172\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 173\u001b[0m \u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 174\u001b[0m \u001b[43m \u001b[49m\u001b[43mhop_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhop_length\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 175\u001b[0m \u001b[43m \u001b[49m\u001b[43mfmin\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfmin\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 176\u001b[0m \u001b[43m \u001b[49m\u001b[43mn_bins\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_bins\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 177\u001b[0m \u001b[43m \u001b[49m\u001b[43mintervals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mequal\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 178\u001b[0m \u001b[43m \u001b[49m\u001b[43mgamma\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 179\u001b[0m \u001b[43m \u001b[49m\u001b[43mbins_per_octave\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbins_per_octave\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[43m \u001b[49m\u001b[43mtuning\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtuning\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 181\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilter_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 182\u001b[0m \u001b[43m \u001b[49m\u001b[43mnorm\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnorm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 183\u001b[0m \u001b[43m \u001b[49m\u001b[43msparsity\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msparsity\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 184\u001b[0m \u001b[43m \u001b[49m\u001b[43mwindow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwindow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 185\u001b[0m \u001b[43m \u001b[49m\u001b[43mscale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mscale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 186\u001b[0m \u001b[43m \u001b[49m\u001b[43mpad_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpad_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 187\u001b[0m \u001b[43m \u001b[49m\u001b[43mres_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mres_type\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 188\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 189\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/core/constantq.py:1000\u001b[0m, in \u001b[0;36mvqt\u001b[0;34m(y, sr, hop_length, fmin, n_bins, intervals, gamma, bins_per_octave, tuning, filter_scale, norm, sparsity, window, scale, pad_mode, res_type, dtype)\u001b[0m\n\u001b[1;32m 997\u001b[0m freqs_oct \u001b[38;5;241m=\u001b[39m freqs[sl]\n\u001b[1;32m 998\u001b[0m alpha_oct \u001b[38;5;241m=\u001b[39m alpha[sl]\n\u001b[0;32m-> 1000\u001b[0m fft_basis, n_fft, _ \u001b[38;5;241m=\u001b[39m \u001b[43m__vqt_filter_fft\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1001\u001b[0m \u001b[43m \u001b[49m\u001b[43mmy_sr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1002\u001b[0m \u001b[43m \u001b[49m\u001b[43mfreqs_oct\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1003\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1004\u001b[0m \u001b[43m \u001b[49m\u001b[43mnorm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1005\u001b[0m \u001b[43m \u001b[49m\u001b[43msparsity\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1006\u001b[0m \u001b[43m \u001b[49m\u001b[43mwindow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwindow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1007\u001b[0m \u001b[43m \u001b[49m\u001b[43mgamma\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgamma\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1008\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1009\u001b[0m \u001b[43m \u001b[49m\u001b[43malpha\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malpha_oct\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1010\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1012\u001b[0m \u001b[38;5;66;03m# Re-scale the filters to compensate for downsampling\u001b[39;00m\n\u001b[1;32m 1013\u001b[0m fft_basis[:] \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39msqrt(sr \u001b[38;5;241m/\u001b[39m my_sr)\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/core/constantq.py:1062\u001b[0m, in \u001b[0;36m__vqt_filter_fft\u001b[0;34m(sr, freqs, filter_scale, norm, sparsity, hop_length, window, gamma, dtype, alpha)\u001b[0m\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;129m@cache\u001b[39m(level\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m)\n\u001b[1;32m 1049\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m__vqt_filter_fft\u001b[39m(\n\u001b[1;32m 1050\u001b[0m sr,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1059\u001b[0m alpha\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1060\u001b[0m ):\n\u001b[1;32m 1061\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Generate the frequency domain variable-Q filter basis.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1062\u001b[0m basis, lengths \u001b[38;5;241m=\u001b[39m \u001b[43mfilters\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwavelet\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1063\u001b[0m \u001b[43m \u001b[49m\u001b[43mfreqs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfreqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1064\u001b[0m \u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1065\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilter_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1066\u001b[0m \u001b[43m \u001b[49m\u001b[43mnorm\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnorm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1067\u001b[0m \u001b[43m \u001b[49m\u001b[43mpad_fft\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1068\u001b[0m \u001b[43m \u001b[49m\u001b[43mwindow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwindow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1069\u001b[0m \u001b[43m \u001b[49m\u001b[43mgamma\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgamma\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1070\u001b[0m \u001b[43m \u001b[49m\u001b[43malpha\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malpha\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1071\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1073\u001b[0m \u001b[38;5;66;03m# Filters are padded up to the nearest integral power of 2\u001b[39;00m\n\u001b[1;32m 1074\u001b[0m n_fft \u001b[38;5;241m=\u001b[39m basis\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m]\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/filters.py:955\u001b[0m, in \u001b[0;36mwavelet\u001b[0;34m(freqs, sr, window, filter_scale, pad_fft, norm, dtype, gamma, alpha, **kwargs)\u001b[0m\n\u001b[1;32m 860\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Construct a wavelet basis using windowed complex sinusoids.\u001b[39;00m\n\u001b[1;32m 861\u001b[0m \n\u001b[1;32m 862\u001b[0m \u001b[38;5;124;03mThis function constructs a wavelet filterbank at a specified set of center\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[38;5;124;03m>>> ax[1].set(ylabel='CQ filters', title='CQ filter magnitudes (frequency domain)')\u001b[39;00m\n\u001b[1;32m 953\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 954\u001b[0m \u001b[38;5;66;03m# Pass-through parameters to get the filter lengths\u001b[39;00m\n\u001b[0;32m--> 955\u001b[0m lengths, _ \u001b[38;5;241m=\u001b[39m \u001b[43mwavelet_lengths\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 956\u001b[0m \u001b[43m \u001b[49m\u001b[43mfreqs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfreqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 957\u001b[0m \u001b[43m \u001b[49m\u001b[43msr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 958\u001b[0m \u001b[43m \u001b[49m\u001b[43mwindow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwindow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 959\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilter_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfilter_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 960\u001b[0m \u001b[43m \u001b[49m\u001b[43mgamma\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgamma\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 961\u001b[0m \u001b[43m \u001b[49m\u001b[43malpha\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malpha\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 962\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[38;5;66;03m# Build the filters\u001b[39;00m\n\u001b[1;32m 965\u001b[0m filters \u001b[38;5;241m=\u001b[39m []\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/filters.py:805\u001b[0m, in \u001b[0;36mwavelet_lengths\u001b[0;34m(freqs, sr, window, filter_scale, gamma, alpha)\u001b[0m\n\u001b[1;32m 802\u001b[0m Q \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mfloat\u001b[39m(filter_scale) \u001b[38;5;241m/\u001b[39m alpha\n\u001b[1;32m 804\u001b[0m \u001b[38;5;66;03m# How far up does our highest frequency reach?\u001b[39;00m\n\u001b[0;32m--> 805\u001b[0m f_cutoff \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mmax\u001b[39m(freqs \u001b[38;5;241m*\u001b[39m (\u001b[38;5;241m1\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m0.5\u001b[39m \u001b[38;5;241m*\u001b[39m \u001b[43mwindow_bandwidth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwindow\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m/\u001b[39m Q) \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m0.5\u001b[39m \u001b[38;5;241m*\u001b[39m gamma_)\n\u001b[1;32m 807\u001b[0m \u001b[38;5;66;03m# Convert frequencies to filter lengths\u001b[39;00m\n\u001b[1;32m 808\u001b[0m lengths \u001b[38;5;241m=\u001b[39m Q \u001b[38;5;241m*\u001b[39m sr \u001b[38;5;241m/\u001b[39m (freqs \u001b[38;5;241m+\u001b[39m gamma_ \u001b[38;5;241m/\u001b[39m alpha)\n",
|
|
"File \u001b[0;32m~/projects/predictify/.venv/lib/python3.10/site-packages/librosa/filters.py:1122\u001b[0m, in \u001b[0;36mwindow_bandwidth\u001b[0;34m(window, n)\u001b[0m\n\u001b[1;32m 1117\u001b[0m cq_to_ch \u001b[38;5;241m=\u001b[39m scipy\u001b[38;5;241m.\u001b[39msignal\u001b[38;5;241m.\u001b[39mconvolve(cq_to_ch, np\u001b[38;5;241m.\u001b[39matleast_2d(window), mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msame\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cq_to_ch\n\u001b[0;32m-> 1122\u001b[0m \u001b[38;5;129m@cache\u001b[39m(level\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m)\n\u001b[1;32m 1123\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mwindow_bandwidth\u001b[39m(window: _WindowSpec, n: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1000\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mfloat\u001b[39m:\n\u001b[1;32m 1124\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Get the equivalent noise bandwidth (ENBW) of a window function.\u001b[39;00m\n\u001b[1;32m 1125\u001b[0m \n\u001b[1;32m 1126\u001b[0m \u001b[38;5;124;03m The ENBW of a window is defined by [#]_ (equation 11) as the normalized\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1156\u001b[0m \u001b[38;5;124;03m get_window\u001b[39;00m\n\u001b[1;32m 1157\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 1158\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(window, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__name__\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import os\n",
|
|
"import pickle\n",
|
|
"import shutil\n",
|
|
"import librosa\n",
|
|
"import numpy as np\n",
|
|
"\n",
|
|
"\n",
|
|
"def summarize_feature(feature_array):\n",
|
|
" \"\"\"\n",
|
|
" feature_array shape: [num_coeffs, num_frames]\n",
|
|
" Returns: 1D numpy array containing mean, std, and median of each row.\n",
|
|
" \"\"\"\n",
|
|
" means = np.mean(feature_array)\n",
|
|
" stds = np.std(feature_array)\n",
|
|
" medians = np.median(feature_array)\n",
|
|
"\n",
|
|
" return [means, stds, medians] \n",
|
|
"\n",
|
|
"def extract_features_librosa(file_path):\n",
|
|
"\n",
|
|
" # Load the audio file\n",
|
|
" y, sr = librosa.load(file_path, sr=None)\n",
|
|
" \n",
|
|
" # Extract features\n",
|
|
" chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr)\n",
|
|
" chroma_cqt = librosa.feature.chroma_cqt(y=y, sr=sr)\n",
|
|
" chroma_cens = librosa.feature.chroma_cens(y=y, sr=sr)\n",
|
|
" chroma_vqt = librosa.feature.chroma_vqt(y=y, sr=sr, intervals='equal')\n",
|
|
" melspectogram = librosa.feature.melspectrogram(y=y, sr=sr)\n",
|
|
" mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=12) # Numer of mfccs difference?\n",
|
|
" rms = librosa.feature.rms(y=y)\n",
|
|
" spectral_centroid = librosa.feature.spectral_centroid(y=y, sr=sr)\n",
|
|
" spectral_bandwith = librosa.feature.spectral_bandwidth(y=y, sr=sr)\n",
|
|
" spectral_contrast = librosa.feature.spectral_contrast(y=y, sr=sr)\n",
|
|
" spectral_flatness = librosa.feature.spectral_flatness(y=y) \n",
|
|
" spectral_rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr)\n",
|
|
" poly_features = librosa.feature.poly_features(y=y, sr=sr)\n",
|
|
" tonnetz = librosa.feature.tonnetz(y=y, sr=sr)\n",
|
|
" zero_crossings = librosa.feature.zero_crossing_rate(y)\n",
|
|
" \n",
|
|
" # Estimate tempo and beats\n",
|
|
" tempo = librosa.feature.tempo(y=y, sr=sr)\n",
|
|
" tempogram = librosa.feature.tempogram(y=y, sr=sr)\n",
|
|
" fourier_tempogram = librosa.feature.fourier_tempogram(y=y, sr=sr)\n",
|
|
" tempogram_ratio = librosa.feature.tempogram_ratio(y=y, sr=sr)\n",
|
|
"\n",
|
|
" track_features = [\n",
|
|
" summarize_feature(mfccs),\n",
|
|
" summarize_feature(chroma_stft),\n",
|
|
" summarize_feature(chroma_cqt),\n",
|
|
" summarize_feature(chroma_cens),\n",
|
|
" summarize_feature(chroma_vqt),\n",
|
|
" summarize_feature(melspectogram),\n",
|
|
" summarize_feature(spectral_centroid),\n",
|
|
" summarize_feature(spectral_bandwith),\n",
|
|
" summarize_feature(spectral_contrast),\n",
|
|
" summarize_feature(spectral_flatness),\n",
|
|
" summarize_feature(spectral_rolloff),\n",
|
|
" summarize_feature(poly_features),\n",
|
|
" summarize_feature(tonnetz),\n",
|
|
" summarize_feature(zero_crossings),\n",
|
|
" summarize_feature(tempogram),\n",
|
|
" summarize_feature(fourier_tempogram),\n",
|
|
" summarize_feature(tempogram_ratio),\n",
|
|
" summarize_feature(rms),\n",
|
|
" np.ravel(tempo) # Flatten Tempo into an 1D array\n",
|
|
" ]\n",
|
|
"\n",
|
|
" def flatten(track_features):\n",
|
|
" return [feature for features in track_features for feature in features]\n",
|
|
"\n",
|
|
" return flatten(track_features)\n",
|
|
"\n",
|
|
"\n",
|
|
"folder_path = './audio_previews'\n",
|
|
"results_file = 'audio_features.pkl'\n",
|
|
"\n",
|
|
"# Check if the features pickle file exists, if yes load it\n",
|
|
"if os.path.exists(results_file):\n",
|
|
" with open(results_file, 'rb') as file:\n",
|
|
" saved_data = pickle.load(file)\n",
|
|
" X = saved_data.get('X', [])\n",
|
|
" y_labels = saved_data.get('y_labels', [])\n",
|
|
" processed_files = set(saved_data.get('processed_files', []))\n",
|
|
" print(f\"Loaded {len(processed_files)} processed tracks\")\n",
|
|
"else:\n",
|
|
" X = []\n",
|
|
" y_labels = []\n",
|
|
" processed_files = set()\n",
|
|
"\n",
|
|
"all_files = [file for file in os.listdir(folder_path) if file.endswith('.mp3')]\n",
|
|
"total_files_count_left = len(set(all_files) - set(processed_files))\n",
|
|
"counter = 0\n",
|
|
"batch_counter = 0\n",
|
|
"batch_size = 10\n",
|
|
"\n",
|
|
"id_to_genre = dict(zip(tracks_info_df['id'], tracks_info_df['genre']))\n",
|
|
"\n",
|
|
"for file in all_files:\n",
|
|
"\n",
|
|
" if file in processed_files:\n",
|
|
" continue\n",
|
|
"\n",
|
|
" counter += 1\n",
|
|
" batch_counter += 1\n",
|
|
" print(f'Processing file {counter}/{total_files_count_left}...')\n",
|
|
"\n",
|
|
" file_path = os.path.join(folder_path, file)\n",
|
|
" file_id = os.path.splitext(file)[0]\n",
|
|
"\n",
|
|
" features = extract_features_librosa(file_path)\n",
|
|
" X.append(features)\n",
|
|
"\n",
|
|
" try:\n",
|
|
" #genre = tracks_info_df.loc[tracks_info_df['id'] == file_id, 'genre'].iloc[0]\n",
|
|
" genre = id_to_genre.get(file_id, None)\n",
|
|
" y_labels.append(genre)\n",
|
|
" except IndexError:\n",
|
|
" print(\"This should actually not happen :(, couldnt find genre in the pandas dataframe based on ID\")\n",
|
|
" y_labels.append(None)\n",
|
|
" \n",
|
|
" processed_files.add(file)\n",
|
|
"\n",
|
|
" if batch_counter >= batch_size:\n",
|
|
" with open(results_file, 'wb') as file:\n",
|
|
" pickle.dump({\n",
|
|
" 'X': X,\n",
|
|
" 'y_labels': y_labels,\n",
|
|
" 'processed_files': list(processed_files)\n",
|
|
" }, file)\n",
|
|
" batch_counter = 0\n",
|
|
" if counter % 30 == 0:\n",
|
|
" base, ext = os.path.splitext(results_file)\n",
|
|
" backup_file = f\"{base}_backup{ext}\"\n",
|
|
"\n",
|
|
" shutil.copy(results_file, backup_file)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Ectract with Essentia"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Error processing 0ett0qCHbl0vdSRFhRSkMc.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 1OwWdf12e02HeIQvUsLUdD.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 5rHOjo1bvjdUYH9ViGclLH.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 6CmuT4GB0mCTviUq2jB9Fe.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 2rJY1HlLcOXsQYMPUnhQxa.mp3: \"no key found named 'lowlevel'\"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Error processing 4pAXu3mUCsco6jhaTypLnC.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 5LV2hCbhm2lh4a4NbjCJqd.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 5ygEUpyZy5qtZ1423zymBW.mp3: \"no key found named 'lowlevel'\"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Error processing 7mEm1N1cDErUOpFWic3TIZ.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 7Bp9rKKDf7Ay1LBNmEU2Bl.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 7fe7qXjvlXDUs8HiPRSnbw.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 77ou4xwREuG6rqriGgWnpd.mp3: \"no key found named 'lowlevel'\"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n",
|
|
"[ INFO ] MusicExtractor: Read metadata\n",
|
|
"[ INFO ] MusicExtractor: Compute md5 audio hash, codec, length, and EBU 128 loudness\n",
|
|
"[ INFO ] MusicExtractor: Replay gain\n",
|
|
"[ INFO ] MusicExtractor: Compute audio features\n",
|
|
"[ INFO ] MusicExtractor: Compute aggregation\n",
|
|
"[ INFO ] All done\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Error processing 2HKRFTnJtLFn15K8zCcsof.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 6zQpBVXilFdWJnlDlNE5jO.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 3CI0tvulxpMSMAPNCgqTMU.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 4xCM9zy2m4MfsC8EP00rBz.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 551xyaSJsg8hILXFq9JdST.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 7z994LVEvJTvPYkAuToucs.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 6uzwDnvsPrQM8eNBeWReMy.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 6BjDuBO6OhHGUGG7vcVnAW.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 2mlFkeGCkKcEYqp7MAdRlm.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 03RqhjDOozIMIAlhILrvLb.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 2IOuVaLf8rrpMYZKc0Pt5l.mp3: \"no key found named 'lowlevel'\"\n",
|
|
"Error processing 3jvqXU6Keuwe1Fifs1YNdo.mp3: \"no key found named 'lowlevel'\"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import os\n",
|
|
"import pickle\n",
|
|
"import shutil\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"from concurrent.futures import ThreadPoolExecutor, as_completed\n",
|
|
"import threading\n",
|
|
"import essentia\n",
|
|
"import essentia.standard as es\n",
|
|
"from tqdm import tqdm\n",
|
|
"\n",
|
|
"# =============== Config ==================\n",
|
|
"folder_path = './audio_previews'\n",
|
|
"results_file = 'audio_features_new.pkl'\n",
|
|
"tracks_info_file = './data_combined_dominik_kaggle.csv' # Your ID-Genre CSV\n",
|
|
"batch_size = 10\n",
|
|
"num_workers = 4 # number of threads\n",
|
|
"# ==========================================\n",
|
|
"\n",
|
|
"lock = threading.Lock()\n",
|
|
"\n",
|
|
"def extract_features_essentia(file_path):\n",
|
|
" loader = es.MonoLoader(filename=file_path)\n",
|
|
" audio = loader()\n",
|
|
"\n",
|
|
" # Pre-processing\n",
|
|
" audio = es.FrameCutter(frameSize=2048, hopSize=1024)(audio)\n",
|
|
" windowed = es.Windowing(type='hann')(audio)\n",
|
|
" spectrum = es.Spectrum()(windowed)\n",
|
|
" mfcc = es.MFCC(numberCoefficients=13)(spectrum)[1]\n",
|
|
" \n",
|
|
" # Aggregate statistics\n",
|
|
" mean_mfcc = np.mean(mfcc, axis=0)\n",
|
|
" std_mfcc = np.std(mfcc, axis=0)\n",
|
|
" median_mfcc = np.median(mfcc, axis=0)\n",
|
|
"\n",
|
|
" # High-level features\n",
|
|
" extractor = es.MusicExtractor(\n",
|
|
" lowlevelStats=['mean', 'stdev'],\n",
|
|
" rhythmStats=['mean', 'stdev'],\n",
|
|
" tonalStats=['mean', 'stdev']\n",
|
|
" )\n",
|
|
" features, features_frames = extractor(file_path)\n",
|
|
"\n",
|
|
" # We'll use a flat vector of selected features\n",
|
|
" flat_features = []\n",
|
|
" \n",
|
|
" # Pick important feature groups\n",
|
|
" for group in ['lowlevel', 'rhythm', 'tonal']:\n",
|
|
" for feature_name, value in features[group].items():\n",
|
|
" if isinstance(value, (int, float, np.ndarray)):\n",
|
|
" value = np.atleast_1d(value)\n",
|
|
" flat_features.extend(value.tolist())\n",
|
|
"\n",
|
|
" # Add MFCC stats\n",
|
|
" flat_features.extend(mean_mfcc.tolist())\n",
|
|
" flat_features.extend(std_mfcc.tolist())\n",
|
|
" flat_features.extend(median_mfcc.tolist())\n",
|
|
"\n",
|
|
" return np.array(flat_features)\n",
|
|
"\n",
|
|
"def load_existing_data(results_file):\n",
|
|
" if os.path.exists(results_file):\n",
|
|
" with open(results_file, 'rb') as file:\n",
|
|
" saved_data = pickle.load(file)\n",
|
|
" print(f\"Loaded {len(saved_data.get('processed_files', []))} processed tracks\")\n",
|
|
" return (\n",
|
|
" saved_data.get('X', []),\n",
|
|
" saved_data.get('y_labels', []),\n",
|
|
" set(saved_data.get('processed_files', []))\n",
|
|
" )\n",
|
|
" return [], [], set()\n",
|
|
"\n",
|
|
"def save_data(results_file, X, y_labels, processed_files):\n",
|
|
" with open(results_file, 'wb') as file:\n",
|
|
" pickle.dump({\n",
|
|
" 'X': X,\n",
|
|
" 'y_labels': y_labels,\n",
|
|
" 'processed_files': list(processed_files)\n",
|
|
" }, file)\n",
|
|
"\n",
|
|
"def process_file(file, id_to_genre):\n",
|
|
" file_path = os.path.join(folder_path, file)\n",
|
|
" file_id = os.path.splitext(file)[0]\n",
|
|
" try:\n",
|
|
" features = extract_features_essentia(file_path)\n",
|
|
" genre = id_to_genre.get(file_id, None)\n",
|
|
" return features, genre, file\n",
|
|
" except Exception as e:\n",
|
|
" print(f\"Error processing {file}: {e}\")\n",
|
|
" return None, None, file\n",
|
|
"\n",
|
|
"# Load CSV\n",
|
|
"tracks_info_df = pd.read_csv(tracks_info_file)\n",
|
|
"id_to_genre = dict(zip(tracks_info_df['id'].astype(str), tracks_info_df['genre']))\n",
|
|
"\n",
|
|
"# Load previous results if any\n",
|
|
"X, y_labels, processed_files = load_existing_data(results_file)\n",
|
|
"\n",
|
|
"all_files = [file for file in os.listdir(folder_path) if file.endswith('.mp3')]\n",
|
|
"files_to_process = list(set(all_files) - processed_files)\n",
|
|
"total_files = len(files_to_process)\n",
|
|
"batch_counter = 0\n",
|
|
"\n",
|
|
"with ThreadPoolExecutor(max_workers=num_workers) as executor:\n",
|
|
" futures = {executor.submit(process_file, file, id_to_genre): file for file in files_to_process}\n",
|
|
" \n",
|
|
" # Add tqdm progress bar\n",
|
|
" with tqdm(total=total_files, desc=\"Processing audio files\") as pbar:\n",
|
|
" for future in as_completed(futures):\n",
|
|
" features, genre, file = future.result()\n",
|
|
"\n",
|
|
" if features is not None:\n",
|
|
" with lock:\n",
|
|
" X.append(features)\n",
|
|
" y_labels.append(genre)\n",
|
|
" processed_files.add(file)\n",
|
|
" \n",
|
|
" batch_counter += 1\n",
|
|
" pbar.update(1)\n",
|
|
"\n",
|
|
" if batch_counter >= batch_size:\n",
|
|
" with lock:\n",
|
|
" save_data(results_file, X, y_labels, processed_files)\n",
|
|
" batch_counter = 0\n",
|
|
"\n",
|
|
"# Final save\n",
|
|
"save_data(results_file, X, y_labels, processed_files)\n",
|
|
"print(\"All done!\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Extract track features multithreaded"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 2%|▏ | 297/15001 [07:25<3:38:31, 1.12file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 4%|▍ | 600/15001 [14:44<2:19:39, 1.72file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 6%|▌ | 898/15001 [21:57<2:50:17, 1.38file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 8%|▊ | 1189/15001 [29:13<9:50:08, 2.56s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 10%|▉ | 1496/15001 [36:40<4:03:40, 1.08s/file] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 12%|█▏ | 1800/15001 [44:09<2:15:54, 1.62file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 14%|█▍ | 2093/15001 [51:40<5:33:41, 1.55s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 16%|█▌ | 2390/15001 [59:03<6:37:17, 1.89s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 18%|█▊ | 2699/15001 [1:06:23<3:01:16, 1.13file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 20%|█▉ | 2998/15001 [1:13:41<3:11:02, 1.05file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 22%|██▏ | 3300/15001 [1:20:55<2:06:58, 1.54file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 24%|██▍ | 3599/15001 [1:28:12<2:21:58, 1.34file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 26%|██▌ | 3898/15001 [1:35:31<2:35:59, 1.19file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 28%|██▊ | 4198/15001 [1:42:47<3:09:13, 1.05s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 30%|██▉ | 4498/15001 [1:50:09<2:48:34, 1.04file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 32%|███▏ | 4797/15001 [1:57:29<2:33:51, 1.11file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 34%|███▍ | 5097/15001 [2:04:50<1:44:04, 1.59file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 36%|███▌ | 5393/15001 [2:12:14<3:36:07, 1.35s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 38%|███▊ | 5700/15001 [2:19:36<2:16:34, 1.13file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 40%|███▉ | 5996/15001 [2:26:57<2:25:10, 1.03file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 42%|████▏ | 6296/15001 [2:34:21<2:35:42, 1.07s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 44%|████▍ | 6591/15001 [2:41:45<3:47:58, 1.63s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 46%|████▌ | 6893/15001 [2:49:09<3:43:53, 1.66s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 48%|████▊ | 7199/15001 [2:56:36<2:08:11, 1.01file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 50%|████▉ | 7494/15001 [3:04:00<2:25:33, 1.16s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 52%|█████▏ | 7798/15001 [3:11:28<1:46:14, 1.13file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 54%|█████▍ | 8100/15001 [3:18:58<1:15:44, 1.52file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 56%|█████▌ | 8396/15001 [3:26:33<2:20:55, 1.28s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 58%|█████▊ | 8698/15001 [3:34:21<1:38:01, 1.07file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 60%|█████▉ | 8990/15001 [3:42:09<3:27:39, 2.07s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 62%|██████▏ | 9297/15001 [3:49:59<1:50:31, 1.16s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 64%|██████▍ | 9598/15001 [3:57:57<1:37:09, 1.08s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 66%|██████▌ | 9893/15001 [4:06:12<2:19:02, 1.63s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 68%|██████▊ | 10199/15001 [4:14:26<1:16:35, 1.04file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 70%|██████▉ | 10489/15001 [4:22:42<3:32:36, 2.83s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 72%|███████▏ | 10797/15001 [4:30:53<1:07:18, 1.04file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 74%|███████▍ | 11092/15001 [4:39:11<2:04:50, 1.92s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 76%|███████▌ | 11400/15001 [4:47:20<57:53, 1.04file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 78%|███████▊ | 11698/15001 [4:55:02<54:39, 1.01file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 80%|███████▉ | 11997/15001 [5:02:41<49:10, 1.02file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 82%|████████▏ | 12298/15001 [5:10:23<30:49, 1.46file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 84%|████████▍ | 12599/15001 [5:18:05<29:42, 1.35file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 85%|████████▌ | 12757/15001 [5:22:23<1:17:36, 2.08s/file]/home/agres/projects/predictify/.venv/lib/python3.10/site-packages/librosa/core/pitch.py:103: UserWarning: Trying to estimate tuning from empty frequency set.\n",
|
|
" return pitch_tuning(\n",
|
|
"Processing files: 86%|████████▌ | 12898/15001 [5:25:46<29:59, 1.17file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 88%|████████▊ | 13198/15001 [5:33:27<23:31, 1.28file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 90%|████████▉ | 13499/15001 [5:41:12<22:11, 1.13file/s] "
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 92%|█████████▏| 13800/15001 [5:48:57<15:00, 1.33file/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 94%|█████████▍| 14089/15001 [5:56:46<28:30, 1.88s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 96%|█████████▌| 14396/15001 [6:04:34<11:53, 1.18s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 98%|█████████▊| 14698/15001 [6:12:21<05:23, 1.07s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 100%|█████████▉| 14995/15001 [6:20:07<00:07, 1.19s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Backup created at audio_features_backup.pkl\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Processing files: 100%|██████████| 15001/15001 [6:20:29<00:00, 1.52s/file]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Done processing 15001 new tracks.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import os\n",
|
|
"import pickle\n",
|
|
"import shutil\n",
|
|
"import librosa\n",
|
|
"import numpy as np\n",
|
|
"from concurrent.futures import ProcessPoolExecutor\n",
|
|
"from tqdm import tqdm # Optional for progress bars\n",
|
|
"\n",
|
|
"# Your existing summarize and extract function\n",
|
|
"# (Make sure extract_features_librosa is top-level for multiprocessing)\n",
|
|
"\n",
|
|
"def summarize_feature(feature_array):\n",
|
|
" means = np.mean(feature_array)\n",
|
|
" stds = np.std(feature_array)\n",
|
|
" medians = np.median(feature_array)\n",
|
|
" return [means, stds, medians] \n",
|
|
"\n",
|
|
"def flatten(track_features):\n",
|
|
" return [feature for features in track_features for feature in features]\n",
|
|
"\n",
|
|
"def extract_features_librosa(file_path):\n",
|
|
" y, sr = librosa.load(file_path, sr=None)\n",
|
|
" features = [\n",
|
|
" summarize_feature(librosa.feature.mfcc(y=y, sr=sr, n_mfcc=12)),\n",
|
|
" summarize_feature(librosa.feature.chroma_stft(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.chroma_cqt(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.chroma_cens(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.chroma_vqt(y=y, sr=sr, intervals='equal')),\n",
|
|
" summarize_feature(librosa.feature.melspectrogram(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.spectral_centroid(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.spectral_bandwidth(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.spectral_contrast(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.spectral_flatness(y=y)),\n",
|
|
" summarize_feature(librosa.feature.spectral_rolloff(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.poly_features(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.tonnetz(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.zero_crossing_rate(y)),\n",
|
|
" summarize_feature(librosa.feature.tempogram(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.fourier_tempogram(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.tempogram_ratio(y=y, sr=sr)),\n",
|
|
" summarize_feature(librosa.feature.rms(y=y)),\n",
|
|
" np.ravel(librosa.feature.tempo(y=y, sr=sr))\n",
|
|
" ]\n",
|
|
" return flatten(features)\n",
|
|
"\n",
|
|
"def process_file(file, folder_path, id_to_genre):\n",
|
|
" try:\n",
|
|
" file_path = os.path.join(folder_path, file)\n",
|
|
" file_id = os.path.splitext(file)[0]\n",
|
|
" features = extract_features_librosa(file_path)\n",
|
|
" genre = id_to_genre.get(file_id, None)\n",
|
|
" return features, genre, file\n",
|
|
" except Exception as e:\n",
|
|
" print(f\"Error processing {file}: {e}\")\n",
|
|
" return None, None, file\n",
|
|
"\n",
|
|
"# Load pickle\n",
|
|
"results_file = 'audio_features.pkl'\n",
|
|
"if os.path.exists(results_file):\n",
|
|
" with open(results_file, 'rb') as file:\n",
|
|
" saved_data = pickle.load(file)\n",
|
|
" X = saved_data.get('X', [])\n",
|
|
" y_labels = saved_data.get('y_labels', [])\n",
|
|
" processed_files = set(saved_data.get('processed_files', []))\n",
|
|
"else:\n",
|
|
" X = []\n",
|
|
" y_labels = []\n",
|
|
" processed_files = set()\n",
|
|
"\n",
|
|
"folder_path = './audio_previews'\n",
|
|
"all_files = [f for f in os.listdir(folder_path) if f.endswith('.mp3')]\n",
|
|
"files_to_process = [f for f in all_files if f not in processed_files]\n",
|
|
"\n",
|
|
"# This must be defined before! (You're using a DataFrame)\n",
|
|
"id_to_genre = dict(zip(tracks_info_df['id'], tracks_info_df['genre']))\n",
|
|
"\n",
|
|
"batch_size = os.cpu_count() or 4\n",
|
|
"backup_interval = 100\n",
|
|
"counter = 0\n",
|
|
"\n",
|
|
"with tqdm(total=len(files_to_process), desc=\"Processing files\", unit=\"file\") as pbar:\n",
|
|
" with ProcessPoolExecutor(max_workers=batch_size) as executor:\n",
|
|
" futures = []\n",
|
|
" for i in range(0, len(files_to_process), batch_size):\n",
|
|
" batch = files_to_process[i:i+batch_size]\n",
|
|
" futures = [executor.submit(process_file, file, folder_path, id_to_genre) for file in batch]\n",
|
|
"\n",
|
|
" for future in futures:\n",
|
|
" features, genre, file = future.result()\n",
|
|
" if features is not None:\n",
|
|
" X.append(features)\n",
|
|
" y_labels.append(genre)\n",
|
|
" processed_files.add(file)\n",
|
|
" counter += 1\n",
|
|
" \n",
|
|
" pbar.update(1)\n",
|
|
"\n",
|
|
" # Save after each batch\n",
|
|
" with open(results_file, 'wb') as f:\n",
|
|
" pickle.dump({\n",
|
|
" 'X': X,\n",
|
|
" 'y_labels': y_labels,\n",
|
|
" 'processed_files': list(processed_files)\n",
|
|
" }, f)\n",
|
|
"\n",
|
|
" if counter % backup_interval == 0:\n",
|
|
" backup_file = results_file.replace(\".pkl\", \"_backup.pkl\")\n",
|
|
" shutil.copy(results_file, backup_file)\n",
|
|
" print(f\"Backup created at {backup_file}\")\n",
|
|
"\n",
|
|
"print(f\"Done processing {counter} new tracks.\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Merge two pkl files\n",
|
|
"\n",
|
|
"import pickle\n",
|
|
"import os\n",
|
|
"\n",
|
|
"def merge_pickles(file1, file2, output_file):\n",
|
|
" with open(file1, 'rb') as f1, open(file2, 'rb') as f2:\n",
|
|
" data1 = pickle.load(f1)\n",
|
|
" data2 = pickle.load(f2)\n",
|
|
"\n",
|
|
" # Merge the data\n",
|
|
" merged_data = {\n",
|
|
" 'X': data1['X'] + data2['X'],\n",
|
|
" 'y_labels': data1['y_labels'] + data2['y_labels'],\n",
|
|
" 'processed_files': list(set(data1['processed_files'] + data2['processed_files']))\n",
|
|
" }\n",
|
|
"\n",
|
|
" # Save the merged data\n",
|
|
" with open(output_file, 'wb') as f_out:\n",
|
|
" pickle.dump(merged_data, f_out)\n",
|
|
"\n",
|
|
"# Usage\n",
|
|
"file1 = 'audio_features.pkl'\n",
|
|
"file2 = 'audio_features_chris.pkl'\n",
|
|
"output_file = 'audio_features_merged.pkl'\n",
|
|
"\n",
|
|
"merge_pickles(file1, file2, output_file)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"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.11.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|