住宅価格は多数の要因から形成されます。その主な要因は、市内中心部に近いことと、近隣のさまざまなインフラストラクチャの可用性です。 しかし、実際の価格は紙の新聞と不動産サイトにのみあります。 モスクワで、Python、Yandex API、および猫の下のシーンからの特別なレポートであるmatplotlibを使用して、不動産価格で地図を作成します。
仮説
モスクワに住んでいない人として、私はモスクワの価格の性質を次のように評価します。
- 非常に高価 -ガーデンリング内
- 高価 -ガーデンリングからTTKまで
- 非常に高価ではありません -TTKとMKADの間で、価格はMKADに向かって直線的に減少します
- 安い -モスクワ環状道路を越えて
マップには、重要なオブジェクトまたは工業地帯の近接に関連するローカルの最大値と最小値が含まれます。 また、モスクワ環状道路の前後には価格差もあります。 このリングは基本的に市の行政境界線と一致しています。
参考文献として、記事の最後に、数百行の優れたPythonコードではない行が用意されています。
研究のために、私はこの夏のデータを持つ2つの不動産サイトを取り上げました。 新しい建物と二次住宅に関する合計24,000のエントリがサンプルに参加し、同じ住所の異なる広告が価格で平均されました。
広告はスクリプトによって解析され、次の形式でsqliteデータベースに保存されました。
, , ..
Webスパイダーについて
機能を構築する
関数を平面全体に一般化するには、使用可能な点を使用して関数を補間する必要があります。 これには、scipyモジュールの
LinearNDInterpolator
関数が適しています。 これを行うには、scipyとして知られる科学ライブラリのセットでpythonをインストールするだけです。 データが非常に不均一である場合、平面上でもっともらしい関数を選択することはほとんど不可能です。
LinearNDInterpolator
メソッドは、 Delaunay三角形分割を使用して、平面全体を多数の三角形に分割します。
関数を構築するときに考慮すべき重要な要素は、関数の値の広がりです。 広告の中には
一方、補間の結果は勾配地獄のように見えます(クリック可能):
知覚に便利なマップを取得するには、取得した値を離散レベルに分配する必要があります。 その後、地図は7年生のアトラスのページのようになります(クリック可能):
マップ上の離散化について
価格の全体像を見たいのか、平均値付近の変動を見たいのかによって、データ編集を適用する必要があります。 データの分布は値のスケールでより均一になり、値が減少し、小さな値が増加します。 コードでは、次のようになります。
関数は、 wolframalphaの 3m-4mポイントを近似することにより経験的に選択されました 。
zz = np.array(map(lambda x: map(lambda y: int(2*(0.956657*math.log(y) - 10.6288)) , x), zz)) #HARD zz = np.array(map(lambda x: map(lambda y: int(2*(0.708516*math.log(y) - 7.12526)) , x), zz)) #MEDIUM zz = np.array(map(lambda x: map(lambda y: int(2*(0.568065*math.log(y) - 5.10212)) , x), zz)) #LOW
関数は、 wolframalphaの 3m-4mポイントを近似することにより経験的に選択されました 。
線形補間法では境界点の外側の値を計算できないことに注意してください。 したがって、スケールが十分に大きいグラフでは、非常に多角形が表示されます。 結果の図にグラフが完全に内接するようにスケールを選択する必要があります。
統計の別の見方は、低価格帯と高価格帯のあるマップとして役立ちます。 低価格と高価格の境界を動的に変化させることにより、ダイナミクスにおける価格の位置を確認できます。 各ポイントでの価格の値はもはや役割を果たしません。特定のグループのポイントのグループ化のみが貢献します(クリック可能)。
計算は、ある点での重力場の計算に似ています。 最適化のために、フィールドの最終値に実際に寄与するポイントのみを考慮します。 計算後、結果はスプレーに似ています(クリック可能)。
他に何が変身しますか?
厳密なフィールドグラフの構築により、「高価な」フィールドが「安価な」フィールドよりも局所的に優勢であることに対応する点の分散が示されます。 これらのポイントはノイズのようなもので、グラフを台無しにします。 たとえば、十分に大きな値を持つ画像の上にあるメディアンフィルターによって、それらを削除できます。 このために、IrfanViewコマンドラインインターフェイスを使用しました。
可視化
結果の画像をモスクワの概略図と組み合わせます。 Yandex APIを使用すると、座標で地図を取得し、経度と緯度の角度寸法、および目的の画像サイズを指定できます。
リクエストの例:
static-maps.yandex.ru/1.x/?ll=37.5946002,55.7622764&spn=0.25,0.25&size=400,400&l=map
問題は、示された角度寸法が可視領域の境界を決定するのではなく、そのサイズが保証されることだけです。 これは、角度寸法> = 0.25の画像を取得することを意味します。 可視座標の境界に対処する方法はなく、それらは手動で検索されました。
カスタマイズについて
Yandexタグを使用してカードを相互に位置合わせし、指定された座標でマップ上にポイントを描画し、タグ付きのマップを取得できます。
PILライブラリーからの2、3回の呼び出しについて、画像は快適な透明度レベルと組み合わされます。
map_img = Image.open(map_img_name, 'r').convert('RGBA') price_img = Image.open(prices_img_name, 'r').convert('RGBA') if price_img.size == map_img.size: result_img = Image.blend(map_img, price_img, 0.5)
結果
あるレベルのコンパンディングとアニメーションオプションのレベルが異なる3つの画像。
ちょっとした分析:
一般的に、仮説が予測したように、ガーデンリングとTTKリングの内部では、住宅価格は最大であり、中心からの距離とともに減少します。 ただし、MKAD内では、平均価格は西部と南西部で維持されます。 MKADの外側、および第3輸送リングを越えた東部では、価格は平均を下回っています。
すべてが詳細に面白く、主な領域に注目します。
-
水たまりとスズメの丘には、スズメの丘のエリアに高価な住宅はありません。おそらく、エリア全体が上下の境界値に従って建設されました - モスクワ州立大学の基礎図書館近くの住宅地、建設中の高層ビル、およびモスフィルム池の近くに建てられた建物は、おそらく活発な建設と広大な森林面積のために、より高価です。 記念シナゴーグの領土の高値とそれらにスクエア。 アンナハーマンは、周囲の価格と、公園や野生生物保護区の中での彼女の位置にも影響を受けています。
- 地下鉄クリラツコエ駅とジューコフ元Marの間のエリアでは、住宅も高価であると考えられています
- MKADを超えて墓地に近接しているにもかかわらず、General Beloborodov Street沿いの家は価格が高いことで有名です。
マップで見ることができるように、理論は実践によって完全に確認され、インフラストラクチャ、中心までの距離、および有名なモスクワ構造への近接の成功した組み合わせが座標上の線形補間関数によって明らかにされます。
残念ながら、行われた作業はほとんど自動化されていませんが、記事がハブロフスク市民にとって興味深いものである場合、私は国の残りの大都市の同様の地図を作成します。
Webスパイダーのコード、プログラム自体、および使用されるデータベースは、 GitHubから入手できます 。