Add files via upload

This commit is contained in:
Peter Norvig authored and GitHub committed 2019-06-07 13:38:06 -07:00
1 parent 1d54c82afa
commit ed5d8907e6
1 file changed
+9 -9
+9 -9
View File
@@ -30,7 +30,7 @@
"We don't know who else will be on the ballot and what their approval levels will be, we don't know if there is systematic bias in the polling data, we don't know how many people will vote for a candidate they disapprove of or against a candidate they approve of, and we don't know who will decline to vote.\n",
"I have five ways of understanding the fluidity of the situation:\n",
"\n",
"- **Undecided**: If many voters are undecided, the net approval could change a lot. So I track the number of states for which at least 5% of voters are undecided. At the inauguration in 2017, all 51 states (including DC) had at least 5% undecided; now there is only one such state (Alaska). Overall 4% of voters are undecided. Most people have made up their mind.\n",
"- **Undecided**: If many voters are undecided, the net approval could change a lot. So I track the number of states for which at least 5% of voters are undecided. At the inauguration in 2017, all 51 states (including DC) had at least 5% undecided; now there is only one such state (Alaska). Overall 4% of voters are undecided. Most people have made up their mind. In [one poll](https://www.pbs.org/newshour/politics/57-percent-of-voters-say-they-wont-support-trump-in-2020) 57% said they would definitely not vote for Trump in 2020; other polls have this in the 50% to 55% range.\n",
"\n",
"- **Variance**: How much are voters changing their minds from month to month in each state? I track the standard deviation, 𝝈, of the net approval for each state over the last 12 months.\n",
"\n",
@@ -57,7 +57,7 @@
"text": [
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
" Dload Upload Total Spent Left Speed\n",
"100 116k 0 116k 0 0 242k 0 --:--:-- --:--:-- --:--:-- 242k\n"
"100 116k 0 116k 0 0 216k 0 --:--:-- --:--:-- --:--:-- 216k\n"
]
}
],
@@ -286,7 +286,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzIAAAJ9CAYAAADuTEcgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlYlXX+//HXzQFZhYMIuIErLqCFWiJmprmH68/KJrMZZ8oZv7bYZGNWTmpN5tQ0NmUu6WRppYakTplOTW4kqTU1lpoy4VJpgigoyH7O7w/Ho4dNQOCcw3k+rovr6v7c933uN9zY5cvPZmRlZVkFAAAAAC7Ew9EFAAAAAEB1EWQAAAAAuByCDAAAAACXQ5ABAAAA4HIIMgAAAABcDkEGAAAAgMshyAAAAABwOQQZAAAAAC6HIOMAqampji4B9YD37B54z+6B9+weeM/ugffccBBkAAAAALgcggwAAAAAl0OQAQAAAOByCDIAAAAAXI6nowsAAABwZcXFxcrNzXV0GagiHx8fZWdnO7oM/I+/v788PWsWSQgyAAAANVRcXKzz58/LbDbLMAxHl4Mq8Pb2lo+Pj6PLgCSr1aqsrCw1bty4RmGGoWUAAAA1lJubS4gBasgwDJnN5hr3aBJkAAAArgEhBqi5a/nzQ5ABAAAA4HIIMgAAAABcDkEGAAAAgMshyAAAALiZl156SQMGDFBERITat2+v8ePH68CBA3bXmM3mcr+mT59uu8ZqtWrevHnq3LmzmjVrpoSEBB08eLDSZ8+bN6/cz+3YsaMkqU+fPnrggQfKvffjjz+W2WzWf//732v8CaAhIMgAAAC4meTkZP3mN7/Rli1btHHjRnl6emrMmDE6e/as7ZpDhw7Zfa1evVqSNGbMGNs1L7/8shYuXKj58+fr008/VWhoqMaOHavz589X+vyoqKgyn79r1y5J0sSJE7V+/fpyV7JauXKl4uPj1aFDh9r4McDFEWQAAADcTFJSku655x5FR0crJiZGS5Ys0enTp/X555/brgkPD7f72rRpkzp06KC+fftKutgbs2jRIk2bNk2jR49WdHS0Fi1apJycHCUmJlb6fE9PzzKf37RpU0nSXXfdpaKiIr3//vt295w+fVofffSR7r33XklSUVGR/vCHP6hz584KCwtTTEyMZs+eXYs/JTg7NsQEAACoRUHLzPX6vOz7sq75M3JycmSxWGQ2l197Tk6OkpKSNGPGDFvbsWPHdOrUKd166622Nl9fX/Xp00e7d+/WpEmTalRLcHCwEhIS9Pbbb+uee+6xta9evVq+vr4aPXq0JGnx4sX68MMPtXz5ckVGRurEiRNKTU2t0TPhmggyAAAAbu7xxx9Xt27d1KtXr3LPJyYmqrCwUL/4xS9sbadOnZIkhYaG2l0bGhqqkydPVvq8Q4cOqWXLlnZtw4YN0/LlyyVJ9957r8aMGaP//ve/tmFkb7/9tm6//Xb5+flJkn744Qe1b99effr0kWEYioiIUFxcXDW+a7g6ggwAAIAbe+KJJ/T5559r8+bNMplM5V7z5ptv6rbbbrMN/7pWbdu21XvvvWfX5u/vb/vvW265Ra1bt9aqVas0e/ZsffHFFzp48KBee+012zV33323xo4dq549e+rWW2/V4MGDNXjwYHl4MHPCXfCmAQAA3NTMmTO1bt06bdy4UW3atCn3mn379umrr77SL3/5S7v28PBwSVJGRoZde0ZGhsLCwip9bqNGjdSuXTu7r0ufJ13c7X3ChAlavXq1SkpKtHLlSnXt2lXdu3e3XRMbG6t9+/bp6aeflsVi0ZQpUzRmzBhZLJbq/AjgwuiRAQAAqEW1MWelPsyYMUPvv/++/vGPf9iWPi7Pm2++qdatW6t///527a1bt1Z4eLi2bt2qHj16SJLy8/OVkpKiuXPnXnN9EyZM0PPPP6/169crKSlJs2bNKnNN48aNNXr0aI0ePVp33323Bg0apLS0NFY1cxMEGQAAADczffp0rVmzRqtWrZLZbLbNd/H391dAQIDtugsXLui9997TQw89JMMw7D7DMAxNmTJFL730kqKiotShQwe9+OKL8vf31+23317p84uLi23PvNKVvTItW7bUwIED9eijj6qoqEh33nmn3bWvvvqqmjVrpm7dusnLy0vvvfeeAgMD1aJFi2r/POCaCDIAAABuZtmyZZJkWwHskhkzZmjmzJm246SkJOXm5mrChAnlfs7DDz+svLw8PfbYY8rKylLPnj2VlJSkxo0bV/r81NRUderUqUz76dOn5el5+a+nEydO1Mcff6w77rijzIpqjRs31t/+9jelpaXJMAx169ZN7733nm0xADR8RlZWltXRRUgXd5idO3eu7r//fr3wwguSpClT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 truncated
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
@@ -305,10 +305,10 @@
" N = len(dates)\n",
" err = [[EV(states, date) - EV(states, date, -swing) for date in dates],\n",
" [EV(states, date, swing) - EV(states, date) for date in dates]]\n",
" plt.plot(range(N), [270] * N, color='darkorange', label=\"270\")\n",
" plt.plot(range(N), [270] * N, color='darkorange', label=\"270 EVs\")\n",
" plt.errorbar(range(N), [EV(states, date) for date in dates], fmt='D-',\n",
" yerr=err, ecolor='grey', capsize=7, label='EVs ±3% swing')\n",
" labels('Months into term', 'Electoral Votes with Net Positive Approval')\n",
" yerr=err, ecolor='grey', capsize=7, label='Trump EVs ±3% swing')\n",
" labels('Months into term', 'Electoral Votes')\n",
" \n",
"plot1(states, dates)"
]
@@ -329,7 +329,7 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzUAAAJ9CAYAAAAMkFxZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl4lOW9//HPM5OVkGRCgJBAIAKRfVGQpQaQ1R5F0aOAiqi40KLHVqui/mpxgRZ3rHUtVNsel4MLWrVVREUJIFhkcYFAFMIiISHLJJA9M/P7I2XCzCQhQJJnlvfrurgu7+eZ5WsmaD657/t7G3a73SUAAAAACFAWswsAAAAAgNNBqAEAAAAQ0Ag1AAAAAAIaoQYAAABAQCPUAAAAAAhohBoAAAAAAY1QAwAAACCgEWoAAAAABDRCjcmys7PNLgFtgM85NPA5hwY+59DA5xwa+JyDB6EGAAAAQEAj1AAAAAAIaIQaAAAAAAGNUAMAAAAgoIWZXQAAAABaT21trcrKyswuwy9FRUWppKTE7DLwHzExMQoLO7V4QqgBAAAIUrW1tTpy5IhsNpsMwzC7HL8TGRmpqKgos8uAJJfLJbvdrtjY2FMKNiw/AwAACFJlZWUEGgQEwzBks9lOeVaRUAMAABDECDQIFKfzvUqoAQAAABDQCDUAAAAAAhqhBgAAAEBAI9QAAADAr8ybN082m02PPfaYx/XMzEzZbDYVFhae1GvNnDmzpUuEnyHUAAAAwO9ERUXp6aefVkFBgdmlnJLq6mqzSwgphBoAAAD4nTFjxig1NVWPPvpok4/LysrSjBkz1K1bN/Xu3Vs33HCD8vLyJEmLFy/W66+/rpUrV8pms8lmsykzM9PnNfbu3eu+f/yfQYMGNet9pPoZoaeeekr9+/dX//79JUl2u12//OUv1aNHD3Xp0kXTpk3Tjh07WuJLhONw+CYAAEAIiV9ma9P3K7nRfkrPs1gseuCBBzRr1izNmzdPZ5xxhs9jDh06pAsuuECzZ8/WwoULVVNTo4ULF+rKK6/UJ598oltvvVW7du1ScXGxXnzxRUlSQkKCz+t069ZNO3fudI+PHj2qSy65RBkZGc16H4ulbp5g3bp1iouL01tvvSWXyyWpLuz88MMPeu2112Sz2bRw4UJdfvnl2rRpk6Kjo0/pawNfhBoAAAD4pSlTpmjkyJFauHChXnrpJZ/7f/nLXzRw4EA9+OCD7msvvvii0tLStGXLFg0bNkxRUVGKjIxUUlJSo+9jtVrd951Op371q18pKSlJS5Ysafb7SFJkZKSeeeYZRUZGSpJ+/PFHffjhh/rnP/+pc8891/28QYMG6c0339Q111xzml8hHEOoAQAAgN966KGHNGnSJN16660+97Zt26b169era9euPvf27NnjDhsn4/7779f333+vTz/9VFFRUSf1Pv369XMHGknauXOnLBaLRowY4b4WHx+v/v37Kysr66RrQ+MINQAAAPBbZ599ti6++GLdf//9uuuuuzzuOZ1OTZkyRYsWLfJ5XqdOnU76vV577TW9/PLL+vDDDz1mdpr7PjExMR73ji1Ba4hhGCddHxpHqAEAAAghp7rHxUwLFizQyJEj9emnn3pcHzJkiN555x2lpqYqPDy8wedGRETI4XCc8D02btyoO+64Q8uWLfNoENDc92lI37595XQ69dVXX7mXn5WWlmr79u266qqrmv06OLGA6n62bt06XXHFFerXr59sNpteffVVj/sul0uLFy9W37591aVLF1144YV0lwAAAAhwPXv21HXXXacXXnjB4/qNN96o0tJSzZkzR5s2bVJOTo4+//xz/frXv9aRI0ckSd27d9eOHTuUnZ2twsJC1dTU+Lx+Xl6err76at1www0aPny48vLylJeX524n3Zz3aUivXr10wQUX6Pbbb9f69ev1/fffa+7cuYqNjdX06dNb8CuEgAo1ZWVl6t+/vx5++OEGu0X88Y9/1LPPPqtHHnlEn332mTp16qRLL720yW82M63JrdJF/47Smtwqs0sBAADwa/Pnz1dYmOcio+TkZK1cuVIWi0WXXXaZRo0apTvvvFMRERHuvS3XXnutzjzzTI0fP169evXShg0bfF57165dOnz4sJ555hn16dPH/Wf8+PHNfp/GPPfcczr77LN15ZVXauLEiaqoqNBbb71F57MWZtjt9sYX+/mxrl276tFHH9WsWbMk1c3S9O3bVzfddJPuvPNOSVJFRYXS09O1cOFCzZkzx8xyfTy04TUt+WqhXM5DMixddPuI32nBKKYhg1V2drbS09PNLgOtjM85NPA5h4Zg+ZxLSkoUHx9vdhl+q7Ky0t0MAP7hVL9nA2qmpil79+5VXl6eJkyY4L4WHR2tn/3sZ9q4caOJlfl6aMNrenLDb+Ry5kpyyeXM1ZMbfqOHNrxmdmkAAABAwAmaUHPsRFfvThedOnVSfn6+GSU1aE1ulZZ8tVBSpdedSi35aiFL0QAAAICTFHTdz7zb47lcriZb5mVnZ7d2SR7m/jtKLuehBu+5nIc0d3W+3j/HO/AgGLT19xrMweccGvicQ0MwfM7HDp5E4yor+bnLn5SWljY4IXGi5aBBE2qO9RLPz89Xt27d3NcLCgqa7FPe1utl/9y+StPe7PKfpWdejC56YESi0nu3a9Oa0PqCZW02msbnHBr4nENDsHzOJSUl7BlpAntq/E9cXJxSU1NP+nlBs/ysR48eSkpK0urVq93XKisr9eWXX2rkyJEmVuZpbHKkbh/xO0kRXncMKeo2Lcs6qlpnQPZuAAAAAEwRUDM1R48e1e7duyXVnex64MABffPNN0pISFBqaqrmzZunJ554Qunp6erdu7cef/xxxcTE6PLLLze5ck8LRl2l0soiLdt633FXo6SIqdp0uEZLvjmiu4bGmVYfAAAAEEgCaqZmy5YtGjt2rMaOHauKigotXrxYY8eO1R/+8AdJ0q9//WvdfPPNuuuuuzR+/HgdOnRIK1asUGxsrMmV+3pk7DyFWY6framQXKV197Ye0daCanMKAwAAAAJMQM3UjBkzRna7vdH7hmHo3nvv1b333tuGVZ0aq8WqnvFp2lW8q/6ic79kHaBal/TLzGJ9flFnRYU13uQAAAAAQIDN1ASbM2xneF5w7Hf/Y5a9Vg9tLmnjigAAAIDAQ6gxUVp8msd4SAfPVs/PfV/GuTUAAAAmyczMlM1mU2Fhodml4AQINSbqaevpMe4be1Cp7a0e127OLFZJtbMtywIAADDVvHnzZLPZdOutt/rcW7BggWw2m2bOnNnqdYwcOVI7d+5Uhw4dWv29cHoINSY6I95z+dmBIzl6fkyCjt9Fc6DMoXs2sgwNAACYZ01ulQa9cahNV5B069ZN77zzjsrKytzXamtrtXz5co8zCU9FdXXzGjJFREQoKSmpyYPc4R8INSbynqnZU7JHGV0idcuA9h7XX/+hXO/vrWjL0gAAACTVBZqZqwq1v8yhmasK2yzYDBgwQD179tQ777zjvrZy5UpFRkYqIyPDfW3z5s269NJL1bNnT6WmpurnP/+5vvrqK4/XstlsWrp0qa6++mqlpKTooYcekiStWrVKw4cPV1JSkv7rv/5Lb7/9tmw2m/bu3SvJd/nZq6++qq5du+qLL77Q6NGjlZKSoqlTpyonJ6eVvxo4kYDqfhZsusd1l0UWOVW3vOzg0YOqqK3QfWfH6bOfKrXdXut+7G3r7BrRKUJJ7ayNvRwAAMAJ2V7+6ZSfW+Fw6eKPCk7qOfY5XU/5/WbPnq1XX31VV199tSTplVde0axZszxCxJEjRzRz5kw9/PDDMgxDS5cu1fTp07V582YlJia6H/fII49owYIFWrRokSRp//79uuGGG3TjjTdqzpw52r59u37729+esKaqqio9+eSTeuaZZxQZGal58+bpN7/5jVasWHHK/544fczUmCjCGqGk6CSPa3tL9ioqzNALYxMUftynU1jl1K/X2+Vyudq4SgAAAHNMnz5dW7Zs0Y8//qi8vDx9+umnuuqqqzweM27cOF1xxRXq06ePzjzzTD366KOKiorSJ5984vG4Sy+9VNdcc43S0tKUlpaml156ST169NDvf/97paena9q0aZozZ84Ja6qtrdXjjz+uYcOGaeDAgbr11luVmZkpp5M90GYi1JisWzvPNaG77bslSYMTI3TP0DiPex/tr9T/Zpe3WW0AAABmstlsmjp1ql555RW9/vrrysjIUGpqqsdjDh8+rNtuu03Dhg1T9+7d1a1bNx0+fFgHDhzweNxZZ53lMd61a5eGDBnisV9m+PDhJ6wpMjJS6enp7nGXLl1UU1OjkhL2QJuJUGOybjGeoWZPyR73P/96UHuN6BThcf//bSxRzpFaAQAAhIKrr75a//d//6dXXnnFvQztePPmzdPmzZv1hz/8QStXrlRmZqZSUlJ8mgHExMR4jF0u1yk1AAgL89y9cew1mKkxF3tqTOY9U5NTkuP+5zBL3TK0Mf/IV1lt3bKzo7Uuzcss1gc/7yirhU4cAADg5JzMHpdjTQIqHPXL36OthpZPTtTY5MjWKM/HuHHjFB4ersLCQl144YU+9zds2KCHH35Y559/viQpPz9feXl5J3zdPn366IMPPvC49vXXX7dM0WhzzNSYrLHlZ8f0jAvTonPiPa59mVetZ74/2uq1AQCA0DY2OVLLJycq2lr3i9S2DjRS3UzIunXrtG3bNkVG+r5vr1699MYbbygrK0ubN2/W9ddfr4iIiAZeydOcOXO0d+9e3XfffcrOztZ7772nl19+2f2eCCyEGpM1tfzsmOv6tNPkrp5/iX+/uVTfFdW0am0AAADHgk1qjLXNA80xsbGxiouLa/DeM888o7KyMp133nm6/vrrdfXVV6t79+4nfM3u3btr2bJl+vDDD5WRkaHnn39ed999tyQpKiqqRetH6zPsdjvttEy0dcdWnbfLine truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzUAAAJ9CAYAAAAMkFxZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl01NX9//HXzGQlJJkQkpCQQNj3RQGDyqIg2KqIfhWpsrghNbVaqWjrrwparKhVqYpbsSoWUdTiQq0iBYQAAi6ICwQiEBYJIQmZBMg+M78/KBNmJoEAST6zPB/n5Bzv5zPLm0zw5MW9931NNpvNKQAAAADwU2ajCwAAAACAs0GoAQAAAODXCDUAAAAA/BqhBgAAAIBfI9QAAAAA8GuEGgAAAAB+jVADAAAAwK8RagAAAAD4NUKNwXJycowuAc2Azzk48DkHBz7n4MDnHBz4nAMHoQYAAACAXyPUAAAAAPBrhBoAAAAAfo1QAwAAAMCvhRhdAAAAAJpOTU2Njh49anQZPikiIkIlJSVGl4H/iYqKUkjImcUTQg0AAECAqqmp0eHDh2W1WmUymYwux+eEh4crIiLC6DIgyel0ymazKTo6+oyCDcvPAAAAAtTRo0cJNPALJpNJVqv1jGcVCTUAAAABjEADf3E2P6uEGgAAAAB+jVADAAAAwK8RagAAAAD4NUINAAAAfEpmZqasVqueeOIJt+tZWVmyWq0qKio6rdcaP358Y5cIH0OoAQAAgM+JiIjQc889p8LCQqNLOSNVVVVGlxBUCDUAAADwOUOHDlVaWprXbI2n7OxsXXfddUpNTVXnzp116623Kj8/X5I0e/ZsvfXWW1q6dKmsVqusVquysrK8XmP37t2u+yd+9enTp0HvI9XOCP3tb39Tz5491bNnT0mSzWbT7bffrvbt26tNmzYaO3astm7d2hjfIpyAwzcBAACCSOwr1mZ9v5IptjN6ntls1kMPPaQJEyYoMzNTHTp08HrMgQMHdNlll2nSpEmaNWuWqqurNWvWLN1www1atmyZ7rzzTm3fvl3FxcV6+eWXJUlxcXFer5Oamqpt27a5xkeOHNFVV12lIUOGNOh9zOZj8wRr165VTEyM3nvvPTmdTknHws5PP/2khQsXymq1atasWbr22mv11VdfKTIy8oy+N/BGqAEAAIBPGj16tDIyMjRr1iy9+uqrXvf/8Y9/qHfv3nr44Ydd115++WWlp6dr06ZNGjBggCIiIhQeHq6kpKR638disbjuOxwO3XXXXWrTpo3mzJnT4PeRpPDwcM2dO1fh4eGSpB07duiTTz7Rxx9/rAsvvND1vD59+ujdd9/V5MmTz/I7hOMINQAAAPBZDz/8sEaNGqW77rrL697mzZu1bt06tW3b1uverl27XGHjdMycOVM//vijVqxYoYiIiNN6nx49ergCjSRt27ZNZrNZ5513nutabGysevbsqezs7NOuDfUj1AAAAMBnDRgwQFdeeaVmzJihe++91+2ew+HQ6NGj9cgjj3g9LyEh4bTfa+HChXrttdf0ySefKDEx8bTfJyoqqsHvZTKZTrs+1I9QAwAAEETOdI+LkWbMmKGMjAwtX77c7Xq/fv30/vvvKy0tTaGhoXU+NywsTHa7/ZTvsWHDBt1zzz165ZVX3BoENPR96tKtWzc5HA5t3LjRtfystLRUW7Zs0Q033NDg18Gp+VX3s7Vr1+pXv/qVevToIavVqjfffNPtvtPp1OzZs9W9e3e1adNGl19+Od0lAAAA/FzHjh1100036aWXXnK7PmXKFJWWlurmm2/WV199pdzcXH3++ef63e9+p8OHD0uS2rVrp61btyonJ0dFRUWqrq72ev38/HxNnDhRt956qwYOHKj8/Hzl5+e72kk35H3q0qlTJ1122WWaNm2a1q1bpx9//FFTp05VdHS0xo0b14jfIfhVqDl69Kh69uypxx57rM5uEc8884yef/55Pf7441qxYoUSEhJ09dVXn/SHzUir8yo15ssIrc6rNLoUAAAAn3bfffcpJMR9kVFycrKWLl0qs9msa665RoMHD9b06dMVFhbm2tty4403qmvXrrr44ovVqVMnrV+/3uu1t2/froKCAs2dO1fdunVzfV188cUNfp/6vPDCCzr33HN1/fXXa+TIkSovL9d7771H57NGZrLZbE6jizgTbdu21RNPPKEJEyZIOjZL0717d912222aPn26JKm8vFxdunTRrFmzdPPNNxtZrpc/r1+oORtnyek4IJO5jaad96BmDGYaMlDl5OSoS5cuRpeBJsbnHBz4nINDoHzOJSUlio2NNboMn1VRUeFqBgDfcKY/s341U3Myu3fvVn5+vkaMGOG6FhkZqQsuuEAbNmwwsDJvf16/UE+v/72cjjxJTjkdeXp6/e/15/ULjS4NAAAA8DsBE2qOn+jq2ekiISFBBw8eNKKkOq3Oq9ScjbMkVXjcqdCcjbNYigYAAACcpqDvfpaTk9Os7zf1ywg5HQfqvOd0HNDUlQe1ZJBn4EEgaO6fNRiDzzk48DkHh0D4nI8fPIn6VVTwe5cvKS0trXNC4lTLQQMm1Bw/BbagoEBpaWmu6wUFBW59xj0193rZv7es1Nh32/xv6ZkHUxs9dF68unRu0aw1oekFytpsnByfc3Dgcw4OgfI5l5SUsGfkJNhT43tiYmLcfpdvqIBZfta+fXslJSVp5cqVrmsVFRX64osvlJGRYWBl7oYlh2vaeQ9KCvO4Y5Ii7tYr2UdU4/DL3g0AAACAIfxqpubIkSPauXOnpGMnu+7bt0/fffed4uLilJaWpszMTD399NPq0qWLOnfurCeffFJRUVG69tprDa7c3YzBN6i04pBe+faBE65GSGFX6KuCas357rDu7R9jWH0AAACAP/GrmZpNmzZp2LBhGjZsmMrLyzV79mwNGzZMjz76qCTpd7/7nTIzM3Xvvffq4osv1oEDB7R48WJFR0cbXLm3x4dlKsR84mxNueQsPXbv28P6trDKmMIAAAAAP+NXMzVDhw6VzWar977JZNL999+v+++/vxmrOjMWs0UdY9O1vXh77UXHXsnSSzVO6fasYn0+JlERISbjigQAAAD8gF/N1ASaDtYO7hfse13/mW2r0Z+/KWnmigAAAAD/Q6gxUHpsutu4Xyv3Vs8v/HiUc2sAAAAMlJWVJavVqqKiIqNLwUkQagzU0drRbdw9er/SWlrcrv0mq1glVY7mLAsAAMBQmZmZslqt+u1vf+t1b+bMmbJarRo/fnyz1JKRkaFt27apVatWZ/U6VqtVH3744VnX89FHH+nqq69Wp06dlJqaqpEjR+o///mP22Muv/xyWa1Wr6/Bgwe7Pe7DDz9URkaGEhMTlZGRoSVLlpx1fUYh1BioQ6z78rN9h3P14tA4nbiLZt9Ru/64gWVoAADAOKvzKtXnnQPNuoIkNTVVH3zwgY4ePeq6VlNTo7ffflupqaln/fpVVQ1ryhQWFqakpCSZTL6xz3nt2rUaNmyY3nnnHa1evVqjRo3SxIkTtW7dOtdjFixYoG3btrm+vvvuO0VHR+uqq65yPWbjxo265ZZbNG7cOGVlZWncuHG66aab9NVXXxnxxzprhBoDec7U7CrZpSFtwnVHr5Zu19/6qUxLdpc3Z2kAAACSjgWa8cuKtPeoXeOXFTVbsOnVq5c6duyo999/33Vt6dKlCg8P15AhQ9we+8033+jqq69Wx44dlZaWpl/84hfauHGj22OsVqvmzZuniRMnKiUlRX/+859drzlw4EAlJSXpl7/8pf71r3/JarVq9+7dkryXn7355ptq27atVq1apfPPP18pKSm64oorlJubW++fpU+fPpKkG2+8UVar1TWWpNdee03nnHOOEhISdM4552j+/Pkn/b48/vjjmjZtmgYMGKCOHTvqj3/8o/r376+PP/7Y9Zi4uDglJSW5vtavX6+ysjJNnDjR9ZgXX3xRQ4cO1fTp09WtWzdNnz5dQ4YM0YsvvnjS9/dVftX9LNC0i2kns8xy6Njysv1H9qu8plwPnBujFT9XaIutxvXYu9fadF5CmJJaWOp7OQAAgFOyvvbzGT+33O7UlZ8WntZzbDe3PeP3mzRpkt58803XL+MLFizQhAkTvALE4cOHNX78eD322GMymUyaN2+exo0bp02bNrktG3v88cc1Y8YMPfLII5Kkffv2adKkSZoyZYpuvvlmbdmyRX/6059OWVdlZaWefvppzZ07V+Hh4crMzNTvf/97LV68uM7Hr1y5Up07d9azzz6rSy+9VBbLsd/nlixZonvvvVePPvqoRowYoeXLl+uee+5RYmKifvnLXzb4+3TkyBFZrdZ678+fP1+XXHKJ2wzXl19+qalTp7o9buTIkfr73//e4Pf1JczUGCjMEqakyCS3a7tLdisixKSXhsUp9IRPp6jSod+ts8npdDZzlQAAAMY4Hkx27Nih/Px8LV++XDfccIPX44YPH65f/epX6tatm7p27aonnnhCERERWrZsmdvjrr76ak2ePFnp6elKT0/X/PnzlZ6erkcffVRdunTR2LFjdfPNN5+yrpqaGj355JMaMGCAevfurTvvvFNr1qyp9/e01q1bS5JiY2OVlJTkGs+dO1fjx4/X1KlT1blzZ/3617/WuHHj9MwzzzT4ezRv3jzt37+/3j1GP/30k9auXavJkye7Xc/Pz1dCQoLbtYSEBB08eLDB7+1LCDUGS23hviZ0p22nJKlvfJj+2D/G7d6neyv0z5yyZqsNAADASFarVVdccYUWLFigt956S0OGDFFaWprX4woKCnT33XdrwIABateunVJTU1VQUKB9+/a5Pe6cc85xG//0009e1wYOHHjKusLDw9WlSxfXuE2bNqqqqjrpeYp12bZtmzIyMtyunX/++crOzm7Q8z/88EPNmDFD8+bNU7t27ep8zPz589WmTRtdeumlp1WbvyHUGCwLine truncated
"text/plain": [
"<Figure size 864x720 with 1 Axes>"
]
@@ -342,7 +342,7 @@
"def plot2(states, dates):\n",
" N = len(dates)\n",
" plt.plot(range(N), [0] * N, label='Net zero', color='darkorange')\n",
" plt.plot(range(N), [-margin(states, date) for date in dates], 'D-', label='Margin')\n",
" plt.plot(range(N), [-margin(states, date) for date in dates], 'D-', label='Margin to 270')\n",
" plt.plot(range(N), [net_usa[date] for date in dates], 'go-', label='Country-wide Net')\n",
" labels('Months into term', 'Net popularity')\n",
" \n",
@@ -633,7 +633,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
"version": "3.7.2"
}
},
"nbformat": 4,