数据链接:https://pan.baidu.com/s/1I0w4129XYEW2Iwvc4rm1pA
提取码:hdc3提示:
数据是自己爬的,如果有小伙伴想看,我会再更新数据的爬虫部分。
房天下网站:https://newhouse.fang.com/house/s/b81-b91/
数据可视化小项目,自己杂糅的,希望对大家有帮助,有什么问题评论区留言~
一、数据处理
1.数据导入
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
df = pd.read_csv('北京小区数据信息.csv')
df.head()
2.数据预处理
把数据里面非北京地区的删了
(数据是网站根据北京用户需求推介的,我只想要北京和北京周边的)
df=df[-df.所在区.isin(['非北京周边','海阳城区','宝坻','秦皇岛','永清','涞水','怀来','天津','霸州','大厂','廊坊','涿州','固安','崇礼'])]
df=df[-df.均价.isin(['价格待定元/㎡'])]
将数据处理一下,加入一些更有意义的列:
1. 北京各地区房产均价
房价数据有两类:xxx元/m^2,xxxx万元/套起;
先做xxx元/m^2的
estate_single = df[df['均价'].str.contains('元/㎡')]
estate_single['均价'] = [int(i.split('元/㎡')[0]) for i in estate_single['均价']]
estate_mean = estate_single[['所在区', '均价']].groupby('所在区').mean()
estate_mean.reset_index(inplace=True)
estate_mean
再来做xxxx万元/套起的数据
import re
estate_tao = df[df['均价'].str.contains('套')].reset_index(drop=True)
strinfo = re.compile('万元|/套|起')
#去除中文字符
estate_tao['均价'] = estate_tao['均价'].apply(lambda x: strinfo.sub('',x))
estate_tao['均价']=estate_tao['均价'].astype(int)
#把str型转为int
排个名看看
estate_tao['均价']=estate_tao['均价'].sort_index()
estate_tao.head(10)
#把以套为价格的房价排个名
把xxx万元/套的房价数据转为xxx元/m^2的,此步骤不够严谨,所以如果对数据要求高,建议直接把xxx万元/套的房价数据删除,只分析xxx元/m^2的数据就行
#由于房产是以套为单位显示价格,所以只能结合实际,人工评估价格
for i in range(127):
if estate_tao['小区名称'][i]=='恒大丽宫':
estate_tao['均价'][i] = estate_tao['均价'][i]*5#恒大丽宫面积极大
elif estate_tao['均价'][i]>=1500:
estate_tao['均价'][i] = estate_tao['均价'][i]*30#例如圆明天颂户型较大,所以每平米更便宜一些
elif estate_tao['均价'][i]<=1000 and estate_tao['所在区'][i]!='朝阳'and estate_tao['所在区'][i]!='海淀':
estate_tao['均价'][i] = estate_tao['均价'][i]*100#例如兴创荣墅
elif estate_tao['均价'][i]<=1000 and estate_tao['所在区'][i]=='朝阳':
estate_tao['均价'][i] = estate_tao['均价'][i]*130#例如北京书院,户型较小,所以每平米更贵
elif estate_tao['均价'][i]<=1000 and estate_tao['所在区'][i]=='海淀':
estate_tao['均价'][i] = estate_tao['均价'][i]*130
elif estate_tao['均价'][i]>1000 and estate_tao['均价'][i]<1500:
estate_tao['均价'][i] = estate_tao['均价'][i]*55#例如玖瀛府,户型较大,所以每平米更贵
else:
estate_tao['均价'][i] = estate_tao['均价'][i]*75
合并处理好的数据(xxx元/m^2和xxx万元/套起)
estate = pd.concat([estate_single,estate_tao], axis=0)
estate['小区名称'].value_counts() #看看情况,有没有重复值
删除重复值
estate = estate.drop_duplicates()
#数据删除重复值
二、特征提取
1.数据标准化
主要是为了获取房产热度指数,所以把房产的评论数据标准化,根据评论条数确定热度:
我将评论数据进行0-1标准化,将评论数最大值设为1,最小值设为0,将数据缩放(映射)到设置的0-1区间。并将标准化后的评论数设为标准化热度,加入到数据集中。
from sklearn import preprocessing
import pandas
a=pd.DataFrame(estate['评论数'])
min_max_normalizer=preprocessing.MinMaxScaler(feature_range=(0,1))
#feature_range设置最大最小变换值,默认(0,1)
scaled_data=min_max_normalizer.fit_transform(a)
#将数据缩放(映射)到设置固定区间
price_frame_normalized=panda