In [1]:
import pandas as pd


class GeoDataCensal(object):
    """GeoData of the censo information. There is information of the codes,
    names, censo and geometry.

    """

    def __init__(self, data_censal, var_hierarchy):
        self._check_inputs(data_censal, var_hierarchy)
        self.data_censal = data_censal
        self.var_hierarchy = var_hierarchy
        self.levels = len(var_hierarchy['codes'])

    def _check_inputs(self, data_censal, var_hierarchy):
        assert('geometry' in var_hierarchy)
        assert('codes' in var_hierarchy)
        assert('names' in var_hierarchy)
        assert('censo' in var_hierarchy)
        assert(isinstance(var_hierarchy['geometry'], str))
        assert(isinstance(var_hierarchy['codes'], list))
        assert(isinstance(var_hierarchy['names'], list))
        assert(isinstance(var_hierarchy['censo'], list))
        assert(len(var_hierarchy['codes']) == len(var_hierarchy['names']))

    def _get_columns_level(self, level, outer=False):
        outer_cols = []
        if outer:
            outer_cols = self.outer_cols
        geo_cols = [self.var_hierarchy['geometry']]
        if level == 0:
            columns = outer_cols+geo_cols
        elif level > self.levels or level < 0:
            msg = "Not correct 'level' input."
            raise IndexError(msg)
        else:
            names_cols = self.var_hierarchy['names'][self.levels-level:]
            codes_cols = self.var_hierarchy['codes'][self.levels-level:]
            columns = list(set(outer_cols+names_cols+codes_cols+geo_cols))
        return columns

    def _filter4level(self, level, outer=False):
        return self.data_censal[self._get_columns_level(level, outer)]

    @classmethod
    def _data_reduction(cls, data_censo, var_hierarchy):
        return cls(data_censo, var_hierarchy)

    @property
    def inner_cols(self):
        inner_cols = [var_hierarchy['geometry']]
        inner_cols += var_hierarchy['codes']
        inner_cols += var_hierarchy['names']
        inner_cols += var_hierarchy['censo']
        inner_cols = list(set(inner_cols))
        return inner_cols

    @property
    def outer_cols(self):
        outer_cols = [col for col in self.data_censal
                      if col not in self.inner_cols]
        return outer_cols

    def _filter_censo_by_level(self, level, outer=False):
        data_censo = self._filter4level(level, outer)
        pivot_lvl_col = self.var_hierarchy['codes'][self.levels-level]
        data = data_censo.dissolve(by=pivot_lvl_col).reset_index(level=0)
        if self.var_hierarchy['censo']:
            data_censal = self.data_censal[[pivot_lvl_col]]
            vars_censo = self.var_hierarchy['censo']
            data_censal[vars_censo] = self.data_censal[vars_censo]
            data_cns = data_censal.dissolve(by=pivot_lvl_col,
                                            aggfunc="sum")
            data_cns = data_cns.reset_index(level=0)
            data = pd.merge(data, data_cns, on=pivot_lvl_col)
        return data

    def _filter_hierharchy_by_level(self, level):
        var_hierarchy = {}
        var_hierarchy['geometry'] = self.var_hierarchy['geometry']
        var_hierarchy['censo'] = self.var_hierarchy['censo']
        pivot_lvl = self.levels-level
        var_hierarchy['codes'] = self.var_hierarchy['codes'][pivot_lvl:]
        var_hierarchy['names'] = self.var_hierarchy['names'][pivot_lvl:]
        return var_hierarchy

    def filter_data_by_level(self, level, outer=False, raw=False):
        data_censo = self._filter_censo_by_level(level, outer)
        var_hierarchy = self._filter_hierharchy_by_level(level)
        if raw:
            return data_censo, var_hierarchy
        else:
            return self._data_reduction(data_censo, var_hierarchy)


class Votations(object):
    """Votations data. The data of the results of votes by party in columns.
    Each columns has a party and some codes. The result is the votes.

    """

    def __init__(self, votes, var_info, collapse_ways):
        self._check_inputs(votes, var_info, collapse_ways)
        self.collapses = collapse_ways
        self.var_info = var_info
        self.votes = votes

    def _check_inputs(self, votes, var_info, collapse_ways):
        assert('codes' in var_info)
        assert('parties' in var_info)
        assert(isinstance(var_info['parties'], list))
        assert(isinstance(var_info['codes'], list))
        assert(isinstance(collapse_ways, dict))
        for w, ps in collapse_ways.items():
            assert(all([p in var_info['parties'] for p in ps]))

    def get_results(self, code, collapse_way=None):
        if collapse_way is None:
            collapsing = dict(zip(self.var_info['parties'],
                                  self.var_info['parties']))
        else:
            collapsing = self.collapses[collapse_way]
        votes_collapse = self.votes[[code]]
        for group, parties in collapsing.items():
            votes_collapse[group] = self.votes[parties].sum(1)
        votes = votes_collapse.dissolve(by=code, aggfunc='sum')
        votes = votes.reset_index(level=0)
        return votes

In [2]:
import os
import numpy as np
import pandas as pd
import geopandas as gpd
import folium

import matplotlib
%matplotlib inline

In [3]:
from splitters import Splitters
from parsing_utils import parse_eleccions_2015_csv, collapse_votes, collapse_info_mesas, left_filter_function
from geoplotting import results_map

In [4]:
file_geojson = '/home/tono/code/Eleccions2017Cat/data/trio_llobregat_2016.geojson'
data_censo = gpd.read_file(file_geojson)

In [5]:
votos_2017_folder = '/home/tono/code/Eleccions2017Cat/data/A20171_ME'
votos_2017_info = os.path.join(votos_2017_folder, '09-meses-info.csv')
votos_2017_vots = os.path.join(votos_2017_folder, '09-meses-vots.csv')
rawdata2017_info = pd.read_csv(votos_2017_info)
rawdata2017_vots = pd.read_csv(votos_2017_vots)

In [6]:
rawdata2017_info


Out[6]:
Codi circumscripci� Codi municipi Nom municipi Districte Secci� Mesa Cens electoral Votants % votants Abstenci� ... Vots nuls % vots nuls Vots en blanc % vots en blanc Vots a candidatures % vots a candidatures Vots v�lids % vots v�lids Codi comarca Nom comarca
0 8 1 Abrera ... 1 1 A 369.0 316.0 085,64 53 ... 0 000,00 0 000,00 316.0 100,00 316.0 100,00 11 Baix Llobregat
1 8 1 Abrera ... 1 1 B 366.0 318.0 086,89 48 ... 2 000,63 3 000,94 313.0 098,43 316.0 099,37 11 Baix Llobregat
2 8 1 Abrera ... 1 1 C 407.0 360.0 088,45 47 ... 2 000,56 1 000,28 357.0 099,17 358.0 099,44 11 Baix Llobregat
3 8 1 Abrera ... 1 2 A 420.0 366.0 087,14 54 ... 1 000,27 2 000,55 363.0 099,18 365.0 099,73 11 Baix Llobregat
4 8 1 Abrera ... 1 2 B 412.0 350.0 084,95 62 ... 0 000,00 3 000,86 347.0 099,14 350.0 100,00 11 Baix Llobregat
5 8 1 Abrera ... 1 2 C 432.0 360.0 083,33 72 ... 1 000,28 1 000,28 358.0 099,44 359.0 099,72 11 Baix Llobregat
6 8 1 Abrera ... 1 3 U 570.0 508.0 089,12 62 ... 1 000,20 2 000,39 505.0 099,41 507.0 099,80 11 Baix Llobregat
7 8 1 Abrera ... 1 4 A 832.0 728.0 087,50 104 ... 4 000,55 2 000,27 722.0 099,18 724.0 099,45 11 Baix Llobregat
8 8 1 Abrera ... 1 4 B 520.0 463.0 089,04 57 ... 2 000,43 4 000,86 457.0 098,70 461.0 099,57 11 Baix Llobregat
9 8 1 Abrera ... 1 5 A 671.0 546.0 081,37 125 ... 3 000,55 5 000,92 538.0 098,53 543.0 099,45 11 Baix Llobregat
10 8 1 Abrera ... 1 5 B 718.0 610.0 084,96 108 ... 1 000,16 3 000,49 606.0 099,34 609.0 099,84 11 Baix Llobregat
11 8 1 Abrera ... 1 7 A 520.0 431.0 082,88 89 ... 2 000,46 1 000,23 428.0 099,30 429.0 099,54 11 Baix Llobregat
12 8 1 Abrera ... 1 7 B 616.0 511.0 082,95 105 ... 1 000,20 3 000,59 507.0 099,22 510.0 099,80 11 Baix Llobregat
13 8 1 Abrera ... 1 7 C 713.0 597.0 083,73 116 ... 2 000,34 3 000,50 592.0 099,16 595.0 099,66 11 Baix Llobregat
14 8 1 Abrera ... 1 8 A 640.0 553.0 086,41 87 ... 2 000,36 3 000,54 548.0 099,10 551.0 099,64 11 Baix Llobregat
15 8 1 Abrera ... 1 8 B 761.0 678.0 089,09 83 ... 2 000,29 2 000,29 674.0 099,41 676.0 099,71 11 Baix Llobregat
16 8 2 Aguilar de Segarra ... 1 1 U 215.0 189.0 087,91 26 ... 4 002,12 0 000,00 185.0 097,88 185.0 097,88 7 Bages
17 8 3 Alella ... 1 1 A 663.0 571.0 086,12 92 ... 3 000,53 4 000,70 564.0 098,77 568.0 099,47 21 Maresme
18 8 3 Alella ... 1 1 B 640.0 543.0 084,84 97 ... 2 000,37 1 000,18 540.0 099,45 541.0 099,63 21 Maresme
19 8 3 Alella ... 1 1 C 681.0 578.0 084,88 103 ... 3 000,52 3 000,52 572.0 098,96 575.0 099,48 21 Maresme
20 8 3 Alella ... 1 2 A 829.0 721.0 086,97 108 ... 0 000,00 0 000,00 721.0 100,00 721.0 100,00 21 Maresme
21 8 3 Alella ... 1 2 B 977.0 845.0 086,49 132 ... 3 000,36 8 000,95 834.0 098,70 842.0 099,64 21 Maresme
22 8 3 Alella ... 1 3 A 811.0 690.0 085,08 121 ... 1 000,14 4 000,58 685.0 099,28 689.0 099,86 21 Maresme
23 8 3 Alella ... 1 3 B 886.0 747.0 084,31 139 ... 1 000,13 1 000,13 745.0 099,73 746.0 099,87 21 Maresme
24 8 3 Alella ... 1 4 A 771.0 638.0 082,75 133 ... 3 000,47 6 000,94 629.0 098,59 635.0 099,53 21 Maresme
25 8 3 Alella ... 1 4 B 884.0 730.0 082,58 154 ... 3 000,41 2 000,27 725.0 099,32 727.0 099,59 21 Maresme
26 8 4 Alpens ... 1 1 U 212.0 195.0 091,98 17 ... 0 000,00 2 001,03 193.0 098,97 195.0 100,00 24 Osona
27 8 5 Ametlla del Vall�s, l' ... 1 1 A 569.0 483.0 084,89 86 ... 1 000,21 1 000,21 481.0 099,59 482.0 099,79 41 Vall�s Oriental
28 8 5 Ametlla del Vall�s, l' ... 1 1 B 653.0 528.0 080,86 125 ... 0 000,00 1 000,19 527.0 099,81 528.0 100,00 41 Vall�s Oriental
29 8 5 Ametlla del Vall�s, l' ... 1 1 C 548.0 463.0 084,49 85 ... 1 000,22 0 000,00 462.0 099,78 462.0 099,78 41 Vall�s Oriental
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
8217 43 905 Salou ... 1 4 B 504.0 353.0 070,04 151 ... 0 000,00 0 000,00 353.0 100,00 353.0 100,00 36 Tarragon�s
8218 43 905 Salou ... 1 5 U 820.0 641.0 078,17 179 ... 1 000,16 2 000,31 638.0 099,53 640.0 099,84 36 Tarragon�s
8219 43 905 Salou ... 1 6 A 559.0 345.0 061,72 214 ... 0 000,00 2 000,58 343.0 099,42 345.0 100,00 36 Tarragon�s
8220 43 905 Salou ... 1 6 B 547.0 348.0 063,62 199 ... 3 000,86 1 000,29 344.0 098,85 345.0 099,14 36 Tarragon�s
8221 43 905 Salou ... 1 6 C 637.0 387.0 060,75 250 ... 2 000,52 2 000,52 383.0 098,97 385.0 099,48 36 Tarragon�s
8222 43 905 Salou ... 1 7 A 516.0 374.0 072,48 142 ... 3 000,80 0 000,00 371.0 099,20 371.0 099,20 36 Tarragon�s
8223 43 905 Salou ... 1 7 B 621.0 443.0 071,34 178 ... 0 000,00 0 000,00 443.0 100,00 443.0 100,00 36 Tarragon�s
8224 43 905 Salou ... 1 7 C 572.0 406.0 070,98 166 ... 2 000,49 1 000,25 403.0 099,26 404.0 099,51 36 Tarragon�s
8225 43 905 Salou ... 1 8 A 606.0 470.0 077,56 136 ... 1 000,21 1 000,21 468.0 099,57 469.0 099,79 36 Tarragon�s
8226 43 905 Salou ... 1 8 B 546.0 436.0 079,85 110 ... 3 000,69 1 000,23 432.0 099,08 433.0 099,31 36 Tarragon�s
8227 43 905 Salou ... 1 9 A 483.0 389.0 080,54 94 ... 1 000,26 0 000,00 388.0 099,74 388.0 099,74 36 Tarragon�s
8228 43 905 Salou ... 1 9 B 365.0 292.0 080,00 73 ... 0 000,00 1 000,34 291.0 099,66 292.0 100,00 36 Tarragon�s
8229 43 905 Salou ... 1 10 A 685.0 567.0 082,77 118 ... 0 000,00 3 000,53 564.0 099,47 567.0 100,00 36 Tarragon�s
8230 43 905 Salou ... 1 10 B 701.0 577.0 082,31 124 ... 2 000,35 0 000,00 575.0 099,65 575.0 099,65 36 Tarragon�s
8231 43 905 Salou ... 1 11 A 649.0 565.0 087,06 84 ... 1 000,18 1 000,18 563.0 099,65 564.0 099,82 36 Tarragon�s
8232 43 905 Salou ... 1 11 B 600.0 499.0 083,17 101 ... 0 000,00 1 000,20 498.0 099,80 499.0 100,00 36 Tarragon�s
8233 43 905 Salou ... 1 12 A 460.0 378.0 082,17 82 ... 1 000,26 0 000,00 377.0 099,74 377.0 099,74 36 Tarragon�s
8234 43 905 Salou ... 1 12 B 517.0 402.0 077,76 115 ... 3 000,75 1 000,25 398.0 099,00 399.0 099,25 36 Tarragon�s
8235 43 906 Ampolla, l' ... 1 1 A 595.0 489.0 082,18 106 ... 3 000,61 2 000,41 484.0 098,98 486.0 099,39 9 Baix Ebre
8236 43 906 Ampolla, l' ... 1 1 B 583.0 467.0 080,10 116 ... 2 000,43 1 000,21 464.0 099,36 465.0 099,57 9 Baix Ebre
8237 43 906 Ampolla, l' ... 1 2 A 518.0 422.0 081,47 96 ... 2 000,47 1 000,24 419.0 099,29 420.0 099,53 9 Baix Ebre
8238 43 906 Ampolla, l' ... 1 2 B 435.0 356.0 081,84 79 ... 2 000,56 0 000,00 354.0 099,44 354.0 099,44 9 Baix Ebre
8239 43 907 Canonja, la ... 1 1 A 553.0 461.0 083,36 92 ... 0 000,00 5 001,08 456.0 098,92 461.0 100,00 36 Tarragon�s
8240 43 907 Canonja, la ... 1 1 B 634.0 537.0 084,70 97 ... 1 000,19 0 000,00 536.0 099,81 536.0 099,81 36 Tarragon�s
8241 43 907 Canonja, la ... 1 2 A 569.0 487.0 085,59 82 ... 2 000,41 2 000,41 483.0 099,18 485.0 099,59 36 Tarragon�s
8242 43 907 Canonja, la ... 1 2 B 553.0 457.0 082,64 96 ... 1 000,22 1 000,22 455.0 099,56 456.0 099,78 36 Tarragon�s
8243 43 907 Canonja, la ... 1 3 A 454.0 383.0 084,36 71 ... 0 000,00 0 000,00 383.0 100,00 383.0 100,00 36 Tarragon�s
8244 43 907 Canonja, la ... 1 3 B 469.0 380.0 081,02 89 ... 1 000,26 2 000,53 377.0 099,21 379.0 099,74 36 Tarragon�s
8245 43 907 Canonja, la ... 1 4 A 572.0 447.0 078,15 125 ... 2 000,45 1 000,22 444.0 099,33 445.0 099,55 36 Tarragon�s
8246 43 907 Canonja, la ... 1 4 B 562.0 451.0 080,25 111 ... 1 000,22 0 000,00 450.0 099,78 450.0 099,78 36 Tarragon�s

8247 rows × 21 columns


In [7]:
def create_cusec_from_data(data, prov_col, muni_col, dist_col, sec_col):
    def transform_int_codes_col(series, n):
        return series.apply(lambda x: str(int(x)).zfill(n))

    if type(prov_col) == str:
        provs = data[prov_col]
    else:
        provs = data.iloc[:, int(prov_col)]
    provs = transform_int_codes_col(provs, 2)
    if type(prov_col) == str:
        munis = data[muni_col]
    else:
        munis = data.iloc[:, int(muni_col)]
    munis = transform_int_codes_col(munis, 3)
    if type(dist_col) == str:
        distr = data[dist_col]
    else:
        distr = data.iloc[:, int(dist_col)]
    distr = transform_int_codes_col(distr, 2)
    if type(sec_col) == str:
        seccs = data[sec_col]
    else:
        seccs = data.iloc[:, int(sec_col)]
    seccs = transform_int_codes_col(seccs, 3)
    cusec = provs+munis+distr+seccs
    return cusec

In [8]:
cusec = create_cusec_from_data(rawdata2017_info, 0, 1, 3, 4)

In [9]:
rawdata2017_info['CUSEC'] = cusec
rawdata2017_vots['CUSEC'] = cusec

In [10]:
## Filter trio
codes_trio = {'Cornella': '08073',
              'Esplugues': '08077',
              'Hospitalet': '08101'}
def cmun_filter(data, cumuns):
    return data.loc[data.CUSEC.apply(lambda x: x[:5] in cumuns)]
trio_data2017_info = cmun_filter(rawdata2017_info, codes_trio.values())
trio_data2017_vots = cmun_filter(rawdata2017_vots, codes_trio.values())

In [11]:
votos2017_trio_ll, codes_not_in_censo, codes_not_votos2017 =\
    left_filter_function(data_censo, trio_data2017_vots, filter_code='CUSEC')

codes_not_in_censo, codes_not_votos2017


parsing_utils.py:82: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  to_filter_data[filter_code] = to_filter_data[filter_code].apply(to_str)
/usr/local/lib/python2.7/dist-packages/pandas/indexes/base.py:2286: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  indexer = self._engine.get_indexer(target._values)
Out[11]:
(set(), set())

In [12]:
trio_data2017_vots_c = pd.pivot_table(trio_data2017_vots, index='CUSEC', aggfunc='sum')
trio_data2017_vots_c.head()


Out[12]:
Candidatura d'Unitat Popular (CUP) Catalunya en Com�-Podem (CatCom�-Podem) Ciutadans-Partido de la Ciudadan�a (C's) Di�leg Republic� (Candidatura retirada) (DI�LEG (C. RETIRADA)) Esquerra Republicana-Catalunya S� (ERC-CatS�) Junts per Catalunya (JUNTSxCAT) Partit Animalista contra el Maltractament Animal (PACMA) Partit Popular / Partido Popular (PP) Partit dels Socialistes de Catalunya (PSC-PSOE) (PSC) Per un M�n M�s Just (PU M+J) Recortes Cero-Grupo Verde (RECORTES CERO-GRUPO VERDE)
CUSEC
0807301001 68 172 402 0 317 192 17 55 286 0 4
0807301002 60 147 324 0 212 79 6 52 248 0 3
0807301003 31 113 255 0 129 52 9 44 229 0 6
0807301004 40 162 417 0 249 83 11 36 315 0 4
0807301005 39 77 228 0 146 61 12 26 134 0 4

In [13]:
d = trio_data2017_vots_c.iloc[:, [0, 4, 5]].sum(1)/trio_data2017_vots_c.sum(1)
proind = pd.DataFrame(d, columns=['ProInd'])
#proind = pd.concat([pd.DataFrame(trio_data2017_vots_c.index), proind], axis=1)
proind.reset_index(level=0, inplace=True)
logi = proind['CUSEC'].apply(lambda x: x not in ['0810103026', '0810103027'])
proind = proind[logi]
proind


Out[13]:
CUSEC ProInd
0 0807301001 0.381362
1 0807301002 0.310345
2 0807301003 0.244240
3 0807301004 0.282460
4 0807301005 0.338377
5 0807301006 0.458000
6 0807301007 0.449848
7 0807301008 0.344234
8 0807301009 0.381026
9 0807301010 0.327492
10 0807301011 0.307467
11 0807301012 0.276596
12 0807301013 0.350000
13 0807301014 0.371362
14 0807302001 0.300947
15 0807302002 0.301875
16 0807303001 0.205761
17 0807303002 0.179817
18 0807303003 0.161458
19 0807303004 0.277339
20 0807303005 0.263293
21 0807303006 0.299669
22 0807303007 0.298357
23 0807303008 0.206116
24 0807303009 0.116838
25 0807304001 0.193103
26 0807304002 0.202198
27 0807304003 0.257261
28 0807304004 0.188034
29 0807304005 0.095588
... ... ...
261 0810105035 0.129179
262 0810105037 0.206349
263 0810105038 0.258065
264 0810106001 0.163336
265 0810106002 0.169896
266 0810106005 0.161972
267 0810106006 0.199241
268 0810106007 0.155323
269 0810106008 0.228316
270 0810106009 0.122153
271 0810106010 0.189560
272 0810106011 0.222338
273 0810106012 0.155887
274 0810106013 0.180398
275 0810106014 0.157556
276 0810106015 0.131474
277 0810106016 0.213978
278 0810106017 0.172174
279 0810106018 0.239899
280 0810106019 0.170702
281 0810106021 0.161683
282 0810106022 0.178908
283 0810106023 0.132159
284 0810106024 0.156832
285 0810106025 0.148681
286 0810106026 0.174603
287 0810106027 0.152276
288 0810106030 0.190661
289 0810106031 0.144560
290 0810106032 0.198077

289 rows × 2 columns


In [14]:
results_map([41.37, 2.1], 13, data_censo, proind, 'CUSEC', 'ProInd')


Out[14]:

In [15]:
data_censo


Out[15]:
MUNICIPI DISTRICTE SECCIO MUNDISSEC CUSEC geometry
0 080734 01 001 08073401001 0807301001 POLYGON ((2.074376083999041 41.35369666126039,...
1 080734 01 002 08073401002 0807301002 POLYGON ((2.070261628641537 41.35732904687536,...
2 080734 01 003 08073401003 0807301003 POLYGON ((2.074805573469447 41.35164380484778,...
3 080734 01 004 08073401004 0807301004 POLYGON ((2.072724928366699 41.3513274787128, ...
4 080734 01 005 08073401005 0807301005 POLYGON ((2.073997296246109 41.35151865113824,...
5 080734 01 006 08073401006 0807301006 POLYGON ((2.072702814039318 41.35172865467292,...
6 080734 01 007 08073401007 0807301007 POLYGON ((2.070900054437468 41.35258190627427,...
7 080734 01 008 08073401008 0807301008 POLYGON ((2.067388960109325 41.35394832544948,...
8 080734 01 009 08073401009 0807301009 POLYGON ((2.070671214546052 41.35602778890644,...
9 080734 01 010 08073401010 0807301010 POLYGON ((2.074062295279431 41.35262644157508,...
10 080734 01 011 08073401011 0807301011 POLYGON ((2.073997296246109 41.35151865113824,...
11 080734 01 012 08073401012 0807301012 POLYGON ((2.080510471200091 41.34677756119338,...
12 080734 01 013 08073401013 0807301013 POLYGON ((2.070582963583168 41.35151733864375,...
13 080734 01 014 08073401014 0807301014 POLYGON ((2.067958397713908 41.35429837489141,...
14 080734 02 001 08073402001 0807302001 POLYGON ((2.094294925711282 41.35879071186072,...
15 080734 02 002 08073402002 0807302002 POLYGON ((2.098400110035639 41.35410799044767,...
16 080734 03 001 08073403001 0807303001 POLYGON ((2.076183769528664 41.36478818308549,...
17 080734 03 002 08073403002 0807303002 POLYGON ((2.073861442181892 41.36600109439973,...
18 080734 03 003 08073403003 0807303003 POLYGON ((2.073495331027741 41.36483511592658,...
19 080734 03 004 08073403004 0807303004 POLYGON ((2.070857621934107 41.35740476866517,...
20 080734 03 005 08073403005 0807303005 POLYGON ((2.070526591964173 41.36457743094437,...
21 080734 03 006 08073403006 0807303006 POLYGON ((2.075607367783372 41.3642000815744, ...
22 080734 03 007 08073403007 0807303007 POLYGON ((2.073659338389837 41.3622124123322, ...
23 080734 03 008 08073403008 0807303008 POLYGON ((2.063618554263297 41.35896688755322,...
24 080734 03 009 08073403009 0807303009 POLYGON ((2.06047739048646 41.36188900216512, ...
25 080734 04 001 08073404001 0807304001 POLYGON ((2.074250038871733 41.35717815473097,...
26 080734 04 002 08073404002 0807304002 POLYGON ((2.074617603038462 41.35917661577171,...
27 080734 04 003 08073404003 0807304003 POLYGON ((2.074189308217077 41.3596919438631, ...
28 080734 04 004 08073404004 0807304004 POLYGON ((2.07911300968205 41.35686640052747, ...
29 080734 04 005 08073404005 0807304005 POLYGON ((2.077768031970807 41.35844608705343,...
... ... ... ... ... ... ...
261 081017 05 038 08101705038 0810105038 POLYGON ((2.105207684847561 41.3742247796341, ...
262 081017 06 001 08101706001 0810106001 POLYGON ((2.105423869517075 41.35182156910677,...
263 081017 06 002 08101706002 0810106002 POLYGON ((2.106820378292944 41.35097948188489,...
264 081017 06 005 08101706005 0810106005 POLYGON ((2.108936076658908 41.34958583323694,...
265 081017 06 006 08101706006 0810106006 POLYGON ((2.108337597389702 41.34755946005914,...
266 081017 06 007 08101706007 0810106007 POLYGON ((2.10921838674416 41.34762172254282, ...
267 081017 06 008 08101706008 0810106008 POLYGON ((2.117127420045707 41.35458573429237,...
268 081017 06 009 08101706009 0810106009 POLYGON ((2.1128142651199 41.35535535900842, 2...
269 081017 06 010 08101706010 0810106010 POLYGON ((2.115564603560981 41.35543223305386,...
270 081017 06 011 08101706011 0810106011 POLYGON ((2.115682018672178 41.35656007348756,...
271 081017 06 012 08101706012 0810106012 POLYGON ((2.115564603560981 41.35543223305386,...
272 081017 06 013 08101706013 0810106013 POLYGON ((2.11480301905045 41.35333373298447, ...
273 081017 06 014 08101706014 0810106014 POLYGON ((2.11512745242036 41.35117892219565, ...
274 081017 06 015 08101706015 0810106015 POLYGON ((2.11512745242036 41.35117892219565, ...
275 081017 06 017 08101706017 0810106017 POLYGON ((2.116325900538972 41.35364210407137,...
276 081017 06 018 08101706018 0810106018 POLYGON ((2.109760720535018 41.35220327931114,...
277 081017 06 019 08101706019 0810106019 POLYGON ((2.112768323485412 41.3478221653649, ...
278 081017 06 021 08101706021 0810106021 POLYGON ((2.107583798792277 41.35298710004989,...
279 081017 06 022 08101706022 0810106022 POLYGON ((2.118586311842112 41.35700437888018,...
280 081017 06 023 08101706023 0810106023 POLYGON ((2.111914437722314 41.35512293528987,...
281 081017 06 024 08101706024 0810106024 POLYGON ((2.112646513768863 41.35486757275896,...
282 081017 06 025 08101706025 0810106025 POLYGON ((2.111450142829165 41.35265952973771,...
283 081017 06 026 08101706026 0810106026 POLYGON ((2.118475855977079 41.3518282556807, ...
284 081017 06 027 08101706027 0810106027 POLYGON ((2.112940063913089 41.3505453300073, ...
285 081017 06 030 08101706030 0810106030 POLYGON ((2.113409619785083 41.3532756466263, ...
286 081017 06 031 08101706031 0810106031 POLYGON ((2.113323941116168 41.34952808955637,...
287 081017 06 032 08101706032 0810106032 POLYGON ((2.117317133068786 41.35705267389108,...
288 081017 06 016 08101706016 0810106016 POLYGON ((2.117806742834566 41.36089887837879,...
289 081017 03 026 08101703026 0810103026 POLYGON ((2.1252206371642 41.35690485667744, 2...
290 081017 03 023 08101703023 0810103023 POLYGON ((2.126163236535201 41.35945038666564,...

291 rows × 6 columns


In [ ]:


In [ ]: