{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Homework 5: Networks and Congress\n",
"\n",
"*Due Friday, November 15, 11:59pm*\n",
"\n",
"\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"\n",
"import json\n",
"\n",
"import numpy as np\n",
"import networkx as nx\n",
"import requests\n",
"from pattern import web\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# set some nicer defaults for matplotlib\n",
"from matplotlib import rcParams\n",
"\n",
"#these colors come from colorbrewer2.org. Each is an RGB triplet\n",
"dark2_colors = [(0.10588235294117647, 0.6196078431372549, 0.4666666666666667),\n",
" (0.8509803921568627, 0.37254901960784315, 0.00784313725490196),\n",
" (0.4588235294117647, 0.4392156862745098, 0.7019607843137254),\n",
" (0.9058823529411765, 0.1607843137254902, 0.5411764705882353),\n",
" (0.4, 0.6509803921568628, 0.11764705882352941),\n",
" (0.9019607843137255, 0.6705882352941176, 0.00784313725490196),\n",
" (0.6509803921568628, 0.4627450980392157, 0.11372549019607843),\n",
" (0.4, 0.4, 0.4)]\n",
"\n",
"rcParams['figure.figsize'] = (10, 6)\n",
"rcParams['figure.dpi'] = 150\n",
"rcParams['axes.color_cycle'] = dark2_colors\n",
"rcParams['lines.linewidth'] = 2\n",
"rcParams['axes.grid'] = False\n",
"rcParams['axes.facecolor'] = 'white'\n",
"rcParams['font.size'] = 14\n",
"rcParams['patch.edgecolor'] = 'none'\n",
"\n",
"def remove_border(axes=None, top=False, right=False, left=True, bottom=True):\n",
" \"\"\"\n",
" Minimize chartjunk by stripping out unnecessary plot borders and axis ticks\n",
" \n",
" The top/right/left/bottom keywords toggle whether the corresponding plot border is drawn\n",
" \"\"\"\n",
" ax = axes or plt.gca()\n",
" ax.spines['top'].set_visible(top)\n",
" ax.spines['right'].set_visible(right)\n",
" ax.spines['left'].set_visible(left)\n",
" ax.spines['bottom'].set_visible(bottom)\n",
" \n",
" #turn off all ticks\n",
" ax.yaxis.set_ticks_position('none')\n",
" ax.xaxis.set_ticks_position('none')\n",
" \n",
" #now re-enable visibles\n",
" if top:\n",
" ax.xaxis.tick_top()\n",
" if bottom:\n",
" ax.xaxis.tick_bottom()\n",
" if left:\n",
" ax.yaxis.tick_left()\n",
" if right:\n",
" ax.yaxis.tick_right()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The website [govtrack.us](http://www.govetrack.us) collects data on activities in the Senate and House of Representatives. It's a great source of information for making data-driven assessments about Congress."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Problem 1.\n",
"\n",
"The directories at http://www.govtrack.us/data/congress/113/votes/2013 contain JSON information about every vote cast for the current (113th) Congress. Subdirectories beginning with \"S\" correspond to Senate votes, while subdirectories beginning with \"H\" correspond to House votes.\n",
"\n",
"Write two functions: one that downloads and parses a single Senate vote page given the vote number, and another that repeatedly calls this function to build a full collection of Senate votes from the 113th Congress."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"\"\"\"\n",
"Function\n",
"--------\n",
"get_senate_vote\n",
"\n",
"Scrapes a single JSON page for a particular Senate vote, given by the vote number\n",
"\n",
"Parameters\n",
"----------\n",
"vote : int\n",
" The vote number to fetch\n",
" \n",
"Returns\n",
"-------\n",
"vote : dict\n",
" The JSON-decoded dictionary for that vote\n",
" \n",
"Examples\n",
"--------\n",
">>> get_senate_vote(11)['bill']\n",
"{u'congress': 113,\n",
" u'number': 325,\n",
" u'title': u'A bill to ensure the complete and timely payment of the obligations of the United States Government until May 19, 2013, and for other purposes.',\n",
" u'type': u'hr'}\n",
"\"\"\"\n",
"#your code here\n",
"\n",
"def get_senate_vote(vote):\n",
" url = 'http://www.govtrack.us/data/congress/113/votes/2013/s%i/data.json' % vote\n",
" page = requests.get(url).text\n",
" return json.loads(page) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"\"\"\"\n",
"Function\n",
"--------\n",
"get_all_votes\n",
"\n",
"Scrapes all the Senate votes from http://www.govtrack.us/data/congress/113/votes/2013,\n",
"and returns a list of dicts\n",
"\n",
"Parameters\n",
"-----------\n",
"None\n",
"\n",
"Returns\n",
"--------\n",
"votes : list of dicts\n",
" List of JSON-parsed dicts for each senate vote\n",
"\"\"\"\n",
"#Your code here\n",
"\n",
"def get_all_votes():\n",
" page = requests.get('https://www.govtrack.us/data/congress/113/votes/2013/').text\n",
" dom = web.Element(page)\n",
" votes = [a.attr['href'] for a in dom.by_tag('a') \n",
" if a.attr.get('href', '').startswith('s')]\n",
" n_votes = len(votes)\n",
" return [get_senate_vote(i) for i in range(1, n_votes + 1)]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#vote_data = get_all_votes()\n",
"vote_data = json.load(open('vote_data.json'))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Problem 2\n",
"\n",
"Now, turn these data into a NetworkX graph, according to the spec below. For details on using NetworkX, consult the lab materials for November 1, as well as the [NetworkX documentation](http://networkx.github.io/)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"\"\"\"\n",
"Function\n",
"--------\n",
"vote_graph\n",
"\n",
"Parameters\n",
"----------\n",
"data : list of dicts\n",
" The vote database returned from get_vote_data\n",
"\n",
"Returns\n",
"-------\n",
"graph : NetworkX Graph object, with the following properties\n",
" 1. Each node in the graph is labeled using the `display_name` of a Senator (e.g., 'Lee (R-UT)')\n",
" 2. Each node has a `color` attribute set to 'r' for Republicans, \n",
" 'b' for Democrats, and 'k' for Independent/other parties.\n",
" 3. The edges between two nodes are weighted by the number of \n",
" times two senators have cast the same Yea or Nay vote\n",
" 4. Each edge also has a `difference` attribute, which is set to `1 / weight`.\n",
"\n",
"Examples\n",
"--------\n",
">>> graph = vote_graph(vote_data)\n",
">>> graph.node['Lee (R-UT)']\n",
"{'color': 'r'} # attributes for this senator\n",
">>> len(graph['Lee (R-UT)']) # connections to other senators\n",
"101\n",
">>> graph['Lee (R-UT)']['Baldwin (D-WI)'] # edge relationship between Lee and Baldwin\n",
"{'difference': 0.02, 'weight': 50}\n",
"\"\"\"\n",
"#Your code here\n",
"\n",
"def _color(s):\n",
" if '(R' in s:\n",
" return 'r'\n",
" if '(D' in s:\n",
" return 'b'\n",
" return 'k'\n",
" \n",
"def vote_graph(data):\n",
" \n",
" senators = set(x['display_name'] for d in data for vote_grp in d['votes'].values() for x in vote_grp)\n",
" weights = {s: {ss: 0 for ss in senators if ss != s} for s in senators}\n",
" \n",
" for d in data:\n",
" for grp in ['Yea', 'Nay']:\n",
" if grp not in d['votes']:\n",
" continue\n",
" vote_grp = d['votes'][grp]\n",
" for i in range(len(vote_grp)):\n",
" for j in range(i + 1, len(vote_grp)):\n",
" sen1 = vote_grp[i]['display_name']\n",
" sen2 = vote_grp[j]['display_name'] \n",
" weights[min(sen1, sen2)][max(sen1, sen2)] += 1\n",
" \n",
" g = nx.Graph()\n",
" for s in senators:\n",
" g.add_node(s)\n",
" g.node[s]['color'] = _color(s)\n",
" \n",
" for s1, neighbors in weights.items():\n",
" for s2, weight in neighbors.items():\n",
" if weight == 0:\n",
" continue\n",
" g.add_edge(s1, s2, weight= weight, difference = 1. / weight)\n",
" \n",
" return g\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"votes = vote_graph(vote_data) "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### How (and how not) to visualize networks\n",
"\n",
"Network plots often *look* impressive, but creating sensible network plots is tricky. From Ben Fry, the author of the Processing program:\n",
"
\n", "Usually a graph layout isn\u2019t the best option for data sets larger than a few dozen nodes. You\u2019re most likely to wind up with enormous spider webs or balls of string, and the mess seen so far is more often the case than not. Graphs can be a powerful way to represent relationships between data, but they are also a very abstract concept, which means that they run the danger of meaning something only to the creator of the graph. Often, simply showing the structure of the data says very little about what it actually means, even though it\u2019s a perfectly accurate means of representing the data. Everything looks like a graph, but almost nothing should ever be drawn as one.\n", "\n", "\n", "Let's look at bad and better ways of visualizing the senate vote network.\n", "\n", "First, consider the \"default\" plot from networkx." ] }, { "cell_type": "code", "collapsed": false, "input": [ "#this makes sure draw_spring results are the same at each call\n", "np.random.seed(1) \n", "\n", "color = [votes.node[senator]['color'] for senator in votes.nodes()]\n", "\n", "#determine position of each node using a spring layout\n", "pos = nx.spring_layout(votes, iterations=200)\n", "\n", "#plot the edges\n", "nx.draw_networkx_edges(votes, pos, alpha = .05)\n", "\n", "#plot the nodes\n", "nx.draw_networkx_nodes(votes, pos, node_color=color)\n", "\n", "#draw the labels\n", "lbls = nx.draw_networkx_labels(votes, pos, alpha=5, font_size=8)\n", "\n", "#coordinate information is meaningless here, so let's remove it\n", "plt.xticks([])\n", "plt.yticks([])\n", "remove_border(left=False, bottom=False)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ngg==\n", "text": [ "