{"id":1886,"date":"2025-03-06T07:00:37","date_gmt":"2025-03-06T13:00:37","guid":{"rendered":"https:\/\/wollen.org\/blog\/?p=1886"},"modified":"2026-01-28T02:57:38","modified_gmt":"2026-01-28T08:57:38","slug":"alexa-whats-in-a-name","status":"publish","type":"post","link":"https:\/\/wollen.org\/blog\/2025\/03\/alexa-whats-in-a-name\/","title":{"rendered":"Alexa, what&#8217;s in a name?"},"content":{"rendered":"<p>Have you ever had a private conversation near your Amazon Echo and it suddenly lit up like an unwanted eavesdropping little creep? This happened to me and I wondered how much worse it is for women named Alexa. I understand that you can change an Echo&#8217;s wake word\u2014you can force it to answer to &#8220;Amazon&#8221; or &#8220;Computer&#8221;\u2014but most people don&#8217;t do that.<\/p>\n<p>Is it enough of a problem that parents have stopped naming their kids Alexa? Conveniently, the Social Security Administration publishes an annual baby name dataset that goes back to 1880. We can check and see exactly how the trend has changed since the Echo was introduced a decade ago.<\/p>\n<figure id=\"attachment_1904\" aria-describedby=\"caption-attachment-1904\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/02\/echo_info.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1904 size-medium\" src=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/02\/echo_info-300x203.jpg\" alt=\"\" width=\"300\" height=\"203\" srcset=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/02\/echo_info-300x203.jpg 300w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/02\/echo_info-768x520.jpg 768w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/02\/echo_info.jpg 975w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1904\" class=\"wp-caption-text\">An Amazon Echo infographic from 2014.<\/figcaption><\/figure>\n<hr \/>\n<h4>1. Prepare the data.<\/h4>\n<p>Begin by visiting <a href=\"https:\/\/www.ssa.gov\/oact\/babynames\/limits.html\" target=\"_blank\" rel=\"noopener\">ssa.gov<\/a> and clicking the &#8220;National data&#8221; link. Download the archive and unzip it within the same folder as your Python script. The <em>names<\/em> folder will contain a comma-delimited text file for every year dating back to 1880. For example, the most recent file is named <em>yob2023.txt<\/em>. If you open the file, you&#8217;ll find the first few lines look like this:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Olivia,F,15270\r\nEmma,F,13527\r\nCharlotte,F,12596\r\nAmelia,F,12311\r\nSophia,F,11944<\/pre>\n<p>There&#8217;s no header row but we can see there are three columns: name, sex, and count. In 2023, there were 15,270 female babies named Olivia.<\/p>\n<p>To create our time series we&#8217;ll want to concatenate all the files into a single DataFrame, then filter it down to Alexa rows. Using a <code>for<\/code> loop, read each file into a DataFrame and <code>append<\/code> it to a list. Then use the <code>concat<\/code> method to <em>stack<\/em> all the individual DataFrames into a single large one. Note that we have to manually define column labels because they aren&#8217;t present in the data.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">import pandas as pd\r\n\r\ndf_list = []\r\n\r\nfor year in range(1880, 2024):\r\n    df = pd.read_csv(f\"names\/yob{year}.txt\", names=[\"name\", \"sex\", \"count\"])\r\n\r\n    df.loc[:, 'year'] = year\r\n\r\n    df_list.append(df)\r\n\r\ndf = pd.concat(df_list)<\/pre>\n<p>Create a view of the DataFrame that&#8217;s limited to Alexa rows. Let&#8217;s begin with 1975 to make the plot more readable.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">df = df[df['name'] == \"Alexa\"]\r\n\r\ndf = df[df['sex'] == \"F\"]\r\n\r\ndf = df[df['year'] &gt;= 1975]<\/pre>\n<p>Now we have a 49-row DataFrame with everything we need to create a plot. <code>df.head()<\/code> looks like this:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">      name sex  count  year\r\n701  Alexa   F    211  1975\r\n722  Alexa   F    202  1976\r\n791  Alexa   F    189  1977\r\n845  Alexa   F    175  1978\r\n874  Alexa   F    176  1979<\/pre>\n<hr \/>\n<h4>2. Plot the data.<\/h4>\n<p>I&#8217;ll use a custom <em>mplstyle<\/em> inspired by the Amazon color scheme below. It will be linked at the bottom of this post.<\/p>\n<p><a href=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/amazon_logo_example.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1997 size-full\" src=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/amazon_logo_example.jpg\" alt=\"\" width=\"322\" height=\"176\" srcset=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/amazon_logo_example.jpg 322w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/amazon_logo_example-300x164.jpg 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/a><\/p>\n<p>Set the style and create an Axes instance on which we can plot.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">plt.style.use(\"wollen_amazon.mplstyle\")\r\n\r\nfig, ax = plt.subplots()<\/pre>\n<p>We&#8217;re working with a time series so a continuous line plot makes sense. But with annual data points I think it&#8217;s a good idea to add markers at each point. It isn&#8217;t strictly necessary but it helps to communicate how the data is reported.<\/p>\n<p>It would also be okay to represent the data as a bar plot, especially with data reported annually. But when highlighting a trend I prefer to plot a line.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">ax.plot(df['year'], df['count'], marker=\"o\", markersize=5)<\/pre>\n<p>We can combine ticks and window limits into a single <code>set<\/code> method.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">ax.set(xticks=range(1975, 2030, 5),\r\n       xlim=(1974, 2026),\r\n       yticks=range(0, 8000, 1000),\r\n       ylim=(-100, 7100))<\/pre>\n<p>Since we&#8217;re analyzing how the Echo affected baby name trends, let&#8217;s highlight its launch with an annotation. I like wedges but Matplotlib has several other built-in <a href=\"https:\/\/matplotlib.org\/3.1.1\/api\/_as_gen\/matplotlib.pyplot.annotate.html\" target=\"_blank\" rel=\"noopener\">arrow style options<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">ax.annotate(\"Amazon Echo\\nLaunched\",\r\n            xy=(2014, 4100), xytext=(2014, 3200),\r\n            size=10, ha=\"center\", va=\"center\",\r\n            arrowprops={\"arrowstyle\": \"wedge\", \"color\": '#DDD'})<\/pre>\n<p>Use <code>text<\/code> to cite the Social Security Administration. Let&#8217;s place this in the upper-left corner. A left horizontal alignment (<code>ha<\/code>) and top vertical alignment (<code>va<\/code>) help snug up the text to grid lines.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">ax.text(1975.2, 6950,\r\n        \"Data: U.S. Social Security Administration\",\r\n        size=10, ha=\"left\", va=\"top\")<\/pre>\n<p>Finally, set a title and save the figure.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">ax.set_title('Number of Babies Named \"Alexa\"  |  1975\u20132023')\r\n\r\nplt.savefig(\"alexa_1975-2023.png\", dpi=150)<\/pre>\n<hr \/>\n<h4>3. The output.<\/h4>\n<p><a href=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1996 size-full\" src=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023.png\" alt=\"\" width=\"1950\" height=\"1125\" srcset=\"https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023.png 1950w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023-300x173.png 300w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023-1024x591.png 1024w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023-768x443.png 768w, https:\/\/wollen.org\/blog\/wp-content\/uploads\/2025\/03\/alexa_1975-2023-1536x886.png 1536w\" sizes=\"auto, (max-width: 1950px) 100vw, 1950px\" \/><\/a><\/p>\n<p>The downward curve almost looks like an Amazon logo!<\/p>\n<p>The Echo was rolled out in late 2014 and 2015 so it&#8217;s fair to say the name Alexa was already past its peak. It&#8217;s normal for names to rise and fall, although this fall appears steeper than it may have been otherwise. Alexa&#8217;s trend looks less like Allison&#8217;s 35-year decline from similar levels of popularity and more like the O.J. baby name crash of 1994.<\/p>\n<p>If nothing else, it&#8217;s safe to attribute the short-lived 40% spike in 2015 to the Echo launch. Society was much more optimistic about AI-powered assistants a decade ago and &#8220;Alexa&#8221; captured that positive spirit. Of course, the practical problem of sharing the name quickly made itself apparent and the resurgence fell off a cliff. We&#8217;re now down to a few hundred Alexa babies per year.<\/p>\n<hr \/>\n<p><a href=\"https:\/\/wollen.org\/misc\/alexa_name_2025.zip\"><strong>Download the Matplotlib style.<\/strong><\/a><\/p>\n<p><a href=\"https:\/\/www.ssa.gov\/oact\/babynames\/limits.html\" target=\"_blank\" rel=\"noopener\"><strong>Baby name data (ssa.gov).<\/strong><\/a><\/p>\n<p><strong>Full code:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">import pandas as pd\r\nimport matplotlib.pyplot as plt\r\n\r\n\r\ndf_list = []\r\n\r\nfor year in range(1880, 2024):\r\n    df = pd.read_csv(f\"names\/yob{year}.txt\", names=[\"name\", \"sex\", \"count\"])\r\n\r\n    df.loc[:, 'year'] = year\r\n\r\n    df_list.append(df)\r\n\r\ndf = pd.concat(df_list)\r\n\r\ndf = df[df['name'] == \"Alexa\"]\r\n\r\ndf = df[df['sex'] == \"F\"]\r\n\r\ndf = df[df['year'] &gt;= 1975]\r\n\r\nprint(df.head())\r\n\r\nplt.style.use(\"wollen_amazon.mplstyle\")\r\n\r\nfig, ax = plt.subplots()\r\n\r\nax.plot(df['year'], df['count'], marker=\"o\", markersize=5)\r\n\r\nax.set(xticks=range(1975, 2030, 5),\r\n       xlim=(1974, 2026),\r\n       yticks=range(0, 8000, 1000),\r\n       ylim=(-100, 7100))\r\n\r\nax.annotate(\"Amazon Echo\\nLaunched\",\r\n            xy=(2014, 4100), xytext=(2014, 3200),\r\n            size=10, ha=\"center\", va=\"center\",\r\n            arrowprops={\"arrowstyle\": \"wedge\", \"color\": '#DDD'})\r\n\r\nax.text(1975.2, 6950,\r\n        \"Data: U.S. Social Security Administration\",\r\n        size=10, ha=\"left\", va=\"top\")\r\n\r\nax.set_title('Number of Babies Named \"Alexa\"  |  1975\u20132023')\r\n\r\nplt.savefig(\"alexa_1975-2023.png\", dpi=150)<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever had a private conversation near your Amazon Echo and it suddenly lit up like an unwanted eavesdropping little creep? This happened to me and I wondered how much worse it is for women named Alexa. I understand<\/p>\n","protected":false},"author":1,"featured_media":2251,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[381,373,374,376,375,22,334,122,380,379,24,126,30,46,25,378,140,377],"class_list":["post-1886","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-history","tag-ai","tag-alexa","tag-amazon","tag-baby-names","tag-bezos","tag-data","tag-dataframe","tag-dataset","tag-echo","tag-logo","tag-matplotlib","tag-mplstyle","tag-pandas","tag-plot","tag-python","tag-social-security","tag-style","tag-time-series"],"_links":{"self":[{"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/posts\/1886","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/comments?post=1886"}],"version-history":[{"count":28,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/posts\/1886\/revisions"}],"predecessor-version":[{"id":3353,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/posts\/1886\/revisions\/3353"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/media\/2251"}],"wp:attachment":[{"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/media?parent=1886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/categories?post=1886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollen.org\/blog\/wp-json\/wp\/v2\/tags?post=1886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}