{ "metadata": { "name": "reserve-analysis" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Analyse de la r\u00e9serve parlementaire de 2011 (en cours)\n", "\n", "Pour l'instant, les donn\u00e9es suivantes sont utilis\u00e9es:\n", "\n", " * r\u00e9serve parlementaire de 2011 [source](http://www.nosdonnees.fr/dataset/r-serve-parlementaire-2011-attribu-e-aux-collectivit-s-territoriales)\n", " * donn\u00e9es GEOFLA de l'IGN (communes) [source](http://professionnels.ign.fr/geofla)\n", " * r\u00e9sultat des \u00e9lections municipales pour les communes de plus de 3500 habs [source](http://www.data.gouv.fr/DataSet/572150?xtmc=\u00e9lection%20municipale&xtcr=4)\n", " * activit\u00e9 des d\u00e9put\u00e9s [source](http://www.nosdeputes.fr/synthese)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### R\u00e9cup\u00e9ration de l'activit\u00e9 des d\u00e9put\u00e9s" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Good practice 1: \n", "# - never do from module import *\n", "# => always name things\n", "\n", "# requests is a very nice http lib\n", "import requests\n", "from requests import get\n", "\n", "# Get subventions data\n", "r = get('http://www.regardscitoyens.org/wp-content/uploads/reserve-parlementaire-2011-parletdep.csv')\n", "with open('../data/reserve-parlementaire-2011-parletdep.csv', 'w') as f:\n", " f.write(r.text.encode('utf-8'))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from bs4 import BeautifulSoup\n", "\n", "r = get('http://www.nosdeputes.fr/synthese')\n", "soup = BeautifulSoup(r.text)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "# Scrape: select with css attributes\n", "table = soup.find('div', class_='tableau_synthese').table\n", "\n", "activity_data = []\n", "for tr in table.find_all('tr'):\n", " tds = tr.find_all('td')[:2]\n", " activity_data.append({'name': tds[0].text, 'weeks': int(tds[1].text)})" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "activity_data[1]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 5, "text": [ "{'name': u'Laurence Abeille', 'weeks': 39}" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Traitement des donn\u00e9es geofla, \u00e9lections municipales, r\u00e9serve parlementaire" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import json\n", "\n", "import pandas as pd\n", "\n", "from fiona import collection\n", "\n", "from matplotlib.ticker import Formatter, FixedLocator" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Traitement des donn\u00e9es GEOFLA de l'IGN" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Import GEOFLA data\n", "geofla_filepath = '../data/COMMUNES/COMMUNE_4326.SHP'\n", "\n", "# Set a simple function to extract only useful data\n", "def extract_data(com):\n", " properties = com['properties']\n", " return {\n", " 'id': com['id'],\n", " 'insee_code': properties['INSEE_COM'],\n", " 'name': properties['NOM_COMM'],\n", " 'population': properties['POPULATION'] * 1000,\n", " 'POPULATION': properties['POPULATION'],\n", " 'department': properties['NOM_DEPT'],\n", " 'code_dep': properties['CODE_DEPT'],\n", " }\n", "\n", "with collection(geofla_filepath) as communes:\n", " # DataFrame are like excel tables but far better\n", " com_data = pd.DataFrame([extract_data(com) for com in communes])\n", "\n", "com_data.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
POPULATIONcode_depdepartmentidinsee_codenamepopulation
0 0.9 29 FINISTERE 0 29271 SAINT-VOUGAY 900
1 3.6 30 GARD 1 30223 ROUSSON 3600
2 0.2 30 GARD 2 30252 SAINT-FELIX-DE-PALLIERES 200
3 0.5 24 DORDOGNE 3 24092 CENDRIEUX 500
4 1.6 88 VOSGES 4 88463 TAINTRUX 1600
\n", "
" ], "output_type": "pyout", "prompt_number": 8, "text": [ " POPULATION code_dep department id insee_code name population\n", "0 0.9 29 FINISTERE 0 29271 SAINT-VOUGAY 900\n", "1 3.6 30 GARD 1 30223 ROUSSON 3600\n", "2 0.2 30 GARD 2 30252 SAINT-FELIX-DE-PALLIERES 200\n", "3 0.5 24 DORDOGNE 3 24092 CENDRIEUX 500\n", "4 1.6 88 VOSGES 4 88463 TAINTRUX 1600" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "# Export to geojson\n", "with collection(geofla_filepath) as communes:\n", " data = []\n", " for feat in communes:\n", " feat['type'] = 'Feature'\n", " data.append(feat)\n", " \n", " my_layer = {\n", " \"type\": \"FeatureCollection\",\n", " \"features\": [com for com in data if com['properties']['POPULATION'] > 1]\n", " }\n", " with open(\"my_layer.json\", \"w\") as f:\n", " f.write(json.dumps(my_layer))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "#\n", "# XXX: Test folium pacakge to make a chloropleth map with d3.js\n", "# XXX: Works only with PYTHON 2.7\n", "#\n", "\n", "\n", "import folium\n", "\n", "map_2 = folium.Map(location=[46.907, 1.662], zoom_start=6)\n", "map_2.geo_json(geo_path=\"my_layer.json\", data_out='data2.json', data=com_data[com_data['POPULATION']>1],\n", " columns=['id', 'POPULATION'],\n", " key_on='feature.id',\n", " fill_color='BuPu', fill_opacity=0.9, line_opacity=0.4,\n", " legend_name='POPULATION')\n", "map_2.create_map(path='map_population.html')" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (utilities.py, line 92)", "output_type": "pyerr", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"/Users/fmassot/Envs/politics/lib/python2.6/site-packages/folium/utilities.py\"\u001b[0;36m, line \u001b[0;32m92\u001b[0m\n\u001b[0;31m json_data = [{type_check(x): type_check(y) for x, y in data.iteritems()}]\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Traitement des donn\u00e9es de la r\u00e9serve parlementaire" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import codecs\n", "reserve_file = codecs.open(\"../data/reserve-parlementaire-2011-parletdep.csv\", encoding='utf-8')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "res_data = pd.io.parsers.read_csv(reserve_file, sep=';')\n", "# print columns\n", "res_data.keys()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 15, "text": [ "Index([u'B\u00e9n\u00e9ficiaire', u'D\u00e9partement', u'Nature du projet', u'Co\u00fbt du projet', u'Subvention allou\u00e9e', u'Part prise en charge', u'Parlementaire transmetteur', u'Nature', u'D\u00e9partement Parlementaire', u'Groupe politique du parlementaire', u'Lien vers donn\u00e9es parlementaires'], dtype=object)" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "res_data[['D\u00e9partement', 'Subvention allou\u00e9e', 'Parlementaire transmetteur', 'B\u00e9n\u00e9ficiaire']].head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
D\u00e9partementSubvention allou\u00e9eParlementaire transmetteurB\u00e9n\u00e9ficiaire
0 25 9000 ACCOYER Bernard ABBANS-DESSOUS
1 60 9500 MARINI Philippe ABBECOURT
2 60 1400 LARCHER G\u00e9rard ABBEVILLE-SAINT-LUCIEN
3 70 2500 RAISON Michel ABELCOURT
4 62 7000 VANLERENBERGHE Jean-Marie ABLAINZEVELLE
\n", "
" ], "output_type": "pyout", "prompt_number": 33, "text": [ " D\u00e9partement Subvention allou\u00e9e Parlementaire transmetteur B\u00e9n\u00e9ficiaire\n", "0 25 9000 ACCOYER Bernard ABBANS-DESSOUS\n", "1 60 9500 MARINI Philippe ABBECOURT\n", "2 60 1400 LARCHER G\u00e9rard ABBEVILLE-SAINT-LUCIEN\n", "3 70 2500 RAISON Michel ABELCOURT\n", "4 62 7000 VANLERENBERGHE Jean-Marie ABLAINZEVELLE" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "res_data['Groupe politique du parlementaire'].unique()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 17, "text": [ "array(['UMP', 'UDI', 'NI', nan, 'SRC', 'SOC', 'RDSE', 'SOCV', 'GDR', 'UC',\n", " 'CRC-SPG', 'NC', 'CRC', 'ECO'], dtype=object)" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exploration des donn\u00e9es de la r\u00e9serve parlementaire\n", "\n", "#### R\u00e9partition des subventions\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(8,6))\n", "sorted_sub = res_data['Subvention allou\u00e9e'].copy()\n", "sorted_sub.sort()\n", "id_max = int(sorted_sub.size * 0.9) + 1\n", "ax.plot(sorted_sub[:id_max], pd.np.arange(id_max) * 1. / id_max)\n", "ax.grid(True)\n", "ax.set_title(u\"R\u00e9partition des subventions\")\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 18, "text": [ "" ] }, { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAF4CAYAAACSKBoIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VPW9P/D3bNlDAgSyL0BiEiAk2kBARWIFWbyColTs\nFUGpUp6il3uv96JWK7VeMLbWDW9/YFFcgWtbi21DUJAIghAoO2EJS4AECAlJyJ6ZOef7+yPJyECW\nL5DJOTPzfj1PHjIzJzOfeXPgk3M+55wxCCEEiIiIyC0YtS6AiIiI5LFxExERuRE2biIiIjfCxk1E\nRORG2LiJiIjcCBs3ERGRG2HjJrdWVFSE9PR0nDp1qkdfd+jQodi0aVOHj0+aNAkff/yxy+tYsWIF\nRo8e7fLXkaGnWrr6+yFyZ2atCyBqT0JCAi5cuACTyYTAwECMGzcO7777Lnr16uVYpqamBk8++ST+\n/Oc/Iz4+3mW1zJo1C7GxsfjNb37juO/AgQOO7xcuXIjjx487Nerc3FyX1UPOuvr7IfI03OImXTIY\nDPj73/+O2tpa7N27F/v378crr7zitEyvXr2wceNGJCYmuqwORVFc9txERNeDjZt0Lzw8HHfffTcO\nHjzouG/btm249dZb0bt3b6Snp+Obb75xPJadnY3nnnsOWVlZCAkJwX333YeqqirH49OmTUNkZCRC\nQ0MxZswYFBYWOh6bNWsW5s6di0mTJiEoKAjvv/8+PvvsM7z22msIDg7GlClTALTsEdiwYQPy8vKw\nePFirF69GsHBwbj55psdNSxfvhwAIITAK6+8goSEBISHh2PmzJmoqakBABQXF8NoNOKjjz5CfHw8\n+vXrh0WLFnWYxcWLFzF58mSEhIQgKysLx48fd3r88OHDGDduHPr27YuUlBR8/vnnjsdyc3MxZMgQ\n9OrVCzExMXj99dfbfY1jx45hzJgxCA0NRb9+/TB9+nSnWlVVdcq67X22vdennnoKoaGhSE1Ndfy9\nrF69GsOHD3d6nTfeeMORZ3NzM5555hnEx8cjIiICc+fORVNTEwAgPz8fMTEx+P3vf4/w8HBERUVh\nxYoVAIBly5Z1+vfT9tzz589HdHQ0oqOj8e///u+wWq1dPve1ZEbUowSRDiUkJIj169cLIYQ4c+aM\nSEtLE7/+9a+FEEKUlJSIPn36iH/84x9CVVWxbt060bt3b3HhwgUhhBBjxowR0dHR4uDBg6K+vl48\n8MAD4pFHHnE89wcffCDq6uqE1WoV8+fPFxkZGY7HZs6cKUJCQsTWrVuFEEI0NTWJWbNmiRdffPGq\n+jZs2CCEEGLhwoVixowZTo9nZ2eL5cuXCyGEWL58uUhMTBQnT54UdXV1YurUqY7lT548KQwGg3jy\nySdFU1OT2Lt3r/D19RWHDh1qN5eHHnpIPPTQQ6KhoUEcOHBAREdHi9GjRwshhKirqxMxMTFixYoV\nQlEUsXv3bhEWFuZ4roiICPHdd98JIYSorq4Wu3btavc1pk+fLhYtWiSEEKK5uVls2bLFqVZFUdp9\nnx988IEwm83izTffFHa7XaxevVqEhISIqqoqUV9fL4KDg0VRUZHjZzMzM8Xq1auFEELMnz9fTJky\nRVRVVYna2lpx7733iueee04IIcTGjRuF2WwWL730krDb7SI3N1cEBASI6upqIYTo8u/nxRdfFKNG\njRLl5eWivLxc3HrrrY7lu3pu2cyIehIbN+lSfHy8CAoKEsHBwcJgMIj77rvP0TBeffVV8a//+q9O\ny999991ixYoVQoiWZtL2n74QQhQWFgofHx+hqupVr1NVVSUMBoOoqakRQrQ07pkzZzotM2vWLPHC\nCy843Xd5Y3jppZecfjFoq6Gtof34xz8Wf/jDHxyPHTlyRFgsFqEoiqMZlpaWOh4fMWKEWLVq1VW1\n2u12YbFYxJEjRxz3Pf/88+L2228XQgixatUqRxNv8+STTzp+4YmLixNLly4Vly5duuq5L/foo4+K\nJ598UpSUlDjdL9O4o6KinH5mxIgR4uOPPxZCCPHII4+Il19+WQghxNGjR0VwcLBobGwUqqqKwMBA\ncfz4ccfPbd26VQwYMEAI0dJc/f39nV63f//+Yvv27UKIrv9+Bg0aJNauXet4bN26dSIhIUHquWUz\nI+pJ3FVOumQwGLBmzRrU1NQgPz8f33zzDXbu3AkAOHXqFNatW4fU1FTH16FDh1BZWen4+djYWMf3\ncXFxsNlsqKiogKIoePbZZ5GYmIiQkBAMGDAAAFBRUeF43ct/tjucO3fO6eC5uLg42O12lJWVOe6L\niIhwfB8QEID6+vqrnqe8vBx2u/2q99bm1KlT2L59O3r37u34+uyzzxyv8+c//xm5ublISEhAdnY2\ntm3b1m69r732GoQQGDFiBIYOHYoPPvhA+r1GR0c73Y6Pj8e5c+cAAD/96U+xcuVKAMBnn32G+++/\nH35+figvL0dDQwN+9KMfOeqeOHGi4+8EAPr27Quj8Yf/rgICAlBXVydV09mzZ6/K/+zZs1LPLZsZ\nUU/iUeWke3fccQeeeuopLFiwABs3bkRcXBymTJmCP/7xjx3+zOnTp52+t1gsCAsLwyeffIIvv/wS\nGzZsQHx8PKqrq9GnTx+ITj4kz2AwdFpfV49HRUWhuLjYqR6z2Yzw8HCnOrvSr18/mM1mnD59GsnJ\nyY7nahMXF4cxY8bgq6++avfnMzMz8de//hWKouCdd97BT37yk3ZfPzw8HMuWLQMAbNmyBWPHjsWY\nMWMQHBwMAGhoaEBQUBAA4Pz5804/W1pa6nT71KlTjrnz2LFjUV5ejr1792LVqlV48803AQBhYWHw\n9/dHYWEhIiMjpfNoI5t/amoqgJbMoqKipJ5bNjOinsQtbnIL8+fPR0FBAbZv345HHnkEf//737F2\n7VooioKmpibk5+c7moYQAp988gkOHTqEhoYG/OpXv8K0adNgMBhQV1cHX19f9OnTB/X19Xj++eed\nXqe9Bh4eHo4TJ050WFtERASKi4s7bP4PP/ww3njjDRQXF6Ourg7PP/88pk+f7rSVd6X2nstkMmHq\n1KlYuHAhGhsbUVhYiA8//NDRuO655x4cPXoUn3zyCWw2G2w2G3bs2IHDhw/DZrPh008/xaVLl2Ay\nmRAcHAyTydTua3/++ecoKSkBAISGhsJgMMBoNKJfv36Ijo7Gxx9/DEVR8P777191cNyFCxfw9ttv\nw2az4fPPP8eRI0cwadIkAIDFYsG0adPwzDPPoKqqCuPGjQMAGI1GPPHEE5g/fz7Ky8sBtPwC0NEv\nIFfq6u/n4YcfxiuvvIKKigpUVFTg5ZdfxowZM7p83mvJjKgnsXGTWwgLC8PMmTORk5ODmJgYfPnl\nl8jJyUH//v0RFxeH119/3dHsDAYDZsyYgVmzZiEyMhJWqxVvv/02AODRRx9FfHw8oqOjMXToUIwa\nNcppi81gMFy1BTd79mwUFhaid+/emDp16lW1TZs2DUDLLtfMzMyrHn/88ccxY8YM3HHHHRg4cCAC\nAgLwzjvvOL3mlTrailyyZAnq6uoQERGBxx9/HI8//rjjseDgYHz11VdYtWoVoqOjERkZieeee85x\nBPUnn3yCAQMGICQkBMuWLcOnn37a7mvs3LkTI0eOdByl/fbbbyMhIQEA8N577+G3v/0twsLCUFhY\niNtuu82p5pEjR6KoqAj9+vXDiy++iD/96U/o3bu3Y5mf/vSn2LBhA6ZNm+b0i0tOTg4SExMxcuRI\nhISEYNy4cTh69GiXeQBd//288MILyMzMxLBhwzBs2DBkZmbihRdekHpu2cyIepJBdLaPkMgN3Xnn\nnZgxY4ZTUyMi8hRdbnE//vjjCA8PR1paWofLPP3000hKSkJ6ejp2797drQUSXQ/+PkpEnqrLxv3Y\nY48hLy+vw8dzc3Nx7NgxFBUVYdmyZZg7d263Fkh0Pbo6YImIyF11eVT56NGjnY6IvdKXX36JmTNn\nAgCysrJQXV2NsrIyhIeHd1uRRNdi48aNWpdAROQyN3xwWmlpqdN5pTExMY4jUomIiKh7dct53FfO\nE6/lKFkiIiJP5YrjbW54izs6Ohpnzpxx3C4pKbnq6kltRMslVvnVyddLL72keQ3u8sWsmBOzYk56\n/Tpff+lG22uHbrhxT548GR999BGAlk9sCg0N5Xz7BnR2PAE5Y1ZymJM8ZiWHOWmry13lDz/8ML79\n9ltUVFQgNjYWv/71r2Gz2QAAc+bMwaRJk5Cbm4vExEQEBgZe03WNiYiI6Nr02AVYDAYDeuil3Fp+\nfj6ys7O1LsMtMCs5zEkes5LDnLpW1lCDiMAQl/Q9Nm4iIqJu5srGzWuV60x+fr7WJbgNZiWHOclj\nVnKYk7bYuImIiNwId5UTERF1M+4qJyIiIgDddOU06j48WlMes5LDnOQxKzla5FRjbURlcwNUIaAK\nteVPiNbbAopQIa64z7HsFfcpQoVA2/fC8XOO57jsfgUtryVa77OqdlgVBXZVgU2oLX+qCuyqCptQ\nHLdtquqyLNi4iYhIWqPdirP1l3Ckugx2obY2rcual6NxKY7Hf1hGhV38sKxVtUNRr26sLU1Zdbpd\nY2tCH98AhPoEwGAwwGgwwATDD98bjDAYDDAZDDDA+T4jWu+/fNnW+4yt95sMRlgMJsdzOO6H8bJl\nDLAYTfAxmmExmmA2GmExmlq+Nxid7jMbTfgDHnbJ3wFn3EREJO0vJ3djR/kp9PULgsXwQ5NyaloG\nEyyXNzXjD7fNhh+W8zGaYDIYYTS0NEfHF5wbqtFggNlgRKDFV+u3f01c1fe4xU1ERNIUIfDjqGSM\ni0nVuhSvxYPTdIbnR8pjVnKYkzxmJWfv9wVal+DV2LiJiIjcCGfcREQk7fMTuxDq489d5RJc1fe4\nxU1ERORG2Lh1hjM2ecxKDnOSx6zkcMatLR5VTkTkJlShollRYFXtqLE24UJjreNCIpdfbES5/Pbl\nFxNpffxiUz0a7FYAgCLUlvtbl2v5XnVcqERRhePCIlZVgVVRMNRk0TgJ78YZNxGRBlQhUG1twHfn\nj7c0xdaG3NIcW/680FiLJsUOQKBZsUMRAj4mE3yNZggAQRYfRAaEOM51bjn/2ei42IjpivOjTQaj\n4xxpH5MZ/fyCHMuYWn+u5efb7mu53XY+tqX1fGyz0aR1fG6B53ETEbmQKtSWK3u1XvHL3nqVL0UV\njq3Sli1Q1bFlqrQud6ymHEaDwflnVQVK23MKBYqqwiZUNCt21NmaUG+zQgDo6xeI0RGJCPVtuSKX\nT+uFSXxMZpgMRvTxDYS/2ey4WpfBYNA6KtIYG7fO8FrJ8piVHOYk5/mCL3Fkx24k/CgNZoMRJqOx\n5c+2L6MBZoMJpratU6PRcUlNIQSSQvrD3Poz5tZLYLbcNjnd72syI9jih0CLD0wG9zzMiOuUtti4\niYgANChWzE0djbtHjdW6FKJOccZNRATg6a3/h9dG3A8/Mw+8ou7B87iJiIiIjVtveB6pPGYlhznJ\n2/Ttt1qX4Ba4TmmLjZuIiMiNcMZNRATOuKn7ccZNREREbNx6w9mRPGYlhznJ44xbDtcpbbFxExER\nuRHOuImIwBk3dT/OuImIiIiNW284O5LHrOQwJ3mcccvhOqUtNm4iIiI3whk3ERE446buxxk3ERER\nsXHrDWdH8piVHOYkjzNuOVyntMXGTURE5EY44yYijyKEgF2oaFbsrV82NKtKy5+O++xoVu1Oy2w6\nfwxvjHyQM27qNq7qe2zcRKRLQggoQoVdVWFTFdiEAquiwKraYVXsrc3YjgZ7My5Zm3DJ2ojvy07A\nqiowG4zwMZnhazLDz2SGr9EMH5MZfiYLfFvv9zG2PmYyw9dkQbDFF5n94rV+2+RB2Li9RH5+PrKz\ns7Uuwy0wKznultMnRQXYduEk7KoCg8EAi9EEi9H0QzM2muFjMsGntRkHmn0Q4uOPXj5+CLH4Y1jf\naFiMput6bXfLSivMSY6r+p6525+RiLxeWWMNjtdUQFFV2IQCRVVhFyoUVUWjYsO5hktQVBVWtWUL\n2qa2bU0raLRb8XTanUgO6Q+jgYfhEF2JW9xE1C4hBJoUO6yts+BGuw0NihXNdhuaVTua7HY0KTY0\nKTZcbK6Hoqpoap0dF126gL6+gUjtHQGzwQhz6xazyWhs+dNgRGxQ79atZhN8jKbLvm/ZkiZyd9xV\nTkQ9Kv/sUXx+YhcCzD7wMZnhb7IgwOzjmBu3zIst8DO1NNyA1l3WvkYz/MwWRAWEwHydu6yJPAF3\nlXsJzo7kMauuNdit+PBvf0baqOGwtR3kpSqwt/5pUxXYxQ/3N9ptaLBb0WC3osbahHvihmJS3FCt\n30aP4Tolhzlpi42byIMdqDyL786fQGDNQFiMxh8O9DKa4G/2ab1tbD34ywQ/swUBrVvWAWYfBFp8\ntX4LRHQF7ion8mAFF4qxr7IUP0u5TetSiLwOr1VOREREbNx6w2sAy2NWco4U7Na6BLfBdUoOc9IW\nGzcREZEb4YybyINxxk2kHc64iYiIiI1bbzg7kses5HDGLY/rlBzmpC02biIiIjfCGTeRB+OMm0g7\nnHETERERG7fecHYkj1nJ4YxbHtcpOcxJW2zcREREboQzbiIPxhk3kXY44yYiIiI2br3h7Eges5LD\nGbc8rlNymJO2umzceXl5SElJQVJSEnJycq56vKKiAhMmTEBGRgaGDh2KFStWuKJOIiIiQhczbkVR\nkJycjPXr1yM6OhrDhw/HypUrkZqa6lhm4cKFaG5uxuLFi1FRUYHk5GSUlZXBbDY7vxBn3EQ9jjNu\nIu1oMuMuKChAYmIiEhISYLFYMH36dKxZs8ZpmcjISNTU1AAAampq0Ldv36uaNhEREXWPTht3aWkp\nYmNjHbdjYmJQWlrqtMwTTzyBgwcPIioqCunp6XjrrbdcU6mX4OxIHrOSwxm3PK5TcpiTtjrdNDYY\nDF0+waJFi5CRkYH8/HwcP34c48aNw969exEcHHzVsrNmzUJCQgIAIDQ0FBkZGcjOzgbww4rg7bfb\n6KUePd/es2ePrurR4+2AwQm6qkfvt9vopR693t6zZ4+u6tHL7bbvi4uL4Uqdzri3bduGhQsXIi8v\nDwCwePFiGI1GLFiwwLHMpEmT8Mtf/hK33dYyQ7vrrruQk5ODzMxM5xfijJuox3HGTaQdV/W9Tre4\nMzMzUVRUhOLiYkRFRWH16tVYuXKl0zIpKSlYv349brvtNpSVleHIkSMYOHBgtxdKRC0UoaLBZkWD\n3Ypm1Q6bqsCqKLCqdtRYm1Bna0aTakOz3Y5TdZXo5x+kdclE1I06bdxmsxlLlizB+PHjoSgKZs+e\njdTUVCxduhQAMGfOHDz//PN47LHHkJ6eDlVV8dprr6FPnz49Urwnys/Pd+x+oc55S1YXGmvx9oGN\naFRsaFbssKsqAswWBJh94Gsyw8doho/RBB+TGYEWX4RY/OBrMqOXvx+SQvrj/J5DQLLW78I9eMs6\ndaOYk7a6PPx74sSJmDhxotN9c+bMcXwfFhaGv/3tb91fGZGHsakKbKoCu6rArqqwCxV2VUGTYsf5\nhktoUGxosFthVRTYVDusrctXNzcg0OyD/06/G74mMyxGE4wSx5+0ybeccOG7IqKexmuVE/WAOlsz\n/nv7F/AxmmA2mmA2GGE2tnz5Gs3wN/sg1McfYX5B8DGZYDG2NGif1q/wgF6IDAjR+m0Q0TXQZMZN\nRNem3taMWlsTbKrq2MJuUmw431CDYIsvcrLu17pEInJzbNw6w9mRPD1kpQoVDfaWXdybzhVh07lj\nCPX1h8Vocnz5GM0I9fXHv8SlaVKjHnJyF8xKDnPSFhs30TVYdug7XGisRYO99ahuxQ6/1gPFAs0+\n+Png0RjcO1LrMonIg3HGTXQNfr55JRZk3I0gsy8CzD7wN1uu6UAxIvIenHET6UR8UG8YDfxEXCLS\nBv/30ZkrL71IHWNWcpiTPGYlhzlpi42biIjIjXDGTXQFIQSaFTsaFCsa7baWL8WKiqZ6rDq+E3+4\nfTp3lRNRlzjjJuomZQ01ONtwCU2tlxBtUmxoUuyobK7HsUvluNhc33pRFAv8zT7wN7UcNd7bNwCP\n3TSKTZuINMUtbp3h+ZHyrjerX+5YgxCfAIT5BcLPZIGfyQxfkwVBZl/EBIUiKiAU/mZL9xesEa5T\n8piVHOYkh1vcRJLsqoLTdVVosFvRqNhQb2tGja3lU7OqrY2oaKrHM8PGobdvgNalEhFdM25xk1sq\nb6zFidqLqLc1o87ejMqmekdzPlVXiWCLL+KC+jh2c/fy8UeQxRchPv7o5xeE2KDeWr8FIvJw3OIm\nusyXp/bjYnM94gJ7I9Dii7jgliYd4d8LffwCEeLjr3WJREQuwaNsdIbnR8oREAg+cRHTEzNxb3wa\nfhyVjFHhAzGgVxib9hW4TsljVnKYk7bYuImIiNwIZ9zklt479B0ywmIxvF+81qUQEbXLVX2PW9xE\nRERuhI1bZzg7kiMA7NqyTesy3ALXKXnMSg5z0hYbNxERkRvhjJvc0rJD3+GWsFhkcsZNRDrFGTfR\nFQwwaF0CEVGPY+PWGc6O5AgI/HPL91qX4Ra4TsljVnKYk7bYuImIiNwIZ9zklpYe2ozMsHj8qF+c\n1qUQEbWLM26iywgBGDjiJiIvxMatM5wdydvJGbcUrlPymJUc5qQtNm5yUwLgUeVE5IU44ya39P8K\nN2FE/wG4JSxW61KIiNrFGTfRZbi9TUTeio1bZzg7kiPAGbcsrlPymJUc5qQtNm5yW9ziJiJvxBk3\nuaX/Pfgtbg0fiAzOuIlIpzjjJroST+QmIi/Exq0znB3JEQCvVS6J65Q8ZiWHOWmLjZuIiMiNcMZN\nbundg9/i9ohBSO8bo3UpRETt4oyb6DIC/CWQiLwTG7fOcHYkb+eWbVqX4Ba4TsljVnKYk7bYuMkt\ncepCRN6KM25yS+8cyEd2VBLS+kRrXQoRUbs44yYiIiI2br3h7Ejeju94HrcMrlPymJUc5qQtNm5y\nSzyqnIi8FWfc5JbePrARP45KxtA+UVqXQkTULs64iYiIiI1bbzg7kiOEwI7vtmpdhlvgOiWPWclh\nTtpi4ya3ZeCngxGRF+KMm9zSm/u/wbiYVAzpHal1KURE7eKMm+gK3N4mIm/Exq0znB3JK+CMWwrX\nKXnMSg5z0hYbNxERkRvhjJvc0hv7N2B8zGAM5oybiHSKM26iywnAwCk3EXkhNm6d4exIHmfccrhO\nyWNWcpiTtti4yS0JgIeVE5FX4oyb3NLv923ApLghSAmN0LoUIqJ2ccZNdBl+OhgReasuG3deXh5S\nUlKQlJSEnJycdpfJz8/HzTffjKFDhyI7O7u7a/QqnB3J4+dxy+E6JY9ZyWFO2jJ39qCiKJg3bx7W\nr1+P6OhoDB8+HJMnT0ZqaqpjmerqavziF7/AunXrEBMTg4qKCpcXTURE5K063eIuKChAYmIiEhIS\nYLFYMH36dKxZs8Zpmc8++wwPPPAAYmJiAABhYWGuq9YLcI9F14QQUIXAiNtv1boUt8B1Sh6zksOc\ntNXpFndpaSliY2Mdt2NiYrB9+3anZYqKimCz2XDnnXeitrYW//Zv/4YZM2a4plryGqpQcaDyHKqa\nG3DJ1ohL1kbU2ZpRa2tGWWMNjDAgxMdP6zKJiHpcp41b5mMTbTYbdu3ahQ0bNqChoQGjRo3CyJEj\nkZSUdNWys2bNQkJCAgAgNDQUGRkZjt/c2mYm3n677T691NPTtzNvG4lL1iZ8lvtXfF92ElPH34MQ\nH39U7iuCv9mC+7LvRJhfIPZ9vwOrln2A+fPn66p+Pd6+ct3Suh493267Ty/16PX2m2++yf+/27nd\n9n1xcTFcqdPTwbZt24aFCxciLy8PALB48WIYjUYsWLDAsUxOTg4aGxuxcOFCAMDPfvYzTJgwAQ8+\n+KDzC/F0MCn5+fmOlcHTXWisxYGqszjfUINzDZdQUl+NBrsVkQEhCLb44tbwgRgVPrDDn/emrG4E\nc5LHrOQwJzmu6nudNm673Y7k5GRs2LABUVFRGDFiBFauXOl0cNrhw4cxb948rFu3Ds3NzcjKysLq\n1asxePDgHnkD5L5WHPke1dZGDOsTjYiAXogMCEGoj7/Unh4iIr1zVd/rdFe52WzGkiVLMH78eCiK\ngtmzZyM1NRVLly4FAMyZMwcpKSmYMGEChg0bBqPRiCeeeOKqpk3UHgEgq39Cp1vVRETkjFdO0xlv\n2AUlhIBNVfDHI1txc9+Y627c3pBVd2BO8piVHOYkR5MtbqIb1WC3OmbYZ+qqUFRzAecbamAwGBBk\n8cU9sUO1LpGIyK1wi5tcos7WhKOXLmDpoe8QH9QHkQEhiA4MQVKv/ogKDIWvib8zEpFn0+TgtG59\nITZuj2RTFZypq0KtrQkXGmtxpr4KB6vOwaYoiA/ug8GhkZgYN0TrMomIehw/ZMRLXH4+oDvYUHoE\nb+zfgE3njqGyuQE3hYRj3pBsvHnrg/jPYWNd2rTdLSutMCd5zEoOc9IW91fSDWlWbJgQOwT3xHFW\nTUTUE7irnG7ImuK9MBtNbNxERFfgrnIiIiJi49Ybzo7kMSs5zEkes5LDnLTFxk1ERORGOOOmG8IZ\nNxFR+zjjJiIiIjZuveHsSB6zksOc5DErOcxJW2zcREREboQzbrohXxTvgY/RzBk3EdEV+OlgpDmb\nqmB3xRn8s+I0Suqr0WBvhk1V8a+Jw7UujYjIa3BXuc7ocXZU1lCDvRdL8HzBGmwtO4GU0Ag8mpSF\n32Tei3du/cl1f572jdJjVnrEnOQxKznMSVvc4qYuvbp3HeKC+uCu6BRMiB2sdTlERF6NM27q0tNb\n/w+vjbgffmaL1qUQEbkNnsdNREREbNx6o7fZkSpUQKc7SvSWlV4xJ3nMSg5z0hZn3AQAUFQV5U11\nKGusQVljDfZeLMXF5nrUWpsQ6hsAs5G/4xER6QFn3IR9F0ux9NBmhPoGIMK/F8L9gxHmH4QhvSPR\nxzcQFqNJ6xKJiNwOz+Mml6mxNSKr/wA8elOW1qUQEVEXuP9TZzg7kses5DAnecxKDnPSFhs3ERGR\nG+GMm/AYD5JoAAAYsUlEQVTd+WM4UXORu8qJiLoRz+MmIiIiNm694exIHrOSw5zkMSs5zElbbNxE\nRERuhDNuwuZzx3CyljNuIqLuxPO4qdvUWJtwuPo8ypvqcLDqHE7XVWJS7BCtyyIiIgncVa4zrpod\nbb9QjOWHt+LFnX/DL3eswfdlJ1BtbcDdMal4c9SDmBQ31CWv60qcs8lhTvKYlRzmpC1ucXswIQQq\nmxtQdOkC/nRyN+6KSsaE2MGI8O8FE689TkTkljjj9hCqUHHsUjkuNNWhsrkeZ+qqUFh1DhajCYN7\nRyI6MBTjolPgY+LvakREPcFVfY+N20OcrKnAWwc2IiU0AiE+fkgODUdcUB+E+QVpXRoRkVfiBVi8\nxPXOjhShIiowBD8fPBoPJw7HLWFxHt+0OWeTw5zkMSs5zElbbNweQgUAGDSugoiIXI27yj3E0eoy\nfHlqH55JH6d1KUREBO4qpy4IADBwi5uIyNOxcevMjcyOvK1tc84mhznJY1ZymJO22Lg9hADHEERE\n3oAzbg9xqOo81p45iP8YdpfWpRARETjjpi4ICI64iYi8ABu3zlzr7EgVAoerz6PgQjF8jN51VTTO\n2eQwJ3nMSg5z0pZ3/U/vQQ5Vn8fByrP47vxxhPj4Y1jfaExOGKZ1WURE5GKccbsRRajYd7EUeSWF\nKG+sQ1b/BGT0jUFyaLjWpRER0RX4edxerkmxYWnhZlQ01WNi7GCMDB8Ao4GTDiIib8P/+XWmbXak\nCBU7yk/hfws34YUdX+KZbX+Bn9mCZzPuxq0Rg9i0wTmbLOYkj1nJYU7a4ha3jqhC4PuyEyjYa8Px\nmnL09Q3E2JgUTIodgujAUFiMJq1LJCIijXHGrSP1NisWFHyBx5NvxYDgvujtG6B1SUREdJ044/YK\nAhajEbeExWpdCBER6RQHpToiAJTsKtS6DLfBOZsc5iSPWclhTtpi4yYiInIjnHHrSJ2tCb/a+Xf8\nftSDWpdCREQ3iNcq9wItf7+84DgREXWMjVtnzuw6qHUJboNzNjnMSR6zksOctMXGrSMC4Cd8ERFR\npzjj1pEaayNe3pWL3418QOtSiIjoBmk2487Ly0NKSgqSkpKQk5PT4XI7duyA2WzGX/7yl24tkIiI\niH7QaeNWFAXz5s1DXl4eCgsLsXLlShw6dKjd5RYsWIAJEyZwq/oGCHDGfS04Z5PDnOQxKznMSVud\nNu6CggIkJiYiISEBFosF06dPx5o1a65a7p133sGDDz6Ifv36uaxQb8ERNxERdabTxl1aWorY2B8u\nvxkTE4PS0tKrllmzZg3mzp0LoGWfPl2/2FuGal2C28jOzta6BLfAnOQxKznMSVudXqtcpgnPnz8f\nr776qmMI39mu8lmzZiEhIQEAEBoaioyMDMcK0LbrxZtv19magGDoph7e5m3e5m3elr/d9n1xcTFc\nqdOjyrdt24aFCxciLy8PALB48WIYjUYsWLDAsczAgQMdzbqiogIBAQF47733MHnyZOcX4lHlXapq\nbsDc91/Hqrkval2KW8jPz3f8w6GOMSd5zEoOc5KjyaeDZWZmoqioCMXFxYiKisLq1auxcuVKp2VO\nnDjh+P6xxx7Dvffee1XTJnkcNBARUWc6bdxmsxlLlizB+PHjoSgKZs+ejdTUVCxduhQAMGfOnB4p\n0pvEccYtjb/xy2FO8piVHOakLV6ARUcqm+uRs+cr5GTdr3UpRER0g/ghI16C53HLu/yAEOoYc5LH\nrOQwJ22xcesJd0gQEVEXuKtcRy421eO3+77GqyPu07oUIiK6QdxV7iV4VDkREXWGjVtHBARO//OA\n1mW4Dc7Z5DAnecxKDnPSFhu37nCbm4iIOsYZt46UN9bhjf0bsGjEFK1LISKiG8QZNxEREbFx64vA\n6V2cccvinE0Oc5LHrOQwJ22xcesIBwlERNQVzrh15EJjLd4+sBGvDOeHtBARuTvOuL2A4DY3ERF1\ngY1bTwR4Hvc14JxNDnOSx6zkMCdtsXHrCLe4iYioK5xx60CdrRk7yk9h87ljCA8IxpzU0VqXRERE\nN8hVfY+NW0MXGmux6VwRNpw9gtTQCNweMQgZfWNhNPDqaURE7o4Hp3kIq2LHvoul+K9tf8HiPXlQ\nhMCLN0/C00PvxC1hcdj07bdal+g2OGeTw5zkMSs5zElbZq0L8DZfFO9FYdU5TB2Qgaz+CTAa+LsT\nERHJ467yHvbpsQLEBPTGmKgkrUshIiIX4q5yN9dkt2HVsZ3Yd7EUZiNjJyKi68MO4mLHa8rxpxO7\nsaDgC5xvrMGTqbdjVPiADpfn7Eges5LDnOQxKznMSVuccbtAg92KHRdOYWfFKZyqrcSI/gmYn3YX\nBgT31bo0IiJyc5xxu8C/f/85YgJ749bwgcjsFw+L0aR1SURE1MNc1fe4xe0CQgA/T70DgRYfrUsh\nIiIPwxm3CwgAxuu8hgpnR/KYlRzmJI9ZyWFO2mLjdgEBAQN49TMiIup+nHG7wFNbVuN3Ix+Ar4mT\nCCIib8XzuN2IALi9TURELsHG7QJCCBiu84NCODuSx6zkMCd5zEoOc9IWG7cLqBAwcpubiIhcgDNu\nF/j55pX439sf4geIEBF5Mc643YjglJuIiFyEjbubtf12db1tm7MjecxKDnOSx6zkMCdtsXF3s7Zt\n7es9OI2IiKgznHF3M0WomPfdavxh9MNal0JERBrijNtN3MipYERERF1h4+5GqhA4VVcJ9QZ+w+Ls\nSB6zksOc5DErOcxJW7wmZzcQQmB/5VmsObUXtbZmTB/0I61LIiIiD8UZ9w1oVuzYUX4K3547iurm\nRkwbeAt+1C8OJp6/TUTk9VzV99i4r0Nlcz1WHtuJI9VlSA4Nx20RgzCsTzSMnG0TEVErHpymI/sr\nzwIAXs26D78YMgYZfWO6rWlzdiSPWclhTvKYlRzmpC027uugqCr6+gUiwOyjdSlERORluKv8OnxV\ncgg11kY8OPAWrUshIiKd4q5yHWiwW/FF8R58XXIIsUF9tC6HiIi8EBu3hLLGGvy1eC+eLfgrqpob\nMD/tx8jqn+CS1+LsSB6zksOc5DErOcxJWzyPuwNCCJTUV2P7hWJ8XXoIt4TFYkH63YgODNW6NCIi\n8mKccXfg9X3rUdncgIy+MRgdkYiIgF5al0RERG7EVX2PW9wdONdQg1/dMhG9fPy1LoWIiMiBM26d\n4exIHrOSw5zkMSs5zElbbNxERERuhDPuDjyz7S/cVU5ERNeN53ETERERG7fecHYkj1nJYU7ymJUc\n5qQtNm4iIiI3whl3BzjjJiKiG8EZNxEREbFx6w1nR/KYlRzmJI9ZyWFO2mLjJiIiciNSjTsvLw8p\nKSlISkpCTk7OVY9/+umnSE9Px7Bhw3Dbbbdh37593V6ot8jOzta6BLfBrOQwJ3nMSg5z0laX1ypX\nFAXz5s3D+vXrER0djeHDh2Py5MlITU11LDNw4EBs2rQJISEhyMvLw5NPPolt27a5tHAiIiJv1OUW\nd0FBARITE5GQkACLxYLp06djzZo1TsuMGjUKISEhAICsrCyUlJS4plovwNmRPGYlhznJY1ZymJO2\numzcpaWliI2NddyOiYlBaWlph8svX74ckyZN6p7qiIiIyEmXu8oNBoP0k23cuBHvv/8+tmzZ0u7j\ns2bNQkJCAgAgNDQUGRkZjllJ229weri9v7IURwp2YUtdMCaOHad5Pbzd8e02eqlHj7ezs7N1VQ9v\nu//ttvv0Uo9ebrd9X1xcDFfq8gIs27Ztw8KFC5GXlwcAWLx4MYxGIxYsWOC03L59+zB16lTk5eUh\nMTHx6hdygwuwnKqtxObzx7C/shSPJI1AWp9orUsiIiI3pdkFWDIzM1FUVITi4mJYrVasXr0akydP\ndlrm9OnTmDp1Kj755JN2m7belTXW4K3932DxnnUwG4x4NmO8Zk378t/cqHPMSg5zkses5DAnbXW5\nq9xsNmPJkiUYP348FEXB7NmzkZqaiqVLlwIA5syZg5dffhlVVVWYO3cuAMBisaCgoMC1ld8gIQSK\nay/i69LD2HuxBNlRN2Hu4DvgY+oyEiIiIs147bXKD1Wfxx8Pb8HI/gMwKXYoAi0+WpdEREQexFV9\nz2s3LxtsVtwU0h/TBt6idSlERETSvPaSpwICBsgfMd9TODuSx6zkMCd5zEoOc9KW1zZuIiIid+S1\nM+6CC8XYV1mKn6XcpnUpRETkgfh53N2oWbFjX2UpfHkEORERuRmvbNxvHfgGilDx4ICbtS7lKpwd\nyWNWcpiTPGYlhzlpy6sad6PdincPfovK5gbMvGkk/M08BYyIiNyL18y4j1SXYfmRrYgJDMXPU0fz\nQitERORSPI/7OgkhcLymHMsOf4cxkUn4l7ihMBq8akcDERF5EI/uYKpQsebUPrx1YCMmxQ7BvXFp\num/anB3JY1ZymJM8ZiWHOWnLo7e4Vx3/J87UVeGlH92DML8grcshIiK6YR49437nQD6yo5L48ZxE\nRNTjeB73ddDrZU2JiIiul2c3biFgMLhX4+bsSB6zksOc5DErOcxJW57duAFubxMRkUfx6Bn3G/s3\nYELMEKT2jujR1yUiIuKM+zoIAbjZnnIiIqJOeXbjdsOD0zg7kses5DAnecxKDnPSlmc3biHcrG0T\nERF1zqNn3L/d+zXuS0hHUkj/Hn1dIiIizrivgzvuKiciIuqMZzduNzw4jbMjecxKDnOSx6zkMCdt\neXTjVrnFTUREHsZjZ9xCCLy8KxczbxqJhOC+Pfa6REREAD+P+5rU2ZrxwZHvYTIYERMYqnU5RERE\n3cbjdpXX2Zrxv4Xfolm145n0sTAbTVqXdE04O5LHrOQwJ3nMSg5z0pZHbXELIfBR0Xb08wvGo0lZ\nMBk97vcSIiLych4z47apCj46uh2n6irxzLC70MvH32WvRURE1BXOuDthVez4/OQulNRX4bmMu+Fv\n9tG6JCIiIpdw+33J5Y11+N2+9ThTV4Wnh97p9k2bsyN5zEoOc5LHrOQwJ2259RZ3ZXM9XtmdizGR\nN2FyfJrbHYhGRER0rdx6xn2mrgorjn6PF2+Z1K3PS0REdKN4rfJ28FrkRETkbdy6catCwOhuFyPv\nAmdH8piVHOYkj1nJYU7acvvGbfCwxk1ERNQZt55xbzpXhK1lJ/BsxvhufV4iIqIbxRn3Ff5x+gD+\ncfoA7opO0boUIiKiHuN2jduuKvi4aDvWlRTiF0PGYHi/eK1L6lacHcljVnKYkzxmJYc5acutzuO2\nqwre3P8NypvqsGj4ZARZ/LQuiYiIqEe51Yx71fGdON9Qg58PHg0/k6WbKiMiIup+Xj3jblJs+EPh\nJnx7rgg/GXgLmzYREXkt3TfuJrsNnxYVoNraiN+PfABRgaFal+RSnB3JY1ZymJM8ZiWHOWlL9zPu\nv5/ej0vWJvxH2l3wNem+XCIiIpfS/Yz746LtiA/qgzsik1xQFRERkWt47YxbCAGjQfdlEhER9Qjd\nd0RFCJi86LKmnB3JY1ZymJM8ZiWHOWlL941bFarHfZAIERHR9dL9jPu9Q98hIyzW466QRkREns0r\nZ9zljbU4eukCfIwmrUshIiLSBd027ibFhsV71mFcTAqG9onSupwew9mRPGYlhznJY1ZymJO2dHti\ndHljHfzNPrg7ZrDWpRAREemGLmfcVc0NeHP/NxjZfwAmxg1xcWVERETdz6tm3H8t3osBvcIwIZZb\n20RERJfTXeNee/ogii5dwL1xaTB44WlgnB3JY1ZymJM8ZiWHOWlLV4376KULWHNqH+YNyUZfv0Ct\nyyEiItId3cy4j9eU483932DawFt4XXIiInJ7Hj3jrmpuwJ9P7sZ9Cels2kRERJ3QvHHX2ZrxbMFf\n0dsnALdFDNK6HM1xdiSPWclhTvKYlRzmpK0uG3deXh5SUlKQlJSEnJycdpd5+umnkZSUhPT0dOze\nvfuaCrCqdoT6+OOJ1NvhZ7Jc0896oj179mhdgttgVnKYkzxmJYc5aavTxq0oCubNm4e8vDwUFhZi\n5cqVOHTokNMyubm5OHbsGIqKirBs2TLMnTtX+sXLGmqw/PBWRAaEXF/1Hqi6ulrrEtwGs5LDnOQx\nKznMSVudXjmtoKAAiYmJSEhIAABMnz4da9asQWpqqmOZL7/8EjNnzgQAZGVlobq6GmVlZQgPD2/3\nOYUQON9Yg7+c3IPD1edxZ9RNmJKQ3k1vh4iIyLN12rhLS0sRGxvruB0TE4Pt27d3uUxJSUm7jfvF\nnX/DhcZaAMCQ3pF44ZaJCPfvdUNvwNMUFxdrXYLbYFZymJM8ZiWHOWmr08YtewGUKw937+jnXhk+\n2en2v0k9u/f58MMPtS7BbTArOcxJHrOSw5y002njjo6OxpkzZxy3z5w5g5iYmE6XKSkpQXR09FXP\n1UOnixMREXm0Tg9Oy8zMRFFREYqLi2G1WrF69WpMnuy81Tx58mR89NFHAIBt27YhNDS0w/k2ERER\n3ZhOt7jNZjOWLFmC8ePHQ1EUzJ49G6mpqVi6dCkAYM6cOZg0aRJyc3ORmJiIwMBAfPDBBz1SOBER\nkVcSLrZ27VqRnJwsEhMTxauvvurql9Ol+Ph4kZaWJjIyMsTw4cOFEEJcvHhRjB07ViQlJYlx48aJ\nqqoqx/KLFi0SiYmJIjk5Waxbt85x/86dO8XQoUNFYmKiePrpp3v8fbjCY489Jvr37y+GDh3quK87\ns2lqahI/+clPRGJiosjKyhLFxcU988a6WXs5vfTSSyI6OlpkZGSIjIwMkZub63jMW3M6ffq0yM7O\nFoMHDxZDhgwRb731lhCC61R7OsqK65WzxsZGMWLECJGeni5SU1PFs88+K4TQdp1yaeO22+1i0KBB\n4uTJk8JqtYr09HRRWFjoypfUpYSEBHHx4kWn+/7rv/5L5OTkCCGEePXVV8WCBQuEEEIcPHhQpKen\nC6vVKk6ePCkGDRokVFUVQggxfPhwsX37diGEEBMnThRr167twXfhGps2bRK7du1yakjdmc27774r\n5s6dK4QQYtWqVeKhhx7qsffWndrLaeHCheL111+/allvzuncuXNi9+7dQgghamtrxU033SQKCwu5\nTrWjo6y4Xl2tvr5eCCGEzWYTWVlZYvPmzZquUy5t3Fu3bhXjx4933F68eLFYvHixK19SlxISEkRF\nRYXTfcnJyeL8+fNCiJZ/QMnJyUKIlt/ULt8zMX78ePH999+Ls2fPipSUFMf9K1euFHPmzOmB6l3v\n5MmTTg2pO7MZP3682LZtmxCi5R9dWFiYy9+Pq1yZ08KFC8Xvfve7q5bz9pwuN2XKFPH1119znZLQ\nlhXXq47V19eLzMxMceDAAU3XKZdeq7y9c7xLS0td+ZK6ZDAYMHbsWGRmZuK9994DAKeL1ISHh6Os\nrAwAcPbsWacj99syu/L+6Ohoj82yO7O5fB00m80ICQlBZWVlT70Vl3vnnXeQnp6O2bNnO65mxZxa\nFBcXY/fu3cjKyuI61YW2rEaOHAmA69WVVFVFRkYGwsPDceedd2LIkCGarlMubdyy54F7ui1btmD3\n7t1Yu3Yt3n33XWzevNnpcYPBwKw6wGw6NnfuXJw8eRJ79uxBZGQk/vM//1PrknSjrq4ODzzwAN56\n6y0EBwc7PcZ1ylldXR0efPBBvPXWWwgKCuJ61Q6j0Yg9e/agpKQEmzZtwsaNG50e7+l1yqWNW+Y8\ncG8QGRkJAOjXrx/uv/9+FBQUIDw8HOfPnwcAnDt3Dv379wfQ/nnxMTExiI6ORklJidP97Z0v7wm6\nI5u29Sw6OhqnT58GANjtdly6dAl9+vTpqbfiUv3793f8h/Gzn/0MBQUFAJiTzWbDAw88gBkzZuC+\n++4DwHWqI21ZPfLII46suF51LCQkBPfccw/++c9/arpOubRxy5wH7ukaGhpQW9tymdf6+np89dVX\nSEtLw+TJkx1XHvrwww8d/2gmT56MVatWwWq14uTJkygqKsKIESMQERGBXr16Yfv27RBC4OOPP3b8\njKfpjmymTJly1XP96U9/wl133aXNm3KBc+fOOb7/4osvkJaWBsC7cxJCYPbs2Rg8eDDmz5/vuJ/r\n1NU6yorrlbOKigrHuKCxsRFff/01br75Zm3XqW6Z2HciNzdX3HTTTWLQoEFi0aJFrn453Tlx4oRI\nT08X6enpYsiQIY4MLl68KO666652TyX4n//5HzFo0CCRnJws8vLyHPe3nUowaNAg8dRTT/X4e3GF\n6dOni8jISGGxWERMTIx4//33uzWbpqYmMW3aNMdpFidPnuzJt9dtrsxp+fLlYsaMGSItLU0MGzZM\nTJkyxXGgjBDem9PmzZuFwWAQ6enpjtOZ1q5dy3WqHe1llZuby/XqCvv27RM333yzSE9PF2lpaeK1\n114TQnTv/+HXmpNBCF6LlIiIyF24dFc5ERERdS82biIiIjfCxk1ERORG2LiJiIjcCBs3ERGRG2Hj\nJiIiciP/HxdTBs1ik8KgAAAAAElFTkSuQmCC\n" } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### R\u00e9partion des subventions par b\u00e9n\u00e9ficiaire" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"\"\"Le nombre de commune ayant re\u00e7u des subvention est de %s\n", "sur %s communes au total.\"\"\"%(res_data['B\u00e9n\u00e9ficiaire'].unique().size, com_data.shape[0])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Le nombre de commune ayant re\u00e7u des subvention est de 8263\n", "sur 36613 communes au total.\n" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "gp = res_data.groupby(['B\u00e9n\u00e9ficiaire', 'D\u00e9partement'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "agg = gp.agg({'Subvention allou\u00e9e' : np.sum})\n", "agg = agg.sort(column='Subvention allou\u00e9e', ascending=False)\n", "agg.head(n=10)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Subvention allou\u00e9e
B\u00e9n\u00e9ficiaireD\u00e9partement
LE PERREUX-SUR-MARNE94 3835675
COMPIEGNE60 1232762
VILLENEUVE-SUR-LOT47 1038557
TROYES10 1000000
AVRILLE49 950000
MEAUX77 800000
CHANTILLY60 770000
PROVINS77 679000
ANTIBES6 650000
DOUZY8 630600
\n", "
" ], "output_type": "pyout", "prompt_number": 35, "text": [ " Subvention allou\u00e9e\n", "B\u00e9n\u00e9ficiaire D\u00e9partement \n", "LE PERREUX-SUR-MARNE 94 3835675\n", "COMPIEGNE 60 1232762\n", "VILLENEUVE-SUR-LOT 47 1038557\n", "TROYES 10 1000000\n", "AVRILLE 49 950000\n", "MEAUX 77 800000\n", "CHANTILLY 60 770000\n", "PROVINS 77 679000\n", "ANTIBES 6 650000\n", "DOUZY 8 630600" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(8,6))\n", "agg_cumsum = agg.cumsum()\n", "total_sub = agg.sum()\n", "quantiles = pd.np.arange(0.01, 1, 0.01)\n", "ax.plot(quantiles, [agg_cumsum.quantile(q)/total_sub for q in quantiles])\n", "ax.grid(True)\n", "ax.set_title(u\"R\u00e9partition des subventions par b\u00e9n\u00e9ficaire\")\n", "ax.set_xlabel(u'% des b\u00e9n\u00e9ficiaires ayant re\u00e7u une subvention')\n", "ax.set_ylabel(u'% de la r\u00e9serve parlementaire allou\u00e9e')\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 34, "text": [ "" ] }, { "output_type": "display_data", "png": "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\nERGRgvw/z8KeghQS218AAAAASUVORK5CYII=\n" } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "80% des subventions sont allou\u00e9es \u00e0 un tiers des b\u00e9n\u00e9ficiares. Plus de 50% des subventions sont allou\u00e9es \u00e0 moins de 10% des b\u00e9n\u00e9ficiaires." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Traitement des donn\u00e9es des \u00e9lections municipales\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "second_tour = pd.ExcelFile('../data/municipales_2008_grosses_communes.xls').parse('Tour 2')\n", "\n", "second_tour.columns[:15]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 23, "text": [ "Index([u'Code du d\u00e9partement', u'Libell\u00e9 du d\u00e9partement', u'Code de la commune', u'Libell\u00e9 de la commune', u'Inscrits', u'Abstentions', u'% Abs/Ins', u'Votants', u'% Vot/Ins', u'Blancs et nuls', u'% BlNuls/Ins', u'% BlNuls/Vot', u'Exprim\u00e9s', u'% Exp/Ins', u'% Exp/Vot'], dtype=object)" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les gagnants des \u00e9lections municipales ne sont pas identifi\u00e9s dans les donn\u00e9es. Il faut les d\u00e9duire des nombres de votants pour chacun des candidats.\n", "Np, pandas est l\u00e0 :-)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Get columns of votes pct and parties\n", "votes_pct = second_tour.filter(regex='\\% Voix\\/Ins(|\\.\\d{1,2})')\n", "parties = second_tour.filter(regex='Code Nuance(|\\.\\d{1,2})')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# Get the winner id\n", "parties['winner_id'] = votes_pct.apply(lambda row: row.dropna().argmax(), axis=1)\n", "\n", "# And the winner party!\n", "winner_parties = parties.apply(lambda row: row.ix[row['winner_id']], axis=1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "second_tour['winner_party'] = winner_parties" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "print winner_parties.unique()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[u'LUG' u'LDVG' u'LDVD' u'LMAJ' u'LVEC' u'LMC' u'LSOC' u'LGC' u'LCOM'\n", " u'LAUT' u'LCMD' u'LREG']\n" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Merge des donn\u00e9es Geofla, R\u00e9serve parlementaire, Elections\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# join only data of interest\n", "data = pd.DataFrame({'code_dep': res_data['D\u00e9partement'],\n", " 'name': res_data['B\u00e9n\u00e9ficiaire'],\n", " 'subvention': res_data['Subvention allou\u00e9e'],\n", " 'politician': res_data['Parlementaire transmetteur'],\n", " 'party': res_data['Groupe politique du parlementaire']})" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "com_data.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
POPULATIONcode_depdepartmentidinsee_codenamepopulation
0 0.9 29 FINISTERE 0 29271 SAINT-VOUGAY 900
1 3.6 30 GARD 1 30223 ROUSSON 3600
2 0.2 30 GARD 2 30252 SAINT-FELIX-DE-PALLIERES 200
3 0.5 24 DORDOGNE 3 24092 CENDRIEUX 500
4 1.6 88 VOSGES 4 88463 TAINTRUX 1600
\n", "
" ], "output_type": "pyout", "prompt_number": 29, "text": [ " POPULATION code_dep department id insee_code name population\n", "0 0.9 29 FINISTERE 0 29271 SAINT-VOUGAY 900\n", "1 3.6 30 GARD 1 30223 ROUSSON 3600\n", "2 0.2 30 GARD 2 30252 SAINT-FELIX-DE-PALLIERES 200\n", "3 0.5 24 DORDOGNE 3 24092 CENDRIEUX 500\n", "4 1.6 88 VOSGES 4 88463 TAINTRUX 1600" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "# Join with municipal data\n", "# XXX: this does not work for DOM cities\n", "def insee_code(row):\n", " try:\n", " com_code = \"%03d\"%int(row[u'Code de la commune'])\n", " except:\n", " com_code = (\"00%s\"%row[u'Code de la commune'])[-3:]\n", " try:\n", " dep_code = \"%02d\"%int(row[u'Code du d\u00e9partement'])\n", " except:\n", " dep_code = (\"0%s\"%row[u'Code du d\u00e9partement'])[-2:]\n", " return \"%s%s\"%(dep_code, com_code)\n", "\n", "second_tour['insee_code'] = second_tour.apply(insee_code, axis=1)\n", "join_data_2 = join_data.merge(second_tour[['insee_code', 'winner_party']], on=['insee_code'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "# Join with geofla data\n", "join_data = data.merge(com_data, on=['code_dep', 'name'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "second_tour[[u'Code du d\u00e9partement', u'Code de la commune', 'insee_code']].head(n=10)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Code du d\u00e9partementCode de la communeinsee_code
0 1 4 01004
1 1 34 01034
2 1 43 01043
3 1 93 01093
4 1 160 01160
5 1 283 01283
6 1 283SN01 01N01
7 2 95 02095
8 2 168 02168
9 2 722 02722
\n", "
" ], "output_type": "pyout", "prompt_number": 63, "text": [ " Code du d\u00e9partement Code de la commune insee_code\n", "0 1 4 01004\n", "1 1 34 01034\n", "2 1 43 01043\n", "3 1 93 01093\n", "4 1 160 01160\n", "5 1 283 01283\n", "6 1 283SN01 01N01\n", "7 2 95 02095\n", "8 2 168 02168\n", "9 2 722 02722" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "join_data_2[['subvention', 'party', 'code_dep', 'population']].head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
subventionpartycode_deppopulation
0 4792 SOC 78 19500
1 80000 UMP 34 24000
2 30000 UMP 34 24000
3 10000 UMP 34 24000
4 7000 SOC 30 4200
\n", "
" ], "output_type": "pyout", "prompt_number": 64, "text": [ " subvention party code_dep population\n", "0 4792 SOC 78 19500\n", "1 80000 UMP 34 24000\n", "2 30000 UMP 34 24000\n", "3 10000 UMP 34 24000\n", "4 7000 SOC 30 4200" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "# Merge policitical party\n", "second_tour['winner_party'].unique()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 65, "text": [ "array([u'LUG', u'LDVG', u'LDVD', u'LMAJ', u'LVEC', u'LMC', u'LSOC', u'LGC',\n", " u'LCOM', u'LAUT', u'LCMD', u'LREG'], dtype=object)" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "print res_data['Groupe politique du parlementaire'].unique()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['UMP' 'UDI' 'NI' nan 'SRC' 'SOC' 'RDSE' 'SOCV' 'GDR' 'UC' 'CRC-SPG' 'NC'\n", " 'CRC' 'ECO']\n" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "# To simplify, we guess that have 4 parties: EG, G, C, D, ED \n", "municipal_mapping = {'LUG': 'G', 'LDVD': 'D', 'LMAJ': 'D',\n", " 'LVEC': 'G', 'LMC': 'D', 'LSOC': 'G',\n", " 'LGC': '?', 'LCOM': 'EG', 'LAUT': '?',\n", " 'LREG': '?'}\n", "\n", "party_mapping = {'UMP': 'D', 'UDI': 'C', 'NI': '?', 'SRC': '?',\n", " 'SOC': 'G', 'SOCV': 'G', 'RDSE': 'G', 'GDR': 'D',\n", " 'UC': 'C', 'CRC-SPG': '?', 'NC': '?', 'CRC': '?',\n", " 'ECO': '?'}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }