基于北京二手房价数据的探索性数据分析和房价评估——数据的读取和预处理

数据分析项目——北京二手房价数据分析

整个项目的代码和数据集获取:
https://github.com/Proberen/Data-analysis___Beijing__Houseprice

1 读取数据

在本阶段需要导入数据集中的数据,并且对数据进行初步观察,为了方便后续的操作,对数据集中的中文字段进行修改。

1.1 导入数据

使用pandas的.read_csv方法读取数据集bj.csv,编码方式为gbk

data = pd.read_csv('./数据集/bj.csv', encoding='gbk')

1.2 列重命名

data = data.rename(columns={'简介': 'Introduction', 
'小区': 'Quarters', 
'户型': 'HouseType',
 '面积': 'Area',
 '关注人数': 'PeopleNumber', 
 '观看次数': 'WatchNumber', 
 '发布时间': 'ReleaseTime',
 '房价': 'TotalPrice', 
 '单价/平': 'Price', 
 '城区': 'Dist', 
 '经纬度': 'Lotitude'})

处理后的数据:
在这里插入图片描述

2 数据预处理

2.1 统一数据格式

观察数据,可以发现在字段Area、PeopleNumber、WatchNumber、Price中存在影响分析的中文,例如单位、额外的解释等。

# 定义筛选中文字符的函数
def delete(cword):
    num = float(re.sub(r'[\u4e00-\u9fff]*\/*[\u4e00-\u9fff]','',cword))
    return num

在字段ReleaseTime中,单位包括月、天、年,因此在删除中文前需要将数据的单位统一转换为天。

# 定义筛选发布日期的函数
def reltime(data):
    days = re.findall(r'\d+天',data)
    months = re.findall(r'\d+个月',data)
    years = re.findall(r'\d+一年',data)
    if days:
        return int(re.sub(r'天','',days[0]))
    elif months:
        return 30*int(re.sub(r'个月','',months[0]))
    else:
        return 365

筛选:

# 进行筛选    
data['Area']=data['Area'].apply(delete)
data['PeopleNumber']=data['PeopleNumber'].apply(delete)
data['WatchNumber']=data['WatchNumber'].apply(delete)
data['Price']=data['Price'].apply(delete)
data['ReleaseTime']=data['ReleaseTime'].apply(reltime)

处理后的数据:
在这里插入图片描述

2.2 数据列的拆分

# 获取经纬度列
Lotitude = data['Lotitude']
# 初始化经度列、纬度列
Longitude = np.array(np.arange(len(Lotitude)),dtype=str)
Latitude = np.array(np.arange(len(Lotitude)),dtype=str)
# 分割数据并插入
for i in Lotitude.index:
    Longitude[i] = Lotitude[i].split(',',1)[0]
    Latitude[i] = Lotitude[i].split(',',1)[-1]
# 添加列
data['Longitude'] = Longitude
data['Latitude'] = Latitude

处理后的数据:
在这里插入图片描述

2.3 处理缺失值

数据集由于客观原因可能会存在缺失值,因此在对数据进行预处理时需要对数据集进行缺失值的检测和处理

# 统计缺失值的数量
data.isnull().sum()

结果:
在这里插入图片描述
可以看出本数据集中不存在缺失值,因此不需要进行下一步的处理

2.4 处理重复值

数据集在获取的时候可能会存在重复获取的情况,因此需要对数据进行重复值的检测和处理

# 删除重复行
data.drop_duplicates(inplace = True)
# 重置index
data.reset_index(inplace = True,drop = True)

在对数据进行预处理后,数据集共22152条数据,共13个字段,在数据进行重复值处理、缺失值处理后该数据集不存在缺失值,各字段的字符类型和描述如下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的冲浪码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值