-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess_meis_nacional.py
More file actions
85 lines (70 loc) · 2.93 KB
/
Copy pathprocess_meis_nacional.py
File metadata and controls
85 lines (70 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pandas as pd
import geopandas as gpd
import requests
import re
import os
import sys
# Corrige warning do PROJ e GDAL no QGIS Python
os.environ['PROJ_DATA'] = r'C:\Program Files\QGIS 3.44.7\share\proj'
os.environ['GDAL_DATA'] = r'C:\Program Files\QGIS 3.44.7\share\gdal'
print("Lendo CSV de MEIs Bolivianos...")
try:
df = pd.read_csv(r"C:\Users\yanju\Downloads\MEIs_Bolivianos_Organizado.csv", sep=",", encoding="utf-8-sig")
except Exception as e:
print(f"Erro ao ler CSV: {e}")
sys.exit(1)
print("Filtrando e processando dados nacionais...")
# Filtrar apenas Bolivianos
df_bol = df[df['Nacionalidade'].str.upper() == 'BOLIVIA'].copy()
# Extrair UF da Localidade (ex: "São Paulo (SP)" -> "SP")
def extrair_uf(localidade):
match = re.search(r'\(([A-Z]{2})\)', str(localidade))
if match:
return match.group(1)
return None
df_bol['UF'] = df_bol['Localidade'].apply(extrair_uf)
# Descartar Brasil ou locais sem UF mapeada e remover NAs
df_bol = df_bol.dropna(subset=['UF'])
# Agrupar a quantidade de MEIs por estado
df_grouped = df_bol.groupby('UF')['Qtd_MEIs'].sum().reset_index()
print("Baixando dicionario de Estados (UFs) do IBGE...")
url_estados = "https://servicodados.ibge.gov.br/api/v1/localidades/estados"
res_est = requests.get(url_estados)
res_est.raise_for_status()
estados_data = res_est.json()
dict_estados = []
for est in estados_data:
dict_estados.append({
'codarea': str(est['id']),
'UF': est['sigla'],
'Nome_Estado': est['nome']
})
df_ibge_est = pd.DataFrame(dict_estados)
# Cruzar as siglas de UF com a quantidade de MEIs
df_analise = df_ibge_est.merge(df_grouped, on='UF', how='left')
# Preencher estados sem registro com 0 (ótimo para mapas de calor)
df_analise['Qtd_MEIs'] = df_analise['Qtd_MEIs'].fillna(0).astype(int)
print("Baixando malha espacial de todos os Estados do Brasil (IBGE)...")
url_malha = "https://servicodados.ibge.gov.br/api/v2/malhas/BR?resolucao=2&formato=application/vnd.geo+json"
try:
res_malha = requests.get(url_malha)
res_malha.raise_for_status()
malha_path = r"C:\Users\yanju\.gemini\antigravity\scratch\geo_workspace\malha_br_estados.geojson"
with open(malha_path, "w", encoding="utf-8") as f:
f.write(res_malha.text)
gdf_malha = gpd.read_file(malha_path)
gdf_malha['codarea'] = gdf_malha['codarea'].astype(str)
except Exception as e:
print(f"Erro ao baixar a malha: {e}")
sys.exit(1)
print("Cruzando geometria dos Estados com os Totais de MEIs...")
gdf_final = gdf_malha.merge(df_analise, on='codarea', how='inner')
gdf_final = gdf_final.drop(columns=['codarea'])
output_path = r"C:\Users\yanju\.gemini\antigravity\scratch\geo_workspace\camada_nacional_meis_bolivianos.gpkg"
print(f"Salvando GeoPackage...")
try:
gdf_final.to_file(output_path, driver="GPKG", layer="meis_estados")
print(f"Processamento concluído e salvo em: {output_path}")
except Exception as e:
print(f"Erro ao salvar: {e}")
sys.exit(1)