安居客python二手房数据预处理

题记:

 继上篇对安居客二手房数据进行爬取之后,接下来是对安居客进行数据预处理。

 一:

 观察上述数据可以发现爬取的数据比较杂乱无章,这时需要我们对数据进行处理,比如把一些无效数据清除掉,还有一些机器无法识别的数据,方便后期运用集群对数据进行获取与观察。

清洗的数据包括:房屋编号,元/㎡,月供,房产等

二:
1.

对数据进行处理需要用到以下函数:

import shutil

import pandas as pd
import re
import os

尤其是pandas函数,可以帮助我们很方便的对数据进行处理(pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法)

2.

接下来具体对数据进行处理

(1)先获取处理前的文件

需要用到shutil函数对文件进行移动。对文件进行了一个获取

代码如下

#移动文件
def dealData():
    if os.path.exists("./安居客_处理前.txt"):
        os.remove("./安居客_处理前.txt")
    if os.path.exists("./安居客_处理后.txt"):
        os.remove("./安居客_处理后.txt")

    srcfile = "../数据采集/安居客.txt"
    dstfile = "./安居客_处理前.txt"
    shutil.copy(srcfile, dstfile)  # 移动文件
    print("移动文件 %s -> %s" % (srcfile, dstfile))

    transformData()

(2)打开文件后这时需要用到上面所提到pandas函数,通过对上述数据的观察,可以发现每列数据的开头都有房屋编号,这时我们可以看成一个列函数,用columns对数据进行一个排序,对每一个数据赋一个元素,方便我们接下来对数据进行处理。

代码如下:

 data.columns = ['编号', '区县', '片区', '小区名称', '房屋单价', '房屋总价',
                    '户型', '楼层', '面积', '朝向', '装修',
                    '建设时间','房屋属性','用途','产权','产权时间',
                    '唯一住房', '房贷','中介公司','挂牌时间']
    print(data.head())

(3)

data = data[data['编号'].str.contains('房屋编码')]

把房屋编号替换成编号,这时就可以对数据进行处理了。(同时把无效数据进行处理掉)

处理方法有三种等

data["编号"] = data.apply(lambda x: formatHouseNumber(x), axis=1)
'''
格式化房屋编号
'''
def formatHouseNumber(colunm):
    return colunm["编号"].replace("房屋编码:","")

用函数方法对数据进行处理,把“房屋编号”替换成编号

data["房屋单价"] = data.apply(lambda x: x["房屋单价"].replace("元/㎡", ""), axis=1)

直接在data中进行直接处理,对房屋单价进行处理

'''
首付
'''
def formatHouseFirstPay(colunm):
    partten = "首付(\d+)万.+月供(\d+.\d+)元"
    return int(re.search(partten,colunm["房贷"]).group(1)) * 10000

用re正则表达式获取相应的数据

其他的数据处理方法诸如此类

(4)

1.需要注意的是

    data["楼层位置"] = data.apply(lambda x: x["楼层"].split("(")[0], axis=1)
    data["楼层数"] = data.apply(lambda x: re.search("\d+",x["楼层"]).group(), axis=1)
    data.drop(['楼层'], axis=1, inplace=True) #楼层数据处理完,不再需要

对楼层进行处理时,需要楼层位置和楼层数,把楼层进行了两部分的拆分,所以最后我们要把楼层删除掉(房贷处理也是如此)

2.需要注意的是,数据在pandas中数据类型为float型,要用数据类型处理时需要判断是否是浮点型

'''
建设产权时间
'''
def formatHouseRightTime(colunm):
    return "未知" if type(colunm["产权时间"]) == float else colunm["产权时间"]

最后处理文档如下:

写入文件:data.to_csv("./安居客_处理后.txt", sep=";", index=False)

对安居客的数据处理就完成了

源代码如下:

import shutil

import pandas as pd
import re
import os

'''
格式化房屋编号
'''
def formatHouseNumber(colunm):
    return colunm["编号"].replace("房屋编码:","")

'''
格式化房屋总价
'''
def formatHouseTotal(colunm):
    return int(re.search("\d+",colunm["房屋总价"].replace("房屋编码:","")).group())*10000

'''
建设时间
'''
def formatHouseBuildTime(colunm):
    return re.search("\d+", colunm["建设时间"]).group() if re.search("\d+", colunm["建设时间"]) != None else "未知"

'''
建设产权
'''
def formatHouseRight(colunm):
    return re.search("\d+", colunm["产权"]).group() if re.search("\d+", colunm["产权"]) != None else "未知"

'''
建设产权时间
'''
def formatHouseRightTime(colunm):
    return "未知" if type(colunm["产权时间"]) == float else colunm["产权时间"]

'''
唯一住房
'''
def formatHouseOnly(colunm):
    return "否" if type(colunm["唯一住房"]) == float else colunm["唯一住房"]


'''
首付
'''
def formatHouseFirstPay(colunm):
    partten = "首付(\d+)万.+月供(\d+.\d+)元"
    return int(re.search(partten,colunm["房贷"]).group(1)) * 10000


'''
月供
'''
def formatHouseMonthPay(colunm):
    partten = "首付(\d+)万.+月供(\d+.\d+)元"
    return re.search(partten, colunm["房贷"]).group(2)

'''
预处理数据
'''
def transformData():
    data = pd.read_csv("./安居客_处理前.txt", header=None, sep=";", encoding="utf-8")
    #数据实例(5列换行):
    #房屋编码:1906158650072067;双流华府;中铁骑士府邸;20465.0元/㎡;185 万 ;
    #4室2厅2卫;低层(共28层);90.4㎡ ;南北;精装修;
    #2016年竣工/普通住宅            ;商品房住宅;普通住宅;70年产权;满二年;
    #是;首付55万,月供6872.91元;九业房产;2021-3-14
    data.columns = ['编号', '区县', '片区', '小区名称', '房屋单价', '房屋总价',
                    '户型', '楼层', '面积', '朝向', '装修',
                    '建设时间','房屋属性','用途','产权','产权时间',
                    '唯一住房', '房贷','中介公司','挂牌时间']
    print(data.head())

    #删除乱码对应的行,只保留包含“房屋编码”的数据
    data = data[data['编号'].str.contains('房屋编码')]

    data["编号"] = data.apply(lambda x: formatHouseNumber(x), axis=1)
    data["房屋单价"] = data.apply(lambda x: x["房屋单价"].replace("元/㎡", ""), axis=1)
    data["房屋总价"] = data.apply(lambda x: formatHouseTotal(x), axis=1)
    data["楼层位置"] = data.apply(lambda x: x["楼层"].split("(")[0], axis=1)
    data["楼层数"] = data.apply(lambda x: re.search("\d+",x["楼层"]).group(), axis=1)
    data.drop(['楼层'], axis=1, inplace=True) #楼层数据处理完,不再需要
    data["面积"] = data.apply(lambda x: x["面积"].replace("㎡ ", ""), axis=1)
    data["建设时间"] = data.apply(lambda x: formatHouseBuildTime(x), axis=1)
    data["产权"] = data.apply(lambda x: formatHouseRight(x), axis=1)
    data["产权时间"] = data.apply(lambda x: formatHouseRightTime(x), axis=1)
    data["唯一住房"] = data.apply(lambda x: formatHouseOnly(x), axis=1)
    data["首付"] = data.apply(lambda x: formatHouseFirstPay(x), axis=1)
    data["月供"] = data.apply(lambda x: formatHouseMonthPay(x), axis=1)
    data.drop(['房贷'], axis=1, inplace=True)  # 房贷数据处理完,不再需要

    data.to_csv("./安居客_处理后.txt", sep=";", index=False)
    #data.to_csv("./安居客_处理前.txt",sep=";", columns=["编号","小区名称","房屋单价","房屋总价","户型","面积","房贷"],index=False)
    #编号;区县;片区;小区名称;房屋单价;房屋总价;户型;面积;朝向;装修;建设时间;房屋属性;用途;产权;产权时间;唯一住房;中介公司;挂牌时间;楼层位置;楼层数;首付;月供
    #可以通过header修改列的顺序


#移动文件
def dealData():
    if os.path.exists("./安居客_处理前.txt"):
        os.remove("./安居客_处理前.txt")
    if os.path.exists("./安居客_处理后.txt"):
        os.remove("./安居客_处理后.txt")

    srcfile = "../数据采集/安居客.txt"
    dstfile = "./安居客_处理前.txt"
    shutil.copy(srcfile, dstfile)  # 移动文件
    print("移动文件 %s -> %s" % (srcfile, dstfile))

    transformData()


if __name__ == "__main__":
    dealData()

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 关于python数据预处理上海二手房的问题,我可以为您提供一些指导。首先,您需要收集二手房的数据,可以通过网站爬虫或者其他方式获取。接下来,您需要对数据进行清洗、去重、筛选等操作,以确保数据的准确性和可用性。然后,您可以对数据进行探索性分析,找出数据中的规律和趋势。最后,您可以使用数据预处理技术,如特征选择、特征缩放等,来提高模型的预测性能。希望这些信息可以帮助到您。 ### 回答2: 对于python数据预处理上海二手房,首先需要使用相关的Python库,如Pandas和NumPy,以便对数据进行处理和分析。 首先,我们需要收集二手房数据。可以通过爬取上海二手房相关网站的信息或者使用API获取数据。收集到的数据可能包括房源的价格、面积、所在小区名称、所在区域、楼层、房型等信息。 接下来,我们需要对收集到的数据进行清洗。首先需要处理缺失,可以使用Pandas的dropna()函数删除包含缺失的行或列,或者使用fillna()函数填充缺失。然后,需要对数据进行去重操作,以确保每条数据的唯一性。 在数据清洗完成后,可以对数据进行特征工程。可以通过Pandas的apply()函数创建新的特征,如将房源的所在区域进行编码化,将面积进行分段等。此外,还可以进行特征选择,使用相关性分析或其他统计方法,选择与房价相关性高的特征。 然后,对于一些文本型数据,如小区名称等,可以通过文本挖掘的方式进行处理。可以使用Python的Natural Language Toolkit(NLTK)库中的词袋模型或TF-IDF模型对文本进行向量化。 最后,可以对数据进行可视化分析,以便更好地理解数据。可以使用Python的Matplotlib库对数据进行绘图,如绘制房价与面积、区域的关系图等。 通过以上步骤,我们可以完成对上海二手房数据预处理工作。这将有助于我们更好地理解数据,提取有用的特征,并进一步进行建模和分析。 ### 回答3: Python数据预处理在上海二手房行业中具有重要的作用。作为一种高级编程语言,Python提供了许多强大的工具和库,用于处理和清洗数据,使其适用于建模和分析。 首先,Python可以帮助我们导入和读取原始数据。我们可以利用Pandas库中的read_csv()函数读取上海二手房数据的CSV文件,将其转换为数据框,以方便后续的处理和分析。 其次,Python可以进行数据清洗和预处理。我们可以使用Pandas和NumPy库来处理缺失和异常。例如,我们可以使用fillna()函数将缺失替换为均或中位数,使用drop_duplicates()函数去除重复数据,使用clip()函数将异常限制在合理的范围内。 此外,Python还可以进行特征工程,以提取有用的特征并创建新的特征。我们可以使用Pandas库的apply()函数应用自定义函数来处理和转换数据。例如,我们可以创建一个函数来提取二手房的房龄,并将其添加为一个新的特征。 Python还可以进行数据可视化,以帮助我们更好地理解数据的分布和关系。我们可以使用Matplotlib和Seaborn库绘制直方图、散点图、箱线图等图表,从而发现数据中的规律和趋势。 最后,Python还可以进行数据归一化和标准化。通过使用Scikit-learn库中的MinMaxScaler和StandardScaler类,我们可以将数据转换为统一的尺度,以便于模型的训练和预测。 总的来说,Python在上海二手房数据预处理中发挥了重要的作用。它提供了丰富的工具和库,可以帮助我们导入、清洗、处理和分析数据,为后续的建模和预测奠定了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值