python链家数据分析统计服_链家二手房成交——Python数据分析

一、分析背景和目的

近些年国内房地产行业发展势头迅猛,二手房需求成为了一种新热门。本次项目分析的是作为行业巨头的链家关于“二手房成交价格、经纪人相关因素”的业务数据,其数据的相关分析可以为未来二手房业务的发展提供参考和指导。

二、提出问题北京二手房成交价格分布情况如何

每个板块总成交金额超过一亿的经纪人是谁

成交量达一亿的经纪人从业年限如何

每个板块成交均价高低、排名如何

北京二手房成交价格的变化趋势如何

三、理解数据

数据概况:数据城堡《链家北京二手房成交数据》,2011~2016年间共约16万2千条成交记录,涵盖较为全面的经纪人成交数据情况。

字段理解:

cjtaoshu-成交套数

mendian-门店

cjzongjia-成交总价

zhiwei-职位

haoping-好评

cjdanjia-成交单价

cjxiaoqu-成交小区

xingming-姓名

cjzhouqi-成交周期

biaoqian-标签

cjlouceng-成交楼层

cjshijian-成交时间

congyenainxian-从业年限

bankuai-板块

四、数据处理

1、数据读取

因为该数据源部分文件格式不一,这里用try-except读取不同格式的文件。

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

data_list = []

for i in range(1,8):

try:

data = pd.read_csv('E:\\lianjia\\lianjia{}.csv'.format(i),encoding='gbk')

except:

data = pd.read_csv('E:\\lianjia\\lianjia{}.csv'.format(i))

data_list.append(data)

2、数据合并

data = pd.concat(data_list)

data.describe()

data.info()

数据合并显示正确,但观察描述数据明显发现行数不一致,最小值为0,说明其中可能存在缺失值和异常值,需要处理。

3、字段选择

选择分析需要的字段数据。

data = data[['cjzongjia','cjdanjia','xingming','cjlouceng','congyenianxian','bankuai']]

4、缺失值及重复值处理

(data.isnull()).sum()

data[data.cjdanjia.isnull()]

data.dropna(how = 'all',inplace = True)

判断并找出缺失值位置,并做删除/补充处理。

(data.duplicated(subset = ['cjdanjia','xingming','cjlouceng'])).sum()

data.sort_values(by = 'bankuai',inplace = True)

data.drop_duplicates(subset = ['cjdanjia','xingming','cjlouceng'],inplace = True)

判断并找出重复值位置,并做删除处理。(注意:这里通过排序将“bankuai”的NaN值排到最后,最大化的留下有效数据信息。)

5、数据类型转换

(~data.cjdanjia.str.contains('元/平')).sum()

np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2)

判断数据是否一致,并对“cjdanjia”列做一致化处理。

6、异常值处理

data = data.assign(cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2))

data.cjdanjia.min()

data = data[data.cjdanjia > 0.5]

前面发现“cjdanjia”的最小值是0,这里合理预估“cjdanjia”的值,对异常值作删除处理。

8、字符串处理

(data.cjlouceng.str.split('/').map(len) != 3).sum()

data = data.assign(chaoxiang = data.cjlouceng.map(lambda x:x.split('/')[0]))

data = data.assign(louceng = data.cjlouceng.map(lambda x:x.split('/')[1]))

data.chaoxiang.unique()

data.louceng.unique()

pd.get_dummies(data.louceng)

data = data.join(pd.get_dummies(data.louceng))

对“cjlouceng”的数据进行判断和分类处理,判断分类出来的列是否异常。这里发现“楼层”列异常,删除“未知”和空字符项。

五、建模分析

1、北京二手房成交价格分布情况如何

bins = [0,1,2,3,4,5,7,10,15]

pd.cut(data.cjdanjia,bins).value_counts().plot.bar(rot = 30)

通过对成交单价进行区间划分,这里利用图表呈现出了不同单价区间的成交套数情况。由图可知:[2,3]、[3,4](单位:万)这两个区间的成交套数最多,说明2~4万的成交价格在大多数用户的可接受范围内。

2、每个板块总成交金额超过一亿的经纪人是谁

bj_zongjia = data.groupby(['bankuai','xingming'])['cjzongjia'].sum()

bj_zongjia = jjr_zongjia[jjr_zongjia > 10000]

通过分组运算,求得每个板块总成交金额超过1亿的有1022人。据此可作为经纪人的一项成交能力标准(当然也可以求每个版块总成交能力最多的经纪人),为选择售房推荐人、售房师徒带教等相关业务提供经纪人相关数据证明。

3、成交量达一亿的经纪人从业年限如何

data_nianxian = data.pivot_table('cjzongjia',index='xingming',columns='congyenianxian',aggfunc=sum)

plt.rcParams['font.sans-serif'] = ['SimHei']

(data_nianxian > 10000).sum().plot.pie(figsize=(7,7))

通过数据透视,分析总成交金额超过1亿的经纪人,人数和从业年限的相关关系。由上图可知:随着年限的增加,饼图中人数比重越高。说明经纪人的成交能力和从业年限非常相关。

4、每个板块成交均价高低、排名如何

data_junjia = data.groupby('bankuai')[['cjdanjia']].mean()

data_junjia.sort_values(by = 'cjdanjia',ascending = False)

通过板块分组进行成交均价的排序,分析北京二手房各板块均价和高低排序,最高为“西四”板块的9.47万元,最低为“三河”板块的1.73万元。此数据可为用户买房或相关销售策略提供参考和数据依据。

5、北京二手房成交价格的变化趋势如何

本目标以“远洋山水”小区为例,预测该小区二手房成交价格未来的变化趋势。

data.cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2)

data.cjshijian = pd.to_datetime(data.cjshijian.map(lambda x:x[5:]))

data = data[data.cjxiaoqu.str.contains('远洋山水')]

data = data.sort_values(by = 'cjshijian')

data = data.set_index('cjshijian')['2012':]

data = data[data.cjdanjia > 1]

data = data.assign(time = (data.index - pd.to_datetime('2012-01-01')).days)

data = data[['time','cjdanjia']]

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.figure(figsize = (8,6))

plt.scatter(data.time,data.cjdanjia)

plt.xlabel('成交时间')

plt.ylabel('成交单价')

这里选择的时间范围是“2012-01-01~2016-11-06”,并且仍需对该数据进行处理,排除异常数据(成交单价<1万元),以“2012-01-01”为时间原点,事先绘制成交价格随成交时间变化的散点图。

由于时间跨度较大,采用多项式回归方法建立预测模型可能不精准,这里采取以“2016-01~2016-11”的时间范围以确立预测模型,可以更有说明性地预测未来趋势。

X = data.time

Y = data.cjdanjia

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(pd.DataFrame(X),Y)

X_train,X_test = X['2016-01':'2016-05'],X['2016-05':]

Y_train,Y_test = Y['2016-01':'2016-05'],Y['2016-05':]

model1 = LinearRegression() #一阶回归训练

model1.fit(pd.DataFrame(X_train),Y_train)

np.sum((model1.predict(pd.DataFrame(X_test)) - Y_test)**2) #计算一阶回归预测模型的平方误差

from sklearn.preprocessing import PolynomialFeatures #利用工具生成多项式拟合模型

a2 = PolynomialFeatures(degree = 2) #设立二阶多项式回归训练

X2 = a2.fit_transform(pd.DataFrame(X_train))

model2 = LinearRegression()

model2.fit(X2,Y_train)

X2_ = a2.fit_transform(pd.DataFrame(X_test))

np.sum((model2.predict(pd.DataFrame(X2_)) - Y_test)**2) #计算二阶回归预测模型的平方误差

a3 = PolynomialFeatures(degree = 3) #设立三阶多项式回归训练

X3 = a3.fit_transform(pd.DataFrame(X_train))

model3 = LinearRegression()

model3.fit(X3,Y_train)

X3_ = a3.fit_transform(pd.DataFrame(X_test))

np.sum((model3.predict(pd.DataFrame(X3_)) - Y_test)**2) #计算三阶回归预测模型的平方误差

#绘制一阶模型图

x = [[1461],[1800]]

y = model1.predict(pd.DataFrame(x))

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.figure(figsize = (8,6))

plt.plot(x,y,color = 'r')

plt.scatter(data.time,data.cjdanjia)

plt.xlabel('成交时间')

plt.ylabel('成交单价')

上面经过建立三次的模型评估,确立一阶回归模型的平方误差最小(一阶:67.65;二阶:343.76;三阶:38874.82),选择一阶模型绘制了上面预测红线。由图可知,预测红线的增长趋势很高,预计短期内,二手房的成交价格会继续按此趋势上涨。

PS:这里作为兴趣,计算了该红线函数y=61*x+49875,其中x表示距离日期“2012-01-01”的天数;y表示成交价格,单位“元”,只能作为很简单的短期预测。

六、总结与建议北京二手房成交价格主要分布在2~3,3~4万区间,其次是4~7万区间。

所有板块总成交金额超过一亿的经纪人共有1022位,可作为经纪人的一项成交能力标准,为每个板块选择售房推荐人、售房师徒带教等相关业务提供经纪人相关数据支撑。

随着年限的增加,成交额达一亿的人数越来越多。经纪人的成交能力和从业年限非常相关。

北京二手房各板块均价最高为“西四”的9.47万元,最低为“三河”的1.73万元。此数据可为用户买房或相关销售策略提供参考和数据依据。

以2016作为二手房成交价数据为预测数据源,预计短期内(未来一年)房价会继续沿着红线方向增长,二手房市场行情良好,可制定相关营销策略促进提升成交量。

你可能感兴趣的:(python链家数据分析统计服)