{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Repeating Phrases"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook describes some strategies for working with repeating phrases (also called n-grams ). It's part of the [The Art of Literary Text Analysis](ArtOfLiteraryTextAnalysis.ipynb) (and assumes that you've already worked through previous notebooks – see the table of contents). In this notebook we'll look in particular at:\n",
"\n",
"* [NLTK Collocations (repeating pairs of words)](#NLTK-Collocations)\n",
"* [NLTK n-grams (more flexible and powerful n-grams)](#NLTK-NGrams)\n",
"* [Simple distribution of phrases](#Distribution-of-Phrases)\n",
"* [Longest repeating phrases](#Longest-Repeating-Phrases)\n",
"* [Frequencies and distributions with segmented texts](#Segmenting-Texts)\n",
"* [Phrase frequency correlations](#Correlations)\n",
"\n",
"So far we've been focused on considering the frequency and distribution of individual terms, but sometimes it can also be useful to study repeating phrases, or sequences of words. Repeating phrases are sometimes also called n-grams where the \"n\" indicates a variable number of repeating words (or other linguistic unit like a character or ideogram). So we can have unigrams (one), bigrams (two), trigrams (three), and so on. The [Google Ngram Viewer](https://books.google.com/ngrams) provides a way of searching for variable length phrases in its very large corpus of digitized works. We'll consider here some of the ways of working with n-grams. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## NLTK Collocations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's begin by loading Austen's _Emma_ text from NLTK's Gutenberg corpus (we'll work with a longer text than _Gold Bug_ in order to see more repeating phrases)."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Emma', 'by', 'Jane', 'Austen', 'VOLUME', 'I', 'CHAPTER', 'I', 'Emma', 'Woodhouse', 'handsome', 'clever', 'and', 'rich', 'with', 'a', 'comfortable', 'home', 'and', 'happy', 'disposition', 'seemed', 'to', 'unite', 'some']\n"
]
}
],
"source": [
"import nltk\n",
"emmaTokens = list(nltk.corpus.gutenberg.words(\"austen-emma.txt\")) # note the use of words() to load tokens\n",
"emmaWords = [word for word in emmaTokens if word[0].isalpha()] # filter out non-words\n",
"print(emmaWords[:25])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There's actually a very easy and convenient way to look for the top bigrams in an NLTK text using the ```collocations()``` function and specifying the number of top frequency phrases to return."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mrs Weston; Frank Churchill; Miss Woodhouse; Mrs Elton; Miss Bates;\n",
"Jane Fairfax; Miss Fairfax; every thing; young man; every body; great\n",
"deal; Mrs Goddard; dare say; Maple Grove; John Knightley; Miss Taylor;\n",
"Miss Smith; Robert Martin; Colonel Campbell; Box Hill\n"
]
}
],
"source": [
"emmaText = nltk.Text(emmaWords)\n",
"emmaText.collocations(20) # 20 top bigrams separated by semi-colon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A lot of proper names!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## NLTK N-Grams"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Though convenient, this method is limited to bigrams (2 words), forces the use of stop-words, and doesn't provide frequency information. Fortunately, with only a bit more work using NLTK's ```ngrams()``` function on a list of words, we have much more control. Let's create a temporary n-grams list to see what's happening."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"first six words: Emma by Jane Austen VOLUME I\n"
]
},
{
"data": {
"text/plain": [
"[('Emma', 'by'),\n",
" ('by', 'Jane'),\n",
" ('Jane', 'Austen'),\n",
" ('Austen', 'VOLUME'),\n",
" ('VOLUME', 'I')]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"emmaFirstSixWords = \" \".join(emmaWords[:6]) # join first six words with spaces\n",
"print(\"first six words: \", emmaFirstSixWords)\n",
"emmaBigrams = list(nltk.ngrams(emmaWords, 2)) # create bigrams (n-grams of 2) from our emmaTokens\n",
"emmaBigrams[:5] # convert to a list and show the first 5 entries"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we can see, the ```nltk.ngrams()``` function goes through the text, and creates a new tupple of the specified length, with each item shifting forward by just one word – this is a moving window that slides along the entire text.\n",
"\n",
"Since the last word of the text can't be the start of a bigram, we should have one fewer bigrams than words (even if all words but the last word are repeated in two entries, as the first word and as the second word)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of words: 161975\n",
"number of ngrams: 161974\n"
]
}
],
"source": [
"print(\"number of words:\", len(emmaWords))\n",
"print(\"number of ngrams:\", len(emmaBigrams))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now look at n-grams of 4 tokens where we calculate frequency of repeating n-grams and ask for the most common."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"50 I do not know\n",
"25 a great deal of\n",
"20 I am sure I\n",
"18 I do not think\n",
"18 Mr and Mrs Weston\n",
"18 it would have been\n",
"16 I have no doubt\n",
"16 I am sure you\n",
"14 at Mrs Goddard s\n",
"13 and I am sure\n",
"12 that she could not\n",
"12 have no doubt of\n",
"12 I am sure she\n",
"11 quarter of an hour\n",
"11 as soon as she\n"
]
}
],
"source": [
"emma4grams = list(nltk.ngrams(emmaWords, 4)) # create four-grams\n",
"emma4gramsFreqs = nltk.FreqDist(emma4grams) # determine frequency of four-grams\n",
"for words, count in emma4gramsFreqs.most_common(15): # for the 15 most common four-grams\n",
" print(count, \" \".join(list(words))) # show the count and the create a string from the tuple"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It's interesting that the phrase \"I do not know\" repeats so frequently. In fact, several of the entries relate to certainty or doubt, which would be worth looking at more closely. However, we should also notice another artefact of this simple n-gram technique: we get overlapping entries. Consider the following two sentences:\n",
"\n",
"* and I am sure I had no more idea…\n",
"* and I am sure I never think of that poor young man…\n",
"\n",
"Our ```ngrams()``` function will actually find two n-grams of four:\n",
"\n",
"* (2) and I am sure\n",
"* (2) I am sure I\n",
"\n",
"Since these are separate entries and each entry has two occurrences, it might look like a total of four n-grams, but it's not necessarily valid to count them separately. Similarly, even though we have several entries above that related to doubt and certainty, it may be that some of them are composed of the same phrases in the text.\n",
"\n",
"There are techniques to address this as a potential problem, but for now let's just be aware of the issue."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Distribution of Phrases"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can't ask for a concordance or dispersion plot from the emmaText of our phrases, since our emmaText is composed of words (and a phrase can't match the words)."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsG\nlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpck\nqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkr\nBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaX\nJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySp\nKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsG\nlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpck\nqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkr\nBpckqSsGlySpKwaXJKkrBpckqSsGlySpKwaXJKkrawyuhLunUebYhPfOTZMmrP+ZCQdNsmxZwpfn\na9uSpHXLdEZcNUdlZuNZwJvmeRuSpA7M+FRhwtEJ30+4APjNkfnPS7gkYWXC8oQtJlj31IQPJ1yY\ncH3C69r8JHwo4aqEVQlvaKscD+yTcEXCu6do0wsTLk94dhsFfirha20b7xwp9562javG6ks4bKxM\nwokJ57fXL084c6b7SZI0t2YUXAm7A28EdgX2A17II6Ou04HDqtgVuAo4ZoIqCti2ipcA+zMEE8B/\nbnX+B+B3gA8lbAscAVxQxW5VfHiSNu0FfAI4oIofttk7Aa8C9gCOSXhCa/tb2rw9gbcnPA/4BrBP\nW+8FwFMSlrR5X1+L3SNJmkdLZrjePsDyKu4F7k34EkDCZsDmVVzQyp0GfH6SOr4IUMU1Cdu0eXsD\nn66igNUJX2cIxbvW0J6lwN8Br6ziljavgLOruB+4PWE1sG3bxvIq7mltXt768wlg94RNgXuB7zAE\n2N7wyGht1LHHHvvw62XLlrFs2bI1NFOS1i8rVqxgxYoVc1rnTIOrgIz8nEnKTTYf4L4Jyo2vd2ze\nmtryM+CJwPOBcybZxoMM/Z2o7VXFAwk3MIzGLgJWAS8Hfr2Kayfa8GhwSZIea/yH+uOOO27Wdc70\nGtc3gAMTntRGKPsDVHEXcEfC3q3cIcCKtaj3AuCNCRskbA28FPg2cDew6STrBPi31oYPJuw7Rf3V\ntnFgwpMTngIc2OaNbf+/M5wavAD4Y+DytWi/JGmeTWfE9ZgRTxVXJHwWWAmsZgiXMX8InJSwMXA9\n8NZp1Fut3n9MeHGrtxiula1O+AXwYMKVwCnjrnMVw4hpdcL+wP9NeNsa2n7qSJtPrmJle30BcBRw\ncRX3JNzDI6EmSVoHpGq+72RfnJKU+06S1k4Sqmqqy0hr5DdnSJK6YnBJkrpicEmSumJwSZK6YnBJ\nkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6\nYnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJw\nSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmS\numJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpi\ncEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJ\nkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6\nYnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJw\nSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmS\numJwSZK6YnBJkrpicEmSumJwSZK6YnBJkrpicEmSumJwSZK6YnBpQitWrFjoJsyrxdy/xdw3sH8y\nuDSJxf7Ls5j7t5j7BvZPBpckqTMGlySpK6mqhW5Dl5K44yRpBqoqs1nf4JIkdcVThZKkrhhckqSu\nGFyTSLJlkvOS/CDJuUm2mKTcq5Ncm+Rfkxwxbtk7k1yT5OokJzw+LZ+euehfW/7eJA8l2XL+Wz19\n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\numJwSZK68v8Bg0a6WtYZC9AAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"emmaText.dispersion_plot([\"I do not know\"]) # won't work since phrases aren't in the emmaText tokens"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, we can create a new text from our ngrams and then ask for a dispersion plot. Don't forget that we need to search for the tuple ```(\"I\",\"do\",\"not\",\"know\")``` since that's what's in each ngram (not the string \"I do not know\"). \n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"emma4gramsText = nltk.Text(emma4grams)\n",
"emma4gramsText.dispersion_plot([(\"I\",\"do\",\"not\",\"know\")])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can perhaps perceive a greater preponderance of occurences closer to the middle of the text, but nothing especially noteworthy. \n",
"\n",
"Rather than working with tuples, it may be easier to convert our n-gram tuple to a string. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'emma4grams' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0memma4gramsTokens\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\" \"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgram\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mgram\u001b[0m \u001b[0;32min\u001b[0m \u001b[0memma4grams\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mnltk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mText\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0memma4gramsTokens\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdispersion_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"I do not know\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'emma4grams' is not defined"
]
}
],
"source": [
"emma4gramsTokens = [\" \".join(gram) for gram in emma4grams]\n",
"nltk.Text(emma4gramsTokens).dispersion_plot([(\"I do not know\")])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Longest Repeating Phrases"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We might also want to determine the longest repeating n-grams. Using a range we can look for n-grams and break out of the loop if there are no more."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ngram of 29 words occurring 2 times: what reverse we have Man s boasted power and freedom all are flown Lord of the earth and sea he bends a slave And woman lovely woman reigns alone\n"
]
}
],
"source": [
"ngramsFreqs = [] # keep track of last set of repeating phrases\n",
"for length in range(2, len(emmaWords)): # create a range from 2 to the length of the text (even if we don't get that high)\n",
" ngrams = list(nltk.ngrams(emmaWords, length)) # get n-grams for specified length\n",
" freqs = nltk.FreqDist(ngrams) # get frequencies for these n-grams\n",
" freqs = [(ngram, count) for ngram, count in freqs.items() if count > 1] # filter out frequencies that don't repeat\n",
" if len(freqs) > 0: # we have at least one repeating phrase\n",
" ngramsFreqs = freqs # new set of frequencies\n",
" else: # if we've filtered out all frequencies then break out of the loop\n",
" break\n",
"\n",
"for ngram, count in ngramsFreqs:\n",
" print(\"ngram of \", len(ngram), \" words occurring \", count, \" times:\", \" \".join(list(ngram)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A repeating phrase of 29 words! We can look at _Emma_ closer to see that these are excerpts of a letter read in different contexts."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Segmenting Texts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We've relied heavily on ```dispersion_plot()``` as a way of looking at term distribution, but there are other approaches, ones that may be better or worse depending on the context. One possibility is to segment our text into equal parts and then to plot distribution for each part.\n",
"\n",
"We can segment our tokens or n-grams in various ways, but one convenient way is to use a library called [NumPy](http://www.numpy.org) that is helpful for working with arrays (and graphing array-backed data). Let's see it in action with a simplified example where we're going to create a list of numbers from 0 to 9 (10 elements) and then create 5 equal bins in which to place the items."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 2, 3, 4, 5, 6, 7, 8]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numbers = list(range(0,9)) # create a range from 0 to 9 and convert the range to a list\n",
"numbers"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of bins: 5\n"
]
},
{
"data": {
"text/plain": [
"[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8])]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"numberBins = np.array_split(numbers, 5) # divide our numbers into 5 equal bins\n",
"print(\"number of bins:\", len(numberBins))\n",
"numberBins"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So the first bin has 0 and 1, the second has 2 and 3, etc.\n",
"\n",
"We can do something similar with our emma4gramsTokens, dividing the list into 10 each parts."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[16198, 16198, 16197, 16197, 16197, 16197, 16197, 16197, 16197, 16197]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"emma4gramsSegments = np.array_split(emma4gramsTokens, 10)\n",
"[len(segment) for segment in emma4gramsSegments] # how many ngrams in each bin?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, instead of counting the number of tokens, we'll count the number of occurrences of our search term \"I do not know\"."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[6, 6, 2, 5, 7, 7, 6, 4, 3, 4]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"iDoNotKnowCounts = [list(segment).count((\"I do not know\")) for segment in emma4gramsSegments]\n",
"iDoNotKnowCounts # counts per segment"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And now a simple plot of these counts (we're adding a legend to make it easier to understand)."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWgAAAEACAYAAACeQuziAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmUlPWV//H3bVrCIigo+6qouAfNz7ggUpmgIog5mp8G\no5KYjDOeiYrmJCMmUTsakugoKjgZNYIbxt8cxQXcE0ghLkGiGFFAE4LQiLjNsJkQaLi/P77dbQPd\n1VXdVf19qurzOqcPVV1PP32B7tvfvs997tfcHRERSZ6K2AGIiEjjlKBFRBJKCVpEJKGUoEVEEkoJ\nWkQkoZSgRUQSqtkEbWZDzWxxg7cNZnZZWwQnIlLOLJc+aDOrAN4Hvuzu1QWLSkREci5xjAJWKDmL\niBRergl6PPCbQgQiIiI7y7rEYWbtCeWNQ93944JGJSIiVOZw7GnAa7smZzPTMA8RkRZwd8v0ei4l\njnOBh5r4JIl7u/baa6PHoJhye7vrLmf4cOeaa5ITU8N/pzffdAYOdK6/3tmxI35MSfv/U0y5vWUj\nqwRtZp0JFwgfzTabi+Ri/Xq4+mqYOhUs45oiniOOgD/8AR5/HC68ELZujR2RlLqsErS7f+bu+7r7\npkIHJOXppz+FM86Ao4+OHUlmffrA/PmwYQOceir8z//EjkhKWcneSZhKpWKHsBvF1LilS2HmTJg8\nOTxPQky7ahhT587wyCPwpS/BCSfAihXJiCspFFP+5HSjSqMnMPPWnkPKl3tYiY4ZA5dfHjua3N1x\nB1RVwaxZMHx47GikmJgZ3sxFQiVoieqJJ+Cqq+BPf4I99ogdTcs8+yxMmAC33Qbnntv88ZbUIrsU\nTGM5UglaEm3LFjj0ULjzTjj55NjRtM6SJXD66XDRRfDjH2e+0Fn7jdl2wUlUTf1/Z5OgS7YGLck3\nZQoceWTxJ2dQh4cUhlbQEsWaNfDFL8KiRbD//rGjyZ/PPoPzzw9tg7NmQffuux+jFXR50Qpais6V\nV8LFF5dWcoZkdXhI8VOCljb30kvwwgvh4mApatcObropdKUMHx7+vqUqnU4zYMCA2GHsJqlx5UoJ\nWtrU9u1w2WVwww2w556xoymsiy+G++6DM8+EhxodkpBMgwcPZu7cubHDyGjw4MHMmzcvdhgFl8uw\nJJFWmzEDOnbMrh2tFJx6KsydGzo8VqwIHR5JZ2aJbwUslzq+VtDSZoph3kYh1HV4PPFE6PAoZn//\n+9/59re/Tffu3TnssMNYtGjRTq8vW7aMVCpFt27dOPzww5kzZ06T50qlUlxzzTWceOKJdO3alVNP\nPZVPP/20/vXZs2dz2GGH0a1bN77yla+wfPlyAC644AJWr17NuHHj6NKlCzfddFOzcU+dOpXDDjuM\ntWvXkk6n6d+/P1OmTKFXr1707duXe++9t/7YDRs2MGHCBHr27MngwYOZPHly/Q+DQYMG8frrrwPw\n4IMPUlFRwbJlywCYPn06Z555Znb/kFlSgpY2UyzzNgqhTx9Ip8MMj2L205/+lJUrV/LXv/6V5557\njvvuu69+tb1t2zbGjRvH6NGj+fjjj5k2bRrnnXce7777bpPne+ihh7j33nv56KOP2Lp1a32yfffd\nd/nmN7/J1KlT+eSTTxgzZgzjxo2jpqaGBx54gIEDB/Lkk0+yadMmfvCDH2SM+brrruP+++/nhRde\noG/fvgB8+OGHbNy4kbVr1zJ9+nS+973vsaH2P+fSSy9l06ZNrFy5kvnz53P//fdzzz33AOGHSjqd\nBmD+/PkMGTKE+fPn1z/P+y3leRiZ5yLNeftt9333df/oo9iRxFVT457N90y4Cb51by01ePBgnzt3\nbqOv7b///v7cc8/VP7/rrru8f//+7u7+wgsveO/evXc6/txzz/WqqqpGz5VKpXzy5Mn1z3/1q1/5\n6NGj3d39uuuu82984xv1r+3YscP79evn8+fPbzZGd/ff//733q9fP7/iiit8xIgRvnHjxp1e69ix\no2/fvr3+fT179vSFCxd6TU2Nt2/f3pctW1b/2p133umpVMrd3adPn+5nnHGGu7sfcsghPn36dB8/\nfry7uw8aNMgXL168WyxN/X/Xvj9jftUKWgrOPXQ0/OQn0KNH7Gjiatcuu+PykaILYe3atTt1Rwwc\nOLDJ1yCUBN5///0mz9e7d+/6xx07dmTz5s3152p4bjNjwIABGc+1q/Xr13P33XczadIkunTpstNr\n++yzDxUVn6e/Tp06sXnzZj755BO2bdvGoEGDdvo71n3ek046iQULFrBu3Tq2b9/O2WefzUsvvcSq\nVavYsGEDw4YNyzq+bChBS8HNng3vvw//9m+xI5HW6tOnD6tXr65/3vBx3759qa6u3uni3apVq+jf\nv3/On6dfv36sWrWq/rm7U11dTb9+/YDs5pl069aNJ598kgsvvJCXX345q8+77777sscee/Dee+/V\n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\n/x9NsV71dMwIdwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"line = plt.plot(iDoNotKnowCounts, label=\"I do not know\")\n",
"plt.ylim(0) # make sure to set y axis to start at zero\n",
"plt.legend(handles=line) # we're going to add a legend\n",
"plt.show() # make sure to flush out the line chart\n",
"emma4gramsText.dispersion_plot([(\"I\",\"do\",\"not\",\"know\")]) # for comparison sake"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These provide quite different pictures of the data even though in both cases we should be seeing 50 occurrences of \"I do not know\". The first graph seems to show wildly fluctuating numbers, but it's worth recognizing that in this simple form our y axis (vertical) only varies by five and that the numbers are relatively small. Indeed, it may not be all that helpful to use a line graph here since it suggests continuity between the segments when there isn't any. For discrete measurements, a bar graph is often preferable, and is only slightly more complicated to produce, as we also provide explicit values for the x axis."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"xaxis = range(0, len(iDoNotKnowCounts)) # a range from zero to the length of our counts (0-9)\n",
"bar = plt.bar(xaxis, iDoNotKnowCounts, label=\"I do not know\")\n",
"plt.legend(handles=[bar])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The x-axis (bottom horizontal bar) isn't quite ideal, but for now we can leave it as is.\n",
"\n",
"Line graphs can be a bit easier to read for multiple values though. Let's construct a graph that compares \"I do not know\" and \"I have no doubt\"."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWgAAAEACAYAAACeQuziAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8TPf6B/DPE6EEqSARQcRSqpYfdVWtmdpqqfaWa21R\n7W1vF6Xt7UJVpW7dttpSy62lEmq5WktrLdpibG1x0dqCUiEIRSskSpZ5fn+czDQhmS3nzPfMzPN+\nveYlk3Ny5hHjyclznvN8iZkhhBDCfEJUByCEEKJwkqCFEMKkJEELIYRJSYIWQgiTkgQthBAmJQla\nCCFMymWCJqL6RLQ33yOdiIb7IjghhAhm5EkfNBGFADgD4B5mTjUsKiGEEB6XODoBOC7JWQghjOdp\ngu4P4L9GBCKEEKIgt0scRFQKWnnjLma+YGhUQgghEOrBvt0A7L45ORORDPMQQggvMDM52+5JiWMA\ngEVFvIjpHmPHjlUeg8Tk2WPWLEabNow33zRPTPm/T/v2MWJjGf/6F8NmUx+T2f79JCbPHu5wK0ET\nUVloFwi/cDebC+GJy5eBMWOAKVMAcnpOoU7jxsAPPwDLlwNDhwJZWaojEoHOrQTNzJnMXJmZrxod\nkAhOb70FPPggcPfdqiNxrmpVYPNmID0duP9+4LffVEckAlnA3klosVhUh3ALialwhw4BCxYA48dr\nz80Q083yx1S2LLB0KdC8OdC6NXD8uDniMguJST8e3ahS6AGIuLjHEMGLWTsT7d4deOEF1dF4bsYM\nICEBWLYMaNNGdTTCnxAR2MVFQknQQqkVK4BRo4CffgJKllQdjefIrAVzYSqF5Uh3ErQnbXZC6Or6\ndeDFF4GZM/0zOdvJCYpwpjg/xAO2Bi3Mb+JEoEkToHNn1ZEIYU5S4hBKnD4N/N//Abt2AbVrq47G\ne3m/pqoOQ5hYUe8Rd0occgYtlHjtNeDpp/07OQthNEnQwue2bwe2bNEuDgpzsFqtqFGjhuowbmHW\nuHxFErTwqdxcYPhw4L33gHLlVEcT2OLi4rBhwwbVYTgVFxeHjRs3qg7DtCRBC59KSgLKlAEGDFAd\nSeAjItO3AUoN3zlJ0MJn/GHeRrD4448/8Nhjj6FixYpo2LAhdu3aVWB7cnIyLBYLIiIi0KhRI6xa\ntarIY1ksFrz55pto27YtwsPDcf/99+PSpUuO7StXrkTDhg0RERGB++67D4cPHwYADBo0CKdOnULP\nnj1Rvnx5fPDBBy7jnjJlCho2bIizZ8/CarWievXqmDhxIqpUqYKYmBjMnTvXsW96ejoGDx6MqKgo\nxMXFYfz48Y4fBjVr1sSePXsAAAsXLkRISAiSk5MBAImJiXj44Yfd+0YaTBK08Bl/mbcRDN566y2c\nOHECv/zyC9avX49PP/3UcbadnZ2Nnj17omvXrrhw4QKmTp2KRx55BEePHi3yeIsWLcLcuXPx66+/\nIisry5Fsjx49ioEDB2LKlCm4ePEiunfvjp49eyInJwfz589HbGwsVq9ejatXr+Lll192GvO4ceMw\nb948bNmyBTExMQCA8+fP48qVKzh79iwSExPx3HPPIT09HQDw/PPP4+rVqzhx4gQ2b96MefPmYc6c\nOQC0HypWqxUAsHnzZtSpUwebN292PDfNreE6jMxjIVw5eJC5cmXmX39VHYm+XL3/tZvZi//wRlxc\nHG/YsKHQbbVr1+b169c7ns+aNYurV6/OzMxbtmzh6OjoAvsPGDCAExISCj2WxWLh8ePHO55//PHH\n3LVrV2ZmHjduHPfr18+xzWazcbVq1Xjz5s0uY2Rm3rRpE1erVo1ffPFFbteuHV+5cqXAtjJlynBu\nbq7jc1FRUbxjxw7OycnhUqVKcXJysmPbzJkz2WKxMDNzYmIiP/jgg8zM3KBBA05MTOT+/fszM3PN\nmjV57969RcbkqaLeI3mfd5pf5QxaGI5Zm7PxxhtAZKTqaHxLrxStt7NnzxbojoiNjS1yG6CVBM6c\nOVPk8aKjox0flylTBhkZGY5j5T82EaFGjRpOj3Wzy5cvY/bs2Rg5ciTKly9fYFulSpUQEvJnGgsL\nC0NGRgYuXryI7Oxs1KxZs8Df0f667du3x9atW3Hu3Dnk5uaiT58+2L59O06ePIn09HQ0bdrU7fiM\nJAlaGG7lSuDMGeDZZ1VHIuyqVq2KU6dOOZ7n/zgmJgapqakFLt6dPHkS1atX9/h1qlWrhpMnTzqe\nMzNSU1NRrVo1AO7dBh0REYHVq1dj6NCh+O6779x63cqVK6NkyZJISUlxfO7UqVOOv0PdunURFhaG\nqVOnIj4+HuXLl0d0dDRmzZqFdu3aefA3NJYkaGEo+7yNjz7y73kbgaZv37545513cPnyZZw+fRpT\np051bGvZsiXCwsIwYcIEZGdnw2q1YvXq1ejfv3+Rx+MiTvP79OmDNWvWYOPGjcjOzsaHH36I0qVL\no3Xr1gCAKlWq4Lgb81rbt2+PhQsXolevXrdc0CxMiRIl0LdvX4wePRoZGRk4efIkJk2ahEcffdSx\nT3x8PKZNm4b4+HgAWl06/3MzkAQtDDVxonZLt8zbMJexY8eiZs2aqFWrFrp27YrBgwc7zmZLlSqF\nVatWYe3atYiMjMSwYcMwf/581KtXr8jj5T8Tzt/eV79+fSxYsADPP/88IiMjsWbNGqxatQqhodqc\ntlGjRuHtt99GREQEJk6c6PTYnTp1QlJSEnr27Ikff/zxlte92dSpU1G2bFnUrl0b7dq1wyOPPIKh\nQ4c6tsfHxyMjIwPt27cv9LkZyCwOYZjTp4GmTYGdOwP3lm7p4xWuyCwOYUqvvQb84x+Bm5yFMJqc\nQQtDbN8O9O8PJCcH9i3dcgYtXJEzaGEqMm9DCH1Igha6k3kbQuhDShxCV5cvA3feCXz1VXDc0i0l\nDuGKoSUOIqpAREuJKJmIDhHRvcWIVQQ4mbchhH7cWTR2MoCvmPlvRBQKoKzBMQk/degQsGCB9qcQ\novicljiI6HYAe5m5yEYpKXEIQJsXcf/9QI8ewIgRqqPxHSlxCFeMLHHUAnCBiOYQ0R4i+oSIwm7e\nKSfHXI/cXI++f0IHMm/DvyQkJGDQoEGqwzBUSEgIfvnll2Ifx2KxIDExUYeIPOeqxBEK4G4Aw5h5\nFxF9BGAkgDfz71SqVILjYyILiCz6RumFHTuA5s1VRxEcrl8HXnoJmDFD5m2YSVxcHBITE9GxY8db\ntpl9pRUzcbYyTUpKCmrXro2cnJwCU/UKY7VaHTOo3eUqQZ8GcJqZ7dNJlkJL0AXYbAkevajRRo4E\nli+XBO0rEycCTZrIvA2zcZZYpCyjL3e+nxaLpcBCAG+99ZbLr3Ga8pn5HIBUIrJPSekE4KDLoyrW\nvTuwZo3qKILD6dNagv7wQ9WRCE8QEbKysjBkyBCEh4ejUaNG2L17t2P7u+++i7p16yI8PBwNGzbE\n8uXLAQA3btxAhQoVcPDgn2ngwoULCAsLw8WLFwEAq1evRtOmTREREYE2bdpg//79RcYREhKCmTNn\nol69eoiIiMCwYcMc25gZb7/9NuLi4lClShUMGTIEV65cKfJY77//PmJiYlC9enUkJSUV2OZs+aub\nyz0pKSkICQmBzWZzfO7YsWNo2bIlbr/9dvz1r3/F77//DgCOwUoVKlRA+fLlsWPHjiLj84qrif4A\n/g/ALgA/AfgCwO03bfdynQHjZGczR0QwnzmjOpLAN3Ag8+jRqqNQx4zvfztnq5WMHTuWS5cuzWvX\nrmWbzcajRo3ie++917F9yZIlnJaWxszMn3/+OZctW5bPnTvHzMyPP/44j873jz5t2jTu1q0bMzPv\n2bOHo6KieOfOnWyz2fjTTz/luLg4vnHjRqFxEBH37NmT09PT+dSpUxwZGcnr1q1jZm3Vk7p16/KJ\nEyc4IyODe/XqxYMGDSr0OGvXruUqVarwwYMHOTMzkwcMGMBExMePH2dm5kGDBvFf//pXzsjI4JSU\nFK5Xrx4nJiYyM3NCQgI/+uijjmOdOHGCicixUkt8fDxXq1bNcezevXs79k9JSSmwb2GKeo/AjRVV\nAnbJq379mGfPVh1FYNu2jbl6deaMDNWRqOPq/Y8E6PLwhqsE3blzZ8fzgwcPcpkyZYo8VtOmTXnF\nihXMzPztt99ynTp1HNtat27N8+fPZ2bmp59+mseMGVPga+vXr+9Y4upmRMTbt293PO/bty+/9957\nzMzcoUMHnj59umPbkSNHuGTJkoUmw6FDh/KoUaMcz48ePepI0K6Wvxo7dqzTBG2xWAoc+9ChQ1yq\nVCm22Wy37FuY4iRod/qg/VL37lod+oknVEcSmPLP2ygrnfFF4rHmrfVWqVLF8XFYWBiuX78Om82G\nkJAQzJs3D5MmTXKsSJKRkeFYqdtiseDatWvYuXMnoqKi8NNPPzlWwT558iTmzZtXYAGA7OxspKWl\nFRlH/uWy7EtWAUBaWtotS1bl5OTg/PnzqFq1aoFjpKWloUWLFgX2tXO1/JU7bl4eLDs721HSMVLA\nJuhu3bQEkpUFlCqlOprAI/M2/JuzLo6TJ0/iqaeewsaNG9GqVSsQEZo1a+ao2dpXK1m0aBGioqLQ\ns2dPlM37KR0bG4vRo0fj9ddfL3aMMTExtyxZFRoaWuAHi52zJbzyL3/VoEEDx3b78ldly5bFtWvX\nHPufO3fuluPffOySJUuicuXKBb7OCAE7LCkyUpsJsXWr6kgCz+XLwJgxwNSpgHRr+Sd7si1MZmYm\niAiVK1eGzWbDnDlzcODAgQL7DBw4EJ999hn++9//YuDAgY7PP/nkk5gxYwZ27twJZkZmZibWrFnj\nOCt2Jy57bAMGDHCcxWdkZOD1119H//79C21n69u3L+bOnYvk5GRcu3atQIeEq+WvmjVrhi1btiA1\nNRXp6el45513bolpwYIFjmO/+eab6NOnD4gIkZGRCAkJcWvZLm8EbIIGpJvDKPZ5G82aqY5EeKuw\nFjz787vuugv//Oc/0apVK0RHR+PAgQNo27ZtgX3vuecelCtXDmlpaejWrZvj882bN8cnn3yCYcOG\noWLFirjjjjswb948p3EUFdfjjz+OQYMGoX379qhdu7ZjkdfCdO3aFS+88AI6dOiAevXqoWPHjgWO\n7Wz5q06dOqFfv35o0qQJWrRogZ49e96yhNfgwYPx2GOPoWrVqsjKysKUKVMAaCWZ0aNHo02bNoiI\niMDOnTuL/Lt6I6Cn2e3eDTzyCHD4sOpIAsehQ0B8vPZnZKTqaNSTW72FKzKwvwjNmgHp6YBBv30E\nHWbghReAN96Q5CyELwR0gg4J0S4WSplDHzJvQwjfCugEDWjT1b76SnUU/s8+b+Ojj2TehhC+EtA1\naAC4cgWoVg04d076dYvj3/8Gdu0CvvxSdSTmIjVo4YrUoJ0IDwdatAA2bFAdif+SeRtCqBHwCRqQ\nMkdxvfYa8PTTQO0il20QQhgh4EscgNZm17kzcOqU3Fjhqe3bgf79te+hlIhuJXOVhTu8LXEE7K3e\n+dWvr13Y2r9fm1ss3GOftzFhgiTnopj95OTKFe2O2hUrtFKf8C9BUeIgkjKHN5KSgLAw7Qxa+Kfw\ncO0C7/DhQL7xxsJPBEWCBrQELf3Q7rPP25gyRcpC/m7wYC05L1igOhLhqaCoQQPAH38AVaoAKSlA\nxYqqozG/F18Erl0DZs5UHYnQw44dQK9e2rWE8uVVRyMAabMroEwZbYbE11+rjsT8Dh3Szrbeflt1\nJEIvLVtqF8rHj1cdifBE0CRoQMoc7pB5G4HrnXeA2bOBn39WHYlwV1Al6O7dgXXrtO4EUTiZtxG4\nqlbVetpfekl1JMJdQZWgY2OB6GjtlmVxK/u8jcmTZd5GoBoxAjhyBFi7VnUkwh1BlaABKXM4M3Gi\n1ifeqZPqSIRRSpUCJk3SylhZWaqjEa4EXYKWVVYKJ/M2gkePHkDdutqSZcLcgqbNzi4nB4iKAg4c\nAGJiVEdjHo88AtSqJZ0bweLoUaBNG+3u2nyLagsf0q3NjohSiGgfEe0lIn0X3fKx0FCgSxepweW3\nfTuwZQswapTqSISv1KsHPPYYoMPi28JA7pY4GICFmZsx8z1GBuQLUub4k8zbCF5jxmhdTXLR3Lw8\nqUEHzA2/3boBGzfKRRJA5m0EM5nTYX6enEF/S0T/I6InjQzIFyIjtQlfW7eqjkQtmbchZE6Hubk7\nbrQNM6cRUSSAb4joMDM70ltCQoJjR4vFAovFomuQRrCXOTp2VB2JOlOnat+HZs1URyJUCQnRfkD3\n6gU8/LDM6TCS1WqF1Wr16Gs87uIgorEAMpj5w7znftXFYbd7t9a5cPiw6kjUsNm0FVK+/FIStNAu\nGEZHA+++qzqS4KFLFwcRhRFR+byPywLoAmC/PiGq06wZkJ4OHD+uOhI1NmzQpvpJchaAzOkwK3dq\n0FUAbCWiHwHsALCamf1+JlxISHB3cyQmAn//u+oohFnInA5zCrobVfJbtgz45BOt1SiYXLoE1Kmj\nzcauUEF1NMIssrKARo20WSzduqmOJvDJPGgXOncGvvsOyMxUHYlvLVgA9OwpyVkUJHM6zCeoE3R4\nuLaQ5oYNqiPxHWat1ijlDVEYmdNhLkGdoAGtDh1Mi8nu2qWNFW3fXnUkwqwmTdK6Oc6dUx2JCPoE\nbR8/6qdldI/Nng088YTcmCKKJnM6zCOoLxICWmKuW1frB27SRHU0xsrI0BYtOHhQu2ovRFGuXNHu\ntl2xQisDCv3JRUI3EAVPmWPJEqBdO0nOwjWZ02EOQZ+ggeBZZcVe3hDCHTKnQ72gL3EA2kWzqCit\nL7hiRdXRGCM5WZs7cuqUNhNbCHfs2KHN6Th8WOZ06E1KHG4qXRqIjwe+9vv7I4uWmAgMGSLJWXim\nZUvtfoHx41VHEpzkDDrPjBnayiLz56uORH9ZWUCNGsC2bcAdd6iORvibtDSgcWPg++/l/aMnOYP2\nQPfu2i3fubmqI9HfqlXAXXfJfy7hnapVgVdflTkdKkiCzhMbq41bDMTlfxIT5eKgKJ4RI4AjR2Qt\nT1+TBJ1PIHZzpKZqF3p691YdifBnt90mczpUkASdTyAm6DlztPUGy5RRHYnwdz16aFMQZU6H78hF\nwnxycrR2uwMHgJgY1dEUn6yaIvR25AjQtq32f6RKFdXR+De5SOih0FCgS5fAqbPJqilCb/Xry5wO\nX5IEfZNAKnPIqinCCGPGaCcxgXhB3WykxHGTCxe0drRff9UGmPsrWTVFGGnuXGDmTO3egRA5zfOK\nlDi8EBmpTfHaulV1JMUjq6YII9nndCxcqDqSwCYJuhD+XuaQVVOE0UJCgClTgJEjgatXVUcTuCRB\nF8Lfx4/KqinCF2ROh/GkBl0Imw2oVk2bXVGnjupoPPfUU1p73ciRqiMRgU7mdHhPatBeCgnRzqL9\nscyRkaEN5h8yRHUkIhjInA5juZWgiagEEe0lolVGB2QW/lrmWLJEK23IqinCV+xzOtatUx1J4HH3\nDHoEgEMAAquW4UTnzsB33wGZmaoj8YysmiJ8TeZ0GMdlgiai6gC6A5gNIGjWgg4P1xbL3LBBdSTu\nS04GTpzQzv6F8KUePbTrHjKnQ1/unEFPAvAKgKBbOtLfyhyyaopQadIk4N13gXPnVEdifjk57u3n\n9L8yET0A4Fdm3ktElqL2S0hIcHxssVhgsRS5q1/p0UMrdTBrq3+bWVaWthrMtm2qIxHBqn594Pnn\ngU6dtAvsNWuqjshcrFYrrFYrbtwAli5172ucttkR0b8BDAKQA6A0gHAAy5h5cL59Aq7Nzo4ZqFtX\nmwbXpInqaJxbtkz79dJqVR2JCGbM2g0sEyZo/2/uuUd1ROaSmgo88IDWQ/7JJ8Vss2Pm15m5BjPX\nAtAfwMb8yTnQEflPmUMGIwkzINK6OqZP134D/eIL1RGZx+7dQKtWwKBB2hwTd3jaBx2Yp8pO+MNt\n37JqijCbBx/U2u6GDwc++EA7sw5mK1cCXbtqv128/LL7JVO5k9CF69e1If4pKdpsZTMaNw44fx74\nz39URyJEQfZf6e+9F5g2DShZUnVEvsUMTJ6slXyWLy9Y8pE7CXVQujQQHw98/bXqSApnswFJSVLe\nEOZUo4Z24fr0ae230fR01RH5Tk4OMGyYdm/C9997V4+XBO0GM5c5ZNUUYXblywMrVgD16gFt2gAn\nT6qOyHhXr2plnp9/1mZme9vRIgnaDd27a/W03FzVkdxKLg4KfxAaqnUZPfkk0Lo1sHOn6oiMk5qq\nrdtYo4Z2Ynf77d4fSxK0G2Jjgeho8y3xc+mS9oNj4EDVkQjh2s0dHsuWqY5If/k7NWbMKH7NXRK0\nm8xY5pBVU4Q/snd4jBgBvP9+4HR4eNup4YwkaDeZLUHbV02RwUjCHzVvrl04W7AAePppIDtbdUTe\nYwY++kj7e6xZA/Tqpd+xJUG7qVUrrdXu7FnVkWh27tRaAOPjVUcihHcCocNDj04NZyRBuyk0FOjS\nRVtu3gwSE4HHHzf/jBAhnPHnDg+9OjWckQTtAbOUOWTVFBFI/LHDQ89ODWckQXuga1dg40b1Q8nt\nq6bExKiNQwi9+FOHh96dGs5IgvZAZCRw553A1q1q45CLgyJQmb3Dw4hODWckQXtIdZlDVk0Rgc6M\nHR5Gdmo4IwnaQ6rHj8qqKSIY2Ds8UlPVd3jk5GgLERjVqeGMJGgPNWumvVmOH/f9a9tXTXn8cd+/\nthC+Vr68VlKwd3ikpPg+BnunxtGjxnVqOCMJ2kMhIdpZtIoyx6pVQIMGwB13+P61hVBBZYeHrzo1\nnJEE7QVVZY7Zs2Uwkgg+9g6PGTN81+GxZ4/vOjWckYH9XrhyBaheHUhLA8qW9c1rpqYCTZtqd12V\nKeOb1xTCbHbvBh56SEvYRnVRrFypdUnNnGnsxUAZ2G+Q8HCgRQttFrOvzJkD9O8vyVkENyM7PFR1\najgjCdpLvixzyKopQvzJiA4PlZ0azkiC9pK9H9oX1R1ZNUWIgvTs8FDdqeGMJGgv1a8PlCoF7N9v\n/GvJqilC3EqPDg8zdGo4IwnaS0S+KXPIqilCFK04HR5m6dRwRhJ0Mfjitm9ZNUUI1zyd4bFyJXD/\n/b6bqeEtl212RFQawGYAtwEIBbCUmRPybQ+6Nju769eBqCit/lWxov7HZwaaNNF+jbNY9D++EIEm\nNRV44AHg3nuBadNuPStmBiZPBiZMAJYvV3sxUJc2O2a+DuA+Zm4KoCmArkTUUqcY/Vrp0tqKJl9/\nbczxZdUUITzjrMPDrJ0azrhV4mDma3kflgJQEoDNsIj8jJFlDlk1RQjPFdbhYeZODWfcupOQiEIA\n7AFQB8A0Zh6Vb1vQljgA4NQprXn+3DmgRAn9jpuRoZ0NHDwog/mF8AazVmN+7z2gUiWt06OwsocK\nmVmZKHdbOZclDreGVjKzDUBTIrodwJdE1JCZD9q3Pzr8UdStWBcAYLFYYAmigmlsLBAdDezapdW9\n9LJkCdCunSRnIbxl7/CoW1c7kXr6abW/jVqtVlitVly9cRWLDixy62s8nsVBRGMAXGPmD/Oec/2p\n9bHvmX0oVaKUx0EHgpEjtZ/K//qXfsds0wZ47TXt1zIhRGDYd34fei7qiafufgpvxL9R/IuERFSZ\niCrkfVwGQGcAyfn3qR1RG1N3TC1O3H5N7zq0rJoiROBZd2wdOs3rhPc6vYfR7Ue79TXutNk1BvAp\ngBLQEvrnzPx2vu18+MJhtJ3TFgeeOYAq5ap4/zfwUzk5WrvdgQP6lCReflk7I3/nneIfSwih3vRd\n0zFuyzgs67sMrWu0BuBem51u40Zf+foV/PbHb0h8KLFYx/NX/fsDnTsXfzHXrKw/W4VkML8Q/i3X\nlotXv3kVa35egzUD16BOxTqObT4dNzomfgzWHluLXWd26XVIv6JXmUNWTREiMGRmZaL34t7Yc24P\nvn/i+wLJ2V26Jejw28IxvsN4DF83HDYOvjbprl21qXM3bhTvOLJqihD+L+1qGuLnxiOiTATWP7oe\nEWUivDqOrrM4hjQdglxbLhbuW6jnYf1CZKR25rttm/fHSE3V7h7s3Vu/uIQQvrXv/D7cm3gvHr7z\nYSQ9mFSs7jZdE3QIhWBqt6kYuWEkrt64queh/UJxyxyyaooQ/u3mTg0qZuO17tPsWlZviU61O2H8\n1vF6H9r0ipOg7aumFPcioxBCjem7pmPoiqFY3n85+jfqr8sxDRk3+m7HdzF7z2z8fOlnIw5vWk2b\nagvKHjvm+dfaV025+2794xJCGCfXlot/rv8nJu+YjG1Dtzna6PRgSIKuWr4qXm3zKl76+iUjDm9a\nISHeD/GXVVOE8D96dGo4Y9jA/hEtR+DwxcNY+/Nao17ClLwpc1y8KKumCOFvzl49q0unhjOGJejb\nQm/DR/d/hBfWv4Cs3CyjXsZ0OnUCvvsOyMx0/2tk1RQh/Mu+8/vQKrGVLp0azhi65FWPej1QJ6JO\nUM3pCA/XBoFv2ODe/sxaeUMuDgrhH/Tu1HDG8DUJJ90/Ce9sewfnMs4Z/VKm4UmZQ1ZNEcJ/GNGp\n4YxusziceeXrV3Dpj0tIeiipWK/lLw4f1uZynDrlev7sU08BtWoBo0Y5308IoY6zmRre8umwJGeu\n3LiCO6fdiRX9V6BFtRbFej1/wKwNCf/yS23R16LIqilCmF9mViYe+eIRpN9Ixxd9v9DtYqBPhyU5\nE2xzOojcK3PIqilCmJsvOjWc8UmCBv6c07Fg3wJfvaRS7vRDy2AkIczLV50azvikxGG34/QO9Frc\nC4efO4zyt5Uv1uua3fXrQJUq2sooFSveuj05GejYUatTh7q1MqQQwlfWHVuHwV8OxpRuUwy7GGia\nEoddMM3pKF1a68xYv77w7YmJwJAhkpyFMBtfd2o449MzaECbk9p4emN8/8T3uKNSYE+lnzED2L4d\nmD+/4Odl1RQhzMeITg1nTHcGDQTXnI7u3bVbuHNzC35eVk0RwlyMnqnhLZ8naCB45nTExgJVq2o3\no+QnFweFMA/VnRrOKEnQwTSn4+ZuDlk1RQjzMEOnhjNKEjQQPHM6bu6HllVThDAHX87U8JbPLxLm\nd+TiEbRImUT2AAARe0lEQVRJaoMDzx5AdLnoYsVhVjk5QFQUcOAAEB0N1K4NfPGFDOYXQqXpu6Zj\n3JZxWNZ3ma4D9j2hy0VCIqpBRJuI6CARHSCi4XoFWL9yfQxtOhSvb3hdr0OaTmgo0KULsHatrJoi\nhGpGrn5iBHe6cLMBvMjMPxJROQC7iegbZk7WI4Ax8WNw57Q7sevMroCd09GjhzaXo1QpGSsqhCr5\nZ2p8/8T3proYWBSPSxxEtBzAVGbekPfc6xKH3Zy9czBrzyxsf3w7QkhZWdwwFy4AdepoS2KdOAFE\nmP99IURAOXv1LB5c9CAaV2mMmQ/MNMXFQN37oIkoDkAzADu8D+tWgT6nIzISqN7WivsePiHJWeiC\nmbH44GJcyLygOhTTM3unhjNu32icV95YCmAEM2fk35aQkOD42GKxwGKxeBRECIVgarep6LW4Fx6+\n8+GAmtPBzJi8YzJSWr+B8Mp/AfMmU14tFv4jOzcbz6x5BuuOrcNtobdhzcA1uLPynarDMiVfzNRw\nl9VqhdVq9eyLmNnlA0BJAOsBvFDINtbL4C8H82vfvKbb8VTLzs3mZ1c/y40+bsTHfzvOTaY34cUH\nFqsOS/ix3//4nTt+2pF7LOzBV29c5aQ9SRz1fhRv/GWj6tBM5+OdH3P0B9G8/dR21aEUKi93Os+9\nLncACMA8AJOK2K5bwGevnOVK71XioxeP6nZMVa5cv8LdFnTjLvO78OU/LjMzs/WElWMnxXJmVqbi\n6IQ/+uW3X7jBtAY8/KvhnJOb4/j8hl82cOSESJ6zd4664EwkJzeHX1r3EtefWp+PXTqmOpwiuZOg\n3alBtwHwKID7iGhv3qOrZ+fp7gmUOR2p6aloO6ctYm+PxeoBq3F76dsBAPFx8bi3+r2YsH2C4giF\nv9lxegfaJLXBM395BpO7TUaJkBKObR1qdcDmxzZj3OZxeGPjG0GxKEZRzDpTw2uuMrirB3Q8g2Zm\nvp59netOqctfHf1K1+P6yv/O/I+rfViNP9j+Adtstlu2n7x8kiu+V5FTfk9REJ3wR0sOLuHKEyrz\nqiOrnO53PuM8t5rdivst6cd/ZP/ho+jM48yVM9x8ZnN+bPljfCPnhupwXIIeJQ6XB9A5QTMzrz6y\nmutNrecX3+T8VhxewZUnVOYvDn3hdL+ETQncZ3EfH0Ul/JXNZuN3t77L1SdW5z1n97j1NdeyrnHf\nJX251exW/GvGrwZHaB4/nfuJYyfF8tub3y70xMiM/DZBMzN3W9CNP9j+gSHH1pvNZuNJ30/imA9j\neOfpnS73v5Z1jWtOqikXdkSRsnKy+IkVT3DTGU35dPppj74215bLr3/7OteeXJuTLyQbFKF5rP15\nLUdOiORF+xepDsUjfp2gD184zJXeq8RpV9MMOb5e8ndqeFK2WHJwCTf+uDFn52YbGJ3wRzd3angr\nGDo8zN6p4Yw7Cdq0t+35w5yOqzeu4sFFD+LY78ewbeg21KxQ0+2v7d2gNyqFVcKs3bMMjFD4mxO/\nn0DrxNZoGNkQK/qvQLlS5bw+1tBmQ7Go9yL0W9oPc3+cq1+QJuBvMzW85iqDu3rAoDNoZub06+lc\n9YOqvOP0DsNew1unLp/iJtOb8D9W/YOzcrK8Osa+c/s4ckIkX8y8qHN0wh/9kPoDV/2gKk/5YYqu\nxz306yGu9VEtHr1hNOfacnU9tgoZNzL4oUUPsWWuhX+79pvqcLwGfz6DBoDw28IxvsN4DF873FSt\nQ7vP7karxFYY3GQwpveYjpIlSnp1nMZVGqNvw754c9ObOkco/M3SQ0vxwKIHMKvnLDzf8nldj90g\nsgF++PsP2HhiIwYuG4jrOdd1Pb4vmXn1E0O4yuCuHjDwDJpZu+DRYlYL/vTHTw19HXe526nhrkvX\nLnHU+1H807mfdDme8C/edGp4y987PPyxU8MZ+PNFwvx+SP2BYz6M4SvXrxj+WkXxtFPDEx/v/Jjj\n58QHxJtOuK84nRre8tcOD3/t1HAmYBI0szan49WvX/XJa90sOzebn1vzHDf8T0NDbjDJyc2ROR1B\nRq9ODW/5U4eHP3dqOBNQCVrVnI7CZmoYQeZ0BI+iZmr4mtlnePjLTA1vuZOgTX2RMD8VczqKmqlh\nBJnTERyczdTwNTPP8Ai4mRrecpXBXT3gozNoZt/O6dh9djdX+7Aav7/9fZ/VhmVOR2Bzd6aGr5lt\nhoe/zdTwFgKpxGHnizkd9k6NZYeWGfYaRZE5HYHHl50a3jJLh0egdWo4E5AJmtm4OR1Gdmq4S+Z0\nBBYVnRreUt3hEYidGs4EbII2Yk6H0Z0anpA5HYFBdaeGt1R0eARqp4Yz7iRov7lImJ/eczrsMzV+\n/u1nbH98u0czNYwgczr8n54zNXzNlzM8gmamhrdcZXBXDyg4g2bWb06HHjM1jCBzOvyXfabG5B8m\nqw6lWOwzPF7/9nVDZngEykwNbyFQz6ABfeZ07Enbg1aJrTCoyaBizdQwgszp8E/5Z2oMbzlcdTjF\nYp/hsSllk+4zPNKupiF+bjwqlK4QHDM1vOUqg7t6QNEZNHPx5nSo7NRwl8zp8B/+0KnhrWtZ17jf\nkn66dXgEU6eGMwjUi4T5eTqnw2az8Ufff6S0U8MTMqfD/PJ3aqSmp6oOxxB6dXgEW6eGM0GRoJnd\nn9Nhpk4Nd8mcDnPz104NbyXtSeLICZFedXjYOzW2ndxmQGT+J2gStDtzOnw1U8MIMqfDnMwyU8PX\nNvyygaPej3J7hkegz9TwljsJ2m8vEuZnn9Px4voXC91++spptJ3TFjXCaxg+U8MIMqfDfOwzNZ7+\ny9PKZ2r4WodaHWAdYsW4zeMwesNopxfpZaZGMbnK4ACSAJwHsL+I7b78oVOkouZ0qJipYQSZ02Ee\nZp2p4WuuZnicvXKWm89szkO+HBLQMzW8BT1KHADaAWhm9gTNfOucDn/o1PCEzOlQK5A7NbxVVIeH\ndGq45k6CJm0/54goDsAqZm5cyDZ25xi+0n1hd3So1QElQ0piwncTsLzfcrSo1kJ1WLr4I/sPNPhP\nA8x5aA7uq3Wf6nCCSnZuNp5Z8wx2p+3GqgGrUD28uuqQTMPGNozZOAafHfwMawauQcrlFAz+cjCm\ndJuC/o36qw7PtIgIzExO9wm0BH3k4hE0m9kMtSNqY83ANcpv29bb0kNLMW7zOOz5xx6EhoSqDkd3\nx347hik7piDHlqM6lAJ+PPcjKpapiM/+9plf3bbtS3P2zsEr37yCkiVKYmmfpWgT20Z1SKbmswQ9\nduxYx3OLxQKLxeJprLranLIZTaOb+t3FQHcwMzrM64A+d/XBsy2eVR2Orrad2oa/Lf4b/n733xFT\nPkZ1OAWUL1UeAxsPDKqLgd7YdWYXIstGIq5CnOpQTMdqtcJqtTqev/XWW8F3Bh0M9p/fj47zOiL5\nuWRUCqukOhxdLNy3EC+ufxELei1AlzpdVIcjhOGCssQRLIZ9NQzMjP/0+I/qUIqFmfGvLf/CnB/n\nYNWAVWgU1Uh1SEL4hC4JmogWAYgHUAnArwDeZOY5+bZLglbgtz9+Q4P/NMA3g75BkypNVIfjlRs5\nN/Dkqidx+OJhrBywEtHlolWHJITP6HYG7eJFJEErMn3XdHx+8HNsGrIJRE7/nU3n0rVL6LW4FyqH\nVcb8h+cjrGSY6pCE8Cl3EnRA3EkYrJ5q/hR+v/47lh5aqjoUjxz77RhaJbZCy2otsaTPEknOQhRB\nErQfKxFSAlO6TsHL37yMa9nXVIfjlm2ntqFtUlu83PplTOg8ASEkb0EhiiL/O/ycP83pWLhvIXp9\n3gvzHp6Hp5o/pTocIUxPatAB4FT6KTSb2Qx7ntpjyhtzpFNDiFvJRcIg8pb1LRy8cBCL+yxWHUoB\n0qkhROHkImEQebXNq9h5Zic2ndikOhSHS9cuocuCLsjMzoT1MaskZyE8JAk6QJQpWQYfdPkAI9aN\nMMUcC+nUEKL4JEEHkN4NeqNSWCXM2j1LaRzSqSGEPqQGHWBUz+mQmRpCuEcuEgYpFXM6pFNDCM9I\ngg5Svp7TIZ0aQnhOujiCVMUyFZEQn4Dha4fD6B+e0qkhhHEkQQcoX8zpkE4NIYwlCTpAGT2nQzo1\nhDCe/K8KYEbN6ZCZGkL4hlwkDHB6zumwd2ok7U3C6oGrpVNDiGKQLg4BQJ85HdKpIYS+pItDACj+\nnA7p1BBCDUnQQaA4czqkU0MIdSRBBwlv5nRIp4YQakkNOoh4MqdDZmoIYSy5SChu4WpOh3RqCOEb\nuiRoIuoK4CMAJQDMZub3btouCdqPOJvTIZ0aQvhOsbs4iKgEgGkAugK4C8AAImqgX4jGsVqtqkO4\nhRliunlOhz0mM3VqmOH7dDMzxgSYMy6JST+urvrcA+AYM6cwczaAzwA8ZHxYxWfGfxCzxJR/TofV\najVdp4ZZvk/5mTEmwJxxSUz6cZWgqwFIzff8dN7nhB/LP6fj+G/HpVNDCJMKdbFdissByj6nY/Hq\nxVg1YpV0aghhQk4vEhLRvQASmLlr3vNRAGz5LxQSkSRxIYTwQrG6OIgoFMARAB0BnAWwE8AAZk7W\nM0ghhBC3clriYOYcIhoGYD20NrtESc5CCOEbxb5RRQghhDGKdcmeiLoS0WEi+pmIXtMrqOIgoiQi\nOk9E+1XHYkdENYhoExEdJKIDRDTcBDGVJqIdRPRjXkwJqmOyI6ISRLSXiFapjgUAiCiFiPblxbRT\ndTwAQEQViGgpESUT0aG860WqY6qf9z2yP9JN8l5/Me89vp+I/ktEt5kgphF58RwgohFF7sjMXj2g\nlTyOAYgDUBLAjwAaeHs8vR4A2gFoBmC/6ljyxRQNoGnex+Wg1fXN8L0Ky/szFMAPAFqqjikvnpcA\nLASwUnUsefGcAFBRdRw3xfQpgMfz/fvdrjqmm+ILAZAGoIbiOKoB+AXAbXnPPwcwRHFMjQDsB1A6\nL49+A6BOYfsW5wzalDexMPNWAL+rjiM/Zj7HzD/mfZwBIBlAjNqoAGa2L1ZYCtoPWZvCcAAARFQd\nQHcAswE4vcLtY6aJhYhuB9COmZMA7VoRM6crDutmnQAcZ+ZUl3saLxRAWF7TQxiAM4rjuRPADma+\nzsy5ADYD6FXYjsVJ0HITixeIKA7aGf4OtZEARBRCRD8COA/ga2bepTomAJMAvAIT/LDIhwF8S0T/\nI6InVQcDoBaAC0Q0h4j2ENEnRGS2Qd39AfxXdRDMfAbAhwBOQetEu8zM36qNCgcAtCOiinn/bj0A\nVC9sx+IkaLm66CEiKgdgKYAReWfSSjGzjZmbQntztCSihirjIaIHAPzKzHthojNWAG2YuRmAbgCe\nI6J2iuMJBXA3gI+Z+W4AmQBGqg3pT0RUCkBPAEtMEEsEgAehlWJjAJQjokdUxsTMhwG8B+BrAGsB\n7EURJyTFSdBnANTI97wGtLNoUQgiKglgGYAFzLxcdTz55f16vAnaUCyVWgN4kIhOAFgEoAMRzVMc\nE5g5Le/PCwC+hFbeU+k0gNP5fuNZCi1hm0U3ALvzvl+qdQJwgpkvMXMOgC+gvc+UYuYkZv4LM8cD\nuAztutQtipOg/wfgDiKKy/uJ2Q/AymIcL2AREQFIBHCImT9SHQ8AEFFlIqqQ93EZAJ2h1caVYebX\nmbkGM9eC9ivyRmYerDImIgojovJ5H5cF0AXaBR5lmPkcgFQiqpf3qU4ADioM6WYDoP2ANYOTAO4l\nojJ5/w87ATikOCYQUVTen7EAHkYR5SBXsziKxCa9iYWIFgGIB1CJiFIBvMnMcxSH1QbAowD2EdHe\nvM+NYuZ1CmOqCuDTvJGyIQA+Z+avFMZTGDOU0aoA+FL7v41QAAuZ+Wu1IQEAngewMO/k6DiAoYrj\nAeD4IdYJgBlq9WDmnUS0FMAeADl5f7q/7ptxlhJRJQDZAJ5l5iuF7SQ3qgghhEnJbEkhhDApSdBC\nCGFSkqCFEMKkJEELIYRJSYIWQgiTkgQthBAmJQlaCCFMShK0EEKY1P8DaCJRwqueRkQAAAAASUVO\nRK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"searches = [\"I do not know\", \"I have no doubt\"]\n",
"lines = []\n",
"for search in searches:\n",
" line, = plt.plot([list(segment).count(search) for segment in emma4gramsSegments], label=search)\n",
" lines.append(line)\n",
"plt.legend(handles=lines)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It's worth reiterating that the numbers here are very small, so we should probably resist the temptation to jump too much to conclusions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Correlations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A question we might have about the graph above is to what extent values in the two lines correlate. In other words, if one line rises, does the other have a tendency to rise, or is it the opposite, or is there no real correlation (synchronized variation) between the two.\n",
"\n",
"Once again we can use NumPy to help us measure correlation using [corrcoef()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html). Let's first see it in action with a couple of simple example datasets."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nROT/AWbnp1qmN3yaAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"0.98198050606196585"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list1 = [1,2,3]\n",
"list2 = [1,5,7]\n",
"plt.plot(range(3), list1, range(3), list2)\n",
"plt.show()\n",
"np.corrcoef(list1, list2)[0,1] # this returns a matrix (box) of values, but we're only interested in the top right value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a [correlation value](http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient) that expresses the degree to which the values from the two lists change in harmony. For our purposes the underlying mathematics of it are somewhat less important than the general concept of correlation (synchrnized variation) and what the value essentially conveys.\n",
"\n",
"Correlation values vary between -1 and 1. The correlation value in this case (0.98198050606196585) is approaching 1 which indicates a high correlation between the two lists (as the values in one list rise so do the ones in the other). Let's flip the order of the second list to see what happens."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"-0.98198050606196585"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list2.reverse()\n",
"plt.plot(range(3), list1, range(3), list2)\n",
"plt.show()\n",
"np.corrcoef(list1, list2)[0,1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that we still have a strong correlation, but it's inverted (close to -1).\n",
"\n",
"If items from our lists vary with little correlation, the correlation value will approach zero. Now let's try getting a correlation value for our two search terms."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[6, 6, 2, 5, 7, 7, 6, 4, 3, 4]\n",
"[3, 1, 2, 0, 1, 1, 2, 1, 2, 3]\n"
]
}
],
"source": [
"iDoNotKnowCounts = [list(segment).count(\"I do not know\") for segment in emma4gramsSegments]\n",
"iHaveNoDoubtCounts = [list(segment).count(\"I have no doubt\") for segment in emma4gramsSegments]\n",
"print(iDoNotKnowCounts)\n",
"print(iHaveNoDoubtCounts)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.27066598098038336"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.corrcoef(iDoNotKnowCounts, iHaveNoDoubtCounts)[0,1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So a weak inverse correlation (as the frequency of one rises or drops the other has a slight tendency to go in the opposite direction). Let's see if we can find one of our top frequency four-grams with a stronger correlation."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['I do not know', 'a great deal of', 'I am sure I', 'I do not think', 'Mr and Mrs Weston', 'it would have been', 'I have no doubt', 'I am sure you', 'at Mrs Goddard s', 'and I am sure', 'that she could not', 'have no doubt of', 'I am sure she', 'quarter of an hour', 'as soon as she']\n"
]
}
],
"source": [
"emma4gramsMostFrequent = [\" \".join(words) for words, count in emma4gramsFreqs.most_common(15)] # get a list of top \n",
"print(emma4gramsMostFrequent)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[('I do not know', 1.0), ('I do not think', 0.71679269233981702), ('I am sure you', 0.20299948573528753), ('I am sure she', 0.1211096026497343), ('and I am sure', 0.11275884962655315), ('it would have been', 0.082874193016474501), ('quarter of an hour', 0.054603247242463411), ('I am sure I', 0.041812100500354533), ('as soon as she', 5.8387319739822136e-17), ('Mr and Mrs Weston', -0.037330068339472076), ('I have no doubt', -0.27066598098038336), ('at Mrs Goddard s', -0.32003866823226162), ('have no doubt of', -0.35569399576529515), ('that she could not', -0.3797772626563749), ('a great deal of', -0.41344911529736156)]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"emma4gramsSegmentsCounts = {} # build a dictionary of counts for each search item\n",
"for search in emma4gramsMostFrequent:\n",
" emma4gramsSegmentsCounts[search] = [list(segment).count(search) for segment in emma4gramsSegments]\n",
"\n",
"iDoNotKnowCorrelations = {} # build a dictionary of correlation values for \"I do not know\"\n",
"for ngram, counts in emma4gramsSegmentsCounts.items():\n",
" iDoNotKnowCorrelations[ngram] = np.corrcoef(emma4gramsSegmentsCounts[\"I do not know\"], counts)[0,1]\n",
"\n",
"iDoNotKnowCorrelationFreqs = nltk.FreqDist(iDoNotKnowCorrelations)\n",
"print(iDoNotKnowCorrelationFreqs.most_common())\n",
"iDoNotKnowCorrelationFreqs.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"I do not know\" correlates perfectly with \"I do not know\" (phew). But this also suggests that \"I do not know\" is positively correlated with \"I do not think\", followed by a bunch of weak correlations, and then some slightly stronger negative correlations for things like \"a great deal of\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Next Steps"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Create an _emmaStoppedWords_ list that filters out stoplist words in _emmaWords_ (see [Getting NLTK](GettingNltk.ipynb#Word-Frequencies) if needed)\n",
"* Compare the top 20 frequency n-grams from emmaWords and emmaStoppedWords – which seems more useful?\n",
"* Using emmaStoppedWords determine the correlations between the top n-gram and the top 20 n-grams (for 10 text segments)\n",
"* Do the same, but with 100 text segments – does the ranking change?\n",
"\n",
"Next we're going to have some distant encounters with [Sentiment Analysis](SentimentAnalysis.ipynb)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"[CC BY-SA](https://creativecommons.org/licenses/by-sa/4.0/) From [The Art of Literary Text Analysis](ArtOfLiteraryTextAnalysis.ipynb) by [Stéfan Sinclair](http://stefansinclair.name) & [Geoffrey Rockwell](http://geoffreyrockwell.com). Edited and revised by [Melissa Mony](http://melissamony.com).
Created February 24, 2015 and last modified December 9, 2015 (Jupyter 4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}