Skip to content

Instantly share code, notes, and snippets.

@danwahl
Created March 14, 2020 01:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danwahl/94ed99f0c3e0d7c62a16ede0c2d4ddef to your computer and use it in GitHub Desktop.
Save danwahl/94ed99f0c3e0d7c62a16ede0c2d4ddef to your computer and use it in GitHub Desktop.
Question Issue Biden Sanders Warren Trump Dan Answers Weights
Should the US End the Cash Bail System? Crime & Justice 1 1 1 -1 1 1 2
Should the Death Penalty Be Allowed? Crime & Justice -1 -1 -1 1 -1 -1 1
Should the Use of Private Prisons Continue? Crime & Justice -1 -1 -1 1 -1 -1 2
Should Universal Background Checks for Gun Purchases Be Made Law? Crime & Justice 1 1 1 0 1 1 2
Should the Federal Government Adopt Net Neutrality Rules? Domestic Policy 0 1 1 -1 1 1 1
Should Recreational Marijuana Be Legal Federally? Domestic Policy -1 1 1 0 1 1 2
Should the Federal Government Provide Universal Childcare? Domestic Policy -1 1 1 -1 1 1 2
Should Federal Taxes Be Increased? Economy 1 1 1 -1 1 1 2
Should the Federal Minimum Wage Be Increased? Economy 1 1 1 -1 0 0 0
Should the US Implement a Universal Basic Income (UBI)? Economy -1 -1 0 0 1 1 2
Should the US Implement a Wealth Tax? Economy -1 1 1 -1 0 0 0
Should the Federal Funding to Historically Black Universities and Colleges (HBCUs) Be Increased? Education 1 1 1 1 0 0 0
Should Student Loan Debt Be Forgiven? Education 0 1 1 0 0 0 1
Should Public College Be Tuition-Free? Education 1 1 1 0 1 1 1
Should Election Day Be a National Holiday? Elections 0 1 1 0 1 1 4
Should the US Abolish the Electoral College? Elections 0 1 1 -1 1 1 4
Should Former Felons Be Allowed to Vote? Elections 1 1 1 0 1 1 2
Should 2020 Presidential Election Candidates Accept Support from Super PACs? Elections 0 -1 0 1 -1 -1 1
Should Voters Be Required to Show Photo Identification in Order to Vote? Elections -1 -1 -1 1 0 0 1
Should the US Expand Fossil Fuel Extraction on Public Land? Environment -1 -1 -1 1 -1 -1 2
Should Fracking Be Allowed? Environment 1 -1 -1 1 1 1 1
Should the US Adopt a Climate Change Plan such as the Green New Deal? Environment 1 1 1 -1 1 1 2
Should the US Expand Its Use of Nuclear Power? Environment 1 -1 -1 1 1 1 2
Should the US Rejoin the Paris Climate Agreement? Environment 1 1 1 -1 1 1 4
Should the Tariffs Imposed on China by President Trump Be Maintained? Foreign Policy -1 0 0 1 -1 -1 2
Should the US Re-Enter a Nuclear Deal with Iran? Foreign Policy 1 1 1 -1 1 1 2
Should the US Have Withdrawn Troops from Northern Syria in Oct. 2019? Foreign Policy -1 -1 -1 1 0 0 0
Should Abortion Be Legal? Healthcare 1 1 1 -1 1 1 1
Should the US Switch to a Medicare-for-All Healthcare System? Healthcare -1 1 1 -1 1 1 1
Should the Federal Government Intervene to Lower Prescription Drugs Costs? Healthcare 1 1 1 1 1 1 2
Should the US Continue to Build a Border Wall at the US/Mexico Border? Immigration -1 -1 -1 1 -1 -1 4
Should the US End the Deferred Action for Childhood Arrivals (DACA) Policy? Immigration -1 -1 -1 1 -1 -1 2
Should the US Decriminalize Illegal Border Crossings? Immigration -1 1 1 -1 1 1 1
Should Immigrants Who Entered the US Illegally Be Denied a Path to Citizenship? Immigration -1 -1 -1 1 -1 -1 4
Should LGBTQ+ People Have Protection from Being Fired for Being LGBTQ+? LGBTQ+ 1 1 1 -1 1 1 2
Should Transgender People Be Allowed to Serve in the US Military? LGBTQ+ 1 1 1 -1 1 1 4
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from tqdm import tqdm\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [],
"source": [
"plt.style.use('tableau-colorblind10')\n",
"colors = plt.rcParams['axes.prop_cycle'].by_key()['color']"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"CANDIDATES = ['Biden', 'Sanders', 'Trump']\n",
"ANSWERS = {'No': -1, 'Not Sure': 0, 'Yes': 1}\n",
"WEIGHTS = {'None': 0, 'A little': 1, 'Somewhat': 2, 'Very': 4}"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [],
"source": [
"def inv_dict(d, v):\n",
" return next(key for key, value in d.items() if value == v)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def weighted_mean(x, w):\n",
" return w.dot(x)/np.sum(w)\n",
"\n",
"# https://en.wikipedia.org/wiki/Sample_mean_and_covariance#Weighted_samples\n",
"def weighted_cov(x, w):\n",
"# global m, y\n",
" m = weighted_mean(x, w)\n",
" y = (x - m)*np.vstack(w)\n",
" return np.matmul(y.T, y)/(np.sum(w) - 1)\n",
"\n",
"# https://math.stackexchange.com/questions/186959/correlation-matrix-from-covariance-matrix/300775\n",
"def weighted_corr(x, a, w):\n",
"# global z, v, d, c\n",
" z = np.hstack((x, np.vstack(a)))\n",
" v = weighted_cov(z, w)\n",
" d = np.eye(*v.shape)*np.sqrt(np.diag(v))\n",
" i = np.linalg.inv(d)\n",
" c = np.matmul(np.matmul(i, v), i)\n",
" return c[0:-1, -1]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Biden</th>\n",
" <th>Sanders</th>\n",
" <th>Trump</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Question</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Should the US End the Cash Bail System?</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Should the Death Penalty Be Allowed?</th>\n",
" <td>-1</td>\n",
" <td>-1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Should the Use of Private Prisons Continue?</th>\n",
" <td>-1</td>\n",
" <td>-1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Should Universal Background Checks for Gun Purchases Be Made Law?</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Should the Federal Government Adopt Net Neutrality Rules?</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>-1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Biden Sanders Trump\n",
"Question \n",
"Should the US End the Cash Bail System? 1 1 -1\n",
"Should the Death Penalty Be Allowed? -1 -1 1\n",
"Should the Use of Private Prisons Continue? -1 -1 1\n",
"Should Universal Background Checks for Gun Purc... 1 1 0\n",
"Should the Federal Government Adopt Net Neutral... 0 1 -1"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('procon-2020.csv', index_col='Question')\n",
"procon = df[CANDIDATES]\n",
"procon.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# n = 100\n",
"# answers = pd.DataFrame(np.random.choice(list(ANSWERS.values()), (len(procon.index), n)), index=procon.index)\n",
"# weights = pd.DataFrame(np.random.choice(list(WEIGHTS.values()), (len(procon.index), n)), index=procon.index)"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1000/1000 [42:28<00:00, 2.55s/it] \n"
]
}
],
"source": [
"candidate = 'Trump'\n",
"t = 0.75\n",
"\n",
"n = 1000\n",
"N = len(procon.index)\n",
"corr = pd.DataFrame(index=range(n), columns=procon.columns, dtype=np.float64)\n",
"answers = pd.DataFrame(index=procon.index, columns=range(n))\n",
"weights = pd.DataFrame(index=procon.index, columns=range(n))\n",
"\n",
"al = list(ANSWERS.values())\n",
"wl = list(WEIGHTS.values())\n",
"wl.remove(0)\n",
"\n",
"i = 0\n",
"with tqdm(total=n) as pbar:\n",
" while i < n:\n",
" a = np.random.choice(al, N, p=[0.4, 0.2, 0.4])\n",
" w = np.random.choice(wl, N)\n",
" w[np.where(a == 0)] = 0\n",
"\n",
" try:\n",
" c = pd.Series(weighted_corr(procon.values, a, w), index=corr.columns)\n",
" except:\n",
" continue\n",
" \n",
" if (c.idxmax() == candidate) and (c[candidate] >= t):\n",
" corr.loc[i] = c\n",
" answers[i] = a\n",
" weights[i] = w\n",
" i += 1\n",
" pbar.update(1)"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Biden</th>\n",
" <th>Sanders</th>\n",
" <th>Trump</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>609</th>\n",
" <td>0.803208</td>\n",
" <td>-0.114156</td>\n",
" <td>-0.083232</td>\n",
" </tr>\n",
" <tr>\n",
" <th>283</th>\n",
" <td>0.803176</td>\n",
" <td>-0.064934</td>\n",
" <td>-0.050169</td>\n",
" </tr>\n",
" <tr>\n",
" <th>760</th>\n",
" <td>0.822956</td>\n",
" <td>0.023903</td>\n",
" <td>0.028492</td>\n",
" </tr>\n",
" <tr>\n",
" <th>626</th>\n",
" <td>0.834529</td>\n",
" <td>-0.008402</td>\n",
" <td>0.034213</td>\n",
" </tr>\n",
" <tr>\n",
" <th>870</th>\n",
" <td>0.763301</td>\n",
" <td>-0.183251</td>\n",
" <td>0.036234</td>\n",
" </tr>\n",
" <tr>\n",
" <th>905</th>\n",
" <td>0.779273</td>\n",
" <td>-0.074092</td>\n",
" <td>0.042031</td>\n",
" </tr>\n",
" <tr>\n",
" <th>503</th>\n",
" <td>0.835294</td>\n",
" <td>-0.103292</td>\n",
" <td>0.060252</td>\n",
" </tr>\n",
" <tr>\n",
" <th>828</th>\n",
" <td>0.772990</td>\n",
" <td>0.045940</td>\n",
" <td>0.066706</td>\n",
" </tr>\n",
" <tr>\n",
" <th>526</th>\n",
" <td>0.761880</td>\n",
" <td>0.042068</td>\n",
" <td>0.068322</td>\n",
" </tr>\n",
" <tr>\n",
" <th>381</th>\n",
" <td>0.754929</td>\n",
" <td>-0.061204</td>\n",
" <td>0.092176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>795</th>\n",
" <td>0.763298</td>\n",
" <td>0.094028</td>\n",
" <td>0.097807</td>\n",
" </tr>\n",
" <tr>\n",
" <th>745</th>\n",
" <td>0.797123</td>\n",
" <td>0.007455</td>\n",
" <td>0.122014</td>\n",
" </tr>\n",
" <tr>\n",
" <th>680</th>\n",
" <td>0.841654</td>\n",
" <td>0.066875</td>\n",
" <td>0.127436</td>\n",
" </tr>\n",
" <tr>\n",
" <th>425</th>\n",
" <td>0.797775</td>\n",
" <td>-0.231096</td>\n",
" <td>0.128122</td>\n",
" </tr>\n",
" <tr>\n",
" <th>267</th>\n",
" <td>0.793214</td>\n",
" <td>-0.099404</td>\n",
" <td>0.132687</td>\n",
" </tr>\n",
" <tr>\n",
" <th>835</th>\n",
" <td>0.753949</td>\n",
" <td>0.049072</td>\n",
" <td>0.133634</td>\n",
" </tr>\n",
" <tr>\n",
" <th>877</th>\n",
" <td>0.755222</td>\n",
" <td>-0.134246</td>\n",
" <td>0.138856</td>\n",
" </tr>\n",
" <tr>\n",
" <th>487</th>\n",
" <td>0.751483</td>\n",
" <td>-0.074227</td>\n",
" <td>0.147570</td>\n",
" </tr>\n",
" <tr>\n",
" <th>684</th>\n",
" <td>0.809572</td>\n",
" <td>0.011149</td>\n",
" <td>0.150941</td>\n",
" </tr>\n",
" <tr>\n",
" <th>275</th>\n",
" <td>0.827445</td>\n",
" <td>0.113490</td>\n",
" <td>0.154132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>555</th>\n",
" <td>0.756411</td>\n",
" <td>-0.061199</td>\n",
" <td>0.156596</td>\n",
" </tr>\n",
" <tr>\n",
" <th>988</th>\n",
" <td>0.795837</td>\n",
" <td>0.057616</td>\n",
" <td>0.158477</td>\n",
" </tr>\n",
" <tr>\n",
" <th>237</th>\n",
" <td>0.796224</td>\n",
" <td>0.179742</td>\n",
" <td>0.181490</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>0.759694</td>\n",
" <td>0.176309</td>\n",
" <td>0.186931</td>\n",
" </tr>\n",
" <tr>\n",
" <th>490</th>\n",
" <td>0.813584</td>\n",
" <td>0.062535</td>\n",
" <td>0.190470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>385</th>\n",
" <td>0.819813</td>\n",
" <td>-0.014849</td>\n",
" <td>0.191237</td>\n",
" </tr>\n",
" <tr>\n",
" <th>984</th>\n",
" <td>0.770880</td>\n",
" <td>0.151263</td>\n",
" <td>0.194763</td>\n",
" </tr>\n",
" <tr>\n",
" <th>964</th>\n",
" <td>0.836510</td>\n",
" <td>-0.016607</td>\n",
" <td>0.195536</td>\n",
" </tr>\n",
" <tr>\n",
" <th>696</th>\n",
" <td>0.761039</td>\n",
" <td>-0.046990</td>\n",
" <td>0.196175</td>\n",
" </tr>\n",
" <tr>\n",
" <th>223</th>\n",
" <td>0.836926</td>\n",
" <td>-0.007636</td>\n",
" <td>0.199515</td>\n",
" </tr>\n",
" <tr>\n",
" <th>683</th>\n",
" <td>0.758959</td>\n",
" <td>0.169178</td>\n",
" <td>0.203139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>990</th>\n",
" <td>0.799303</td>\n",
" <td>0.065636</td>\n",
" <td>0.204422</td>\n",
" </tr>\n",
" <tr>\n",
" <th>662</th>\n",
" <td>0.799587</td>\n",
" <td>0.130083</td>\n",
" <td>0.205652</td>\n",
" </tr>\n",
" <tr>\n",
" <th>643</th>\n",
" <td>0.756944</td>\n",
" <td>-0.027697</td>\n",
" <td>0.207517</td>\n",
" </tr>\n",
" <tr>\n",
" <th>424</th>\n",
" <td>0.773205</td>\n",
" <td>0.112676</td>\n",
" <td>0.211536</td>\n",
" </tr>\n",
" <tr>\n",
" <th>343</th>\n",
" <td>0.803951</td>\n",
" <td>0.121106</td>\n",
" <td>0.221184</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.814350</td>\n",
" <td>-0.199831</td>\n",
" <td>0.230774</td>\n",
" </tr>\n",
" <tr>\n",
" <th>947</th>\n",
" <td>0.824712</td>\n",
" <td>0.194294</td>\n",
" <td>0.233313</td>\n",
" </tr>\n",
" <tr>\n",
" <th>765</th>\n",
" <td>0.772719</td>\n",
" <td>0.028561</td>\n",
" <td>0.237924</td>\n",
" </tr>\n",
" <tr>\n",
" <th>803</th>\n",
" <td>0.755017</td>\n",
" <td>0.235081</td>\n",
" <td>0.239521</td>\n",
" </tr>\n",
" <tr>\n",
" <th>568</th>\n",
" <td>0.754861</td>\n",
" <td>0.003627</td>\n",
" <td>0.241809</td>\n",
" </tr>\n",
" <tr>\n",
" <th>288</th>\n",
" <td>0.825996</td>\n",
" <td>0.059714</td>\n",
" <td>0.278103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>404</th>\n",
" <td>0.777250</td>\n",
" <td>-0.026841</td>\n",
" <td>0.355677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>162</th>\n",
" <td>0.754211</td>\n",
" <td>0.008966</td>\n",
" <td>0.368735</td>\n",
" </tr>\n",
" <tr>\n",
" <th>328</th>\n",
" <td>0.783792</td>\n",
" <td>0.021566</td>\n",
" <td>0.379069</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Biden Sanders Trump\n",
"609 0.803208 -0.114156 -0.083232\n",
"283 0.803176 -0.064934 -0.050169\n",
"760 0.822956 0.023903 0.028492\n",
"626 0.834529 -0.008402 0.034213\n",
"870 0.763301 -0.183251 0.036234\n",
"905 0.779273 -0.074092 0.042031\n",
"503 0.835294 -0.103292 0.060252\n",
"828 0.772990 0.045940 0.066706\n",
"526 0.761880 0.042068 0.068322\n",
"381 0.754929 -0.061204 0.092176\n",
"795 0.763298 0.094028 0.097807\n",
"745 0.797123 0.007455 0.122014\n",
"680 0.841654 0.066875 0.127436\n",
"425 0.797775 -0.231096 0.128122\n",
"267 0.793214 -0.099404 0.132687\n",
"835 0.753949 0.049072 0.133634\n",
"877 0.755222 -0.134246 0.138856\n",
"487 0.751483 -0.074227 0.147570\n",
"684 0.809572 0.011149 0.150941\n",
"275 0.827445 0.113490 0.154132\n",
"555 0.756411 -0.061199 0.156596\n",
"988 0.795837 0.057616 0.158477\n",
"237 0.796224 0.179742 0.181490\n",
"120 0.759694 0.176309 0.186931\n",
"490 0.813584 0.062535 0.190470\n",
"385 0.819813 -0.014849 0.191237\n",
"984 0.770880 0.151263 0.194763\n",
"964 0.836510 -0.016607 0.195536\n",
"696 0.761039 -0.046990 0.196175\n",
"223 0.836926 -0.007636 0.199515\n",
"683 0.758959 0.169178 0.203139\n",
"990 0.799303 0.065636 0.204422\n",
"662 0.799587 0.130083 0.205652\n",
"643 0.756944 -0.027697 0.207517\n",
"424 0.773205 0.112676 0.211536\n",
"343 0.803951 0.121106 0.221184\n",
"3 0.814350 -0.199831 0.230774\n",
"947 0.824712 0.194294 0.233313\n",
"765 0.772719 0.028561 0.237924\n",
"803 0.755017 0.235081 0.239521\n",
"568 0.754861 0.003627 0.241809\n",
"288 0.825996 0.059714 0.278103\n",
"404 0.777250 -0.026841 0.355677\n",
"162 0.754211 0.008966 0.368735\n",
"328 0.783792 0.021566 0.379069"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = corr[(corr['Biden'] > corr['Trump']) & (corr['Trump'] > corr['Sanders'])]\n",
"df.sort_values('Trump')"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Weighted Correlation')"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtcAAAHwCAYAAABtz0NOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XuYHmV9//H3NwkkQCKBhEZOGgSRJBAhCXJS3KBYTwhYkFApSKG0iFJrrYi1NVQo0F+L1bYiVG1QClEQKoIWQQjnYxBDEk5BoQkEIeEgwSSQ8P39MbPxYbOHZ/eZZ4/v13XttTP3nO65dzb5PPfeMxOZiSRJkqTGDevrCkiSJEmDheFakiRJqojhWpIkSaqI4VqSJEmqiOFakiRJqojhWpIkSaqI4VpSt0XENyPi7+pcd05EnNnEujR1/42KiE9ExK0NbP/TiDiuyjpJkprHcC0NARFxekT8tE3Zox2Uzepqf5n5F5n5lYrqlhGxSxX76mD/20bEtyNieUS8FBEPRcQZEbFFs47ZUxExOyIuri3LzA9k5kVNONaciHglIlbVfB1VwX4X1exvfUSsqZn/YhV1r1JEbFW2xdMR8duIeDgi/qav69WeiFgWES19XQ9JnTNcS0PDzcD+ETEcisAJbALs1aZsl3LdQSEitgbuADYD9svMMcDBwFhg527uKyJiWFdlA8w/Zebomq/vd3cHrddPq8yc0ro/4BbgUzX7/8d2th/R8+pX4uvApsBuFNfFYcBjfVqjNqpoo4gYNsCvVWnA8BdNGhruoQjTe5bz7wJuBB5uU/ZYZj4FEBG7RcR1EfFc2Zv3sdadtR2KERGfL3uGn4qIE9vpjd4qIq4pe47vioidy+1ag/wva3tOI+LDEXF/RLwQEbdHxNSaY+0VEfeV+/o+MKqT8/4s8BJwTGY+DpCZSzPzLzNzQbm//SPinoh4sfy+f82x5kXEWRFxG/A74C0dlG1Z0zv+ZESc2TZ01uzzaxGxtOwlnR8R7yrL3w98ETiqbItf1tThxHJ6WER8KSKeiIhnIuK7EbFluWxi2e7HRcT/RcSKiPjbTtqmQxExqTzuC2VP9Edqls2JiPMj4icR8TIws5v7PjEibo6Ir0fEc8CXyvaaU7POLhGRNfO3RsQ/RMSdEfFyRPxPRIyLiEvLdrwrIt5UrjuibIdPR8Svy3Y4p5NguTdwSWa+kJmvZeaDmXlFe/Woqcsn2pzLN8rr58GImNlm3bMi4t5y+ZURsVXN8sPL9n0hIm6IiLfVLFsWEX8TEQ8AL0fEpcB2wE/L6+Oz5XoHlO3yQvk7c2Cb438lIu4AXgbeFBEnRMTj5e/Pr6KOv1RJ6h7DtTQEZOYrwF1A63+8B1L0Kt7apuxmgCiGTFwHXAL8ATAL+EZETG677zIUfhZ4L0XPd0s7VZgFnAFsBSwBzirr1Xrst7f2nEbEXsB3gD8HxgEXAFdFxMiI2BT4H+B7wNbAZcAfdXLq7wWuyMzX2lsYRc/2NRS9l+OA84BrImJczWp/ApwEjAGe6KBsDrCuPP+9gPcBJ3ZQp3soPtBsTdG+l0XEqMz8X+Afge+XbfH2drb9RPk1E3gLMBr49zbrvBN4G/Ae4O8jYlIH9WhXRGwC/Bj4GcXP/tPAf9cGP+CPKX6GYyiuoe7aH3gQ2AY4t85tjiqPuwNFL/PtwIUU7fgY0PYegEOBacB04Ajg2A72eydwdhRj49/ajXNotT/wEDAe+ApwRUSMrVl+bPm1HRDAV6H4AENxHX+aoh2up7jON6nZdhbwAWBsZh4NPAV8oLw+zouIHYGrgC9TtMMXyuO3vX7/FHgD8BzFNX5w+VecA4AFPThnSZ0wXEtDx038Pki/iyJc39Km7KZy+sPA45n5X5m5LjN/AfwQOLKd/X4M+K/MXJSZvwNmt7POlZl5d2auA/6b3/eWt+ck4ILMvCsz15fjjdcC+5ZfmwD/mpmvZublFGG1I+OA5Z0s/xDwaGZ+rzzPSymC0iE168wpz21dZr7atowi1HwQ+ExmvpyZz1AEqHZ7BDPz4sxcWe7vX4CRFGG4Hh8HzsvMX2XmKuB0YFa8ftjAGZm5OjN/CfwSaC+kt/pc2eP5QkSsKMv2pQjt52TmK5l5A3A1cHTNdj/KzNvKnt41dda91v9l5vnlz3d1ndt8pzzv54FrgUcy88byZ3AZxYeaWudk5vOZ+QTFh6ejad8nge8DpwIPRnHfwfu6cS7LgX8rr8dLgF9TBOJWF2Xm4sx8Gfh7ip9XUFwfV2XmDeV1dQ6wJbBPzbZfy8xlnbTRseU+ri1/Fv9L8TN/f8063yl741uv3QR2Lz/QLc/Mxd04V0l1MFxLQ8fNwDvL3tptMvNRit6//cuy3fn9eOs3A/vUBK8XKILdG9vZ73bA0pr5pe2s83TN9O8owltH3gz8dZtj71geZzvgycys/VP9E+3tpLQS2LaT5du1s/0TwPY18+2dT23ZmykC//Ka+l5A0eu7kYj4XDl84MVy3S0pej3r0ba+TwAjgAk1Zd1p63/OzLHlV2sdtgOWtuntr6dNuqMn2/+mZnp1O/Ntz7P2GE9QnNdGMvN3mXlmZk6j+DB2BfDD1uE2dVjWzvVYe6y29RhJ8YHsdT/Lsr2X0b12fjNwdJvflX07On5m/pbiQ8YpwNMRcXVE7NrFMSR1k+FaGjruoAhyfwbcBhv+s32qLHsqM39drrsUuKkmeI0t/xR9cjv7XU7xp/pWOzZYz6XAWW2OvXnZq7wc2L7s+Wv1pk72dT1weCfjbZ+iCCi13gQ8WTOfbKy2bClFz/r4mvq+ITOntN0oivHVn6fo7d8qM8cCL1IMF+joWJ3V900Uw1F+0/7qPfIUsGObNqunTbqj7fYvA5vXzLf3Ia67aq/DN1GcV+eVynwROJsiqE8s60VEdFa3HdrMtz1W23qspRie8bqfZdneO9B5O7edX0rxV6Pa35UtMvP/dbRNZv40M99L8aFzCcUHQUkVMlxLQ0T5p+V7KcZH31Kz6NayrPYpIVcDu0bEn0TEJuXX3h2M3/0BcHwUN8FtzsZjX7vyG4rxw63+E/iLiNgnCltExIciYgzFB4R1wKllnT4KvKOTfZ9HMdb0ooh4M0BEbB8R50Vxk+RPyvP84/JGuKOAyeX51yUzl1OMT/6XiHhDFDcd7hwR725n9TFl/Z8FRkTE35f1q22LiZ18GLgU+KuI2CkiRvP7Mdrr6q1vHe6i6PH+fNnGLRTDZOZWeIy27gfeHRE7luOVv1DBPj8fEWOjuNHxVIqhHxuJiC9HxIyI2DQiRpXrPgc8SvFXgKeBYyJieEScxMYfxraNiE+V188siqfQ/G/N8mOjuDl4C4r7Dn5Q9nT/APhIRLSU46z/huLm27s6Oae2vyvfo/jweHBZv1ERMTMi2u2lj+KxlIeUv6evUHx4aPd+BEk9Z7iWhpabKIYr1N6EdktZtiFcZ+ZLFDflzaLoYXua4sazkW13mJk/pRjTeiNFT9id5aK1ddZpNkX4fSEiPpaZ91L0pP878Hy5z0+Ux3oF+Gg5/xzFTW5XdLTjzHyO4oazV4G7IuIl4OcUvcVLMnMlxfjyv6YYQvJ54MOZuaKDXXbkWIrHuS0u63w57Q9HuZYieD1CMSRgDa//0/9l5feVEXFfO9t/hyJQ3UwxtncNxQ1xlSnb+BCKccMrgG8Ax2bmQ1Uep43/Ba4EHgDuprhJr1E/pgjtvyj3PaeTdS+i+Pk/RXFD7ofK4SJJcS1+kaItdmHj8Hs7MIXiepwN/FE5LrzV94CLKf7qMhz4DEBmLgKOA86n+LD1fuAjNWOj2/OPwBnl78pnsngCzuEUH2ifBf6P4lru6P/24RQhfnl5vvtTDBGRVKF4/VAxSWpM2bu9EBhZcY+q1KXy5s5XgZ3K8NnMY51I8ZjHlg6W3wp8KzPnNLMekvoXe64lNSyK5/WOjOIZvucCPzZYS5KGIsO1pCr8OfAMxfOG1wPt3fgoSdKg57AQSZIkqSL2XEuSJEkVMVxLkiRJFRnR9Sr91/jx43PixIk93v7ll19miy22qK5CQ4ht1xjbrzG2X2Nsv8bYfj1n2zXG9mtMo+03f/78FZm5TVfrDehwPXHiRO69994ebz9v3jxaWlqqq9AQYts1xvZrjO3XGNuvMbZfz9l2jbH9GtNo+0XEE/Ws57AQSZIkqSKGa0mSJKkihmtJkiSpIgN6zHV7Xn31VZYtW8aaNWu6XHfLLbfkwQcf7IVa9V+jRo1ihx12YJNNNunrqkiSJA14gy5cL1u2jDFjxjBx4kQiotN1X3rpJcaMGdNLNet/MpOVK1eybNkydtppp76ujiRJ0oA36IaFrFmzhnHjxnUZrAURwbhx4+rq5ZckSVLXBl24BgzW3WBbSZIkVWdQhuu+Nnz4cPbcc0/e/va3M23aNG6//XYAnnrqKY444oh2t2lpaWnomd2SJEnqe4NuzHVbixYt6nDZK6+8wqabbtqt/U2ZMqXLdTbbbDPuv/9+AK699lpOP/10brrpJrbbbjsuv/zybh1PkiRJA4c9103229/+lq222gqAxx9/nN133x2A1atXM2vWLCZNmsThhx/O6tWrN2zzs5/9jP32249p06Zx5JFHsmrVKqB4I+WXv/xlpk2bxh577MFDDz3U+yckSZKkDhmum2D16tXsueee7Lbbbpx44on83d/93UbrnH/++Wy++eY8+OCDnHHGGcyfPx+AFStWcOaZZ3L99ddz3333MWPGDM4777wN240fP5777ruPk08+mX/+53/utXOSJElS1wb9sJC+UDss5I477uDYY49l4cKFr1vn5ptv5tRTTwVg6tSpTJ06FYA777yTxYsXc8ABBwDF0JX99ttvw3Yf/ehHAZg+fTpXXHFF089FkiRJ9TNcN9l+++3HihUrePbZZ+taPzM5+OCDufTSS9tdPnLkSKC4aXLdunWV1VOSJEmNc1hIkz300EOsX7+ecePGva78wAMP5JJLLgFg4cKFLFiwAIB9992X2267jSVLlgDw8ssv88gjj/RupSVJktQj9lw3QeuYayh6oi+66CKGDx/+unVOPvlkjj/+eCZNmsSkSZOYPn06ANtssw1z5szh6KOPZu3atQCceeaZ7Lrrrr17EpIkSeq2QR+uO3t0XrNef75+/fp2yydOnLhh7PVmm23G3Llz213voIMO4p577tmo/PHHH98wPWPGDObNm9dwXSVJklQdh4VIkiRJFTFcS5IkSRUxXEuSJEkVGfRjriVJkgaleWd3f5uW06uvh17HnmtJkiSpIoZrSZIkqSKG6yY566yzmDJlClOnTmXPPffkrrvuanifLS0t3HvvvRXUTpIkSc0w6Mdcz75mQYfL1r6ylpGbjuze/j40tct17rjjDq6++mruu+8+Ro4cyYoVK3jllVe6dZwqrF+/fqOX10iSJKl57LluguXLlzN+/HhGjiyC+/jx49luu+34h3/4B/bee2923313TjrpJDITKHqkTzvtNN7xjnew6667cssttwDFmx5nzZrFpEmTOPzww1m9evWGY/zsZz9jv/32Y9q0aRx55JGsWrUKKF5Uc9pppzFt2jQuu+wyvv71rzN58mSmTp3KrFmzerklJEmShhbDdRO8733vY+nSpey666588pOf5KabbgLgU5/6FPfccw8LFy5k9erVXH311Ru2WbduHXfffTf/+q//yhlnnAHA+eefz+abb86DDz7IGWecwfz58wFYsWIFZ555Jtdffz333XcfM2bM4Lzzztuwr3HjxnHfffcxa9YszjnnHH7xi1+wYMECvvnNb/ZiK0iSJA09husmGD16NPPnz+fCCy9km2224aijjmLOnDnceOON7LPPPuyxxx7ccMMNLFq0aMM2H/3oRwGYPn36htec33zzzRxzzDEATJ06lalTiyEpd955J4sXL+aAAw5gzz335KKLLuKJJ57YsK+jjjpqw/TUqVP5+Mc/zsUXX8yIEYN+FJAkSVKfMm01yfDhw2lpaaGlpYU99tiDCy64gAULFnDvvfey4447Mnv2bNasWbNh/dYhJMOHD2fdunWd7jszOfjgg7n00kvbXb7FFltsmL7mmmu4+eab+fGPf8xZZ53FAw88YMiWJElqEnuum+Dhhx/m0Ucf3TB///3387a3vQ0oxl+vWrWKyy+/vMv9HHjggVxyySUALFy4kAULipsz9913X2677TaWLFkCwMsvv8wjjzyy0favvfYaS5cuZebMmZx77rm8+OKLG8ZmS5IkqXp2YTbBqlWr+PSnP80LL7zAiBEj2GWXXbjwwgsZO3Ysu+++O2984xvZe++9u9zPySefzPHHH8+kSZOYNGkS06dPB2CbbbZhzpw5HH300axduxaAM888k1133fV1269fv55jjjmGF198kczk1FNPZezYsdWfsCRJkoAhEK47e3TeSy+9xJgxYyo/5vTp07n99ts3Kj/zzDM588wzNyqfN2/ehunx48dvGHO92WabMXfu3HaPcdBBB3HPPfdsVN66LcAmm2zCrbfe2r3KS5IkqcccFiJJkiRVxHAtSZIkVcRwLUmSJFXEcC1JkiRVxHAtSZIkVcRwLUmSJFVk0D+Kr7etXLmS97znPQA8/fTTDB8+nG222QaAu+++m0033bQvqydJkqQmGvzhet7ZHS7adO1aKF87XreW0ztdPG7cOO6//34AZs+ezejRo/nc5z73unUyk8xk2DD/cCBJkjSYmO56yZIlS5g8eTIf//jHmTJlCkuXLn3d2xLnzp3LiSeeCMAxxxzDKaecwj777MPOO+/MzTffzHHHHcduu+3GCSecAMC6desYO3Ysp556KlOmTOHggw9m5cqVfXJukiRJKhiue9FDDz3EX/3VX7F48WK23377Ttd98cUXueuuu/inf/onDjnkEE477TQWL17M/PnzWbhw4YZ1DjjgABYtWsR+++3HV77yld44DUmSJHXAcN2Ldt55Z2bMmFHXuocccggAe+yxB9tttx2TJ09m2LBhTJ48ecMrzkeMGMGRRx4JFL3dvupckiSpbxmue9EWW2yxYXrYsGFk5ob5NWvWvG7dkeVY8GHDhm2Ybp1ft25du/uPiCqrK0mSpG4yXPeRYcOGsdVWW/Hoo4/y2muvceWVV3Z7H+vWreOKK64A4JJLLuGd73xn1dWUJElSNxiu+9C5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\n",
"text/plain": [
"<Figure size 864x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1, figsize=(12, 8))\n",
"res = trump.plot.hist(ax=ax, bins=50, alpha=0.5, color=[colors[2], colors[0], colors[1]])\n",
"ax.grid()\n",
"ax.set_title('Weighted Correlation For Trump Supporters')\n",
"ax.set_xlabel('Weighted Correlation')"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"col = 3\n",
"df = pd.DataFrame(index=procon.index, columns=['Answer', 'Weight'])\n",
"df['Answer'] = answers[col].apply(lambda x: inv_dict(ANSWERS, x))\n",
"df['Weight'] = weights[col].apply(lambda x: inv_dict(WEIGHTS, x))"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [],
"source": [
"df.to_csv('voter.csv')"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['#FF800E', '#ABABAB'], dtype='<U7')"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(colors)[[1, 2]]"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1000"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(corr)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment