Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

Estimativa de efetivo para PMMT nas eleições de 2018

Project: Pesquisa
Views: 2364
Kernel: Python 3 (Ubuntu Linux)
from scipy.cluster.hierarchy import dendrogram, linkage, fcluster from scipy.spatial.distance import pdist, squareform from matplotlib import pyplot as plt from geopy.distance import vincenty import geopy import numpy as np import pandas as pd max_d = 2 # Distância máxima de 2km
def calcula_distancias(locs_1, locs_2): n_linhas_1 = locs_1.shape[0] n_linhas_2 = locs_2.shape[0] dists = np.empty((n_linhas_1, n_linhas_2)) for i in range(n_linhas_1): for j in range(n_linhas_2): dists[i, j] = geopy.distance.vincenty(locs_1[i], locs_2[j]).km return dists
locais = pd.read_excel('Planilha para distribuicao do efetivo 5.0.xlsx', sheet_name='dados') locais[:5]
longitude latitude cod_localidade_tse nom_localidade nom_bairro num_local nom_local des_endereco codigo lqtd_secoes lqtd_aptos indigenas crimes_eleitorais boca_de_urna roubo furto desacato desobediencia CV ind_cid
0 -61.504226 -10.870787 89960 RONDOLÂNDIA CENTRO 1015 ESCOLA ESTADUAL OLAVO BILAC RUA MATHILDE KLEMS, S/N 61899601015 10 2198 0 0 0 0 2 1 0 0 0
1 -60.941759 -10.475339 89960 RONDOLÂNDIA ZONA RURAL 1066 ESCOLA ZAWA KAREY PANGYJY ALDEIA INDÍGENA ZORÓ 61899601066 1 267 267 0 0 0 0 0 0 0 0
2 -60.180703 -14.107886 90867 NOVA LACERDA GLEBA SANTA AMÉLIA 1040 ESCOLA MUNICIPAL VALE DO GUAPORÉ COMUNIDADE SANTA AMÉLIA 61908671040 1 68 0 0 0 0 0 0 0 0 0
3 -59.967301 -15.014093 91090 VILA BELA DA SANTÍSSIMA TRINDADE JARDIM AEROPORTO 1341 CRECHE AVIAOZINHO AVENIDA MARTIMIANO RIBEIRO DA FONSECA, S/N 25910901341 1 342 0 0 1 0 13 0 1 0 0
4 -59.950224 -15.003089 91090 VILA BELA DA SANTÍSSIMA TRINDADE CENTRO 1171 CAMARA MUNICIPAL DE VILA BELA DA SANTISSIMA TR... AV. SÃO LUIZ, S/N, VILA BELA DA SS. TRINDADE 25910901171 2 486 0 0 0 0 0 0 0 0 0
coords = locais[['longitude','latitude']].values
coords
array([[-61.50422603, -10.87078709], [-60.941759 , -10.475339 ], [-60.180703 , -14.107886 ], ..., [-50.511945 , -10.47179925], [-50.51073158, -10.46768262], [-50.296635 , -9.994842 ]])
matriz_distancias = calcula_distancias(coords, coords)
matriz_distancias
array([[0.00000000e+00, 6.61801777e+01, 2.29587452e+02, ..., 1.22413550e+03, 1.22427559e+03, 1.24901215e+03], [6.61801777e+01, 0.00000000e+00, 2.16509550e+02, ..., 1.16121113e+03, 1.16134618e+03, 1.18553983e+03], [2.29587452e+02, 2.16509550e+02, 0.00000000e+00, ..., 1.10042873e+03, 1.10061520e+03, 1.13048953e+03], ..., [1.22413550e+03, 1.16121113e+03, 1.10042873e+03, ..., 0.00000000e+00, 3.21690889e-01, 4.15135648e+01], [1.22427559e+03, 1.16134618e+03, 1.10061520e+03, ..., 3.21690889e-01, 0.00000000e+00, 4.11970411e+01], [1.24901215e+03, 1.18553983e+03, 1.13048953e+03, ..., 4.15135648e+01, 4.11970411e+01, 0.00000000e+00]])
d = matriz_distancias.shape[0] v = d*(d - 1)/2 C = np.empty([int(round(v,0))]) ic = 0 for i in range(d): for j in range(i+1,d): # print(matriz_distancias[i,j]) C[ic] = matriz_distancias[i,j] ic = ic + 1
C
array([ 66.18017766, 229.587452 , 283.50213756, ..., 0.32169089, 41.5135648 , 41.19704105])
plt.rcParams["figure.figsize"]=100,60
Z = linkage(C, 'complete') dn = dendrogram(Z)
WARNING: 1 intermediate output message was discarded.
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html
grupos = fcluster(Z, max_d, criterion='distance')
locais['GRUPOS'] = grupos
locais[:5]
longitude latitude cod_localidade_tse nom_localidade nom_bairro num_local nom_local des_endereco codigo lqtd_secoes ... indigenas crimes_eleitorais boca_de_urna roubo furto desacato desobediencia CV ind_cid GRUPOS
0 -61.504226 -10.870787 89960 RONDOLÂNDIA CENTRO 1015 ESCOLA ESTADUAL OLAVO BILAC RUA MATHILDE KLEMS, S/N 61899601015 10 ... 0 0 0 0 2 1 0 0 0 336
1 -60.941759 -10.475339 89960 RONDOLÂNDIA ZONA RURAL 1066 ESCOLA ZAWA KAREY PANGYJY ALDEIA INDÍGENA ZORÓ 61899601066 1 ... 267 0 0 0 0 0 0 0 0 337
2 -60.180703 -14.107886 90867 NOVA LACERDA GLEBA SANTA AMÉLIA 1040 ESCOLA MUNICIPAL VALE DO GUAPORÉ COMUNIDADE SANTA AMÉLIA 61908671040 1 ... 0 0 0 0 0 0 0 0 0 444
3 -59.967301 -15.014093 91090 VILA BELA DA SANTÍSSIMA TRINDADE JARDIM AEROPORTO 1341 CRECHE AVIAOZINHO AVENIDA MARTIMIANO RIBEIRO DA FONSECA, S/N 25910901341 1 ... 0 0 1 0 13 0 1 0 0 440
4 -59.950224 -15.003089 91090 VILA BELA DA SANTÍSSIMA TRINDADE CENTRO 1171 CAMARA MUNICIPAL DE VILA BELA DA SANTISSIMA TR... AV. SÃO LUIZ, S/N, VILA BELA DA SS. TRINDADE 25910901171 2 ... 0 0 0 0 0 0 0 0 0 439

5 rows × 21 columns

res1 = pd.ExcelWriter('res5 VMD.xlsx') locais.to_excel(res1,'dados',index=False) res1.save()