“Qual a distância entre São Paulo e Tupã? Viajando de Haversine a Levenshtein, do Concreto ao Abstrato, da Inteligência Artificial às nossas raízes humanas.”

Christian Zambra
productmanagerslife
16 min readMar 3, 2024

Este texto navega entre o concreto e o abstrato. Se você está precisando das fórmulas de Haversine ou Levenshtein com urgência, pode pular pro título “Concreto”. Lá temos os códigos em Python tão úteis em Inteligência Artificial, principalmente aplicada à Inteligência Geográfica (GeoInt) e Processamento de Linguagem Natural (NLP).

Porém, se você tem um pouco mais de tempo ou curiosidade pelo Abstrato, podemos navegar juntos pela história do Brasil, de uma líder indígena que salvou seu povo, e de imigrantes que ajudaram a construir essa nação. Vamos?

Haversine x Levenshtein. Ilustração por Christian Zambra

Caminho Abstrato

Qual a distância entre São Paulo e Tupã?

Tupã é a terra natal da minha mãe. Talvez você já tenha lido isso em algum dos meus posts. A minha terra natal é São Paulo, e apesar de ter nascido e criado aqui, Tupã sempre esteve na minha imaginação.

A distância até a Tupã que se criou em minha mente é a de um pensamento.

Mas e a Tupã concreta, real, atual? Bom, essa fica meio longe. Depois vamos calcular a distância, mas digamos que só fui visitar pela primeira vez quando adulto. Ela esteve a distância de uma vida, a distância da minha infância e adolescência.

A distância até minha primeira visita a Tupã foi de uma vida.

E qual a distância percorrida na viagem? Ainda no concreto, a distância é relativa. A viagem não foi em linha reta, as estradas desviam de montanhas, desviam de obstáculos, e por vezes tem paradas até chegarmos ao destino. Com todos os desvios, e com a parada na vizinha Marília, a viagem durou mais de 8 horas.

A viagem até Tupã durou um dia.

Essa foi uma das distâncias, um dos percursos da imigração. Quando minha mãe veio de Tupã para São Paulo, provavelmente veio por essa estrada. Quando os imigrantes foram para lá, a distância foi pelos trilhos do trem. Seguiram na velocidade da Maria Fumaça que levava os recém chegados de seus navios para essa terra prometida.

O que é distância?

Distância é a diferença entre dois pontos. Acho que podemos considerar também como o esforço de chegar de um ponto a outro. As horas na estrada, a distância percorrida, tudo tão mais difícil do que chegar à Tupã que existe na minha mente. A distância do pensamento é tão menor. Ah, tem também a distância da internet.

Talvez você esteja conhecendo e formulando uma Tupã agora em sua mente por esse relato. Eu vi vários relatos, várias fotos e várias informações de Tupã na vida. Mas eram distintas Tupãs, apesar de compartilharem o mesmo nome.

E o nome também inclui em si uma distância. Será?

A cidade da minha mente não se chama São Paulo + 8 horas. Existem lugares assim, Residencial 1, Residencial 2, Residencial 3, tudo lógico, tudo informativo.

Será que tem alguma lógica, alguma exatidão no nome dessas duas cidades?

Cheguei a pensar (e vamos ver isso no algoritmo), mas a lógica aqui é bem mais humana.

O nome representa quem a cidade foi, e quem ela é. E vamos descobrir então quem elas são?

Quem é São Paulo?

Selva de pedra com nome de Santo.

“Hei, São Paulo, terra de arranha-céu
A garoa rasga a carne, é a Torre de Babel
Família brasileira, dois contra o mundo…”

São Paulo é a selva de pedra que nos acolheu. A quinta maior cidade do mundo, maior cidade da América Latina, 22 milhões de habitantes. Anônimos. Desconhecidos e por vezes insignificantes em um número tão grande. Lutando por um sonho, ou por sobreviver. Mas nem tudo são pedras.

São Paulo é uma das capitais culturais e gastronômicas do mundo, tudo graças aos imigrantes. Aqui você vê povos da Europa, Oriente, de todos os lugares do mundo, convivendo em relativa harmonia. Até mesmo povos que, fora do país estão em guerra, aqui alcançam a paz. Essa selva de pedra é refúgio para muitos, e no concreto existe um coração acolhedor, que pode ser duro, mas acolhe. E ensina. Afinal, o nome veio de um colégio.

Em 25 de Janeiro de 1554 foi inaugurado aqui um colégio para catequizar os índios nessas terras recém descobertas. A região se chamava Piratininga, que em língua indígena significa peixe seco. E dia 25 foi também a data da conversão do apóstolo Paulo de Tarso. Em homenagem à data, a cidade foi chamada de São Paulo dos Campos de Piratininga. Hoje os índios já se foram, ou foram misturados com tantos outros povos, e a cidade se chama somente São Paulo.

Quem é Tupã?

Cidade de imigrantes, nome de Trovão.

Tupã é uma cidade nova, fundada em 1929 e transformada em município em 1939. Parte da região conhecida como Alta Paulista, fica no caminho da estrada de ferro, perto do rio Paraná, perto dos caminhos que escoariam a riqueza cafeeira do Brasil no início do século.

E uma personalidade importante de sua história foi a índia Vanuíre.

Vanuíre pertencia ao povo Kaingang ou Caingangues. Esses povos habitavam as terras selvagens do Oeste Paulista, como nômades. E infelizmente, o progresso chegou até lá. A expansão das plantações de café e da ferrovia tomaram as terras selvagens, e o estado tentou assentar os índios em fazendas, nas regiões de Tupã e Braúna. Não deu certo, o caminho dos índios ao perderem sua liberdade foi a guerra.

Bravos índios, tiveram sua população dizimada. Estima-se que no início dos contatos haviam 4000 índios, e na década de 1910 restavam pouco mais de 700.

Vendo seu povo morrer, Vanuíre intermedia a negociação com o governo, sob o comando do Marechal Cândido Rondon. Após meses de negociação, ela conseguiu um acordo de paz e salvou o que restou do seu povo.

Hoje uma escola e um dos melhores museus indígenas do país têm seus nomes em homenagem a ela, ambos chamados Índia Vanuíre.

E como homenagem também, batizaram a cidade com o nome do seu Deus do Trovão, Tupã. Homenagem, ou talvez uma recordação das tempestades que foram as guerras que causaram tanta dor naquelas terras.

Poucas décadas depois, vindos de outra tempestade, chegaram imigrantes àquelas terras, para ajudar nas plantações de café. Haviam imigrantes até da Letônia, mas os que mais influenciaram a minha vida foram os japoneses. Pois minha mãe conviveu com a comunidade japonesa, e minha paixão por artes marciais, história japonesa, estratégia e pelo Budô provavelmente vem daí. Muitos desses imigrantes, em especial os das levas mais recentes, viveram os horrores da Segunda Guerra, e compartilharam as dores e os conceitos milenares que lhes permitia sobreviver a tanto sofrimento e resistir a tudo isso.

Acho que a minha Tupã, a Tupã na minha mente é um Bonsai que resiste a todas as tempestades. Que possui raízes fortes, por conta inclusive dessas tempestades. E essa raiz é tão forte que sobrevive até no concreto paulistano.

Fotos de Tupã — SP por Christian Zambra

Conclusões?

Qual a distância entre São Paulo e Tupã?

Existem várias distâncias, várias São Paulo e várias Tupã.

A distância de São Paulo até a Tupã das minhas memórias é um pensamento.

A distância entre os Campos de Piratininga e as Terras Kaingangs deveria ser de dias de viagem. Hoje é um dia de ônibus.

Mas tudo que essa cidade influenciou minha vida não está distante, está aqui, no meu coração. As raízes que me permitem caminhar no asfalto, e observar o mar de concreto do alto de seus edifícios, essas raízes vieram lá de Tupã, vieram antes de eu nascer. Assim como de todos nós. Todos temos uma história que vem da história de quem nos criou, nos influenciou. E essa história concretamente pode estar distante, mas de forma abstrata está o mais perto possível, está dentro de nós.

Mas pera que ainda não acabou. Tem o Haversine o Levenshtein, lembra… Bora aprender um pouco de Python, Geointeligência (GeoInt) e Processamento de Linguagem Natural (NLP).

Caminhando entre o Abstrato e o Concreto

Um dos objetivos desse post é compartilhar conhecimento. Mais especificamente o conhecimento que me foi muito útil nos projetos de GeoInt (Haversine) e o que estou aprendendo pra NLP (Levenshtein). Assim, vou começar as análises partindo de uma hipótese, e ao explorar essa hipótese, vamos aprendendo os conceitos.

A Hipótese

Existe uma ligação entre a distância em quilômetros e o nome das cidades, e isso pode ser provado através das cidades de São Paulo e Tupã.

As ruas (ao menos algumas) da cidade de Nova Iorque possuem uma lógica, de proximidade. 1st Street, 2nd Street… 5th Avenue e assim por diante. Em São Paulo, residenciais como Alphaville possuem também lógicas, como Alphaville 1, Alphaville 2, e por ai vai. Talvez haja alguma lógica também nos nomes das cidades, como por exemplo, São Pedro ficar próximo de São Paulo, e se existir Tupi ficar perto de Tupã.

Para testar essa hipótese, vamos calcular a de Haversine em quilômetros entre São Paulo de demais cidades, incluindo Tupã.

Depois, vamos calcular a distância de Levenshtein entre os nomes de São Paulo e das demais cidades do país, incluindo Tupã.

Se a hipótese estiver correta, as cidades com baixo Levenshtein em relação a São Paulo estarão no entorno da cidade, com Haversine baixo também, e o mesmo ocorrerá para Tupã.

Se isso não ocorrer, a tese é refutada, pois ao menos para essas duas cidades, a ideia não é válida.

Quem é esse tal de Haversine?

Já adianto que não é uma pessoa. Meu primeiro contato com Haversine veio graças à Inteligência Artificial, mais especificamente um projeto de Growth e Inteligência Geográfica junto com a querida Camila Zenke. (no fim do artigo coloco o link desse projeto, que foi incrível ). E respondendo, Haversine é um acrônimo do inglês: Half Versed Sine, que em Português seria Meio Seno Verso. Ao final, vou deixar um link para a dedução da fórmula, mas o ponto importante aqui é que trata de senos, e cossenos, de relações trigonométricas.

E pra que usamos isso?

Para calcular distâncias em esferas. A Terra é uma esfera, logo, para calcular a distância entre dois pontos do planeta Terra, devemos utilizar as correções desta fórmula. Sua forma mais popular dá as distâncias entre dois pares de latitude e longitude, e ela se tornou muito popular para a navegação, e agora é muito útil em Inteligência Geográfica.

E quem é esse tal de Levenshtein?

Aqui tratamos de uma pessoa. De quem eu nunca havia ouvido falar até há pouco tempo atrás, dado que tudo que eu tratava de Inteligência Artificial era relacionado a números. Entrando agora no mundo da Linguagem Natural, conheci a teoria do senhor Vladimir Levenshtein, Soviético que em 1965 considerou o conceito da distância que agora leva seu nome pela primeira vez.

Basicamente, a distância de Levenshten nos dá a distância ou diferença entre duas palavras, considerando cada alteração necessária a uma palavra para que ela se transforme na outra, como 1.

Assim, por exemplo, a distância entre as palavras São Paulo e São Pedro é 3, pois:

0. São Paulo

  1. Substituição de a por e: São Peulo
  2. Substituição de u por d: São Pedlo
  3. Substituição de l por r: São Pedro

Qual a distância (de Haversine) entre São Paulo e Tupã?

A distância é de 436 quilômetros. (fórmula em Python abaixo).

A viagem dura mais que isso, mais de 8 horas. Os 436 quilômetros seriam uma distância de voo direto até Tupã, de navegação. Indo de ônibus, há os desvios feitos pela estrada no Terreno, o que aumenta a distância e o tempo. E como o Ônibus ainda fez uma parada em Marília, a viagem durou mais de 8 horas.

Talvez por isso tenha evitado tanto, mas depois de muito tempo, finalmente visitei Tupã.

Qual a distância entre os nomes de Tupã, São Paulo, e outras cidades?

A distância de Levenshtein entre as formas normalizadas de São Paulo e Tupã é 7 (fórmulas em Python abaixo).

As cidades cujos nomes são mais próximos de Tupã (Levenshtein=2), Urupa, Uba e Iuna, distam de 465 a 2265km da cidade.

No caso de São Paulo as cidades com nomes mais próximos (São Carlos, São Pedro) distam entre 170 a 2289km.

Voltando à nossa hipótese:

Existe uma ligação entre a distância em quilômetros e o nome das cidades, e isso pode ser provado através das cidades de São Paulo e Tupã.

Temos que a hipótese não se provou. Urupa, Uba e Iuna não estão nas proximidades de Tupã, como os residenciais de um condomínio, ou as ruas de Nova Iorque. Da mesma forma, São Carlos e São Pedro não estão ao redor de São Paulo. E em ambos os casos, as distancias variam muito, refutando a hipótese.

Assim, como na carreira de qualquer profissional de produto ou empreendedor, se a hipótese não se prova, fica o aprendizado!

Nessa exploração aprendemos os conceitos de Haversine e Levenshtein, bem como (abaixo) como calculá-los em Python. E também, refutando a hipótese, podem surgir novas ideias.

Talvez a distância entre os nomes São Paulo e Tupã reflita também a distância entre suas histórias, entre os momentos de sua fundação, e mesmo no respeito e tratamento aos povos originais dessas terras. Piratininga sumiu do nome de São Paulo, assim como os índios foram se misturando à todos os povos que hoje aqui habitam. Tupã, homenagem ao deus do Trovão, cujas vozes se faziam ouvir na tempestade, talvez ironicamente reflita o som das armas que dizimaram os índios daquelas terras. Um massacre mais recente, ainda vivo, e que só parou pela interseção da índia Vanuíre, que cansada de ver seus irmãos morrerem, optou pela paz.

Talvez a lógica dos números seja diferente da lógica das letras. Números são uma abstração da realidade, feita para facilitar sua compreensão. Letras e nomes aqui são um registro muito humano do que aconteceu.

Em cada nome uma história. Uma história complexa, talvez mais complexa do que simples fórmulas. E talvez, talvez… a função de cada um desses nomes nunca tenha sido localização, mas sim identidade, lembrar de onde viemos, o que aconteceu ali, para que isso seja eterno.

CAMINHO CONCRETO

CODIGOS EM PYTHON

Quer entender como calculamos as distâncias citadas anteriormente?

Está desesperado por uma dessas funções e pulou diretamente pra cá?

Abaixo coloco os códigos das duas funções, e logo após a explicação do código completo aplicado aos exemplos do texto.

Se preferir, ao final tem o link do GitHub com os códigos completos.

Código em Python para a fórmula de Haversine

Com a ajuda do Google Gemini, criamos esse código em Python que calcula a função de Haversine.

As entradas da função são dois pares de coordenadas geográficas, latitude e longitude, no formato numérico.

A saída é a distância entre as duas coordenadas, medida em quilômetros.

def haversine_distance(lat1, lon1, lat2, lon2):
"""
Calculates the Haversine distance between two points in kilometers.
"""
from math import radians, sin, cos, asin, sqrt

# Earth radius in kilometers
R = 6371

# Convert degrees to radians
lat1 = radians(lat1)
lon1 = radians(lon1)
lat2 = radians(lat2)
lon2 = radians(lon2)

# Calculate the distance
dlon = lon2 - lon1
dlat = lat2 - lat1

a = sin(dlat / 2) * sin(dlat / 2) + cos(lat1) * cos(lat2) * sin(dlon / 2) * sin(dlon / 2)
c = 2 * asin(sqrt(a))

# Distance in kilometers
distance = R * c

return distance

Código em Python para a Fórmula de Levenshtein

Mais uma vez com a ajuda do Google Gemini, criamos esse código para a fórmula da distância de Levenshtein

def levenshtein_distance(str1, str2):
"""
Calculates the Levenshtein distance between two strings.

Args:
str1: The first string.
str2: The second string.

Returns:
The Levenshtein distance between the two strings.
"""
n_m = len(str1) + 1 # Create a matrix (n+1 rows, m+1 columns)
n_n = len(str2) + 1 # Create a matrix (n+1 rows, m+1 columns)

# Initialize the matrix
d = [[0 for _ in range(n_n)] for _ in range(n_m)]

# Initialize the first row and column
for i in range(n_m):
d[i][0] = i

for j in range(n_n):
d[0][j] = j

# Calculate the Levenshtein distance dynamically
for i in range(1, n_m):
for j in range(1, n_n):
if str1[i - 1] == str2[j - 1]:
cost = 0
else:
cost = 1
d[i][j] = min(d[i - 1][j] + 1, # Deletion
d[i][j - 1] + 1, # Insertion
d[i - 1][j - 1] + cost) # Substitution

return d[n_m - 1][n_n - 1]

Exemplo em Python: Qual a distância entre São Paulo e Tupã?

Agora, aproveitando as ideias/hipóteses/loucuras citadas no começo, vamos criar um código extremamente simplificado em Python para ilustrar a aplicação das duas funções, respondendo as seguintes perguntas:

  • Qual a distância física entre São Paulo e Tupã, em linha reta considerando a curvatura terrestre?
  • Qual a distância de Levenshtein entre os nomes São Paulo e Tupã?
  • Será que as cidades de nomes próximos a São Paulo e Tupã também são próximas geograficamente?

E isso foi feito da seguinte forma (listada aqui, e descrita abaixo):

  1. Importação dos dados de cidades, latitudes e longitudes do IBGE
  2. Definição da Função de Haversine
  3. Aplicação da Função, calculando a distância entre cada cidade e São Paulo
  4. Aplicação da Função, calculando a distância entre cada cidade e Tupã
  5. Filtro da tabela, para o resultado parcial de qual a distância geográfica entre São Paulo e Tupã.
  6. Definição da Função de Levenshtein e normalização dos dados para aplicação
  7. Aplicação da função, calculando a distância entre cada nome de cidade e São Paulo
  8. Aplicação da função, calculando a distância entre cada nome de cidade e Tupã
  9. Filtro parcial, respondendo qual a distância entre o nome São Paulo e Tupã.
  10. Filtro parcial em função das distâncias de Haversine, e análise (qualitativa/observando) da distância física entre as cidades de nome semelhante a São Paulo e Tupã.

Detalhamento:

  1. A Base de Dados que utilizei no exemplo, com os nomes de cidades e coordenadas geográficas, se encontra no seguinte link: https://www.ibge.gov.br/geociencias/organizacao-do-territorio/estrutura-territorial/27385-localidades.html

Para esse exemplo, baixei a base de Geomedia, no formato do Microsoft Access (.mdb), e lá fiz uma seleção dos campos úteis da tabela br_localidades_2010_v1, exportando no formato excel para o arquivo BR_LOCALIDADES.xlsx (optei por excel depois de diversos problemas com codificação de arquivos .txt e .csv). Após isso, criei na raiz do meu Google Drive pessoal uma pasta chamada “teste_haversine” e colei lá o arquiv “BR_LOCALIDADES.xlsx”.

2. Início do Código, e criação da Função de Haversine:

Importar bibliotecas. Aqui importamos as bibliotecas que serão utilizadas.

  • Pandas para trabalharmos com as tabelas
import pandas as pd
  • Google Colab, para poder importar arquivos do drive pessoal
from google.colab import drive
drive.mount('/content/drive')
  • Unicodedata, para ajustar os textos que vamos tratar no código.
import unicodedata

Aqui criamos a função de Haversine:

def haversine_distance(lat1, lon1, lat2, lon2):
"""
Calculates the Haversine distance between two points in kilometers.
"""
from math import radians, sin, cos, asin, sqrt

# Earth radius in kilometers
R = 6371

# Convert degrees to radians
lat1 = radians(lat1)
lon1 = radians(lon1)
lat2 = radians(lat2)
lon2 = radians(lon2)

# Calculate the distance
dlon = lon2 - lon1
dlat = lat2 - lat1

a = sin(dlat / 2) * sin(dlat / 2) + cos(lat1) * cos(lat2) * sin(dlon / 2) * sin(dlon / 2)
c = 2 * asin(sqrt(a))

# Distance in kilometers
distance = R * c

return distance

Aqui importamos o arquivo do IBGE, extraído e convertido no formato excel, e localizado no Google Drive:

# Define the path to your uploaded Excel file in Google Drive
file_path = "/content/drive/MyDrive/teste_haversine/BR_LOCALIDADES.xlsx"
# Read the Excel file into a DataFrame using pandas.read_excel()
df = pd.read_excel(file_path)

3. Aqui imputamos manualmente a localização de São Paulo no código

# Define the latitude and longitude of São Paulo
sp_lat = -23.550522 # Latitude of São Paulo
sp_lon = -46.633329 # Longitude of São Paulo

E incluímos uma coluna com o cálculo da distância de São Paulo a cada uma das distâncias da tabela

# Add a new column for the Haversine distance
df["Distance_SP"] = df.apply(lambda row: haversine_distance(row["LAT"], row["LONG"], sp_lat, sp_lon), axis=1)

4. Da mesma forma, incluímos manualmente a latitude e longitude de Tupã, e criamos uma coluna com as distâncias

# Add a new column for the Haversine distance from TUPÃ

tp_lat = -21.934822
tp_long = -50.514006

df["Distance_TUPA"] = df.apply(lambda row: haversine_distance(row["LAT"], row["LONG"], tp_lat, tp_long), axis=1)

P.S.: Se a informação da latitude de Tupã e São Paulo está na tabela, por que incluir no código? Bom, o nome da coluna criada é Distance_São Paulo ou Distance_Tupa, ou seja, esse dado o fixo. Por organização, poderia criar uma consulta, só pra garantir que tô usando o mesmo dado que tá na tabela. Mas preferi reduzir o esforço computacional colocando a variável no código. Ou seja: É feito, mas roda.

5. Filtro da Tabela, encontrando a distância entre São Paulo e Tupã

df[df["NM_MUNICIPIO"] == "TUPÃ"].head()

E a distância entre São Paulo e Tupã é de 436 quilômetros.

6. Abaixo criamos a função de Levenshtein:

def levenshtein_distance(str1, str2):
"""
Calculates the Levenshtein distance between two strings.

Args:
str1: The first string.
str2: The second string.

Returns:
The Levenshtein distance between the two strings.
"""
n_m = len(str1) + 1 # Create a matrix (n+1 rows, m+1 columns)
n_n = len(str2) + 1 # Create a matrix (n+1 rows, m+1 columns)

# Initialize the matrix
d = [[0 for _ in range(n_n)] for _ in range(n_m)]

# Initialize the first row and column
for i in range(n_m):
d[i][0] = i

for j in range(n_n):
d[0][j] = j

# Calculate the Levenshtein distance dynamically
for i in range(1, n_m):
for j in range(1, n_n):
if str1[i - 1] == str2[j - 1]:
cost = 0
else:
cost = 1
d[i][j] = min(d[i - 1][j] + 1, # Deletion
d[i][j - 1] + 1, # Insertion
d[i - 1][j - 1] + cost) # Substitution

return d[n_m - 1][n_n - 1]

E aqui criamos uma função de normalização. Eu optei por normalizar os dados para que a função de Levenshtein se adaptasse melhor, dado que ela não foi desenvolvida para a língua portuguesa. Sei que isso trás eventuais prejuízos em relação a palavras com acentuação (como Tupã), mas assumi esse prejuízo porque o objetivo do código era ilustrar o uso da função, de forma simplificada.

def normalize_name(name):
"""
Normalizes a string by removing accents, converting to lowercase, and
stripping leading/trailing whitespace.

Args:
name: The input value to be normalized.

Returns:
The normalized string if the input is a string, otherwise the
original value converted to a string.
"""
if not isinstance(name, str):
# Convert non-strings to strings (adjust based on your needs)
name = str(name)
normalized_name = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('utf-8')
normalized_name = normalized_name.lower()
return normalized_name.strip()

# Add a column of normalized names
df["NM_MUNICIPIO_NORMALIZED"] = df["NM_MUNICIPIO"].apply(normalize_name)

7. Aplicação das funções, calculando a distância entre os nomes normalizados das cidades e “sao paulo”

df["LEVENSHTEIN_SP"] = df.apply(lambda row: levenshtein_distance(row["NM_MUNICIPIO_NORMALIZED"],"sao paulo"), axis=1)

8. Aplicação das funções, calculando a distância entre os nomes normalizados das cidades e “tupa”

df["LEVENSHTEIN_TP"] = df.apply(lambda row: levenshtein_distance(row["NM_MUNICIPIO_NORMALIZED"],"tupa"), axis=1)

9. Filtro parcial, respondendo qual a distância entre os nomes São Paulo e Tupã.

df["LEVENSHTEIN_TP"] = df.apply(lambda row: levenshtein_distance(row["NM_MUNICIPIO_NORMALIZED"],"tupa"), axis=1)

Considerando os nomes normalizados, a distância de Leveshtein entre os nomes “sao paulo” e “tupa” é 7

10. Filtros parciais para encontrar as cidades com nomes mais próximos a “tupa” e “sao paulo”

A menor distancia de Levenshtein que encontra correspondentes na lista para “tupa é 2:

df[df["LEVENSHTEIN_TP"] ==2].sort_values(by="LEVENSHTEIN_TP").head(10)

E a menor distancia de Levenshtein que encontra correspondentes na lista para “sao paulo” é 3:

df[df["LEVENSHTEIN_SP"] ==3].sort_values(by="LEVENSHTEIN_SP").head(10)

Analisando as distâncias, os nomes mais próximos de “tupa” estão em 3 estados diferentes, com distâncias geográficas variando de 465 a 2265km. No caso de “sao paulo”, encontramos em 2 estados também, com distancias variando de 170 a 2289km. Assim, pelo menos para os arredores destas cidades, aparentemente, não há nenhuma lógica de distância presente nos nomes.

Links Úteis

Projeto no Github: Haversine e Levenshtein

Artigo citado: Sensoriamento Remoto e Inteligência Artificial com Camila Zenke

Referências:

Fórmula de Haversine

Fórmula de Levenshtein

Cidade de São Paulo

Cidade de Tupã

Cidade de Marília (info sobre Índia Vanuíre)

Museu Índia Vanuíre

--

--

Christian Zambra
productmanagerslife

Passionate to learn; believes that new products are made to change people’s life for better; Fuzzy AND Techie :) B. Engineering & Advertising. Alma Matter: USP