房价数据转换和清洗2

简介: 1.下载厦门房价信息源文件下载链接:https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码:e1fg2.

1.下载厦门房价信息源文件

下载链接:https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码:e1fg

2.编写代码

1.原来的数据总共有15列:分别为:标题title、价格price、首付downPayment、户型sizeType、面积size、单价unitPrice、朝向orientation、楼层floor、装修decoration、社区community、区域region、学校school、房屋详情houseDetail、核心卖点keySellingPoint、配套设施equipment
2.进行简单的房价预测不需要用到文本识别和语义分析,因此不需要用到title、
keySellingPoint、equipment,根据现实的情况来说因为先有单价才有总房价,
而进行预测的正是单价,所以用不到price、downPayment。观察房屋详情,发现
其中的数据有错误,有的20多层的楼房却显示没有电梯,这不符合高层住房电梯
规定,7层及以上住房必须安装电梯,不符合实际,所有房产有无电梯根据总楼层数判断
3.根据房屋的层数区分低层住宅、多层住宅、小高层住宅、高层住宅等类别
4.根据房屋的建造年代区分5年以内建造、6-10年前建造、11-15年前建造等类别
5.根据房屋所在行政区划分思明、集美、湖里、海沧、翔安、同安6个类别
6.根据房屋所在区域划分思北、莲花、厦大、中山路等类别

import pandas as pd
import re
import time
import json

def getSizeType(df):
    def findNumber(reStr,sourceStr):
        result_list = re.findall(reStr,sourceStr)
        if len(result_list):
            return result_list[0]
        else:
            return 0
    sizeType_list = []
    for i in range(len(df)):
        sizeType = df['sizeType'].iloc[i]
        sizeType_dict = dict(
            room = findNumber('([0-9]*)室',sizeType),
            hall = findNumber('([0-9]*)厅',sizeType),
            restroom =findNumber('([0-9]*)卫',sizeType)
        ) 
        sizeType_list.append(sizeType_dict)
    return pd.DataFrame(sizeType_list,columns=sizeType_list[0].keys())

def getPrice(df):
    df1 = df['price'].copy()
    for i in range(len(df1)):
        df1.iloc[i] = df1.iloc[i].strip("万")
    return df1

def getSize(df):
    df1 = df['size'].copy()
    for i in range(len(df1)):
        df1.iloc[i] = df1.iloc[i].strip("平米")
    return df1

def getElevator(df):
    ele_list = []
    for i in range(len(df)):
        str1 = df['floor'].iloc[i].split(' ')[1]
        allFloor = int(re.findall("共(.*)层",str1)[0])
        elevator = 1 if allFloor >= 8 else 0
        ele_dict = {'elevator':elevator}
        ele_list.append(ele_dict)
    df1 = pd.DataFrame(ele_list)
    return df1

def getSchool(df):
    df1 = df['school'].copy()
    for i in range(len(df1)):
        df1.iloc[i] = 1 if df['school'].iloc[i] == \
        df['school'].iloc[i] else 0
    return df1

def getHeightType(df):
    df1 = df['floor'].copy()
    heightType = ["低层住宅(1-3层)","多层住宅(4-7层)","小高层住宅(8-16层)",\
                  "中高层住宅(17-25层)","高层住宅(26-40层)","超高层住宅(40层以上)"]
    for i in range(len(df1)):
        str1 = df1.iloc[i].split(' ')[1]
        allFloor = int(re.findall("共(.*)层",str1)[0])
        if allFloor < 4:
            df1.iloc[i] = heightType[0]
        elif allFloor < 8:
            df1.iloc[i] = heightType[1]
        elif allFloor < 17:
            df1.iloc[i] = heightType[2]
        elif allFloor < 26:
            df1.iloc[i] = heightType[3]
        elif allFloor < 41:
            df1.iloc[i] = heightType[4]
        else:
            df1.iloc[i] = heightType[5]
    return pd.get_dummies(df1)

def getBuildTime(df):
    df1 = df['houseDetail'].copy()
    year_now = 2018
    for i in range(len(df1)):
        details = json.loads(df1.iloc[i])
        if '建筑年代' in details:
            year_build = int(details['建筑年代'].strip('年'))
        else:
            year_build = 2010
        year_diff = year_now - year_build
        if year_diff < 5:
            df1.iloc[i] = '5年以内建造'
        elif year_diff < 10:
            df1.iloc[i] = '6-10年前建造'
        elif year_diff < 15:
            df1.iloc[i] = '11-15年前建造'
        elif year_diff < 20:
            df1.iloc[i] = '16-20年前建造'
        else:
            df1.iloc[i] = '超过20年前建造'
    return pd.get_dummies(df1)
            
def getOrientation(df):
    return pd.get_dummies(df['orientation'])

def getHeight(df):
    df1 = df['floor'].copy()
    for i in range(len(df)):
        df1.iloc[i] = df['floor'].iloc[i].split(' ')[0][0]
    return pd.get_dummies(df1)

def getDecoration(df):
    df1 = df['decoration'].copy()
    for i in range(len(df)):
        df1.iloc[i] = df['decoration'].iloc[i].strip('修')
    return pd.get_dummies(df1)

def getDistrict(df):
    df1 = df['region'].copy()
    for i in range(len(df)):
        df1.iloc[i] = df['region'].iloc[i].split('-')[0]
    return pd.get_dummies(df1)

def getRegion(df):
    df1 = df['region'].copy()
    for i in range(len(df)):
        region = df['region'].iloc[i].split('-')[1]
        df1.iloc[i] = region.strip('(').strip(')')
    return pd.get_dummies(df1)
    
def cleanFloor(df):
    for i in range(len(df)):
        if '共' not in df['floor'].loc[i]:
            df = df.drop([i])
    df = df.reset_index(drop=True)
    return df

def cleanSizeType(df):
    for i in range(len(df)):
        if '室' not in df['sizeType'].loc[i]:
            df = df.drop([i])
    df = df.reset_index(drop=True)
    return df

def cleanCommunity(df):
    df = df[df['community'] == df['community']]
    df = df.reset_index(drop=True)
    return df

def cleanDecoration(df):
    for i in range(len(df)):
        if df['decoration'].loc[i].strip() == '暂无':
            df = df.drop([i])
    df = df.reset_index(drop=True)
    return df

def cleanOrientation(df):
    for i in range(len(df)):
        if df['orientation'].loc[i].strip() == '暂无':
            df = df.drop([i])
    df = df.reset_index(drop=True)
    return df 

if __name__ == "__main__":
    startTime = time.time()
    df = pd.read_excel("厦门房价数据(房天下版).xlsx")
    df = cleanCommunity(df)
    df = cleanFloor(df)
    df = cleanSizeType(df)
    df = cleanDecoration(df)
    df = cleanOrientation(df)
    df = df.drop_duplicates().reset_index(drop=True)
    #下面几个字段是列数较少的字段
    price = getPrice(df)
    size = getSize(df)
    sizeType = getSizeType(df)
    elevator = getElevator(df)
    school = getSchool(df)
    #下面的字段是通过get_dummies方法产生的9-1矩阵,列数较多
    heightType = getHeightType(df)
    buildTime = getBuildTime(df)
    orientaion = getOrientation(df)
    height = getHeight(df)
    decoration = getDecoration(df)
    district = getDistrict(df)
    region = getRegion(df)

    df_new = pd.concat([price,size,sizeType,elevator,school,heightType,\
                        buildTime,orientaion,height,decoration,\
                        district,region],axis=1)

    df_new.to_excel("厦门房价数据处理结果2.xlsx",columns = df_new.iloc[0].keys())
    print("数据处理共花费%.2f秒" %(time.time()-startTime))   

3.数据处理结果截图


img_3c671d09361bbfbf3efcd293c2e2aa8d.png
处理结果截图.png

从上图中可以看出房屋分类可以分为81个区域,10个房屋朝向,5个装修程度。产生的新DataFrame为df_new变量,共有21502行,123列。123列中有1列为房价,为需要预测的数据,有122列为输入变量。

目录
相关文章
|
数据处理
房价数据转换和清洗
1.下载厦门房价信息源文件 下载链接:https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码:e1fg 2.新建一个ipynb文件 下载成功后,在源文件所在的文件夹中下图所标示的位置中输入cmd,确定命令正确后运行。
1022 0
|
9月前
|
数据采集 机器学习/深度学习 算法
scikit-learn中的数据预处理:从清洗到转换
【4月更文挑战第17天】在机器学习中,scikit-learn是用于数据预处理的强大Python库,涵盖数据清洗和转换。数据清洗涉及处理缺失值(如使用SimpleImputer和IterativeImputer填充)和异常值,以及分类数据的编码(如标签编码和独热编码)。数据转换包括特征缩放(如StandardScaler和MinMaxScaler)和特征选择(过滤、包装和嵌入方法)。这些工具能提升数据质量,优化模型性能,但需根据具体问题选择合适方法。
|
数据采集 数据可视化 大数据
数据清洗_剪除反常数据_统计分布|学习笔记
快速学习数据清洗_剪除反常数据_统计分布
138 0
数据清洗_剪除反常数据_统计分布|学习笔记
|
数据采集 机器学习/深度学习 数据挖掘
时序数据的数据预处理
最近在读《数据挖掘》,其中关于数据预览和预处理(preprocessing)的内容没有介绍时序数据的处理,但这恰是很重要的应用场景。例如这道捕鱼题https://tianchi.aliyun.com/competition/entrance/231768/information我将根据书中和网络上找到的资料,尝试去清理其中的数据,并将思路记录下来,以备后查。
2089 0
时序数据的数据预处理
|
数据采集 机器学习/深度学习 算法
04 数据清洗和转换
大部分机器学习模型处理的都是特征,是实际工作中最耗时的一部分。大部分情况下,收集到的数据需要经过预处理后才能被后续的机器学习算法所使用。 一、数据预处理包括以下几个步骤 1、数据过滤 比如用户ID是一个唯一值,当出现两个相同的用户ID就需要过滤掉一个。
1427 0
|
数据挖掘 算法
数据挖掘之数据准备——原始数据的转换
接下来介绍的几个数据转换常见类型与问题无关,并可能改善数据挖掘的结果。在特定应用中选择和使用技术,取决于数据的类型,数据量和数据挖掘任务的一般特征。
2310 0
基于Excel2013的数据转换和清洗
本文操作环境为Win10,Excel2013 设置单元格格式 方法一 image.png 方法二:框住想要设置的区域,右键弹出菜单,如下图所示位置。
1206 0
|
数据采集 数据挖掘 API
3_数据分析—数据清洗及特征处理
3_数据分析—数据清洗及特征处理
489 0
3_数据分析—数据清洗及特征处理
|
新零售 存储 算法
时间序列数据的处理
随着云计算和IoT的发展,时间序列数据的数据量急剧膨胀,高效的分析时间序列数据,使之产生业务价值成为一个热门话题。阿里巴巴数据库事业部的HiTSDB团队为您分享时间序列数据的计算分析的一般方法以及优化手段。
5143 0

热门文章

最新文章