{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Male and Female Participation on csail-related@csail.mit.edu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "William Li, wli@csail.mit.edu" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "csail-related@csail.mit.edu (\"csail-related\") is the lab-wide email list of the [MIT Computer Science and Artificial Intelligence Laboratory (CSAIL)](http://csail.mit.edu). The archives of csail-related, dating back to July 2004, are publicly available at http://lists.csail.mit.edu/pipermail/csail-related.\n", "\n", "What is the participation by gender on csail-related, and how does it compare to the gender ratio in CSAIL? Relative to their population in CSAIL, do males contribute disproportionately more to csail-related?" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Methodology" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We propose the following:\n", "\n", "1. Scrape the csail-related archives by month.\n", "2. Apply a gender checker on people's first names and compute the fraction of emails originating from males for each month. A common method of doing this is to use data derived from U.S. Census data. Many open-source packages are available to do this. \n", "3. Estimate the fraction of males and females in CSAIL from the CSAIL directory.\n", "4. Test the following null hypothesis under $\\alpha = 0.05$: the fraction of emails sent by males to csail-related is equal to, or less than, the fraction of males in CSAIL." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Code/Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most of the code is wrapped in functions at the end of this document. This notebook and related code can be found at https://github.com/wpli/mailman-stats." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From July 2004 to January 2014, there have been 115 months:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print len( get_all_ym_tuples() )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "115\n" ] } ], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will get \"ym_email_dict\", which has ( year, month ) as keys and the list of authors as tuples:\n", "\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ym_email_dict = get_emails_by_month()\n", "\n", "# sample entry: July 2004\n", "print ym_email_dict[(2004,7)]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['C. Scott Ananian', 'C. Scott Ananian', 'Rodney Brooks', 'Michael McGeachie', 'Michael G. Ross', 'Richard Stallman']\n" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Total Emails:\", numpy.sum( [ len(i) for i in ym_email_dict.values() ] )\n", "print \"Total Unique Authors:\", len( set( [ i for sublist in ym_email_dict.values() for i in sublist ] ) )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Total Emails: 12259\n", "Total Unique Authors: 2072\n" ] } ], "prompt_number": 68 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we apply our gender checker on first names. We apply some rule-based logic for names that are in the format \"Last, First\" and for names with initials (e.g. K. Bob Smith). We use a dictionary available from [this repository](https://github.com/Bemmu/gender-from-name), which contains 5177 names mapping to gender. Note that, if the name dictionary does not include the name, the name is excluded from the analysis. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "ym_percentage_dict = get_ym_percentage_dict()\n", "\n", "#sample entry: October 2013\n", "print \"Example entry (October 2013):\", ym_percentage_dict[(2013,10)]\n", "print \"Average male fraction:\", numpy.average( ym_percentage_dict.values() )" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Example entry (October 2013): 0.731543624161\n", "Average male fraction: 0.746385800605\n" ] } ], "prompt_number": 69 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to get an estimate of the percentage of males on csail-related. We do not have direct access to this information. As a proxy, we parse the names from http://www.csail.mit.edu/peoplesearch (also publicly available) and apply our gender checker. It appears that CSAIL is approximately 70% male." ] }, { "cell_type": "code", "collapsed": false, "input": [ "population_male_fraction = get_male_female_counts()\n", "print population_male_fraction" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.696124031008\n" ] } ], "prompt_number": 70 }, { "cell_type": "markdown", "metadata": {}, "source": [ "74.6% of emails came from males, while CSAIL is comprised of 69.6% males." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It might be interesting to show how the fraction has changed month to month. There doesn't seem to be a particularly strong upward or downward trend." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plot( [ ym_percentage_dict[ym] for ym in get_all_ym_tuples() ] )\n", "xlabel( \"Months Since July 2004\" )\n", "ylabel( \"Fraction of Emails Sent by Males\" )" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a histogram of the fractions for each month:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "hist( ym_percentage_dict.values() )\n", "xlabel('Fraction of Emails Sent by Males' )\n", "ylabel( 'Number of Months' )" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 72, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nIpX7fyaHkaOvBQwiAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 72 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to the above procedure, just under three-quarters of emails to csail-related are from males.\n", "\n", "We formulate the following null hypothesis: the fraction of emails sent by males is less than or equal to 0.70 (the estimated population of males). \n", "\n", "We apply a one-sided t-test to our data. See http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.html for the scipy.stats documentation (note that this function returns the two-tailed p-value, and we want the one-tailed p-value)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import stats\n", "data = numpy.array( ym_percentage_dict.values() )\n", "ttest = stats.ttest_1samp(data,0.7)\n", "print \"t-statistic:\", ttest[0]\n", "print \"one-tailed p-value:\", ttest[1] / 2" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "t-statistic: 5.64971091117\n", "one-tailed p-value: 6.00082482668e-08\n" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The p-value ie $6\\times10^{-08}$, which meets our significance threshold of $\\alpha=0.05$ for rejecting the null hypothesis." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Conclusions and Further Work" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This analysis suggests that males contribute disproportionately more to csail-related than females. The difference is small (74.6% of emails are sent by males, while 69.7% of the listings in the people directory are male) but statistically significant.\n", "\n", "Limitations: The gender checker is imperfect: some names are not available and some gender inferences may be incorrect. As well, our estimate of the population of members of csail-related may be incorrect, since we used the January 2014 CSAIL directory. However, these potential sources of error seem unlikely to affect the general direction of the results.\n", "\n", "Thanks to Ramesh Sridharan for feedback." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Appendix: Code" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from lxml import etree\n", "from StringIO import StringIO\n", "import urllib2\n", "sys.path.append( '../third-party/gender-from-name/' )\n", "import gender\n", "import collections\n", "import calendar\n", "\n", "\n", "\n", "def get_male_female_counts():\n", " with open( '../data/mitcsailpeople.html' ) as f:\n", " html_string = f.read()\n", " parser = etree.HTMLParser()\n", " tree = etree.parse( StringIO( html_string ), parser )\n", "\n", " root = tree.getroot()\n", " for i in list(root):\n", " if i.tag == 'body': \n", " body_element = i\n", " \n", " table_element = [ i for i in body_element if i.tag == 'table' ][0]\n", "\n", " csail_first_names = []\n", " \n", " for elem in list( table_element ):\n", " if elem.tag == 'tbody':\n", " tr_elems = [ i for i in list( elem ) if i.tag == 'tr' ]\n", " for tr_elem in tr_elems:\n", " td_elems = [ i for i in list( tr_elem ) if i.tag == 'td' ]\n", " if len( td_elems ) == 6:\n", " first_name_elem = td_elems[1]\n", " assert first_name_elem.getchildren()[0].tag == 'a'\n", " csail_first_names.append( first_name_elem.getchildren()[0].text )\n", " else:\n", " pass\n", " \n", "\n", " ct = 0\n", " current_csail_gender_list = []\n", " for name in csail_first_names:\n", " if name == None:\n", " pass\n", " elif \" \" in name:\n", " split_name = name.split()\n", " if len( split_name[0] ) > 1:\n", " name_to_use = split_name[0]\n", " else: \n", " name_to_use = split_name[1] \n", " else:\n", " name_to_use = name\n", " \n", " if name_to_use.upper() in gender.gender:\n", " inferred_gender = gender.gender[name_to_use.upper()]\n", " current_csail_gender_list.append( inferred_gender )\n", " else:\n", " #print repr(name_to_use.upper()),\n", " ct += 1\n", "\n", " total_counts = collections.Counter( current_csail_gender_list )\n", " total_male = total_counts['male']\n", " total_female = total_counts['female']\n", " \n", " return float( total_male ) / ( total_male + total_female )\n", "\n", "def get_all_ym_tuples():\n", " years = range( 2004,2015)\n", " all_month_numbers = range(1,13)\n", " months = list( calendar.month_name[1:] )\n", " \n", " year_month_tuples = []\n", " \n", " year = 2004\n", " months = range(7,13)\n", " for m in months:\n", " year_month_tuples.append( ( year, m ) )\n", " \n", " years = range( 2005, 2014 )\n", " \n", " for y in years:\n", " for m in all_month_numbers:\n", " year_month_tuples.append( ( y, m ) )\n", " \n", " year_month_tuples.append( ( 2014, 1 ) )\n", "\n", " return year_month_tuples\n", "\n", "\n", "def get_emails_by_month():\n", " ym_email_dict = {}\n", " year_month_tuples = get_all_ym_tuples()\n", " base_url = \"http://lists.csail.mit.edu/pipermail/csail-related/\"\n", " for ym in year_month_tuples:\n", " year = ym[0]\n", " month_name = calendar.month_name[ym[1]]\n", " \n", " folder = str( year ) + \"-\" + month_name + \"/\"\n", " full_url = base_url + folder + \"author.html\"\n", " data = urllib2.urlopen( full_url )\n", " html_string = data.read()\n", " parser = etree.HTMLParser()\n", " tree = etree.parse( StringIO( html_string), parser )\n", " root = tree.getroot()\n", " for i in list(root):\n", " if i.tag == 'body': \n", " body_element = i \n", " \n", " #print body_element\n", " \n", " ul_elements = [ i for i in list( body_element ) if i.tag == 'ul' ]\n", " email_thread_elements = ul_elements[1]\n", " all_authors = []\n", " for elem in email_thread_elements.getchildren():\n", " if elem.tag == 'li':\n", " for elem2 in elem.getchildren():\n", " if elem2.tag == 'i':\n", " all_authors.append( elem2.text.strip('\\n' ) )\n", " #print year, month_name, len( flatten_threads( all_authors ) )\n", " ym_email_dict[ ym ] = all_authors \n", " \n", " return ym_email_dict\n", " \n", " \n", "def get_ym_percentage_dict():\n", " ym_percentage_dict = {} \n", " for ym in get_all_ym_tuples():\n", " all_authors = ym_email_dict[ym]\n", " gender_list = []\n", " gender_unknown = []\n", " for name in list(all_authors):\n", "\n", " first_name = get_name( name )\n", " if first_name != None:\n", " first_name_upper = first_name.upper()\n", " \n", " if first_name_upper in gender.gender: \n", " gender_result = gender.gender[ first_name.upper() ]\n", " gender_list.append( gender_result )\n", " #if type(gender_result) is tuple:\n", " # print first_name_upper, gender_result\n", " else:\n", " gender_unknown.append( first_name_upper )\n", " #print first_name, \"not in dictionary\"\n", " \n", " total_counts = collections.Counter( gender_list )\n", " total_male = total_counts['male']\n", " total_female = total_counts['female']\n", " \n", " ym_percentage_dict[ym] = float( total_male ) / ( total_male + total_female )\n", " return ym_percentage_dict\n", "\n", "def get_name( full_name ):\n", " name_to_check = None\n", " if full_name == '':\n", " name_to_check = None\n", " else:\n", " name_words = full_name.split()\n", " if \",\" in name_words[0]:\n", " first_name_start_idx = 1\n", " else: \n", " first_name_start_idx = 0\n", " \n", " possible_first_name = name_words[first_name_start_idx]\n", " possible_first_name_no_initials = possible_first_name.replace( '.', '' )\n", " if len( possible_first_name_no_initials ) == 1:\n", " if first_name_start_idx+1 < len( name_words ):\n", " name_to_check = name_words[first_name_start_idx+1]\n", " else:\n", " name_to_check = None\n", " \n", " else:\n", " name_to_check = name_words[first_name_start_idx]\n", " \n", " # clean name\n", " name_to_check = name_to_check.replace( '\"', '' )\n", " \n", " return name_to_check\n", " \n", " \n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 } ], "metadata": {} } ] }