Wir nutzen Data Science fĂŒr den friedlichen Kauf eines Eigenheims

Um etwas Unnötiges zu verkaufen, mĂŒssen Sie zuerst etwas Unnötiges kaufen, aber wir haben kein Geld.
- Drei aus Prostokvashino

EinfĂŒhrung


So kam es, dass ich in meiner Wohnung (oder Wohnung) in Montreal wohne. Und einmal, vor ungefÀhr einem Jahr, wurde ich von dem Gedanken besucht, dass es schön wÀre, zu Ihnen nach Hause zu ziehen. Ich hatte bereits einige Erfahrungen mit dem Kauf und Verkauf von Wohnungen, und im Prinzip wÀre es möglich, dieses Problem einfach anzugehen, wie es die Mehrheit der Anwohner tut: einen Makler einstellen und ihn mit allen Problemen befassen, aber es wÀre langweilig und uninteressant.


Deshalb habe ich mich entschlossen, diese Angelegenheit wissenschaftlich anzugehen. Es gibt eine Aufgabe: Sie mĂŒssen herausfinden, wie viel sich das, was ich habe und wo ich es mir leisten kann, befindet. Nun, eine vorĂŒbergehende Frage - um zu verstehen, wo der Wind weht. Und erkunden die georĂ€umliche Berechnungen in der R .


Im Prinzip war sofort klar, dass ich nicht nur ein separates Familienhaus (vor Ort) ziehen wĂŒrde, wenn ich in einem zivilisierten Gebiet bleiben und mit einer tĂ€glichen Radtour die globale ErwĂ€rmung erreichen möchte. Eine andere ĂŒbliche lokale Option ist der Kauf von Duplex oder Triplex, d.h. HĂ€user, in denen es zwei oder drei Wohnungen gibt: Sie wohnen in einer,im Rest zĂŒchtest du KaninchenDer Rest wird den Mietern ĂŒbergeben. Dann erscheint eine andere unbekannte Menge - Mieteinnahmen.


Daher wollte ich eine Karte der Stadt mit den zum Verkauf stehenden Immobilienpreisen und Mietpreisen erstellen und auch nachverfolgen können, wie sich dies alles im Laufe der Zeit Àndert.


zillow, , , , , , : https://apciq.ca/en/real-estate-market/. , , .


, , , , , , : https://github.com/Froren/realtorca


— , , - requests beatifulsoap, .


— , , , , , ; , .


, openstreet map, .



— , , sqlite , , . , , , , ..


R, tidy-verse, Simple Features for R, — - Geocomputation with R, ggplot2 ( tidyverse), tmap.


, , (join?) .



, , dplyr , :


R , :


library(tidyverse)
library(sf)

property<-read_csv("....") %>% 
 st_as_sf(coords=c("lng","lat"), crs=4326) %>% 
 st_transform(crs=32188)

:


neighbourhood<-geojson_sf("quartierreferencehabitation.geojson") %>%
 st_transform(32188) %>% 
 filter(nom_qr %in% c("Saint-Louis", "Milton-Parc")) %>% 
 summarize() %>% 
 st_buffer(dist=0)

:


neighbors <- st_join(property, neighbourhood, left=F)

openstreetmap :


osm_neighbourhood<-read_osm(st_bbox(neighbourhood%>%st_transform(4326)), ext=1.5, type="esri")

tmap :


library(tmap)
library(tmaptools)

tm_shape(osm_neighbourhood) + tm_rgb(alpha=0.7)+
  tm_shape(neighbourhood) + tm_borders(col='red',alpha=0.8)  + 
  tm_shape(neighbors) + tm_symbols(shape=3,size=0.2,alpha=0.8) +
  tm_shape(ref_home) + tm_symbols(col='red',shape=4,size=0.5,alpha=0.8)+
  tm_compass(position=c("right", "bottom"))+
  tm_scale_bar(position=c("right", "bottom"))

Bild
, :


Bild


( ):


lm(price ~ parking:area_interior)

:


## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                33776.10   22175.97   1.523    0.129    
## parkingFALSE:area_interior   444.28      23.54  18.876   <2e-16 ***
## parkingTRUE:area_interior    523.01      19.65  26.614   <2e-16 ***

.. 444$ 33, +523$.


, 443k$, [433k$ — 453k$]


, , :


Bild


.. , .. . , . , , , generalized linear model inverse Gaussian distribution , - , :


Bild


: 435k$, 95% [419k$ — 450k$] — , .


, , , — .
, , — .. , , ( X X ) .


, () , ( , ).


Bild


generalized linear model inverse Gaussian distribution :


glm(price_sqft ~ parking + bedrooms,family=inverse.gaussian(link="log")

:


## (Intercept)    parkingTRUE   bedrooms2   bedrooms3   bedrooms4 
## 503.1981961   1.1215828   0.9720589   0.9662187   0.8325715

.. , 503$, 12% , — 2.8%, 3 — 3.3%, 4 17%, .
430k$ [ 413k$ — 448k$]



. .
- , - , — - , ?
, loess.
Bild


, — - .
Bild


, . , ( ) .


“ ” Generalized additive model


, . R mgcv gam:


gam(price_sqft ~ parking + bedrooms + s(start_date, k=24), family=inverse.gaussian(link="log"))

, , inverse Gaussian distribution, , , 24 . gam — , k .


( 2 ):


Bild


, : 429k [413k-447k], . . , .



, , .
Bild


, 60 . , .



, , . , 1, - :


#     
selected_mls=17758383 
#    2
max_distance=2000  
#       
plex_pe<-prop_geo_p %>% filter(type!='Apartment', type!='House')
ref<-plex_pe%>%filter(mls==selected_mls) 

#     
search_roi <- st_buffer(ref, max_distance) 
#      ,    -  
result <- st_intersection(plex_pe %>% filter(mls!=selected_mls), search_roi) %>% 
filter(area_interior<10000, area_interior>100,area_land>0,price<1e7,price>100 ) 

:


Bild


:


Bild


, , , - — , ( XX ), ..
, 523k$, [ 570k$ — 620k$]



, . , . sf :


, (), , :


aggregate(filter(kijiji_geo_p,bedrooms==2)%>%dplyr::select(price), mtl_p, median, join = st_contains)

Bild


, . . .
, :


gam(price_sqft ~ type + bedrooms + parking + s(x,y,k=100), family=inverse.gaussian(link="log"))

, 100:


pred_rent_whole <- raster(extent(mtl_land),res=100)
crs(pred_rent_whole)<-crs(mtl_land)
my_predict<-function(...) predict(...,type="response")
pred_rent_whole<- raster::interpolate(pred_rent_whole, model_rent_geo_whole, fun=my_predict, xyOnly=T,const=data.frame(bedrooms=2))

#      
pred_rent_whole <- mask(pred_rent_whole, mtl_land)

tmap:


tm_shape(osm_mtl)+tm_rgb(alpha=0.6)+
  tm_shape(mtl_arr) + tm_borders(alpha=0.8, col='black')+
  tm_shape(pred_rent_whole)+tm_raster(style="cont",alpha=0.7, title='$')+  tm_shape(subway_stop_p%>%dplyr::select(stop_name))+tm_symbols(col='blue',alpha=0.2,size=0.03)+
  tm_shape(subway_p)+tm_lines(col='blue',alpha=0.2)+
  tm_compass(position=c("right", "bottom"))+
  tm_scale_bar(position=c("left", "bottom"))+
  tm_layout(scale=1.5)

Bild
— .


, .
Bild


, .
Bild


, ( /( * ).
.


Bild


( / ).
Bild


, , ( ).


Bild



, R bewerten, was, wann und wo zu kaufen oder zu verkaufen ist. Das Leben ist jedoch komplizierter. In der realen Anwendung gibt es nicht genĂŒgend Kenntnisse ĂŒber den tatsĂ€chlichen Verkaufspreis (in unserer Region steht dies nur registrierten Maklern zur VerfĂŒgung). Sie sollten also nicht erwarten, dass die erhaltenen Prognosen zu 100% mit der RealitĂ€t ĂŒbereinstimmen. Im Allgemeinen ist es nicht meine Schuld, wer sich nicht versteckt hat.


Quelle


Alle Daten und der Quellcode befinden sich im Repository . Kaufen Sie unsere Elefanten!


Bonus fĂŒr diejenigen, die bis zum Ende gelesen haben


Interaktive Karte mit den Ergebnissen: http://www.ilmarin.info/re_mtl/


All Articles