不動産賃料の相場を予測するLINE BOTのプログラミング解説~スクレイピング、機械学習~
賃貸アパートや賃貸マンションを借りる際に、家賃の相場が知りたいと思いませんか?SUUMOやHOME'Sなどをざっと眺めてみても、家賃が高いのか安いのかわかりません...。
今回は、不動産賃貸サイトから賃料や最寄り駅をスクレイピングして、機械学習で学習します。その学習したモデルを使って、条件(最寄り駅や平米数)を入れることで、賃料の相場がわかるLINE BOTを作成します。
こんな方におススメ(*´▽`*)
・スクレイピングからLINE BOT作成までの一通りの流れを体験したい
・機械学習を実装する方法が知りたい
・今までの記事の内容を網羅的に使ってみたい
概要
今回は今までの個別の記事で解説をしてきた内容を網羅的に使いLINE BOTを作ります。以下の順番で、プログラムを書いていきます。
・不動産賃貸サイト(SUUMO)からWebスクレイピングでデータを取得する
→家賃、管理費、最寄り駅、駅からの距離、築年数など
・取得したデータをGoogle BigQueryに保存
・BigQueryのデータを重回帰分析(ラッソ回帰)で学習して学習モデルを作成
→今まではAPIを使ってましたが、今回はsklearnライブラリーを利用します
・LINE BOTで、希望条件を入力すると、予測賃料が返ってくる
完成したLINE BOTの動き
完成したLINE BOTは次のような動きになります。
1、LINE BOTに何かメッセージを送ると最寄り駅の入力を促すメッセージを送信
2、最寄り駅からの徒歩所要時間を選択(クイックリプライ)
3、築年数を選択(クイックリプライ)
4、専有面積を選択(クイックリプライ)
5、予測賃料を表示
以上のように、最寄り駅、駅からの徒歩時間、築年数、専有面積を選択すると予測賃料を表示するLINE BOTになります。
プログラムの全体像を決める
概要で決めた内容をもとに、まずはどのようにプログラムを作っていくかを考えます。
①(scraping.py)はじめにスクレイピングでSUUMOからデータを取得します。ローカルでこのプログラムを実行して、取得したデータをBigQueryに保存するところまでを1つのプログラムにすることを目指します。
②(analysing.py)次に取得したデータをもとに学習モデルを作成するプログラムを作ります。また、LINE BOTで希望条件入力するときのために「駅名リスト」のデータベースを作っておきたいので、このファイルで合わせて駅名リストの作成まで作りたいと思います。このファイルもローカルで実行して、学習済みモデルのファイルと駅名リストのファイルの2つが作成されることを目指します。
③(read_pickle.py)次に②で学習したモデルを読み込み賃料を予測するプログラムを作ることを目指します。学習済みのモデルを別ファイルで保存しておくことで、毎回学習のためにBigQueryにアクセスする必要がなくなりますので、学習済みのモデルは別途保存しておくことをオススメします。
④(main.py)最後にLINE BOTで希望条件(最寄り駅、最寄り駅からの時間、平米数、築年数)を入力できるようにして、③で予測した家賃を出力することを目指します。
SUUMOからスクレイピングするプログラムを作る(scraping.py)
それでは、ココからプログラムを作りましょう。プログラムを作る前に、スクレイピングする内容を決めます。
スクレイピングの詳細仕様を決める
・スクレイピングするページ
「賃貸」の条件指定後の一覧ページから取得することとします。
ex)https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ra=013&cb=0.0&ct=9999999&et=9999999&cn=9999999&mb=0&mt=9999999&shkr1=03&shkr2=03&shkr3=03&shkr4=03&fw2=&ek=000525620&rn=0005&srch_navi=1
今回は、詳細ページは使わず、一覧ページから取得できるデータのみ取得します。また、一覧ページも「建物ごとに表示」と「部屋ごとに表示」の2つがありますが、「建物ごとに表示」を使います。
※賃貸ではなく売買など、別の一覧ページはHTMLが変わりますので、別ページからスクレイピングしたい場合は、今回解説するコードから変更しないとスクレイピングできません。
・スクレイピングする項目
①最寄り駅
②最寄駅からの距離
→バスの経路のみの場合は取得しない。また、3経路あるため、はじめのみ使うこととする。
③物件タイプ
→賃貸アパートなどの表記
④物件名
⑤住所
⑥築年数
⑦階数
⑧家賃
⑨管理費
⑩間取り
⑪専有面積
⑫詳細ページURL
※今回は上記すべてを学習データとして全部使うわけではありません。
学習に必要なデータのみ取得するということでも問題ありません。
・Google BigQueryの準備
スクレイピングしたデータを保存するために予めBigQueryも設定しておきます。基本的な設定方法は過去の記事を参考にしてください。
スクレイピングのプログラムを作る
それではココから実際のプログラムを作っていきましょう。
import requests
from bs4 import BeautifulSoup
def get_items(url):
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
items = soup.find_all("div", class_="cassetteitem")
まずは、スクレイピングにヤフオクの時と同様にBeautifulSoupを使うので、インポートします。そして、関数を作り、取得したいページのURLを引数に指定します。さらに取得したい値は、以下の画像のようにclassが"cassetteitem"なので、これを指定します。
ここから先は
¥ 2,000
この記事が気に入ったらチップで応援してみませんか?