スクレイピングしたデータを解析しやすくする

スクレイピングしたデータが処理しづらいです。

前処理しておくと解析しやすくなるので重要だ

前回の記事でスクレイピングをしました。そのデータを今回は使用します。

データの前処理

必要なライブラリをインポートします。

import pandas as pd
import re

前回スクレイピングしたデータを読み込みます。

df = pd.read_csv("suumo.jp.real_estate_all.csv")

価格を取得するための関数を作成します。数字と漢字が混じっているだけなので数字だけ抽出する形にします。

def get_price(value):
    n = re.sub(r"億円", "0000", value)
    n = re.sub(r"億|万円|万.*|~.*|※.*", "", n)
    return n

抽出した”販売価格”を”販売価格(万円)”に入れ替えます。

df["販売価格(万円)"] = df["販売価格"].apply(get_price)

年を抽出する関数を作成します。

def extract_year(value):
    n = re.sub("年.*", "", value)
    return n

抽出した”築年月”を”築年”に入れ替えます。

df["築年"] = df["築年月"].apply(extract_year)

月を抽出する関数を作成します。

def extract_month(value):
    n = re.sub(".*年", "", value)
    n = re.sub("月", "", n)
    return n

抽出した”築年月”を”築月”に入れ替えます。

df["築月"] = df["築年月"].apply(extract_month)

面積を変換する関数を作成します。

def convert_area(value):
    n = re.sub("m2", "", value)
    n = re.sub(r"(.+)", "", n)
    return n

バルコニーと専有面積に適用します。

df["バルコニー(m2)"] = df["バルコニー"].apply(convert_area)
df["専有面積(m2)"] = df["専有面積"].apply(convert_area)

”沿線・駅”の情報から沿線、駅、徒歩、バスに分けて抽出します。lambda関数を使用して適用します。

バスのみ、それを使用しているかどうかのFalse、Trueで設定しています。

df["沿線"] = df["沿線, 駅"].apply(lambda x: x.split("「")[0])
df["駅"] = df["沿線, 駅"].apply(lambda x: x.split("「")[1].split("」")[0])
df["徒歩(分)"] = df["沿線, 駅"].apply(lambda x: re.sub("徒歩|バス.*停歩", "", x.split("「")[1].split("」")[1]).replace("分", ""))
df["バス"] = df["沿線, 駅"].apply(lambda x: True if "バス" in re.sub("徒歩", "", x.split("「")[1].split("」")[1]).replace("分", "") else False)

今回、置き換えられた項目を削除します。

df = df.drop("バルコニー", axis=1)
df = df.drop("専有面積", axis=1)
df = df.drop("築年月", axis=1)
df = df.drop("販売価格", axis=1)
df = df.drop("沿線, 駅", axis=1)

データを保存します。

df.to_csv("suumo.jp.real_estate_all_convert.csv")

変更前は下記になります。

変更後は下記です。各項目が分かれているので前処理しやすくなっています。

Close Bitnami banner
Bitnami