import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 在ipython中直接显示图像
%matplotlib inline
# 设置绘图显示中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
In [2]:
input_file_path = '房产信息_预处理.xlsx'
data = pd.read_excel(input_file_path)
data.head(5)
Out[2]:
描述 | 位置信息 | 区域 | 总价 | 单价 | 面积 | 建成时间 | 关注人数 | 0室0厅 | 0室1厅 | ... | 西 | 北 | 东北 | 东南 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 威兰德装修套三对中庭,客户只给契税 | 威兰德小镇 | 双流 | 91.8 | 1.06 | 86.40 | 2016 | 135 | 0 | 0 | ... | 0 | 0 | 0 | 0 |
1 | 房子清水套三户型方正采光好无遮挡,视野开阔! | 南湖逸家二期 | 双流 | 128.5 | 1.94 | 66.12 | 2017 | 40 | 0 | 0 | ... | 0 | 0 | 0 | 0 |
2 | 南湖逸家满二精装房,中间楼层,采光良好 | 南湖逸家二期 | 双流 | 153.0 | 2.08 | 73.59 | 2017 | 58 | 0 | 0 | ... | 0 | 0 | 0 | 0 |
3 | 佰客郡精装修房子配套成熟业主真心卖 | 佰客郡 | 双流 | 89.0 | 1.18 | 75.40 | 2011 | 36 | 0 | 0 | ... | 0 | 1 | 0 | 0 |
4 | 加贝书香尚品 精装修 带家具家电出售 | 加贝书香尚品 | 双流 | 64.5 | 1.25 | 51.69 | 2007 | 38 | 0 | 0 | ... | 0 | 0 | 0 | 0 |
5 rows × 85 columns
In [3]:
data.describe()
Out[3]:
总价 | 单价 | 面积 | 建成时间 | 关注人数 | 0室0厅 | 0室1厅 | 1室0厅 | 1室1厅 | 1室2厅 | ... | 西 | 北 | 东北 | 东南 | 西南 | 西北 | 中楼层 | 低楼层 | 高楼层 | 总楼层 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | ... | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 | 32774.000000 |
mean | 157.886154 | 1.547791 | 100.300306 | 2009.326570 | 35.118936 | 0.000031 | 0.000031 | 0.017972 | 0.070544 | 0.002929 | ... | 0.060841 | 0.102612 | 0.049979 | 0.298987 | 0.104656 | 0.058339 | 0.343809 | 0.293830 | 0.362360 | 19.070605 |
std | 110.717674 | 0.626355 | 39.499149 | 5.662407 | 48.728153 | 0.005524 | 0.005524 | 0.132850 | 0.256065 | 0.054043 | ... | 0.239042 | 0.303456 | 0.217904 | 0.457821 | 0.306114 | 0.234387 | 0.474986 | 0.455522 | 0.480689 | 10.773407 |
min | 15.000000 | 0.170000 | 12.000000 | 1900.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
25% | 95.000000 | 1.120000 | 76.940000 | 2006.000000 | 6.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 7.000000 |
50% | 131.000000 | 1.440000 | 90.220000 | 2010.000000 | 19.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 18.000000 |
75% | 186.000000 | 1.860000 | 121.390000 | 2013.000000 | 45.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 1.000000 | 1.000000 | 1.000000 | 30.000000 |
max | 4600.000000 | 13.480000 | 557.460000 | 2020.000000 | 1044.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | ... | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 56.000000 |
8 rows × 82 columns
In [4]:
# 对区域进行数据透视并画图
data.pivot_table(values='单价', index='区域',aggfunc='mean'). \
sort_values(by='单价',ascending=False).plot(kind='barh',color="c")
# 设置x轴标签
plt.xlabel('单价(万元)')
Out[4]:
Text(0.5, 0, '单价(万元)')
In [5]:
# 设置记录个数
ntop = 10
# 按单价对数据进行排序
data_top = data.sort_values(by='单价',ascending=False)[:ntop]
# 设置数据
y = range(len(data_top.单价))
width = data_top.单价
y_label = data_top.位置信息 + '(' + data_top.区域 + ')'
# plot
fig = plt.figure(figsize=(12, 4))
ax = fig.add_subplot(121)
ax.set_title('成都市二手房单价top10')
ax.barh(y,width,facecolor='bisque',edgecolor='pink', \
height=0.5,tick_label=y_label)
plt.show()
In [6]:
# 统计房屋朝向
data[['东','南','西','北','东南','西南','西北','东北']].sum().plot(kind='bar',rot=0)
plt.ylabel('数量')
Out[6]:
Text(0, 0.5, '数量')
In [7]:
# 设置划分区间
bins = [0,0.5,1,1.5,2,3,5,8,12]
# 设置x轴标签
plt.xlabel("价格区间")
# plot
pd.cut(data[data['区域']=='双流'].单价, bins).value_counts().plot(kind='bar',rot=30)
Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fbbc3aa6c8>
In [8]:
data.plot(kind="scatter",x="单价",y="关注人数", alpha=0.4)
Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fbc06d5088>
In [9]:
plt.hist2d(data.单价, data.面积, bins=(50, 200), cmap=plt.cm.jet)
plt.ylim((20,100))
plt.xlabel('单价')
plt.ylabel('面积')
plt.colorbar()
Out[9]:
<matplotlib.colorbar.Colorbar at 0x1fbc2b3f108>
In [10]:
data.plot(kind="scatter",x="单价",y="关注人数", \
alpha=0.4,s=data["面积"])
Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fbc1e8b348>
In [11]:
data.区域.value_counts().plot(kind='bar')
plt.ylabel('房源数量')
Out[11]:
Text(0, 0.5, '房源数量')
In [12]:
bins = [0,5,10,20,30,40,50,60]
plt.xlabel("总楼层")
pd.cut(data.总楼层, bins).value_counts().plot.bar(rot=30)
Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fbc1eaa6c8>
In [13]:
x = np.linspace(0.5,6,51)
y1 = x + (1/x)
y2 = x
# 绘制模型估计值
plt.plot(x,y1)
# 绘制模型实际值
plt.plot(x,y2)
# 图形设置
plt.legend(["实际","预估"])
Out[13]:
<matplotlib.legend.Legend at 0x1fbbe56c108>