block by michalskop 8817451

El Salvador, Presidential Elections 2014, 1st Round

Full Screen

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Presidential Election, El Salvador 2014, 1st Round</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
	<script src="//code.jquery.com/jquery-1.8.2.min.js"></script>
	
	
	<script>
	  // see //leafletjs.com/reference.html
	  L_PREFER_CANVAS = true;
	</script>

	<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="//cdn.leafletjs.com/leaflet-0.6.4/leaflet.css" />
	 <!--[if lte IE 8]>
		 <link rel="stylesheet" href="//cdn.leafletjs.com/leaflet-0.6.4/leaflet.ie.css" />
	 <![endif]-->
    <script src="//cdn.leafletjs.com/leaflet-0.6.4/leaflet.js"></script>
    <!--<script type="text/javascript" src="//mbostock.github.com/d3/d3.js?1.29.1"></script>-->
    <style type="text/css">

		html, body, #map {
		  width: 100%;
		  height: 100%;
		  margin: 0;
		  padding: 0;
		}
		.leaflet-tile-pane {
		  opacity: .3
		}


    </style>
  </head>
  <body>
  
    <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Presidential Election, El Salvador 2014, 1st Round</a>
        </div>
      </div>
    </div>
    
    <div style="position:fixed;top:50px;z-index:1000;">
      <div class="alert alert-info" >
        The <strong>size</strong> of bubbles represents number of voters, the <strong>color</strong> represents the winner and the <strong>oppacity</strong> the margin of victory.
        <span style="color:#800">Salvador Sánchez Cerén (FMLN)</span> vs. <span style="color:#008">Norman Noel Quijano González (ARENA)</span> (99 % of votes counted)

      </div>

    </div>
    <div id="map" style="margin-top:40px;"></div>
    <script type="text/javascript">
		// Create the map
		var map = L.map('map',{zoomControl: false}).setView([13.68,-88.78], 9);
		map.addControl( L.control.zoom({position: 'topright'}) );
		
		// add an OpenStreetMap tile layer
		// also see //wiki.openstreetmap.org/wiki/Tiles
		//L.tileLayer('//{s}.tile.osm.org/{z}/{x}/{y}.png', {
		L.tileLayer('//{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png', {
			attribution: '&copy; <a href="//osm.org/copyright">OpenStreetMap</a> contributors'
		}).addTo(map);
		
		//add circles
		//$.getJSON( "cz_president_2013_both_2_ring.json", function (data) {
		$.getJSON( "sv_2014_1_ring.json", function (data) {
		    $.each(data, function (index, value) {
		        sum = 0;
		        descr = '';
		        $.each(value['person'], function (i,d) {
		          sum = sum + parseInt(d['population']);
		          descr += d['name'] + " (" + d['population'] + ")<br>";
		        })
				circle = L.circle(
				  [value.coordinates[0], value.coordinates[1]],
				   Math.sqrt(sum*600), 
				  {
					color: values2color(value['winner']),
					fillColor: values2color(value['winner']),
					fillOpacity: 2*(Math.max(parseInt(value.person.p6.population),parseInt(value.person.p9.population)) / (parseInt(value.person.p6.population)+parseInt(value.person.p9.population))-0.5),
					//fillOpacity: .8,
					weight: 0.1,
					//className: value.classname,	//this does not seem to work, so hacked by class2color
				}).addTo(map);
				
				
				circle.bindPopup("<strong>" + value.name + "</strong><br>" + "<strong>" + value.winner + '</strong><br>' + descr);
		  });
		});
		
		function values2color(w) {
          if (w == 'Salvador Sánchez Cerén (FMLN)') return '#f00';
          if (w == 'Norman Noel Quijano González (ARENA)') return '#00f';
		}
	
	</script>

	<script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

      ga('create', 'UA-8592359-13', 'ocks.org');
      ga('send', 'pageview');

    </script>

  </body>
</html>


csv2json.py

# -*- coding: utf-8 -*-

import json
import csv
import string

data = []
i = 0
with open("geocoded_adj.csv","r") as fin:
  finreader = csv.reader(fin,delimiter="\t")
  for row in finreader:
    if i>0:
      if (int(row[2]) >= int(row[6])):
        winner = "Salvador Sánchez Cerén (FMLN)"
      else:
        winner = "Norman Noel Quijano González (ARENA)"
      item = {
        'id': string.join([row[9],row[10]],sep="-"),
        'coordinates': [row[7],row[8]],
        'person': {'p6': {"population": row[2], "name": "Salvador Sánchez Cerén (FMLN)"}, 'p9': {"population": row[6], "name": "Norman Noel Quijano González (ARENA)"}},
        'name': string.join([row[9],row[10]],sep="-"),
        'winner': winner#,
        #'classname': winner.lower()
      }
      data.append(item)
      #print data
      #raise Exception()
    i = i + 1
with open('sv_2014_1_ring.json', 'w') as outfile:
  json.dump(data, outfile)  
print i

data2summary.py

# -*- coding: utf-8 -*-

import csv

outfile = open('data_towns.csv', 'wb')
outwriter = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC)

i = 0
data = {}
with open('data.csv','r') as f:
  csvreader = csv.reader(f,delimiter="\t")
  for row in csvreader:
    #print row
    if i > 0:
      try:
        data[row[1]]
      except:
        print row[1]
        data[row[1]] = {}
        data[row[1]][row[2]] = [row[1],row[2],int(row[5]),int(row[6]),int(row[7]),int(row[8]),int(row[9])]
      else:
        try: 
          data[row[1]][row[2]]
        except:
          data[row[1]][row[2]] = [row[1],row[2],int(row[5]),int(row[6]),int(row[7]),int(row[8]),int(row[9])]
        else:
          d = data[row[1]][row[2]]
          #print d
          data[row[1]][row[2]] = [d[2]+int(row[5]),d[3]+int(row[6]),d[4]+int(row[7]),d[5]+int(row[8]),d[6]+int(row[9])]
          data[row[1]][row[2]] = [row[1],row[2]] + data[row[1]][row[2]]

      #print data[row[1]][row[2]]    
#      if i>5:   
#        raise Exception('vv')
#      print i
    i = i + 1

for key1 in data:
  for key2 in data[key1]:
    print (data[key1][key2])
    outwriter.writerow(data[key1][key2])
  
    

data_towns.csv

"SAN MIGUEL","SAN MIGUEL",52942,10922,189,405,24013
"SAN MIGUEL","SAN RAFAEL ORIENTE",3510,665,7,32,1664
"SAN MIGUEL","SAN JORGE",2309,175,5,8,2207
"SAN MIGUEL","SAN ANTONIO DEL MOSCO",1397,36,2,5,1330
"SAN MIGUEL","LOLOTIQUE",3887,809,13,15,1169
"SAN MIGUEL","CHIRILAGUA",4413,379,10,30,2841
"SAN MIGUEL","NUEVA GUADALUPE",2351,360,7,12,703
"SAN MIGUEL","SAN LUIS DE LA REINA",1192,67,1,5,1022
"SAN MIGUEL","EL TRANSITO",4219,359,8,21,3373
"SAN MIGUEL","CIUDAD BARRIOS",5577,694,13,49,3214
"SAN MIGUEL","SAN GERARDO",1506,41,1,5,1369
"SAN MIGUEL","CHINAMECA",5227,616,17,35,4133
"SAN MIGUEL","MONCAGUA",6254,709,7,24,2284
"SAN MIGUEL","COMACARAN",1137,72,1,5,540
"SAN MIGUEL","ULUAZAPA",888,97,0,3,542
"SAN MIGUEL","CHAPELTIQUE",2808,174,7,26,1056
"SAN MIGUEL","SESORI",2261,227,10,23,1159
"SAN MIGUEL","NUEVO EDEN DE SAN JUAN",852,75,2,4,725
"SAN MIGUEL","QUELEPA",1732,126,0,7,956
"SAN MIGUEL","CAROLINA",1867,79,2,10,1636
"LA LIBERTAD","ZARAGOZA",4665,1570,38,33,4131
"LA LIBERTAD","CIUDAD ARCE",12399,3380,86,101,8837
"LA LIBERTAD","LA LIBERTAD",9487,2174,42,99,6205
"LA LIBERTAD","HUIZUCAR",2324,472,15,14,2398
"LA LIBERTAD","QUEZALTEPEQUE",13598,3062,86,102,8192
"LA LIBERTAD","TALNIQUE",1299,436,5,20,1224
"LA LIBERTAD","COMASAGUA",2643,375,7,31,2168
"LA LIBERTAD","SACACOYO",2997,620,12,37,3080
"LA LIBERTAD","SANTA TECLA",30094,8136,308,300,33687
"LA LIBERTAD","SAN JUAN OPICO",14891,3865,95,156,10548
"LA LIBERTAD","COLON",19888,6191,171,194,18106
"LA LIBERTAD","ANTIGUO CUSCATLAN",6647,1990,56,78,13431
"LA LIBERTAD","TAMANIQUE",2255,510,12,67,2652
"LA LIBERTAD","TEPECOYO",2480,622,17,37,1737
"LA LIBERTAD","SAN PABLO TACACHICO",4298,459,9,25,4025
"LA LIBERTAD","SAN JOSE VILLANUEVA",3041,869,19,32,2634
"LA LIBERTAD","JICALAPA",883,353,10,15,1521
"LA LIBERTAD","NUEVO CUSCATLAN",2382,435,10,29,2800
"LA LIBERTAD","CHILTIUPAN",2003,257,11,8,2622
"LA LIBERTAD","JAYAQUE",2852,502,15,29,2361
"LA LIBERTAD","SAN MATIAS",1692,259,6,10,1196
"LA LIBERTAD","TEOTEPEQUE",1470,533,12,23,2378
"RES. EN EL EXTERIOR","VOTO POSTAL",148,12,1,2,60
"CHALATENANGO","SAN LUIS DEL CARMEN",222,81,0,4,276
"CHALATENANGO","CHALATENANGO",7011,1648,22,65,6698
"CHALATENANGO","SAN JOSE CANCASQUE",534,55,2,3,342
"CHALATENANGO","TEJUTLA",2768,736,15,26,2532
"CHALATENANGO","LA REINA",1581,374,18,20,1725
"CHALATENANGO","ARCATAO",1043,99,0,4,387
"CHALATENANGO","SAN FRANCISCO LEMPA",255,36,0,0,222
"CHALATENANGO","AGUA CALIENTE",1343,525,7,31,1422
"CHALATENANGO","LA PALMA",2742,278,3,14,2772
"CHALATENANGO","SANTA RITA",913,187,3,6,1050
"CHALATENANGO","LAS FLORES",921,10,0,1,21
"CHALATENANGO","CONCEPCION QUEZALTEPEQUE",1553,226,8,8,1535
"CHALATENANGO","EL CARRIZAL",748,91,2,5,507
"CHALATENANGO","NOMBRE DE JESUS",1426,96,2,6,676
"CHALATENANGO","OJOS DE AGUA",631,247,4,6,772
"CHALATENANGO","SAN MIGUEL DE MERCEDES",452,578,4,7,312
"CHALATENANGO","SAN FRANCISCO MORAZAN",951,144,3,2,614
"CHALATENANGO","POTONICO",547,50,1,0,425
"CHALATENANGO","EL PARAISO",1880,865,7,31,1976
"CHALATENANGO","LA LAGUNA",813,166,4,4,1147
"CHALATENANGO","SAN RAFAEL",847,433,7,19,844
"CHALATENANGO","NUEVA CONCEPCION",6113,1147,23,45,6317
"CHALATENANGO","SAN ISIDRO LABRADOR",297,14,1,1,31
"CHALATENANGO","AZACUALPA",296,36,0,1,323
"CHALATENANGO","SAN FERNANDO",505,81,0,7,564
"CHALATENANGO","COMALAPA",872,131,3,6,975
"CHALATENANGO","SAN ANTONIO LOS RANCHOS",554,44,1,1,18
"CHALATENANGO","SAN ANTONIO DE LA CRUZ",492,63,1,3,384
"CHALATENANGO","LAS VUELTAS",837,25,0,0,95
"CHALATENANGO","CITALA",916,86,1,4,1287
"CHALATENANGO","DULCE NOMBRE DE MARIA",946,409,8,13,1120
"CHALATENANGO","NUEVA TRINIDAD",849,44,1,1,146
"CHALATENANGO","SAN IGNACIO",1975,125,5,8,2039
"USULUTAN","SANTA ELENA",3351,1267,16,25,2175
"USULUTAN","NUEVA GRANADA",1599,188,5,16,1305
"USULUTAN","ALEGRIA",3076,369,11,17,1357
"USULUTAN","JUCUAPA",3956,477,15,20,3051
"USULUTAN","BERLIN",4326,739,16,41,2571
"USULUTAN","EREGUAYQUIN",1218,249,8,13,1087
"USULUTAN","PUERTO EL TRIUNFO",3448,550,11,14,1984
"USULUTAN","JUCUARAN",2981,301,12,32,1453
"USULUTAN","SAN FRANCISCO JAVIER",1622,171,4,12,931
"USULUTAN","SAN BUENAVENTURA",1324,118,4,2,846
"USULUTAN","MERCEDES UMAÑA",3176,245,6,19,2130
"USULUTAN","SAN AGUSTIN",1520,178,2,5,986
"USULUTAN","SAN DIONISIO",957,277,3,12,688
"USULUTAN","USULUTAN",12866,4634,87,160,9678
"USULUTAN","SANTIAGO DE MARIA",4430,808,21,37,2551
"USULUTAN","EL TRIUNFO",1744,180,2,6,975
"USULUTAN","CONCEPCION BATRES",2262,367,6,10,1876
"USULUTAN","ESTANZUELAS",2223,306,4,15,1543
"USULUTAN","OZATLAN",3042,377,7,20,1640
"USULUTAN","TECAPAN",1896,256,2,14,1126
"USULUTAN","SANTA MARIA",1777,634,9,22,1318
"USULUTAN","JIQUILISCO",12955,1148,26,58,5293
"USULUTAN","CALIFORNIA",493,52,1,3,501
"CABAÑAS","SENSUNTEPEQUE",5615,2009,30,78,8602
"CABAÑAS","TEJUTEPEQUE",1604,181,4,10,1433
"CABAÑAS","DOLORES",842,278,2,10,1184
"CABAÑAS","JUTIAPA",1479,225,27,4,1953
"CABAÑAS","GUACOTECTI",1203,484,17,17,733
"CABAÑAS","VICTORIA",2699,246,8,19,3026
"CABAÑAS","CINQUERA",544,64,0,2,280
"CABAÑAS","ILOBASCO",8332,4449,55,117,13686
"CABAÑAS","SAN ISIDRO",1555,380,5,11,1720
"SAN SALVADOR","AYUTUXTEPEQUE",8674,1536,54,62,6579
"SAN SALVADOR","ILOPANGO",25405,6233,131,169,21285
"SAN SALVADOR","AGUILARES",4348,970,16,48,4493
"SAN SALVADOR","NEJAPA",6933,1842,34,80,3829
"SAN SALVADOR","SANTIAGO TEXACUANGOS",3911,1018,20,28,4337
"SAN SALVADOR","SOYAPANGO",66073,15752,393,485,50705
"SAN SALVADOR","MEJICANOS",39951,8323,222,342,30128
"SAN SALVADOR","PANCHIMALCO",8677,1375,47,82,8207
"SAN SALVADOR","ROSARIO DE MORA",2570,485,13,29,2210
"SAN SALVADOR","SAN MARTIN",17664,3930,80,141,15984
"SAN SALVADOR","SAN SALVADOR",83875,18190,521,877,97421
"SAN SALVADOR","TONACATEPEQUE",15447,3854,73,100,13176
"SAN SALVADOR","EL PAISNAL",3423,542,10,17,1857
"SAN SALVADOR","SANTO TOMAS",6248,1440,30,31,6067
"SAN SALVADOR","APOPA",30030,7399,190,294,24179
"SAN SALVADOR","SAN MARCOS",16471,3617,111,116,12755
"SAN SALVADOR","CUSCATANCINGO",17978,3862,209,136,13605
"SAN SALVADOR","GUAZAPA",5368,1149,24,33,3714
"SAN SALVADOR","CIUDAD DELGADO",25190,5862,152,166,21006
"AHUACHAPAN","GUAYMANGO",5324,1121,12,35,2675
"AHUACHAPAN","SAN PEDRO PUXTLA",2405,571,6,8,1363
"AHUACHAPAN","ATIQUIZAYA",7428,1503,33,58,5580
"AHUACHAPAN","EL REFUGIO",1814,648,11,21,1986
"AHUACHAPAN","TACUBA",6120,1794,24,48,3952
"AHUACHAPAN","SAN FRANCISCO MENENDEZ",8005,1799,36,80,7054
"AHUACHAPAN","APANECA",1633,392,1,10,2334
"AHUACHAPAN","CONCEPCION DE ATACO",2804,426,9,31,3392
"AHUACHAPAN","AHUACHAPAN",23995,8659,228,235,16190
"AHUACHAPAN","JUJUTLA",5420,1341,17,65,3365
"AHUACHAPAN","TURIN",1870,778,12,17,1431
"AHUACHAPAN","SAN LORENZO",2066,437,11,15,1939
"SAN VICENTE","SAN VICENTE",10266,3458,41,128,9253
"SAN VICENTE","SANTA CLARA",1201,216,3,14,782
"SAN VICENTE","TEPETITAN",1040,136,1,3,708
"SAN VICENTE","SAN ILDEFONSO",2363,134,4,6,1070
"SAN VICENTE","APASTEPEQUE",3378,2110,18,48,2628
"SAN VICENTE","SAN ESTEBAN CATARINA",1898,303,2,8,599
"SAN VICENTE","GUADALUPE",967,649,9,10,829
"SAN VICENTE","TECOLUCA",6973,487,14,25,3061
"SAN VICENTE","VERAPAZ",1798,205,5,4,1287
"SAN VICENTE","SANTO DOMINGO",1229,350,7,12,1379
"SAN VICENTE","SAN SEBASTIAN",3054,355,5,14,2941
"SAN VICENTE","SAN LORENZO",1468,262,6,11,1070
"SAN VICENTE","SAN CAYETANO ISTEPEQUE",1211,151,1,10,1146
"MORAZAN","SAN CARLOS",1006,163,2,9,752
"MORAZAN","PERQUIN",1125,142,2,12,889
"MORAZAN","SAN SIMON",2931,537,14,20,1097
"MORAZAN","TOROLA",874,257,2,14,299
"MORAZAN","GUATAJIAGUA",2325,550,11,20,1551
"MORAZAN","CHILANGA",1896,804,5,28,1343
"MORAZAN","MEANGUERA",2686,139,1,9,586
"MORAZAN","JOCORO",2875,301,7,12,2007
"MORAZAN","ARAMBALA",1159,122,3,8,596
"MORAZAN","CACAOPERA",2886,554,11,40,1213
"MORAZAN","YAMABAL",680,168,6,8,651
"MORAZAN","SENSEMBRA",435,64,2,2,434
"MORAZAN","GUALOCOCTI",995,157,4,11,589
"MORAZAN","JOCOAITIQUE",1325,61,1,3,519
"MORAZAN","YOLOAIQUIN",740,96,0,7,840
"MORAZAN","CORINTO",2611,344,8,36,2359
"MORAZAN","SAN FERNANDO",467,176,3,6,272
"MORAZAN","SOCIEDAD",2822,201,10,23,1433
"MORAZAN","JOATECA",753,217,6,25,770
"MORAZAN","EL ROSARIO",405,168,2,5,257
"MORAZAN","SAN ISIDRO",768,190,5,10,360
"MORAZAN","EL DIVISADERO",2099,196,6,14,1195
"MORAZAN","SAN FRANCISCO GOTERA",4611,1013,19,47,3993
"MORAZAN","OSICALA",1688,497,11,31,1614
"MORAZAN","DELICIAS DE CONCEPCION",880,368,2,13,1042
"MORAZAN","LOLOTIQUILLO",1060,141,3,9,865
"CUSCATLAN","EL ROSARIO",552,270,4,4,999
"CUSCATLAN","TENANCINGO",1706,246,6,20,1119
"CUSCATLAN","MONTE SAN JUAN",1630,1324,17,35,1787
"CUSCATLAN","SANTA CRUZ MICHAPA",2289,1119,23,25,1879
"CUSCATLAN","ORATORIO DE CONCEPCION",633,254,8,6,755
"CUSCATLAN","SAN BARTOLOME PERULAPIA",2246,344,6,6,1641
"CUSCATLAN","EL CARMEN",2556,874,7,14,2955
"CUSCATLAN","SAN JOSE GUAYABAL",1799,568,8,33,2166
"CUSCATLAN","SAN CRISTOBAL",1879,458,15,10,1878
"CUSCATLAN","SUCHITOTO",8516,506,10,32,2776
"CUSCATLAN","SAN RAMON",1352,325,8,10,1472
"CUSCATLAN","SAN PEDRO PERULAPAN",9885,2986,100,73,9274
"CUSCATLAN","CANDELARIA",1499,1150,13,19,2089
"CUSCATLAN","SANTA CRUZ ANALQUITO",403,243,2,11,551
"CUSCATLAN","SAN RAFAEL CEDROS",3287,795,15,21,3617
"CUSCATLAN","COJUTEPEQUE",10187,3794,82,93,11065
"SANTA ANA","SAN ANTONIO PAJONAL",505,144,2,2,708
"SANTA ANA","COATEPEQUE",5304,2256,41,79,4948
"SANTA ANA","EL CONGO",4654,1710,38,74,4348
"SANTA ANA","CANDELARIA DE LA FRONTERA",2934,1731,37,55,4464
"SANTA ANA","EL PORVENIR",1579,793,17,21,1240
"SANTA ANA","SANTIAGO DE LA FRONTERA",784,174,4,12,1501
"SANTA ANA","MASAHUAT",421,524,11,19,488
"SANTA ANA","TEXISTEPEQUE",2811,1394,25,48,3066
"SANTA ANA","METAPAN",9501,3533,71,193,10608
"SANTA ANA","SANTA ROSA GUACHIPILIN",367,225,5,10,1138
"SANTA ANA","SANTA ANA",56888,15778,354,487,38168
"SANTA ANA","CHALCHUAPA",13881,3380,120,163,13194
"SANTA ANA","SAN SEBASTIAN SALITRILLO",3601,952,24,36,2878
"SONSONATE","CALUCO",2363,626,8,13,1410
"SONSONATE","SAN JULIAN",4164,880,17,39,2704
"SONSONATE","SANTO DOMINGO DE GUZMAN",1508,417,7,20,1165
"SONSONATE","SAN ANTONIO DEL MONTE",6458,2011,25,42,2260
"SONSONATE","NAHUIZALCO",14178,2248,36,63,4715
"SONSONATE","ACAJUTLA",13557,2340,58,97,5000
"SONSONATE","CUISNAHUAT",2343,823,15,19,1193
"SONSONATE","ARMENIA",6553,1683,27,62,6584
"SONSONATE","SALCOATITAN",1460,525,12,13,925
"SONSONATE","SONSONATE",18172,5360,80,135,10479
"SONSONATE","SANTA CATARINA MASAHUAT",2882,549,8,27,893
"SONSONATE","SANTA ISABEL ISHUATAN",1582,593,8,19,1776
"SONSONATE","NAHUILINGO",2449,536,8,14,1267
"SONSONATE","JUAYUA",5703,2382,30,62,3109
"SONSONATE","IZALCO",14621,4226,81,110,11744
"SONSONATE","SONZACATE",6141,2002,32,41,3923
"LA UNION","PASAQUINA",3653,606,11,44,2495
"LA UNION","POLOROS",1439,163,4,25,1565
"LA UNION","NUEVA ESPARTA",1882,283,12,39,1441
"LA UNION","CONCHAGUA",7424,1119,29,61,4507
"LA UNION","EL SAUCE",1249,155,4,13,1574
"LA UNION","LISLIQUE",1427,184,8,25,2043
"LA UNION","ANAMOROS",2919,339,14,34,2685
"LA UNION","SANTA ROSA DE LIMA",6896,1018,19,49,5220
"LA UNION","BOLIVAR",832,237,6,9,835
"LA UNION","YAYANTIQUE",1451,328,10,25,706
"LA UNION","EL CARMEN",2757,592,5,22,1428
"LA UNION","SAN ALEJO",4044,378,16,24,2322
"LA UNION","SAN JOSE LAS FUENTES",506,134,5,7,462
"LA UNION","CONCEPCION DE ORIENTE",1221,48,7,20,1556
"LA UNION","LA UNION",7607,1489,29,80,4695
"LA UNION","YUCUAIQUIN",1683,90,3,7,1453
"LA UNION","MEANGUERA DEL GOLFO",249,109,1,3,578
"LA UNION","INTIPUCA",1522,118,7,13,859
"LA PAZ","SAN EMIGDIO",567,134,3,2,694
"LA PAZ","CUYULTITAN",1223,265,5,7,1144
"LA PAZ","SAN LUIS LA HERRADURA",4190,842,15,33,3103
"LA PAZ","SAN RAFAEL OBRAJUELO",2390,367,8,15,1472
"LA PAZ","SANTIAGO NONUALCO",8702,2158,40,80,5246
"LA PAZ","TAPALHUACA",931,133,2,1,842
"LA PAZ","SANTA MARIA OSTUMA",1086,377,8,23,1221
"LA PAZ","SAN LUIS TALPA",4631,1592,23,48,3188
"LA PAZ","SAN JUAN TEPEZONTES",699,273,10,2,803
"LA PAZ","SAN ANTONIO MASAHUAT",1038,106,3,2,1091
"LA PAZ","SAN FRANCISCO CHINAMECA",1014,344,2,8,1805
"LA PAZ","PARAISO DE OSORIO",495,289,9,6,676
"LA PAZ","ZACATECOLUCA",14640,3030,63,111,10949
"LA PAZ","SAN PEDRO MASAHUAT",6077,667,27,38,3626
"LA PAZ","SAN JUAN TALPA",1487,392,8,13,1519
"LA PAZ","EL ROSARIO",3698,606,10,25,2551
"LA PAZ","SAN MIGUEL TEPEZONTES",1329,172,4,5,1180
"LA PAZ","SAN PEDRO NONUALCO",1799,390,6,11,1774
"LA PAZ","SAN JUAN NONUALCO",4140,557,12,16,2702
"LA PAZ","MERCEDES LA CEIBA",187,39,1,1,528
"LA PAZ","JERUSALEN",840,49,0,0,584
"LA PAZ","OLOCUILTA",5965,1556,21,46,5453

geocode.php

<?php
//$addresses = array($_GET['address']);
$language = (isset($_GET['language']) ? $_GET['language'] : 'es') ;
$region = (isset($_GET['region']) ? $_GET['region'] : 'sv') ;

$fin = fopen("data_towns.csv","r");
$fout = fopen("geocoded.csv","w+");


while (($row = fgetcsv($fin, 1000, ",")) !== FALSE) {

   $address = $row[1] . ', ' . $row[0];
   //print_r($row);die();

	ob_implicit_flush(true);
	ob_end_flush();


	  $url = "http://maps.googleapis.com/maps/api/geocode/json?address=". urlencode($address ) . "&sensor=false&region={$region}&language={$language}";
	  $obj = json_decode(grabber($url));
	  //$okres_obj =  g_find_type($html,'administrative_area_level_2');
	  $kraj_obj =  g_find_type($obj,'administrative_area_level_1');
	  $town_obj =  g_find_type($obj,'locality');
	  //$country_obj = g_find_type($html,'country');
	  //echo $address . ";" . $country_obj->long_name . ";" . $kraj_obj->long_name . ";" . $okres_obj->long_name . "<br/>\n";
	  
	  $out = $row;
	  $out['lat'] = $obj->results[0]->geometry->location->lat;
	  $out['lng'] = $obj->results[0]->geometry->location->lng;
	  $out['town'] = $town_obj->long_name;
	  $out['kraj'] = $kraj_obj->long_name;
	  
	  fputcsv($fout,$out);
	  echo $row[0].$row[1]."<br/>\t";
	  ob_flush();flush();
	  sleep(1);
//die();

}

/**
* extracts given area type from google geocoing response object
* @object the google response object (json_decode from json)
* @param type type of the area
* 
* @return object containg of the (1st) type in the object
*
* example: g_find_type('locality')
*/
function g_find_type($object, $type) {
  $array = $object->results[0]->address_components;
  foreach ((array) $array as $component) {
    foreach ((array) $component->types as $t) {
      if ($t == $type) {
        return $component;
      }
    }
  }
}

/**
* curl downloader, with possible options
* @return html
* example:
* grabber('http://example.com',array(CURLOPT_TIMEOUT,180));
*/
function grabber($url,$options = array())
{
    $ch = curl_init ();
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
    if (count($options) > 0) {
      foreach($options as $option) {
        curl_setopt ($ch, $option[0], $option[1]);
      }
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0); //this option is important here!!
    $out = curl_exec($ch);
    curl_close ($ch);
    return $out;
}

geocoded_adj.csv

province	town	Salvador Sánchez Cerén (FMLN)	Elias Antonio Saca Gonzalez (Unidad)	José Oscar Morales Lemus (FPS)	René Alcidez Rodriguez Hurtado (PSP)	Norman Noel Quijano González (ARENA)	lat	lng	town	province
SAN MIGUEL	SAN MIGUEL	52942	10922	189	405	24013	13.47321	-88.176987	San Miguel	San Miguel
SAN MIGUEL	SAN RAFAEL ORIENTE	3510	665	7	32	1664	13.376918	-88.352604	San Rafael Oriente	San Miguel
SAN MIGUEL	SAN JORGE	2309	175	5	8	2207	13.41337	-88.339539	San Jorge	San Miguel
SAN MIGUEL	SAN ANTONIO DEL MOSCO	1397	36	2	5	1330	13.389411	-88.028991	San Antonio	San Miguel
SAN MIGUEL	LOLOTIQUE	3887	809	13	15	1169	13.5570718	-88.3494328	Lolotique	San Miguel
SAN MIGUEL	CHIRILAGUA	4413	379	10	30	2841	13.220278	-88.138611	Chirilagua	San Miguel
SAN MIGUEL	NUEVA GUADALUPE	2351	360	7	12	703	13.5333333	-88.35	Nueva Guadalupe	San Miguel
SAN MIGUEL	SAN LUIS DE LA REINA	1192	67	1	5	1022	13.812131	-88.346671	San Luis de la Reina	San Miguel
SAN MIGUEL	EL TRANSITO	4219	359	8	21	3373	13.35	-88.35	El Transito	San Miguel
SAN MIGUEL	CIUDAD BARRIOS	5577	694	13	49	3214	13.762926	-88.270163	Ciudad Barrios	San Miguel
SAN MIGUEL	SAN GERARDO	1506	41	1	5	1369	13.808486	-88.409066	San Gerardo	San Miguel
SAN MIGUEL	CHINAMECA	5227	616	17	35	4133	13.5122699	-88.3506468	Chinameca	San Miguel
SAN MIGUEL	MONCAGUA	6254	709	7	24	2284	13.529204	-88.255435	Moncagua	San Miguel
SAN MIGUEL	COMACARAN	1137	72	1	5	540	13.529289	-88.066954	Comacarán	San Miguel
SAN MIGUEL	ULUAZAPA	888	97	0	3	542	13.50245	-88.069847	Uluazapa	San Miguel
SAN MIGUEL	CHAPELTIQUE	2808	174	7	26	1056	13.63601	-88.26358	Chapeltique	San Miguel
SAN MIGUEL	SESORI	2261	227	10	23	1159	13.71702	-88.36026	Sesori	San Miguel
SAN MIGUEL	NUEVO EDEN DE SAN JUAN	852	75	2	4	725	13.8242243	-88.485189	Nuevo Edén de San Juan	San Miguel
SAN MIGUEL	QUELEPA	1732	126	0	7	956	13.5215874	-88.2327303	Quelepa	San Miguel
SAN MIGUEL	CAROLINA	1867	79	2	10	1636	13.8462374	-88.3057061	Carolina	San Miguel
LA LIBERTAD	ZARAGOZA	4665	1570	38	33	4131	13.589754	-89.288771	Zaragoza	La Libertad
LA LIBERTAD	CIUDAD ARCE	12399	3380	86	101	8837	13.8536285	-89.4535357	Ciudad Arce	La Libertad
LA LIBERTAD	LA LIBERTAD	9487	2174	42	99	6205	13.4856	-89.325737	La Libertad	La Libertad
LA LIBERTAD	HUIZUCAR	2324	472	15	14	2398	13.5902564	-89.2360234	Huizúcar	La Libertad
LA LIBERTAD	QUEZALTEPEQUE	13598	3062	86	102	8192	13.8333333	-89.2666667	Quezaltepeque	La Libertad
LA LIBERTAD	TALNIQUE	1299	436	5	20	1224	13.6666865	-89.4085891	Talnique	La Libertad
LA LIBERTAD	COMASAGUA	2643	375	7	31	2168	13.6369401	-89.3760304	Comasagua	La Libertad
LA LIBERTAD	SACACOYO	2997	620	12	37	3080	13.7326971	-89.470673	Sacacoyo	La Libertad
LA LIBERTAD	SANTA TECLA	30094	8136	308	300	33687	13.6833333	-89.2833333	Nueva San Salvador	La Libertad
LA LIBERTAD	SAN JUAN OPICO	14891	3865	95	156	10548	13.874636	-89.359353	San Juan Opico	La Libertad
LA LIBERTAD	COLON	19888	6191	171	194	18106	13.707793	-89.3487791	Colón	La Libertad
LA LIBERTAD	ANTIGUO CUSCATLAN	6647	1990	56	78	13431	13.6640938	-89.2514718		La Libertad
LA LIBERTAD	TAMANIQUE	2255	510	12	67	2652	13.5965323	-89.4186473	Tamanique	La Libertad
LA LIBERTAD	TEPECOYO	2480	622	17	37	1737	13.7002778	-89.4677778	Tepecoyo	La Libertad
LA LIBERTAD	SAN PABLO TACACHICO	4298	459	9	25	4025	13.97263	-89.339401	San Pablo Tacachico	La Libertad
LA LIBERTAD	SAN JOSE VILLANUEVA	3041	869	19	32	2634	13.57342	-89.2658469	San José Villanueva	La Libertad
LA LIBERTAD	JICALAPA	883	353	10	15	1521	13.569964	-89.5078768	Jicalapa	La Libertad
LA LIBERTAD	NUEVO CUSCATLAN	2382	435	10	29	2800	13.65	-89.2666667	Nuevo Cuscatlan	La Libertad
LA LIBERTAD	CHILTIUPAN	2003	257	11	8	2622	13.589497	-89.467687	Chiltiupán	La Libertad
LA LIBERTAD	JAYAQUE	2852	502	15	29	2361	13.6732694	-89.4387562	Jayaque	La Libertad
LA LIBERTAD	SAN MATIAS	1692	259	6	10	1196	13.884904	-89.315368	San Matías	La Libertad
LA LIBERTAD	TEOTEPEQUE	1470	533	12	23	2378	13.5852778	-89.5183333	Teotepeque	La Libertad
CHALATENANGO	SAN LUIS DEL CARMEN	222	81	0	4	276	13.958431	-88.970614	San Luis del Carmen	Chalatenango
CHALATENANGO	CHALATENANGO	7011	1648	22	65	6698	14.0333333	-88.9333333	Chalatenango	Chalatenango
CHALATENANGO	SAN JOSE CANCASQUE	534	55	2	3	342	13.9740684	-88.8515028	San José Cancasque	Chalatenango
CHALATENANGO	TEJUTLA	2768	736	15	26	2532	14.1696312	-89.1026858	Tejutla	Chalatenango
CHALATENANGO	LA REINA	1581	374	18	20	1725	14.1959529	-89.1503566	La Reina	Chalatenango
CHALATENANGO	ARCATAO	1043	99	0	4	387	14.0938889	-88.7494444	Arcatao	Chalatenango
CHALATENANGO	SAN FRANCISCO LEMPA	255	36	0	0	222	13.9725525	-89.0017985	San Francisco Lempa	Chalatenango
CHALATENANGO	AGUA CALIENTE	1343	525	7	31	1422	14.18652	-89.2223659	AGUA CALIENTE	Chalatenango
CHALATENANGO	LA PALMA	2742	278	3	14	2772	14.31821	-89.168297	La Palma	Chalatenango
CHALATENANGO	SANTA RITA	913	187	3	6	1050	14.1285819	-89.0047868	Santa Rita	Chalatenango
CHALATENANGO	LAS FLORES	921	10	0	1	21	14.0501734	-88.8377035	San José Las Flores	Chalatenango
CHALATENANGO	CONCEPCION QUEZALTEPEQUE	1553	226	8	8	1535	14.089184	-88.9581432	Concepción Quezaltepeque	Chalatenango
CHALATENANGO	EL CARRIZAL	748	91	2	5	507	14.1768739	-88.9204311	El Carrizal	Chalatenango
CHALATENANGO	NOMBRE DE JESUS	1426	96	2	6	676	14.0082761	-88.7289492	Nombre de Jesús	Chalatenango
CHALATENANGO	OJOS DE AGUA	631	247	4	6	772	14.1803778	-88.8922742	Ojos de Agua	Chalatenango
CHALATENANGO	SAN MIGUEL DE MERCEDES	452	578	4	7	312	14.0092855	-88.9401893	San Miguel de Mercedes	Chalatenango
CHALATENANGO	SAN FRANCISCO MORAZAN	951	144	3	2	614	14.1833333	-89.05	San Francisco Morazán	Chalatenango
CHALATENANGO	POTONICO	547	50	1	0	425	13.9655539	-88.8922742	Potonico	Chalatenango
CHALATENANGO	EL PARAISO	1880	865	7	31	1976	14.1070716	-89.0728633	El Paraíso	Chalatenango
CHALATENANGO	LA LAGUNA	813	166	4	4	1147	14.1631729	-88.9425836	La Laguna	Chalatenango
CHALATENANGO	SAN RAFAEL	847	433	7	19	844	14.1359255	-89.0251022	San Rafael	Chalatenango
CHALATENANGO	NUEVA CONCEPCION	6113	1147	23	45	6317	14.12458	-89.293171	Nueva Concepción	Chalatenango
CHALATENANGO	SAN ISIDRO LABRADOR	297	14	1	1	31	14.0095669	-88.8425038	San Isidro Labrador	Chalatenango
CHALATENANGO	AZACUALPA	296	36	0	1	323	13.9891678	-88.9856574	Azacualpa	Chalatenango
CHALATENANGO	SAN FERNANDO	505	81	0	7	564	14.3081093	-89.02331	San Fernando	Chalatenango
CHALATENANGO	COMALAPA	872	131	3	6	975	14.1378221	-88.9575449	Comalapa	Chalatenango
CHALATENANGO	SAN ANTONIO LOS RANCHOS	554	44	1	1	18	14.0061818	-88.8946713	San Antonio Los Ranchos	Chalatenango
CHALATENANGO	SAN ANTONIO DE LA CRUZ	492	63	1	3	384	14.0151198	-88.7908717	San Antonio de La Cruz	Chalatenango
CHALATENANGO	LAS VUELTAS	837	25	0	0	95	14.0939595	-88.8892777	Las Vueltas	Chalatenango
CHALATENANGO	CITALA	916	86	1	4	1287	14.3764417	-89.2146237	Citala	Chalatenango
CHALATENANGO	DULCE NOMBRE DE MARIA	946	409	8	13	1120	14.151691	-89.010685	Dulce Nombre de María	Chalatenango
CHALATENANGO	NUEVA TRINIDAD	849	44	1	1	146	14.0731548	-88.7884686	Nueva Trinidad	Chalatenango
CHALATENANGO	SAN IGNACIO	1975	125	5	8	2039	14.3384961	-89.1765517	San Ignacio	Chalatenango
USULUTAN	SANTA ELENA	3351	1267	16	25	2175	13.3797782	-88.4137279	Santa Elena	Usulután
USULUTAN	NUEVA GRANADA	1599	188	5	16	1305	13.6	-88.45	Nueva Granada	Usulután
USULUTAN	ALEGRIA	3076	369	11	17	1357	13.5073403	-88.4863991	Alegría	Usulután
USULUTAN	JUCUAPA	3956	477	15	20	3051	13.5166667	-88.3833333	Jucuapa	Usulután
USULUTAN	BERLIN	4326	739	16	41	2571	13.494353	-88.530402	Berlín	Usulután
USULUTAN	EREGUAYQUIN	1218	249	8	13	1087	13.35	-88.3833333	Ereguayquin	Usulután
USULUTAN	PUERTO EL TRIUNFO	3448	550	11	14	1984	13.2833333	-88.55	Puerto El Triunfo	Usulután
USULUTAN	JUCUARAN	2981	301	12	32	1453	13.25115	-88.244904	Jucuarán	Usulután
USULUTAN	SAN FRANCISCO JAVIER	1622	171	4	12	931	13.417486	-88.573121	San Francisco Javier	Usulután
USULUTAN	SAN BUENAVENTURA	1324	118	4	2	846	13.5399448	-88.383412	San Buenaventura	Usulután
USULUTAN	MERCEDES UMAÑA	3176	245	6	19	2130	13.5666667	-88.5	M

scraper.py

# -*- coding: utf-8 -*-

import csv
import requests
from lxml import html
import copy

outfile = open('data.csv', 'w')
outwriter = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC)

def scrape(url,level,names,domain,outwriter):
  page = requests.get(url)
  domtree = html.fromstring(page.text)
  
  if (level == 4):
    trs = domtree.xpath('//table[@id="TVOTOS"]/tbody/tr');
    trs.pop(0)
    for item in trs:
      title = item.xpath('th/@title')[0].strip()
      n = names[:]
      n.append(title.encode('utf-8','ignore'))
      tds = item.xpath('td')
      tds.pop(0)
      res = []
      #print tds
      for it in tds:
        res.append(it.xpath('text()')[0].replace(",",""))
      out = n+res
      #print out      
      outwriter.writerow(out)
      #raise Exception('wwe')
      

  else:
    ths = domtree.xpath('//table[@id="TVOTOS"]/tbody/tr/th');
    ths.pop(0)
    for item in ths:
      title = item.xpath('@title')[0].strip()
      link = item.xpath('a/@href')[0].lstrip('.').lstrip('/')
      print names
      n = names[:]
      print n
      print title
      n.append(title.encode('utf-8','ignore'))
      print n
      scrape (domain + link, level + 1, n, domain,outwriter)
     # print item
      #raise Exception('www')

#scrape("http://elecciones2014.tse.gob.sv/resultados/99/DPR999999.htm",1)

domain = "http://elecciones2014.tse.gob.sv/resultados/"
scrape("http://localhost/michal/dev/sv2014/DPR999999.htm",1,['Total nacional'],domain,outwriter)