Visualizando Distribuições de Preços de Casas

Com o Zillow e o Folium do python, é mais fácil do que nunca.

Anthony Agnone Seg , Sáb 19 de jul · 5 min ler

Espere, mas por quê?

Eu estou no processo de fechamento em minha primeira casa em Atlanta, GA, e tenho usado muito vários sites imobiliários como Zillow, Redfin e Trulia. Eu também tenho brincado com a API do Zillow , apesar de um pouco irregular em termos de funcionalidade e documentação. Apesar de suas deficiências, fiquei totalmente inspirado quando li o post de Lukas Frei sobre o uso da biblioteca para criar visualizações baseadas em geografia. Alguns dias e algum divertimento rápido depois, eu combinei o Zillow e o Folium para fazer algumas visualizações bacanas dos preços das casas tanto em Atlanta quanto nos EUA.

Tópicos

  • Integração API
  • Traçado de gráfico
  • Visualização

Um pequeno exemplo de trabalho

Vamos começar de maneira simples usando alguns dados pré-agregados que baixei do site da Zillow. Este conjunto de dados mostra o preço médio por pé quadrado para cada estado nos EUA para cada mês de abril de 1996 a maio de 2019. Naturalmente, pode-se construir uma visualização rica sobre a progressão desses preços ao longo do tempo; no entanto, vamos ficar com os preços mais recentes por enquanto, que estão na última coluna do arquivo.

Olhando para os 10 melhores estados, não há muitas surpresas. Para ser claro, fui inicialmente pego de surpresa pela ordem de alguns deles, notadamente DC e Havaí no topo do gráfico. No entanto, lembre-se da normalização de "por metro quadrado" na métrica. Por esse sinal, talvez esteja mais surpreso agora que a Califórnia ainda atinge o terceiro lugar, dado seu tamanho.

Top 10 price / sqft em milhares de $$$ (maio de 2019)

De qualquer forma, para o show! Como este é um artigo de visualização, evitarei lançar muitas linhas de código na sua cara e vinculá-lo a você no final do artigo. Em suma, eu baixei um arquivo GeoJSON dos estados dos EUA a partir do repo folium . Este foi um grande achado, porque imediatamente me deu o esquema dos dados que eu precisava dar à folha para um processo contínuo; a única informação que eu precisava adicionar era os dados de preços (para gerar cores no mapa final). Depois de fornecer isso, meras cinco linhas de código me deram o seguinte enredo:

Heatmap de preço / pés quadrados de residências nos EUA em maio de 2019

Um passo adiante

Agora que mergulhei meus dedos nas águas de Zillow e Folium, estava pronta para mergulhar. Eu decidi criar um mapa de calor dos preços da habitação de Metro Atlanta. Uma das desvantagens da API do Zillow é que ela é bastante limitada na funcionalidade de pesquisa – não consegui encontrar uma maneira de realizar uma pesquisa com base em coordenadas de latitude / longitude, o que seria bastante conveniente para criar um mapa de calor granular. No entanto, tomei isso como uma oportunidade para atualizar alguns códigos em estilo de rastreador; Eu usei os resultados de uma pesquisa inicial por nome de uma cidade como sementes para chamadas futuras para obter as composições (via o ponto final GetComps ) dessas casas.

Vale a pena notar que o Zillow tem muitos filtros de pesquisa baseados em URL que podem ser usados para, por exemplo, pesquisar por latitude / longitude (veja abaixo). Obter as casas a partir da página web torna-se um trabalho de raspagem, e você está sujeito a quaisquer mudanças repentinas na estrutura da página da Zillow. Dito isto, os projetos de raspagem podem ser muito divertidos; Se você gostaria de construir isso no que eu fiz, me avise!

 # um exemplo de um URL de pesquisa do Zillow, com muitas especificações 
https://www.zillow.com/atlanta-ga/houses/2-_beds/2.0-_baths/?searchQueryState={%22pagination%22:{},%22mapBounds%22:{%22west%22:-84.88217862207034, % 22east% 22: -84.07880337792972,% 22south% 22: 33.53377471775447,% 22north% 22: 33.999556422130006},% 22usersSearchTerm% 22:% 22Atlanta,% 20GA% 22,% 22regionSelection% 22: [{% 22regionId% 22: 37211, % 22regionType% 22: 6}],% 22isMapVisible% 22: true,% 22mapZoom% 22: 11,% 22filterState% 22: {% 22price% 22: {% 22min% 22: 300000,% 22max% 22: 600000}, % 22monthlyPayment% 22: {% 22min% 22: 1119,% 22max% 22: 2237},% 22hoa% 22: {% 22máx% 22: 200},% 22beds% 22: {% 22min% 22: 2},% 22baths% 22: {% 22min% 22: 2},% 22sqft% 22: {% 22min% 22: 1300},% 22isAuction% 22: {% 22value% 22: false},% 22isMakeMeMove% 22: {% 22value% 22: false},% 22isMultiFamily% 22: {% 22value% 22: false},% 22isManufactured% 22: {% 22value% 22: false},% 22isLotLand% 22: {% 22value% 22: false},% 22isPreMarketForeclosure% 22: {% 22value% 22: false},% 22isPreMarketPreForeclosure% 22: {% 22value% 22: false}},% 22isListVisible% 22: true}

Voltando ao caminho escolhido, mencionei que usei os resultados iniciais como pontos de entrada na rede de casas de uma determinada cidade. Com esses pontos de entrada, eu continuei recorrendo a chamadas para cada casa comps. Uma suposição importante aqui é que a definição de similaridade de Zillow entre as casas inclui a proximidade da localização, além de outros fatores. Sem proximidade de localização, a travessia baseada em comp (s) das residências será muito suave em relação à localização.

Então, quais algoritmos estão à nossa disposição para percorrer uma rede de nós de diferentes maneiras? Naturalmente, a pesquisa em largura (BFS) e a pesquisa em profundidade (DFS) vêm rapidamente à mente. Para os curiosos, dê uma olhada no fluxo lógico básico abaixo. Além de um protetor de associação definido, novas residências são adicionadas somente à coleção quando satisfazem as restrições declaradas na função meets_criteria . Por enquanto, faço uma verificação de distância L2 simples entre um local de latitude / longitude raiz predefinido e a localização da casa atual. Este critério encorajou a busca de permanecer local à raiz, para os propósitos de um mapa de calor bem conectado e granular. A implementação abaixo usa o DFS estalando o final da lista (linha 5) e adicionando ao final da lista (14), mas o BFS pode ser alcançado rapidamente mudando qualquer linha (mas não ambas) para usar a frente do arquivo. a lista.

Deixar esse algoritmo rodar por 10.000 iterações em casas de Atlanta produz o mapa a seguir em apenas alguns minutos! Além disso, a página da web gerada por fólio é interativa, permitindo ferramentas comuns de navegação de mapa, como zoom e panorâmica. Para provar a sua modularidade, criei alguns mapas de preços em menor escala para Boston, MA e Seattle, WA também.

Mapa de calor dos preços da habitação Atlanta. Veja a versão interativa aqui .

O código

Como prometido, aqui está o projeto . Ele possui uma configuração do Make + Docker para facilidade de uso e reprodutibilidade. Se você gostaria de obter uma introdução sobre como essas duas ferramentas se encaixam perfeitamente para a ciência de dados reproduzível, continue lendo aqui . De qualquer forma, o README vai colocá-lo em funcionamento em pouco tempo, seja via script ou notebook Jupyter. Feliz viz!

aagnone3 / zillium

Visualização de imóveis com Zillow + Folium. Contribuir para o desenvolvimento do aagnone3 / zillium criando uma conta no…

github.com