链家租房-深圳租房分析(2/2)数据分析

数据来源链家租房网站。随机爬虫了5000多数据。删除了信息相同的一部分信息。余下的会从五个维度进行分析!

  • 01各个城区房源数量对比(横柱状图)
  • 02各种户型之间数量对比(横柱状图)(删除了部分数量太少的户型)
  • 03各个城区租金对比(柱状图和折线统计图)
  • 04面积区间分布图(饼状图)
  • 05房屋朝向不同的房屋价格对比(柱状图和折线统计图)
# 导包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

处理中文字符无法正常显示

from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

1、数据处理分析准备

1.1、导入数据

data = pd.read_csv("./shenzhenlianjia.csv", encoding='gbk')
data
城区小区面积房间格局方向价格
0大鹏新区承翰半山海36㎡1室1厅1卫东南1500
1大鹏新区承翰半山海36㎡1室1厅1卫西北1800
2大鹏新区承翰半山海36㎡1室1厅1卫1800
3大鹏新区承翰半山海36㎡1室1厅1卫东南1800
4大鹏新区承翰半山海36㎡1室1厅1卫东南1800
.....................
4320福田区特区报社宿舍楼14㎡5室1厅2卫西2390
4321南山区佳兆业前海广场一期88㎡4室2厅1卫东南9500
4322福田区锦林新居17㎡3室1厅1卫2560
4323福田区众孚大厦7㎡4室1厅2卫东南1790
4324龙岗区东方半岛花园A区13㎡4室1厅2卫西北1660

4325 rows × 6 columns

1.2、处理重复值

# 检测重复数据,
data.duplicated()
data.shape
(4325, 6)
data = data.drop_duplicates()
data = data[data['城区'] != '城区']
data
城区小区面积房间格局方向价格
0大鹏新区承翰半山海36㎡1室1厅1卫东南1500
1大鹏新区承翰半山海36㎡1室1厅1卫西北1800
2大鹏新区承翰半山海36㎡1室1厅1卫1800
3大鹏新区承翰半山海36㎡1室1厅1卫东南1800
6大鹏新区承翰半山海36㎡1室1厅1卫2000
.....................
4320福田区特区报社宿舍楼14㎡5室1厅2卫西2390
4321南山区佳兆业前海广场一期88㎡4室2厅1卫东南9500
4322福田区锦林新居17㎡3室1厅1卫2560
4323福田区众孚大厦7㎡4室1厅2卫东南1790
4324龙岗区东方半岛花园A区13㎡4室1厅2卫西北1660

2762 rows × 6 columns

data.shape
(2762, 6)

1.3、数据类型转换

# 把面积转化为数组int
data_area_new = np.array([])
data_area = data['面积'].values
data_area
data
城区小区面积房间格局方向价格
0大鹏新区承翰半山海36㎡1室1厅1卫东南1500
1大鹏新区承翰半山海36㎡1室1厅1卫西北1800
2大鹏新区承翰半山海36㎡1室1厅1卫1800
3大鹏新区承翰半山海36㎡1室1厅1卫东南1800
6大鹏新区承翰半山海36㎡1室1厅1卫2000
.....................
4320福田区特区报社宿舍楼14㎡5室1厅2卫西2390
4321南山区佳兆业前海广场一期88㎡4室2厅1卫东南9500
4322福田区锦林新居17㎡3室1厅1卫2560
4323福田区众孚大厦7㎡4室1厅2卫东南1790
4324龙岗区东方半岛花园A区13㎡4室1厅2卫西北1660

2762 rows × 6 columns

for i in data_area:
    data_area_new = np.append(data_area_new, np.array(i[:-1]))
data_area_new = data_area_new.astype(np.float64)
data.loc[:, '面积'] = data_area_new
dataprice = data['价格'].astype(np.float64)
data.loc[:, '价格'] = dataprice
data
城区小区面积房间格局方向价格
0大鹏新区承翰半山海36.01室1厅1卫东南1500.0
1大鹏新区承翰半山海36.01室1厅1卫西北1800.0
2大鹏新区承翰半山海36.01室1厅1卫1800.0
3大鹏新区承翰半山海36.01室1厅1卫东南1800.0
6大鹏新区承翰半山海36.01室1厅1卫2000.0
.....................
4320福田区特区报社宿舍楼14.05室1厅2卫西2390.0
4321南山区佳兆业前海广场一期88.04室2厅1卫东南9500.0
4322福田区锦林新居17.03室1厅1卫2560.0
4323福田区众孚大厦7.04室1厅2卫东南1790.0
4324龙岗区东方半岛花园A区13.04室1厅2卫西北1660.0

2762 rows × 6 columns

2、房源数量,位置分布分析

2.1、各城区房源数量对比(横柱状图)

# 一共有10个城区
num = data['城区'].nunique()
num
10
# 城区列表
area_df = pd.DataFrame({'城区': data['城区'].unique(), '数量': [0]*num})
area_df
城区数量
0大鹏新区0
1龙岗区0
2盐田区0
3南山区0
4坪山区0
5龙华区0
6宝安区0
7罗湖区0
8光明区0
9福田区0
grouparea = data.groupby(by='城区').count()
grouparea
小区面积房间格局方向价格
城区
光明区2222222222
南山区458458458458458
坪山区5050505050
大鹏新区7171717171
宝安区288288288288288
盐田区6666666666
福田区570570570570570
罗湖区428428428428428
龙华区245245245245245
龙岗区564564564564564
area_df['数量'] = grouparea.values
area_df
城区数量
0大鹏新区22
1龙岗区458
2盐田区50
3南山区71
4坪山区288
5龙华区66
6宝安区570
7罗湖区428
8光明区245
9福田区564
area_df.sort_values(by='数量', ascending=False)
城区数量
6宝安区570
9福田区564
1龙岗区458
7罗湖区428
4坪山区288
8光明区245
3南山区71
5龙华区66
2盐田区50
0大鹏新区22
# 可视化展示
distance_type = area_df['城区']
num_type = area_df['数量']

plt.figure(figsize=(20, 13), dpi=100)
plt.barh(range(10), num_type, height=0.7)
# 替换标签
plt.yticks(range(10), distance_type)


# x坐标延长
plt.xlim(0, 600)
plt.xlabel('数量')
plt.ylabel('城区')
plt.title('深圳市各城区租房数量')

# 显示数量
for x, y in enumerate(num_type):
    plt.text(y+0.5, x, '%s' % y)
plt.show()

在这里插入图片描述

2.2、各户型数量分析(横柱状图)

这里的户型太多了,有些户型太少,所以进行了取舍,舍弃户型数量小于的50的,只需要分析户型大于50的!

num = data['房间格局'].nunique()
num
52
room_df = pd.DataFrame({'房间格局': data['房间格局'].unique(), '数量': [0]*num})
room_df
房间格局数量
01室1厅1卫0
11室0厅1卫0
22室2厅1卫0
32室1厅1卫0
43室2厅1卫0
53室2厅2卫0
64室2厅2卫0
73室1厅3卫0
83室1厅2卫0
98室2厅5卫0
105室2厅5卫0
115室3厅5卫0
123室1厅1卫0
136室2厅4卫0
146室2厅3卫0
152室2厅2卫0
163室2厅3卫0
171室1厅2卫0
184室2厅4卫0
194室1厅1卫0
204室1厅2卫0
214室3厅4卫0
225室1厅2卫0
231室0厅0卫0
243室0厅4卫0
255室0厅1卫0
265室1厅1卫0
271室0厅2卫0
285室0厅5卫0
295室0厅4卫0
301室1厅0卫0
315室1厅3卫0
322室1厅2卫0
335室2厅4卫0
341室2厅1卫0
355室1厅4卫0
365室0厅2卫0
372室0厅1卫0
384室0厅1卫0
392室1厅0卫0
404室1厅3卫0
414室2厅1卫0
425室1厅5卫0
435室0厅3卫0
44未知室1厅1卫0
45未知室0厅0卫0
465室2厅2卫0
472室0厅2卫0
486室1厅3卫0
494室0厅4卫0
502室2厅3卫0
516室2厅2卫0
grouproom = data.groupby(by='房间格局').count()
grouproom
城区小区面积方向价格
房间格局
1室0厅0卫2121212121
1室0厅1卫453453453453453
1室0厅2卫11111
1室1厅0卫66666
1室1厅1卫521521521521521
1室1厅2卫22222
1室2厅1卫55555
2室0厅1卫66666
2室0厅2卫11111
2室1厅0卫11111
2室1厅1卫366366366366366
2室1厅2卫55555
2室2厅1卫106106106106106
2室2厅2卫1313131313
2室2厅3卫11111
3室0厅4卫11111
3室1厅1卫213213213213213
3室1厅2卫5858585858
3室1厅3卫33333
3室2厅1卫109109109109109
3室2厅2卫7676767676
3室2厅3卫11111
4室0厅1卫66666
4室0厅4卫11111
4室1厅1卫278278278278278
4室1厅2卫196196196196196
4室1厅3卫33333
4室2厅1卫55555
4室2厅2卫3131313131
4室2厅4卫33333
4室3厅4卫11111
5室0厅1卫88888
5室0厅2卫22222
5室0厅3卫33333
5室0厅4卫44444
5室0厅5卫1818181818
5室1厅1卫4747474747
5室1厅2卫156156156156156
5室1厅3卫1313131313
5室1厅4卫22222
5室1厅5卫33333
5室2厅2卫22222
5室2厅4卫11111
5室2厅5卫22222
5室3厅5卫11111
6室1厅3卫11111
6室2厅2卫11111
6室2厅3卫11111
6室2厅4卫11111
8室2厅5卫11111
未知室0厅0卫11111
未知室1厅1卫11111
room_df['数量'] = grouproom.values
room_df
房间格局数量
01室1厅1卫21
11室0厅1卫453
22室2厅1卫1
32室1厅1卫6
43室2厅1卫521
53室2厅2卫2
64室2厅2卫5
73室1厅3卫6
83室1厅2卫1
98室2厅5卫1
105室2厅5卫366
115室3厅5卫5
123室1厅1卫106
136室2厅4卫13
146室2厅3卫1
152室2厅2卫1
163室2厅3卫213
171室1厅2卫58
184室2厅4卫3
194室1厅1卫109
204室1厅2卫76
214室3厅4卫1
225室1厅2卫6
231室0厅0卫1
243室0厅4卫278
255室0厅1卫196
265室1厅1卫3
271室0厅2卫5
285室0厅5卫31
295室0厅4卫3
301室1厅0卫1
315室1厅3卫8
322室1厅2卫2
335室2厅4卫3
341室2厅1卫4
355室1厅4卫18
365室0厅2卫47
372室0厅1卫156
384室0厅1卫13
392室1厅0卫2
404室1厅3卫3
414室2厅1卫2
425室1厅5卫1
435室0厅3卫2
44未知室1厅1卫1
45未知室0厅0卫1
465室2厅2卫1
472室0厅2卫1
486室1厅3卫1
494室0厅4卫1
502室2厅3卫1
516室2厅2卫1
room_df = room_df[room_df['数量'] > 50]
room_df
房间格局数量
11室0厅1卫453
43室2厅1卫521
105室2厅5卫366
123室1厅1卫106
163室2厅3卫213
171室1厅2卫58
194室1厅1卫109
204室1厅2卫76
243室0厅4卫278
255室0厅1卫196
372室0厅1卫156
num = room_df.shape[0]
num
11
house_type = room_df['房间格局']
num_type = room_df['数量']

# 绘图
plt.figure(figsize=(20, 13), dpi=100)
plt.barh(range(num), num_type, height=0.7)
# 替换标签
plt.yticks(range(num), house_type)

# 延长x轴
plt.xlim(0, 550)

plt.xlabel('数量')
plt.ylabel('房间类型')
plt.title('深圳市租房主要户型')
for x, y in enumerate(num_type):
    plt.text(y, x, '%s' % y)

plt.show()

在这里插入图片描述

2.3、各个城区平均租金(柱状图和折线图)

mean_df = pd.DataFrame(
    {'城区': data['城区'].unique(), '房租总金额': [0]*10, '总面积': [0]*10})
mean_df
城区房租总金额总面积
0大鹏新区00
1龙岗区00
2盐田区00
3南山区00
4坪山区00
5龙华区00
6宝安区00
7罗湖区00
8光明区00
9福田区00
# 总价格
sum_price = data['价格'].groupby(data['城区']).sum()
sum_price
城区
光明区       87100.0
南山区     1786082.0
坪山区      135056.0
大鹏新区     318690.0
宝安区      992655.0
盐田区      222521.0
福田区     1812617.0
罗湖区     1320652.0
龙华区      731725.0
龙岗区     1510020.0
Name: 价格, dtype: float64
# 总面积
sum_area = data['面积'].groupby(data['城区']).sum()
sum_area
城区
光明区      1821.0
南山区     13555.0
坪山区      3422.0
大鹏新区     5664.0
宝安区     14348.0
盐田区      4017.0
福田区     15982.0
罗湖区     14374.0
龙华区     11286.0
龙岗区     28506.0
Name: 面积, dtype: float64
mean_df['总面积'] = sum_area.values
mean_df['房租总金额'] = sum_price.values
mean_df
城区房租总金额总面积
0大鹏新区87100.01821.0
1龙岗区1786082.013555.0
2盐田区135056.03422.0
3南山区318690.05664.0
4坪山区992655.014348.0
5龙华区222521.04017.0
6宝安区1812617.015982.0
7罗湖区1320652.014374.0
8光明区731725.011286.0
9福田区1510020.028506.0
mean_df['每平米租金(元)'] = round(mean_df['房租总金额']/mean_df['总面积'], 2)
mean_df
城区房租总金额总面积每平米租金(元)
0大鹏新区87100.01821.047.83
1龙岗区1786082.013555.0131.77
2盐田区135056.03422.039.47
3南山区318690.05664.056.27
4坪山区992655.014348.069.18
5龙华区222521.04017.055.39
6宝安区1812617.015982.0113.42
7罗湖区1320652.014374.091.88
8光明区731725.011286.064.83
9福田区1510020.028506.052.97
# 合并城区数量表
df_merge = pd.merge(area_df, mean_df)
df_merge
城区数量房租总金额总面积每平米租金(元)
0大鹏新区2287100.01821.047.83
1龙岗区4581786082.013555.0131.77
2盐田区50135056.03422.039.47
3南山区71318690.05664.056.27
4坪山区288992655.014348.069.18
5龙华区66222521.04017.055.39
6宝安区5701812617.015982.0113.42
7罗湖区4281320652.014374.091.88
8光明区245731725.011286.064.83
9福田区5641510020.028506.052.97
# 可视化
num = df_merge['数量']
price = df_merge['每平米租金(元)']
l = [i for i in range(10)]
lx = df_merge['城区']

fig = plt.figure(figsize=(15, 10), dpi=100)

# 显示折线图
ax1 = fig.add_subplot(111)
ax1.plot(l, price, 'or-', label='价格')
for i, (_x, _y) in enumerate(zip(l, price)):
    plt.text(_x+0.1, _y, price[i])
ax1.set_ylim([0, 160])
ax1.set_ylabel('价格/平米')
plt.legend(loc='upper left')

# 绘制条形图
ax2 = ax1.twinx()
plt.bar(l, num, alpha=0.3, color='green', label='数量')
ax2.set_ylabel('数量')
plt.legend(loc='upper right')
plt.xticks(l, lx)
# for x,y in enumerate(num):
#     plt.text(y,x,'%2f'%y)

plt.title('深圳市各区租房数量与价格')
plt.show()

在这里插入图片描述

2.4、面积区间分析(饼状图)

# 查看房屋最贵,最便宜
print('房屋最贵是{}元每月'.format(data['价格'].max()))
print('房屋最便宜是{}元每月'.format(data['价格'].min()))
房屋最贵是180000.0元每月
房屋最便宜是950.0元每月
# 查看房屋的最大面积和最小面积
print('房屋最大面积是{}平方米'.format(data['面积'].max()))
print('房屋最小面积是{}平方米'.format(data['面积'].min()))
房屋最大面积是830.0平方米
房屋最小面积是5.0平方米
# 面积区间划分
area_divide = [0, 8, 15, 25, 40, 55, 70, 90, 120, 850]
area_cut = pd.cut(list(data['面积']), area_divide)
area_cut_data = area_cut.describe()
area_cut_data
countsfreqs
categories
(0, 8]3120.112962
(8, 15]5050.182839
(15, 25]2070.074946
(25, 40]5830.211079
(40, 55]4180.151340
(55, 70]2270.082187
(70, 90]3820.138306
(90, 120]950.034395
(120, 850]330.011948
# 数据可视化,使用饼状图
area_percentage = (area_cut_data['freqs'].values)*100
area_percentage
array([11.2961622 , 18.28385228,  7.49456915, 21.10789283, 15.1339609 ,
        8.21868211, 13.83055757,  3.43953657,  1.19478639])
labels = ['8平米以下', '8-15平米', '15-25平米', '25-40平米', '40-55平米', '55-70平米', '70-90平米',
          '90-120平米', '120平米以上']
plt.figure(figsize=(20, 10), dpi=100)
# 显示的是圆形,如果不加,是椭圆形
plt.axes(aspect=1)
plt.pie(x=area_percentage, labels=labels, autopct='%.2f %%', shadow=True)
plt.legend(loc='best')
plt.title('深圳市租房面积区间统计图')
plt.show
<function matplotlib.pyplot.show(*args, **kw)>

在这里插入图片描述

2.5、朝向对于价格影响(柱状图和折线图)

face_df_value = data['方向'].unique()
face_df_value
array(['东南', '西北', '南', '西', '西南', '东', '北', '东北'], dtype=object)
face_df = pd.DataFrame({'方向': data['方向'].unique(), '数量': [
                       0]*face_df_value.shape[0], '总价格': [0]*face_df_value.shape[0], '总面积': [0]*face_df_value.shape[0]})
face_df
方向数量总价格总面积
0东南000
1西北000
2000
3西000
4西南000
5000
6000
7东北000
num_sum = data.groupby(by=data['方向']).count()
num_sum
城区小区面积房间格局价格
方向
266266266266266
东北8383838383
东南590590590590590
406406406406406
10101010101010101010
西139139139139139
西北108108108108108
西南160160160160160
# 总价格
price_sum = data['价格'].groupby(by=data['方向']).sum()
price_sum
方向
东      846353.0
东北     259858.0
东南    2281168.0
北     1149286.0
南     3158155.0
西      388531.0
西北     332181.0
西南     501586.0
Name: 价格, dtype: float64
# 总面积
area_sum = data['面积'].groupby(by=data['方向']).sum()
area_sum
方向
东      9311.0
东北     3275.0
东南    32360.0
北     10820.0
南     42690.0
西      3198.0
西北     3706.0
西南     7615.0
Name: 面积, dtype: float64
# 赋值写入
face_df['数量'] = num_sum.values
face_df['总价格'] = price_sum.values
face_df['总面积'] = area_sum.values
face_df
方向数量总价格总面积
0东南266846353.09311.0
1西北83259858.03275.0
25902281168.032360.0
3西4061149286.010820.0
4西南10103158155.042690.0
5139388531.03198.0
6108332181.03706.0
7东北160501586.07615.0
# 平均价格
face_df['平均价格'] = round(face_df['总价格']/face_df['总面积'], 2)
face_df
方向数量总价格总面积平均价格
0东南266846353.09311.090.90
1西北83259858.03275.079.35
25902281168.032360.070.49
3西4061149286.010820.0106.22
4西南10103158155.042690.073.98
5139388531.03198.0121.49
6108332181.03706.089.63
7东北160501586.07615.065.87
# 准备数据
l = [i for i in range(8)]
_num = face_df['数量']
# _sumprice = face_df['总价格']
# _sumarea = face_df['总面积']
_meanprice = face_df['平均价格']

fig = plt.figure(figsize=(20, 8), dpi=100)

# 绘制数量柱状图
ax3 = fig.add_subplot(111)
ax3.bar(l, _num, label='数量', alpha=0.5, color='green')
ax3.set_ylabel('数量')
ax3.set_ylim(0, 1200)
plt.legend(loc='upper left')
for x, y in enumerate(_num):
    plt.text(x-0.1, y+18, '%s' % y)
# 替换x标签
plt.xticks(l, face_df['方向'])

# 绘制折线图
ax4 = ax3.twinx()
plt.plot(l, _meanprice, 'or-', label='价格')
ax4.legend(loc='upper right')
ax4.set_ylim(0, 150)
ax4.set_ylabel('价格')
for i, (_x, _y) in enumerate(zip(l, _meanprice)):
    plt.text(_x+0.1, _y-0.1, _meanprice[i])

plt.title('深圳租房朝向对价格影响')
plt.show()

在这里插入图片描述

3、结语

主要来深圳一段时间,租房的问题是一个大问题,就自己爬取了一些信息,然后就进行了一部分分析。采取的样本并不是特别多。以上只是个人的数据分析与其他无关!
关注技术,学习进步!

  • 13
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值