{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genderfemalemale
age
middle_aged49
old55
young83
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agemiddle_agedoldyoung
manual_quality_reviewgender
badfemale121
male031
mediumfemale100
male210
okfemale237
male612
very badmale100
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agemiddle_agedoldyoung
gender
female237
male612
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agemiddle_agedoldyoung
gender
female337
male822
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genderfemalemale
languageage
enmiddle_aged15
young21
NaNmiddle_aged34
old55
young62
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
voice_idnamepreview_urlowner_idpermission_on_resourceis_legacyis_mixedaccentdescriptionagegendercategorylanguagedescriptive
245ugI9yHu7QMtMOjozITa3Nimbus - deep & meditativehttps://storage.googleapis.com/eleven-public-p...NaNadminFalseFalseamericanNaNoldmaleentertainment_tvNaNneutral
2841SJjcjy45jFu6erSHVWqHoward - American Radio Voicehttps://storage.googleapis.com/eleven-public-p...NaNadminFalseFalseamericanNaNoldmaleadvertisementNaNmodulated
362oUAzGw71wG6JCbHMK33sMark - calm and wise teacherhttps://storage.googleapis.com/eleven-public-p...NaNadminFalseFalsebritishNaNoldmaleinformative_educationalNaNdeep
\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 }