{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## initialize"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%cd .."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"import dotenv\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dotenv.load_dotenv()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## voices eda"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(34, 15)\n"
]
}
],
"source": [
"# df = pd.read_csv('data/11labs_tts_voices.csv')\n",
"df = pd.read_csv('data/11labs_available_tts_voices.reviewed.csv')\n",
"df[\"age\"] = df[\"age\"].str.replace(\" \", \"_\").str.replace(\"-\", \"_\")\n",
"print(df.shape)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['voice_id', 'name', 'preview_url', 'manual_quality_review', 'owner_id',\n",
" 'permission_on_resource', 'is_legacy', 'is_mixed', 'accent',\n",
" 'description', 'age', 'gender', 'category', 'language', 'descriptive'],\n",
" dtype='object')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"language\n",
"NaN 25\n",
"en 9\n",
"Name: count, dtype: int64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['language'].value_counts(dropna=False)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"gender\n",
"female 17\n",
"male 17\n",
"Name: count, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['gender'].value_counts(dropna=False)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"age\n",
"middle_aged 13\n",
"young 11\n",
"old 10\n",
"Name: count, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['age'].value_counts(dropna=False)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" gender | \n",
" female | \n",
" male | \n",
"
\n",
" \n",
" age | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" middle_aged | \n",
" 4 | \n",
" 9 | \n",
"
\n",
" \n",
" old | \n",
" 5 | \n",
" 5 | \n",
"
\n",
" \n",
" young | \n",
" 8 | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"gender female male\n",
"age \n",
"middle_aged 4 9\n",
"old 5 5\n",
"young 8 3"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(['age', 'gender'], dropna=False)['voice_id'].count().unstack(fill_value=0)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" age | \n",
" middle_aged | \n",
" old | \n",
" young | \n",
"
\n",
" \n",
" manual_quality_review | \n",
" gender | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bad | \n",
" female | \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
"
\n",
" \n",
" male | \n",
" 0 | \n",
" 3 | \n",
" 1 | \n",
"
\n",
" \n",
" medium | \n",
" female | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" male | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" ok | \n",
" female | \n",
" 2 | \n",
" 3 | \n",
" 7 | \n",
"
\n",
" \n",
" male | \n",
" 6 | \n",
" 1 | \n",
" 2 | \n",
"
\n",
" \n",
" very bad | \n",
" male | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"age middle_aged old young\n",
"manual_quality_review gender \n",
"bad female 1 2 1\n",
" male 0 3 1\n",
"medium female 1 0 0\n",
" male 2 1 0\n",
"ok female 2 3 7\n",
" male 6 1 2\n",
"very bad male 1 0 0"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby([\"manual_quality_review\", 'gender', \"age\"], dropna=False)[\n",
" \"voice_id\"\n",
"].count().unstack(fill_value=0)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" age | \n",
" middle_aged | \n",
" old | \n",
" young | \n",
"
\n",
" \n",
" gender | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" female | \n",
" 2 | \n",
" 3 | \n",
" 7 | \n",
"
\n",
" \n",
" male | \n",
" 6 | \n",
" 1 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"age middle_aged old young\n",
"gender \n",
"female 2 3 7\n",
"male 6 1 2"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df['manual_quality_review'].isin(['ok'])].groupby(['gender', \"age\"], dropna=False)[\n",
" \"voice_id\"\n",
"].count().unstack(fill_value=0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" age | \n",
" middle_aged | \n",
" old | \n",
" young | \n",
"
\n",
" \n",
" gender | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" female | \n",
" 3 | \n",
" 3 | \n",
" 7 | \n",
"
\n",
" \n",
" male | \n",
" 8 | \n",
" 2 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"age middle_aged old young\n",
"gender \n",
"female 3 3 7\n",
"male 8 2 2"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[df['manual_quality_review'].isin(['ok', 'medium'])].groupby(['gender', \"age\"], dropna=False)[\n",
" \"voice_id\"\n",
"].count().unstack(fill_value=0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" gender | \n",
" female | \n",
" male | \n",
"
\n",
" \n",
" language | \n",
" age | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" en | \n",
" middle_aged | \n",
" 1 | \n",
" 5 | \n",
"
\n",
" \n",
" young | \n",
" 2 | \n",
" 1 | \n",
"
\n",
" \n",
" NaN | \n",
" middle_aged | \n",
" 3 | \n",
" 4 | \n",
"
\n",
" \n",
" old | \n",
" 5 | \n",
" 5 | \n",
"
\n",
" \n",
" young | \n",
" 6 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"gender female male\n",
"language age \n",
"en middle_aged 1 5\n",
" young 2 1\n",
"NaN middle_aged 3 4\n",
" old 5 5\n",
" young 6 2"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(['language', 'age', 'gender'], dropna=False)['voice_id'].count().unstack(fill_value=0)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"descriptive\n",
"pleasant 6\n",
"casual 5\n",
"confident 3\n",
"calm 3\n",
"NaN 3\n",
"intense 3\n",
"chill 2\n",
"formal 1\n",
"serious 1\n",
"mature 1\n",
"cute 1\n",
"crisp 1\n",
"upbeat 1\n",
"professional 1\n",
"excited 1\n",
"wise 1\n",
"Name: count, dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['descriptive'].value_counts(dropna=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(39, 14)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"age_group = 'old'\n",
"gender = 'male'\n",
"df_filtered = df[(df['age'] == age_group) & (df['gender'] == gender)]\n",
"df_filtered.shape"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" voice_id | \n",
" name | \n",
" preview_url | \n",
" owner_id | \n",
" permission_on_resource | \n",
" is_legacy | \n",
" is_mixed | \n",
" accent | \n",
" description | \n",
" age | \n",
" gender | \n",
" category | \n",
" language | \n",
" descriptive | \n",
"
\n",
" \n",
" \n",
" \n",
" 245 | \n",
" ugI9yHu7QMtMOjozITa3 | \n",
" Nimbus - deep & meditative | \n",
" https://storage.googleapis.com/eleven-public-p... | \n",
" NaN | \n",
" admin | \n",
" False | \n",
" False | \n",
" american | \n",
" NaN | \n",
" old | \n",
" male | \n",
" entertainment_tv | \n",
" NaN | \n",
" neutral | \n",
"
\n",
" \n",
" 284 | \n",
" 1SJjcjy45jFu6erSHVWq | \n",
" Howard - American Radio Voice | \n",
" https://storage.googleapis.com/eleven-public-p... | \n",
" NaN | \n",
" admin | \n",
" False | \n",
" False | \n",
" american | \n",
" NaN | \n",
" old | \n",
" male | \n",
" advertisement | \n",
" NaN | \n",
" modulated | \n",
"
\n",
" \n",
" 362 | \n",
" oUAzGw71wG6JCbHMK33s | \n",
" Mark - calm and wise teacher | \n",
" https://storage.googleapis.com/eleven-public-p... | \n",
" NaN | \n",
" admin | \n",
" False | \n",
" False | \n",
" british | \n",
" NaN | \n",
" old | \n",
" male | \n",
" informative_educational | \n",
" NaN | \n",
" deep | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" voice_id name \\\n",
"245 ugI9yHu7QMtMOjozITa3 Nimbus - deep & meditative \n",
"284 1SJjcjy45jFu6erSHVWq Howard - American Radio Voice \n",
"362 oUAzGw71wG6JCbHMK33s Mark - calm and wise teacher \n",
"\n",
" preview_url owner_id \\\n",
"245 https://storage.googleapis.com/eleven-public-p... NaN \n",
"284 https://storage.googleapis.com/eleven-public-p... NaN \n",
"362 https://storage.googleapis.com/eleven-public-p... NaN \n",
"\n",
" permission_on_resource is_legacy is_mixed accent description age \\\n",
"245 admin False False american NaN old \n",
"284 admin False False american NaN old \n",
"362 admin False False british NaN old \n",
"\n",
" gender category language descriptive \n",
"245 male entertainment_tv NaN neutral \n",
"284 male advertisement NaN modulated \n",
"362 male informative_educational NaN deep "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_filtered.sample(3)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['HrciSEXYMv69BAJ4ixOW', 'oUAzGw71wG6JCbHMK33s', 'Zl8mecngHM53e1hl151S']"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_filtered.sample(3)['voice_id'].to_list()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "ai-audio-books",
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}