{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [],
"source": [
"from datascience import *\n",
"path_data = '../../../assets/data/'\n",
"import numpy as np\n",
"\n",
"import matplotlib\n",
"matplotlib.use('Agg')\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plots\n",
"plots.style.use('fivethirtyeight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cross-Classifying by More than One Variable\n",
"\n",
"When individuals have multiple features, there are many different ways to classify them. For example, if we have a population of college students for each of whom we have recorded a major and the number of years in college, then the students could be classified by major, or by year, or by a combination of major and year.\n",
"\n",
"The `group` method also allows us to classify individuals according to multiple variables. This is called *cross-classifying*."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Two Variables: Counting the Number in Each Paired Category\n",
"The table `more_cones` records the flavor, color, and price of six ice cream cones."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
Color
Price
\n",
"
\n",
" \n",
" \n",
"
\n",
"
strawberry
pink
3.55
\n",
"
\n",
"
\n",
"
chocolate
light brown
4.75
\n",
"
\n",
"
\n",
"
chocolate
dark brown
5.25
\n",
"
\n",
"
\n",
"
strawberry
pink
5.25
\n",
"
\n",
"
\n",
"
chocolate
dark brown
5.25
\n",
"
\n",
"
\n",
"
bubblegum
pink
4.75
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | Color | Price\n",
"strawberry | pink | 3.55\n",
"chocolate | light brown | 4.75\n",
"chocolate | dark brown | 5.25\n",
"strawberry | pink | 5.25\n",
"chocolate | dark brown | 5.25\n",
"bubblegum | pink | 4.75"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones = Table().with_columns(\n",
" 'Flavor', make_array('strawberry', 'chocolate', 'chocolate', 'strawberry', 'chocolate', 'bubblegum'),\n",
" 'Color', make_array('pink', 'light brown', 'dark brown', 'pink', 'dark brown', 'pink'),\n",
" 'Price', make_array(3.55, 4.75, 5.25, 5.25, 5.25, 4.75)\n",
")\n",
"\n",
"more_cones"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We know how to use `group` to count the number of cones of each flavor:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
bubblegum
1
\n",
"
\n",
"
\n",
"
chocolate
3
\n",
"
\n",
"
\n",
"
strawberry
2
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | count\n",
"bubblegum | 1\n",
"chocolate | 3\n",
"strawberry | 2"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.group('Flavor')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But now each cone has a color as well. To classify the cones by both flavor and color, we will pass a list of labels as an argument to `group`. The resulting table has one row for every *unique combination* of values that appear together in the grouped columns. As before, a single argument (a list, in this case, but an array would work too) gives row counts."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Although there are six cones, there are only four unique combinations of flavor and color. Two of the cones were dark brown chocolate, and two pink strawberry."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
Color
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
bubblegum
pink
1
\n",
"
\n",
"
\n",
"
chocolate
dark brown
2
\n",
"
\n",
"
\n",
"
chocolate
light brown
1
\n",
"
\n",
"
\n",
"
strawberry
pink
2
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | Color | count\n",
"bubblegum | pink | 1\n",
"chocolate | dark brown | 2\n",
"chocolate | light brown | 1\n",
"strawberry | pink | 2"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.group(['Flavor', 'Color'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Two Variables: Finding a Characteristic of Each Paired Category\n",
"A second argument aggregates all other columns that are not in the list of grouped columns."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
Color
Price sum
\n",
"
\n",
" \n",
" \n",
"
\n",
"
bubblegum
pink
4.75
\n",
"
\n",
"
\n",
"
chocolate
dark brown
10.5
\n",
"
\n",
"
\n",
"
chocolate
light brown
4.75
\n",
"
\n",
"
\n",
"
strawberry
pink
8.8
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | Color | Price sum\n",
"bubblegum | pink | 4.75\n",
"chocolate | dark brown | 10.5\n",
"chocolate | light brown | 4.75\n",
"strawberry | pink | 8.8"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.group(['Flavor', 'Color'], sum)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Three or More Variables.** You can use `group` to classify rows by three or more categorical variables. Just include them all in the list that is the first argument. But cross-classifying by multiple variables can become complex, as the number of distinct combinations of categories can be quite large. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pivot Tables: Rearranging the Output of `group`\n",
"Many uses of cross-classification involve just two categorical variables, like `Flavor` and `Color` in the example above. In these cases it is possible to display the results of the classification in a different kind of table, called a *pivot table*. Pivot tables, also known as *contingency tables*, make it easier to work with data that have been classified according to two variables.\n",
"\n",
"Recall the use of `group` to count the number of cones in each paired category of flavor and color:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Flavor
Color
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
bubblegum
pink
1
\n",
"
\n",
"
\n",
"
chocolate
dark brown
2
\n",
"
\n",
"
\n",
"
chocolate
light brown
1
\n",
"
\n",
"
\n",
"
strawberry
pink
2
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Flavor | Color | count\n",
"bubblegum | pink | 1\n",
"chocolate | dark brown | 2\n",
"chocolate | light brown | 1\n",
"strawberry | pink | 2"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.group(['Flavor', 'Color'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The same data can be displayed differenly using the Table method `pivot`. Ignore the code for a moment, and just examine the table of outcomes."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Color
bubblegum
chocolate
strawberry
\n",
"
\n",
" \n",
" \n",
"
\n",
"
dark brown
0
2
0
\n",
"
\n",
"
\n",
"
light brown
0
1
0
\n",
"
\n",
"
\n",
"
pink
1
0
2
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Color | bubblegum | chocolate | strawberry\n",
"dark brown | 0 | 2 | 0\n",
"light brown | 0 | 1 | 0\n",
"pink | 1 | 0 | 2"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.pivot('Flavor', 'Color')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice how this table displays all nine possible pairs of flavor and color, including pairs like \"dark brown bubblegum\" that don't exist in our data. Notice also that the count in each pair appears in the body of the table: to find the number of light brown chocolate cones, run your eye along the row `light brown` until it meets the column `chocolate`.\n",
"\n",
"The `group` method takes a list of two labels because it is flexible: it could take one or three or more. On the other hand, `pivot` always takes two column labels, one to determine the columns and one to determine the rows."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**`pivot`** \n",
"\n",
"The `pivot` method is closely related to the `group` method: it groups together rows that share a combination of values. It differs from `group` because it organizes the resulting values in a grid. The first argument to `pivot` is the label of a column that contains the values that will be used to form new columns in the result. The second argument is the label of a column used for the rows. The result gives the count of all rows of the original table that share the combination of column and row values.\n",
"\n",
"Like `group`, `pivot` can be used with additional arguments to find characteristics of each paired category. An optional third argument called `values` indicates a column of values that will replace the counts in each cell of the grid. All of these values will not be displayed, however; the fourth argument `collect` indicates how to collect them all into one aggregated value to be displayed in the cell.\n",
"\n",
"An example will help clarify this. Here is `pivot` being used to find the total price of the cones in each cell. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Flavor | Color | Price sum\n",
"bubblegum | pink | 4.75\n",
"chocolate | dark brown | 10.5\n",
"chocolate | light brown | 4.75\n",
"strawberry | pink | 8.8"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"more_cones.group(['Flavor', 'Color'], sum)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Though the numbers in both tables are the same, table produced by `pivot` is easier to read and lends itself more easily to analysis. The advantage of `pivot` is that it places grouped values into adjacent columns, so that they can be combined and compared."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example: Education and Income of Californian Adults\n",
"The State of California's Open Data Portal is a rich source of information about the lives of Californians. It is our source of a [dataset](http://data.ca.gov/dataset/ca-educational-attainment-personal-income) on educational attainment and personal income among Californians over the years 2008 to 2014. The data are derived from the U.S. Census Current Population Survey.\n",
"\n",
"For each year, the table records the `Population Count` of Californians in many different combinations of age, gender, educational attainment, and personal income. We will study only the data for the year 2014."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Year
Age
Gender
Educational Attainment
Personal Income
Population Count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1/1/14 0:00
18 to 64
Female
No high school diploma
H: 75,000 and over
2058
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Male
No high school diploma
H: 75,000 and over
2153
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Female
No high school diploma
G: 50,000 to 74,999
4666
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Female
High school or equivalent
H: 75,000 and over
7122
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Female
No high school diploma
F: 35,000 to 49,999
7261
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Male
No high school diploma
G: 50,000 to 74,999
8569
\n",
"
\n",
"
\n",
"
1/1/14 0:00
18 to 64
Female
No high school diploma
G: 50,000 to 74,999
14635
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Male
No high school diploma
F: 35,000 to 49,999
15212
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Male
College, less than 4-yr degree
B: 5,000 to 9,999
15423
\n",
"
\n",
"
\n",
"
1/1/14 0:00
65 to 80+
Female
Bachelor's degree or higher
A: 0 to 4,999
15459
\n",
"
\n",
" \n",
"
\n",
"
... (117 rows omitted)
"
],
"text/plain": [
"Year | Age | Gender | Educational Attainment | Personal Income | Population Count\n",
"1/1/14 0:00 | 18 to 64 | Female | No high school diploma | H: 75,000 and over | 2058\n",
"1/1/14 0:00 | 65 to 80+ | Male | No high school diploma | H: 75,000 and over | 2153\n",
"1/1/14 0:00 | 65 to 80+ | Female | No high school diploma | G: 50,000 to 74,999 | 4666\n",
"1/1/14 0:00 | 65 to 80+ | Female | High school or equivalent | H: 75,000 and over | 7122\n",
"1/1/14 0:00 | 65 to 80+ | Female | No high school diploma | F: 35,000 to 49,999 | 7261\n",
"1/1/14 0:00 | 65 to 80+ | Male | No high school diploma | G: 50,000 to 74,999 | 8569\n",
"1/1/14 0:00 | 18 to 64 | Female | No high school diploma | G: 50,000 to 74,999 | 14635\n",
"1/1/14 0:00 | 65 to 80+ | Male | No high school diploma | F: 35,000 to 49,999 | 15212\n",
"1/1/14 0:00 | 65 to 80+ | Male | College, less than 4-yr degree | B: 5,000 to 9,999 | 15423\n",
"1/1/14 0:00 | 65 to 80+ | Female | Bachelor's degree or higher | A: 0 to 4,999 | 15459\n",
"... (117 rows omitted)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"full_table = Table.read_table(path_data + 'educ_inc.csv')\n",
"ca_2014 = full_table.where('Year', are.equal_to('1/1/14 0:00')).where('Age', are.not_equal_to('00 to 17'))\n",
"ca_2014"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each row of the table corresponds to a combination of age, gender, educational level, and income. There are 127 such combinations in all! \n",
"\n",
"As a first step it is a good idea to start with just one or two variables. We will focus on just one pair: educational attainment and personal income. "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Educational Attainment
Personal Income
Population Count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
No high school diploma
H: 75,000 and over
2058
\n",
"
\n",
"
\n",
"
No high school diploma
H: 75,000 and over
2153
\n",
"
\n",
"
\n",
"
No high school diploma
G: 50,000 to 74,999
4666
\n",
"
\n",
"
\n",
"
High school or equivalent
H: 75,000 and over
7122
\n",
"
\n",
"
\n",
"
No high school diploma
F: 35,000 to 49,999
7261
\n",
"
\n",
"
\n",
"
No high school diploma
G: 50,000 to 74,999
8569
\n",
"
\n",
"
\n",
"
No high school diploma
G: 50,000 to 74,999
14635
\n",
"
\n",
"
\n",
"
No high school diploma
F: 35,000 to 49,999
15212
\n",
"
\n",
"
\n",
"
College, less than 4-yr degree
B: 5,000 to 9,999
15423
\n",
"
\n",
"
\n",
"
Bachelor's degree or higher
A: 0 to 4,999
15459
\n",
"
\n",
" \n",
"
\n",
"
... (117 rows omitted)
"
],
"text/plain": [
"Educational Attainment | Personal Income | Population Count\n",
"No high school diploma | H: 75,000 and over | 2058\n",
"No high school diploma | H: 75,000 and over | 2153\n",
"No high school diploma | G: 50,000 to 74,999 | 4666\n",
"High school or equivalent | H: 75,000 and over | 7122\n",
"No high school diploma | F: 35,000 to 49,999 | 7261\n",
"No high school diploma | G: 50,000 to 74,999 | 8569\n",
"No high school diploma | G: 50,000 to 74,999 | 14635\n",
"No high school diploma | F: 35,000 to 49,999 | 15212\n",
"College, less than 4-yr degree | B: 5,000 to 9,999 | 15423\n",
"Bachelor's degree or higher | A: 0 to 4,999 | 15459\n",
"... (117 rows omitted)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"educ_inc = ca_2014.select('Educational Attainment', 'Personal Income', 'Population Count')\n",
"educ_inc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's start by looking at educational level alone. The categories of this variable have been subdivided by the different levels of income. So we will group the table by `Educational Attainment` and `sum` the `Population Count` in each category."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Educational Attainment
Population Count sum
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Bachelor's degree or higher
8525698
\n",
"
\n",
"
\n",
"
College, less than 4-yr degree
7775497
\n",
"
\n",
"
\n",
"
High school or equivalent
6294141
\n",
"
\n",
"
\n",
"
No high school diploma
4258277
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Educational Attainment | Population Count sum\n",
"Bachelor's degree or higher | 8525698\n",
"College, less than 4-yr degree | 7775497\n",
"High school or equivalent | 6294141\n",
"No high school diploma | 4258277"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"education = educ_inc.select('Educational Attainment', 'Population Count')\n",
"educ_totals = education.group('Educational Attainment', sum)\n",
"educ_totals"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are only four categories of educational attainment. The counts are so large that is is more helpful to look at percents. For this, we will use the function `percents` that we defined in an earlier section. It converts an array of numbers to an array of percents out of the total in the input array."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"def percents(array_x):\n",
" return np.round( (array_x/sum(array_x))*100, 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now have the distribution of educational attainment among adult Californians. More than 30% have a Bachelor's degree or higher, while almost 16% lack a high school diploma."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Educational Attainment
Population Count sum
Population Percent
\n",
"
\n",
" \n",
" \n",
"
\n",
"
Bachelor's degree or higher
8525698
31.75
\n",
"
\n",
"
\n",
"
College, less than 4-yr degree
7775497
28.96
\n",
"
\n",
"
\n",
"
High school or equivalent
6294141
23.44
\n",
"
\n",
"
\n",
"
No high school diploma
4258277
15.86
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Educational Attainment | Population Count sum | Population Percent\n",
"Bachelor's degree or higher | 8525698 | 31.75\n",
"College, less than 4-yr degree | 7775497 | 28.96\n",
"High school or equivalent | 6294141 | 23.44\n",
"No high school diploma | 4258277 | 15.86"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"educ_distribution = educ_totals.with_column(\n",
" 'Population Percent', percents(educ_totals.column(1))\n",
")\n",
"educ_distribution"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"By using `pivot`, we can get a contingency table (a table of counts) of adult Californians cross-classified by `Educational Attainment` and `Personal Income`."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Personal Income
Bachelor's degree or higher
College, less than 4-yr degree
High school or equivalent
No high school diploma
\n",
"
\n",
" \n",
" \n",
"
\n",
"
A: 0 to 4,999
575491
985011
1161873
1204529
\n",
"
\n",
"
\n",
"
B: 5,000 to 9,999
326020
810641
626499
597039
\n",
"
\n",
"
\n",
"
C: 10,000 to 14,999
452449
798596
692661
664607
\n",
"
\n",
"
\n",
"
D: 15,000 to 24,999
773684
1345257
1252377
875498
\n",
"
\n",
"
\n",
"
E: 25,000 to 34,999
693884
1091642
929218
464564
\n",
"
\n",
"
\n",
"
F: 35,000 to 49,999
1122791
1112421
782804
260579
\n",
"
\n",
"
\n",
"
G: 50,000 to 74,999
1594681
883826
525517
132516
\n",
"
\n",
"
\n",
"
H: 75,000 and over
2986698
748103
323192
58945
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Personal Income | Bachelor's degree or higher | College, less than 4-yr degree | High school or equivalent | No high school diploma\n",
"A: 0 to 4,999 | 575491 | 985011 | 1161873 | 1204529\n",
"B: 5,000 to 9,999 | 326020 | 810641 | 626499 | 597039\n",
"C: 10,000 to 14,999 | 452449 | 798596 | 692661 | 664607\n",
"D: 15,000 to 24,999 | 773684 | 1345257 | 1252377 | 875498\n",
"E: 25,000 to 34,999 | 693884 | 1091642 | 929218 | 464564\n",
"F: 35,000 to 49,999 | 1122791 | 1112421 | 782804 | 260579\n",
"G: 50,000 to 74,999 | 1594681 | 883826 | 525517 | 132516\n",
"H: 75,000 and over | 2986698 | 748103 | 323192 | 58945"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"totals = educ_inc.pivot('Educational Attainment', 'Personal Income', values='Population Count', collect=sum)\n",
"totals"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here you see the power of `pivot` over other cross-classification methods. Each column of counts is a distribution of personal income at a specific level of educational attainment. Converting the counts to percents allows us to compare the four distributions."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
" \n",
"
\n",
"
Personal Income
Bachelor's degree or higher
College, less than 4-yr degree
High school or equivalent
No high school diploma
\n",
"
\n",
" \n",
" \n",
"
\n",
"
A: 0 to 4,999
6.75
12.67
18.46
28.29
\n",
"
\n",
"
\n",
"
B: 5,000 to 9,999
3.82
10.43
9.95
14.02
\n",
"
\n",
"
\n",
"
C: 10,000 to 14,999
5.31
10.27
11
15.61
\n",
"
\n",
"
\n",
"
D: 15,000 to 24,999
9.07
17.3
19.9
20.56
\n",
"
\n",
"
\n",
"
E: 25,000 to 34,999
8.14
14.04
14.76
10.91
\n",
"
\n",
"
\n",
"
F: 35,000 to 49,999
13.17
14.31
12.44
6.12
\n",
"
\n",
"
\n",
"
G: 50,000 to 74,999
18.7
11.37
8.35
3.11
\n",
"
\n",
"
\n",
"
H: 75,000 and over
35.03
9.62
5.13
1.38
\n",
"
\n",
" \n",
"
"
],
"text/plain": [
"Personal Income | Bachelor's degree or higher | College, less than 4-yr degree | High school or equivalent | No high school diploma\n",
"A: 0 to 4,999 | 6.75 | 12.67 | 18.46 | 28.29\n",
"B: 5,000 to 9,999 | 3.82 | 10.43 | 9.95 | 14.02\n",
"C: 10,000 to 14,999 | 5.31 | 10.27 | 11 | 15.61\n",
"D: 15,000 to 24,999 | 9.07 | 17.3 | 19.9 | 20.56\n",
"E: 25,000 to 34,999 | 8.14 | 14.04 | 14.76 | 10.91\n",
"F: 35,000 to 49,999 | 13.17 | 14.31 | 12.44 | 6.12\n",
"G: 50,000 to 74,999 | 18.7 | 11.37 | 8.35 | 3.11\n",
"H: 75,000 and over | 35.03 | 9.62 | 5.13 | 1.38"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"distributions = totals.select(0).with_columns(\n",
" \"Bachelor's degree or higher\", percents(totals.column(1)),\n",
" 'College, less than 4-yr degree', percents(totals.column(2)),\n",
" 'High school or equivalent', percents(totals.column(3)),\n",
" 'No high school diploma', percents(totals.column(4)) \n",
" )\n",
"\n",
"distributions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"At a glance, you can see that over 35% of those with Bachelor's degrees or higher had incomes of $\\$75,000$ and over, whereas fewer than 10% of the people in the other education categories had that level of income. \n",
"\n",
"The bar chart below compares the personal income distributions of adult Californians who have no high school diploma with those who have completed a Bachelor's degree or higher. The difference in the distributions is striking. There is a clear positive association between educational attainment and personal income."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AHXr1pU5HyIiIiKiktTymhZZ3L17F0lJSejfv3+lc69cuQJzc/MyYy1btkReXh4uXbokjJ08eVI4OiFvvKRz584J17G4uLigXr16pZqeitja2kpdw/L06VPhqElZ7OzsSl3zkpKSAjs7O+F5r169sH//fuzfvx9dunQRTs1zcnJCVlYWtLW1YWNjI/X44IMa+0eLiIiIiN4ztfzN0sPDA2fPnq1wzu7du+Hg4IAWLaRPI7p06RLWrVuHv//+G9euXcPMmTNx5coVDBgwoMx1DA0N0bt3b0ydOhV//fUXoqKiEB0djZEjRyokXpKVlRUuXryI+Ph4XL58GV999RV0dXVl/mxGjBiBP/74A5s3b8a1a9ekvp+mLAMHDsT9+/cxb948pKWlITw8HCkpKRg+fLgwp1evXjhx4gSio6PRs2dPYdzGxga9evXC559/jsTERNy8eROHDh3C/PnzZc6XiIiIiKgyatm0pKWl4dmzZxXOiY6OLrMR0dbWRlRUFPz8/ODr64vz589jz549sLCwEOZ0794doaGhwvPly5fD2NgYfn5+mDNnDpYuXYoOHTooLP62nj17om/fvhg6dCh2nnUUAAAIK0lEQVQGDhyI3r17l3sqWVmaNWuG5cuXY9GiRfD19YW1tTXc3NzKnS8SiRAZGYmYmBi0b98eO3fuxPbt22FmZibMsbW1hZ2dHe7evVvq+26+//57uLq6Yvjw4Wjfvj3mz59f4S2kiYiIiIiqSiM3N5e3YSqhZcuWWLFiBTp16qTsVGoFvTvTqjT/hdFwFOnxQvzqVJPqYS2qibWopppUCxHVLGp5pKU63b59G40aNWLDQkRERESkIti0lGBpaSl8IzwRERERESkfmxYiIiIiIlJpbFqIiIiIiEilqdyXS1Lt88JoeOWT3lKsxbuTEREREdUmbFpI6VTtTmBEREREpFp4ehgREREREak0Ni1ERERERKTS2LQQEREREZFKY9NCREREREQqjU0LERERERGpNDYtRERERESk0ti0EBERERGRStPIzc2VKDsJIiIiIiKi8vBICxERERERqTQ2LUREREREpNLYtBARERERkUpj00JERERERCqNTQsREREREak0Ni2kFBs2bECLFi0gFovh4+ODhIQEZadUZaGhoRCJRFIPBwcHZaclk1OnTmHw4MFwcnKCSCRCZGSkVFwikSA0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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"distributions.select(0, 1, 4).barh(0)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}