北京某平台二手房分析
发布时间
阅读量:
阅读量
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 解决中⽂显示问题
# plt.rcParams['font.sans-serif'] = [u'SimHei']
# plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('二手房数据.csv',encoding='gb18030')
df.head()
| 市区 | 小区 | 户型 | 朝向 | 楼层 | 装修情况 | 电梯 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 朝阳 | 育慧里一区 | 1室0厅 | 西 | 7 | 精装 | 有电梯 | 52.0 | 343.0 | 2001 |
| 1 | 朝阳 | 大西洋新城A区 | 2室2厅 | 南北 | 10 | 精装 | 有电梯 | 86.0 | 835.0 | 1999 |
| 2 | 朝阳 | 团结湖路 | 2室1厅 | 东西 | 6 | 精装 | 无电梯 | 65.0 | 430.0 | 1980 |
| 3 | 朝阳 | 尚家楼48号院 | 2室1厅 | 南北 | 12 | 精装 | 有电梯 | 75.0 | 610.0 | 1998 |
| 4 | 朝阳 | 望京西园一区 | 3室2厅 | 南北 | 6 | 精装 | 无电梯 | 115.0 | 710.0 | 1997 |
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 23677 entries, 0 to 23676
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 市区 23677 non-null object
1 小区 23677 non-null object
2 户型 23677 non-null object
3 朝向 23677 non-null object
4 楼层 23677 non-null int64
5 装修情况 23677 non-null object
6 电梯 15420 non-null object
7 面积(㎡) 23677 non-null float64
8 价格(万元) 23677 non-null float64
9 年份 23677 non-null int64
dtypes: float64(2), int64(2), object(6)
memory usage: 1.8+ MB
df.describe()
| 楼层 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|
| count | 23677.000000 | 23677.000000 | 23677.000000 | 23677.000000 |
| mean | 12.764877 | 99.388616 | 610.668319 | 2001.326519 |
| std | 7.644138 | 51.270606 | 411.452107 | 9.001996 |
| min | 1.000000 | 15.000000 | 60.000000 | 1950.000000 |
| 25% | 6.000000 | 66.000000 | 365.000000 | 1997.000000 |
| 50% | 11.000000 | 88.000000 | 499.000000 | 2003.000000 |
| 75% | 18.000000 | 118.000000 | 717.000000 | 2007.000000 |
| max | 57.000000 | 1019.000000 | 6000.000000 | 2017.000000 |
缺失值处理
df.isnull().any()
市区 False
小区 False
户型 False
朝向 False
楼层 False
装修情况 False
电梯 True
面积(㎡) False
价格(万元) False
年份 False
dtype: bool
df['电梯'].isnull().sum()
8257
df['电梯'].unique()
array(['有电梯', '无电梯', nan], dtype=object)
# 替换nan值
df['电梯'].fillna('不清楚',inplace=True)
df['电梯'].unique()
array(['有电梯', '无电梯', '不清楚'], dtype=object)
查看朝房屋朝向数据
df['朝向'].unique()
array(['西', '南北', '东西', '南西', '西南', '东南', '南', '东北', '东', '西北', '北'],
dtype=object)
df['朝向'] = df['朝向'].replace('南西','西南')
df['朝向'].unique()
array(['西', '南北', '东西', '西南', '东南', '南', '东北', '东', '西北', '北'],
dtype=object)
统计各城区二手房数量
df1 = df.groupby('市区')['小区'].count()
df1
市区
东城 1533
丰台 2952
大兴 2115
密云 12
平谷 41
延庆 469
怀柔 15
房山 1442
昌平 2811
朝阳 2973
海淀 2983
石景山 882
西城 2130
通州 1602
门头沟 496
顺义 1221
Name: 小区, dtype: int64
plt.style.use('seaborn')
# 解决中⽂显示问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(16,4))
plt.plot(df1)
plt.show()

df.head()
| 市区 | 小区 | 户型 | 朝向 | 楼层 | 装修情况 | 电梯 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 朝阳 | 育慧里一区 | 1室0厅 | 西 | 7 | 精装 | 有电梯 | 52.0 | 343.0 | 2001 |
| 1 | 朝阳 | 大西洋新城A区 | 2室2厅 | 南北 | 10 | 精装 | 有电梯 | 86.0 | 835.0 | 1999 |
| 2 | 朝阳 | 团结湖路 | 2室1厅 | 东西 | 6 | 精装 | 无电梯 | 65.0 | 430.0 | 1980 |
| 3 | 朝阳 | 尚家楼48号院 | 2室1厅 | 南北 | 12 | 精装 | 有电梯 | 75.0 | 610.0 | 1998 |
| 4 | 朝阳 | 望京西园一区 | 3室2厅 | 南北 | 6 | 精装 | 无电梯 | 115.0 | 710.0 | 1997 |
各城区二手房平均价格
df2 = df.groupby('市区').mean()['价格(万元)']
df2.head()
市区
东城 851.425245
丰台 525.103591
大兴 460.469693
密云 425.333333
平谷 308.658537
Name: 价格(万元), dtype: float64
df2.values
array([851.42524462, 525.10359079, 460.46969267, 425.33333333,
308.65853659, 549.87633262, 785.2 , 360.61185853,
469.23034507, 757.320148 , 827.74019444, 468.92675737,
828.90920188, 455.10755306, 388.05403226, 558.33988534])
plt.figure(figsize=(16,4))
plt.bar(df2.index,df2.values)
# 给条形图添加数据标注
for x,y in enumerate(df2):
plt.text(x-0.2,y,round(y,2))
plt.show()

二手房价格最高Top10
TOP10_price = df.sort_values(by='价格(万元)',ascending=False)[:10]
TOP10_price
| 市区 | 小区 | 户型 | 朝向 | 楼层 | 装修情况 | 电梯 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 20390 | 西城 | 朱雀门 | 4室2厅 | 东南 | 5 | 其他 | 有电梯 | 376.0 | 6000.0 | 2008 |
| 22228 | 东城 | 贡院六号 | 5室2厅 | 南北 | 23 | 精装 | 有电梯 | 459.0 | 5500.0 | 2002 |
| 22907 | 东城 | NAGA上院 | 6室2厅 | 东南 | 12 | 精装 | 有电梯 | 608.0 | 5000.0 | 2008 |
| 3219 | 顺义 | 丽宫 | 5室2厅 | 南北 | 3 | 精装 | 不清楚 | 685.0 | 5000.0 | 2007 |
| 22982 | 东城 | 当代MOMA | 5室2厅 | 东南 | 7 | 精装 | 不清楚 | 384.0 | 4988.0 | 2006 |
| 20202 | 西城 | 耕天下 | 5室3厅 | 南北 | 7 | 其他 | 有电梯 | 330.0 | 4650.0 | 2003 |
| 6191 | 昌平 | 碧水庄园 | 5室3厅 | 南北 | 2 | 精装 | 不清楚 | 571.0 | 4600.0 | 2005 |
| 2391 | 顺义 | 丽嘉花园 | 4室2厅 | 东南 | 2 | 其他 | 不清楚 | 548.0 | 4500.0 | 2007 |
| 17285 | 朝阳 | 首府官邸 | 叠拼别墅 | 南北 | 5 | 精装 | 不清楚 | 523.4 | 4500.0 | 2007 |
| 15327 | 海淀 | 紫御府 | 4室2厅 | 南北 | 12 | 精装 | 有电梯 | 374.0 | 4368.0 | 2008 |
二手房总价与面积散点图
df.head()
| 市区 | 小区 | 户型 | 朝向 | 楼层 | 装修情况 | 电梯 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 朝阳 | 育慧里一区 | 1室0厅 | 西 | 7 | 精装 | 有电梯 | 52.0 | 343.0 | 2001 |
| 1 | 朝阳 | 大西洋新城A区 | 2室2厅 | 南北 | 10 | 精装 | 有电梯 | 86.0 | 835.0 | 1999 |
| 2 | 朝阳 | 团结湖路 | 2室1厅 | 东西 | 6 | 精装 | 无电梯 | 65.0 | 430.0 | 1980 |
| 3 | 朝阳 | 尚家楼48号院 | 2室1厅 | 南北 | 12 | 精装 | 有电梯 | 75.0 | 610.0 | 1998 |
| 4 | 朝阳 | 望京西园一区 | 3室2厅 | 南北 | 6 | 精装 | 无电梯 | 115.0 | 710.0 | 1997 |
df_scatter = df[['面积(㎡)','价格(万元)']]
plt.figure(figsize=(16,8))
sns.scatterplot(x='面积(㎡)',y='价格(万元)',data=df_scatter,palette='husl',s=50,markers='O')
plt.show()

房屋朝向饼图
df.head()
| 市区 | 小区 | 户型 | 朝向 | 楼层 | 装修情况 | 电梯 | 面积(㎡) | 价格(万元) | 年份 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 朝阳 | 育慧里一区 | 1室0厅 | 西 | 7 | 精装 | 有电梯 | 52.0 | 343.0 | 2001 |
| 1 | 朝阳 | 大西洋新城A区 | 2室2厅 | 南北 | 10 | 精装 | 有电梯 | 86.0 | 835.0 | 1999 |
| 2 | 朝阳 | 团结湖路 | 2室1厅 | 东西 | 6 | 精装 | 无电梯 | 65.0 | 430.0 | 1980 |
| 3 | 朝阳 | 尚家楼48号院 | 2室1厅 | 南北 | 12 | 精装 | 有电梯 | 75.0 | 610.0 | 1998 |
| 4 | 朝阳 | 望京西园一区 | 3室2厅 | 南北 | 6 | 精装 | 无电梯 | 115.0 | 710.0 | 1997 |
df_pie = df.groupby('朝向').count()['小区']
df_pie
朝向
东 934
东北 681
东南 2096
东西 1559
北 612
南 2847
南北 11433
西 889
西北 781
西南 1845
Name: 小区, dtype: int64
plt.figure(figsize=(16,8))
plt.pie(df_pie.values,
labels = df_pie.index,
autopct = '%.2f%%', # 设置百分比格式
pctdistance = 0.8,# 设置百分比到圆心的距离
#shadow = False,# 添加饼图阴影效果
startangle = 240,# 设置饼图的初始摆放角度
radius = 1.2, # 设置饼图半径大小
#wedgeprops = {'linewidth':'1.5','edgecolor':'gray'},# 设置饼图内外边界属性值
textprops ={'fontsize':12,'color':'black'}, # 设置饼图中文本属性
counterclock = False # 是否逆时针呈现
)
plt.show()

装修情况/有无电梯组合图
df3 = df.groupby('装修情况').count()['小区']
df3
装修情况
其他 3239
毛坯 583
简装 8499
精装 11356
Name: 小区, dtype: int64
df4 = df.groupby('电梯').count()['小区']
df4
电梯
不清楚 8257
无电梯 6078
有电梯 9342
Name: 小区, dtype: int64
plt.figure(figsize=(16,8))
plt.subplot(121)
plt.bar(df3.index,df3.values)
for x,y in enumerate(df3):
plt.text(x-0.1,y+100,y)
plt.subplot(122)
plt.pie(df4.values,labels=df4.index, autopct = '%.2f%%')
plt.show()

二手房楼层分布柱状图
df5 = df.groupby('楼层').count()['小区']
df5.head()
楼层
1 6
2 94
3 201
4 465
5 1070
Name: 小区, dtype: int64
plt.figure(figsize=(16,8))
plt.bar(df5.index,df5.values)
plt.show()

房屋面积分布柱状图
area_l = [0, 50, 80, 100, 120, 150, 200, 250, 300, 350, 400, 1500]
label_l = ['小于50', '50-80', '80-100', '100-120', '120-150', '150-200', '200-250', '250-300', '300-350', '350-400', '大于400']
mj_cut = pd.cut(df['面积(㎡)'], area_l, labels=label_l)
df_area = mj_cut.value_counts()
df_area
50-80 7962
80-100 5691
120-150 2928
100-120 2881
150-200 1677
小于50 1562
200-250 545
250-300 226
300-350 94
大于400 56
350-400 55
Name: 面积(㎡), dtype: int64
plt.figure(figsize=(16,8))
plt.bar(df_area.index,df_area.values)
for x,y in enumerate(df_area):
plt.text(x-0.1,y+100,y)
plt.show()

总结
- 丰台区、房山区、昌平区、朝阳区、海淀区的二手房居多,高达12000多套,约占总量的1/2。
- 东城区、西城区和海淀区二手房平均售价最高,均在800万元以上。
- 二手房面积多集中于0-400平米,价格在0-3000万元居多。
- 房屋朝向约50%是坐北朝南的
资源下载: 源数据下载
全部评论 (0)
还没有任何评论哟~
