深圳租房分析(2/2)数据分析
- 1、数据处理分析准备
-
- 1.1、导入数据
- 1.2、处理重复值
- 1.3、数据类型转换
- 2、房源数量,位置分布分析
-
- 2.1、各城区房源数量对比(横柱状图)
- 2.2、各户型数量分析(横柱状图)
- 2.3、各个城区平均租金(柱状图和折线图)
- 2.4、面积区间分析(饼状图)
- 2.5、朝向对于价格影响(柱状图和折线图)
- 3、结语
数据来源链家租房网站。随机爬虫了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、数据类型转换
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.0 |
1室1厅1卫 |
东南 |
1500.0 |
1 |
大鹏新区 |
承翰半山海 |
36.0 |
1室1厅1卫 |
西北 |
1800.0 |
2 |
大鹏新区 |
承翰半山海 |
36.0 |
1室1厅1卫 |
南 |
1800.0 |
3 |
大鹏新区 |
承翰半山海 |
36.0 |
1室1厅1卫 |
东南 |
1800.0 |
6 |
大鹏新区 |
承翰半山海 |
36.0 |
1室1厅1卫 |
南 |
2000.0 |
... |
... |
... |
... |
... |
... |
... |
4320 |
福田区 |
特区报社宿舍楼 |
14.0 |
5室1厅2卫 |
西 |
2390.0 |
4321 |
南山区 |
佳兆业前海广场一期 |
88.0 |
4室2厅1卫 |
东南 |
9500.0 |
4322 |
福田区 |
锦林新居 |
17.0 |
3室1厅1卫 |
南 |
2560.0 |
4323 |
福田区 |
众孚大厦 |
7.0 |
4室1厅2卫 |
东南 |
1790.0 |
4324 |
龙岗区 |
东方半岛花园A区 |
13.0 |
4室1厅2卫 |
西北 |
1660.0 |
2762 rows × 6 columns
2、房源数量,位置分布分析
2.1、各城区房源数量对比(横柱状图)
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
|
小区 |
面积 |
房间格局 |
方向 |
价格 |
城区 |
|
|
|
|
|
光明区 |
22 |
22 |
22 |
22 |
22 |
南山区 |
458 |
458 |
458 |
458 |
458 |
坪山区 |
50 |
50 |
50 |
50 |
50 |
大鹏新区 |
71 |
71 |
71 |
71 |
71 |
宝安区 |
288 |
288 |
288 |
288 |
288 |
盐田区 |
66 |
66 |
66 |
66 |
66 |
福田区 |
570 |
570 |
570 |
570 |
570 |
罗湖区 |
428 |
428 |
428 |
428 |
428 |
龙华区 |
245 |
245 |
245 |
245 |
245 |
龙岗区 |
564 |
564 |
564 |
564 |
564 |
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)
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
|
房间格局 |
数量 |
0 |
1室1厅1卫 |
0 |
1 |
1室0厅1卫 |
0 |
2 |
2室2厅1卫 |
0 |
3 |
2室1厅1卫 |
0 |
4 |
3室2厅1卫 |
0 |
5 |
3室2厅2卫 |
0 |
6 |
4室2厅2卫 |
0 |
7 |
3室1厅3卫 |
0 |
8 |
3室1厅2卫 |
0 |
9 |
8室2厅5卫 |
0 |
10 |
5室2厅5卫 |
0 |
11 |
5室3厅5卫 |
0 |
12 |
3室1厅1卫 |
0 |
13 |
6室2厅4卫 |
0 |
14 |
6室2厅3卫 |
0 |
15 |
2室2厅2卫 |
0 |
16 |
3室2厅3卫 |
0 |
17 |
1室1厅2卫 |
0 |
18 |
4室2厅4卫 |
0 |
19 |
4室1厅1卫 |
0 |
20 |
4室1厅2卫 |
0 |
21 |
4室3厅4卫 |
0 |
22 |
5室1厅2卫 |
0 |
23 |
1室0厅0卫 |
0 |
24 |
3室0厅4卫 |
0 |
25 |
5室0厅1卫 |
0 |
26 |
5室1厅1卫 |
0 |
27 |
1室0厅2卫 |
0 |
28 |
5室0厅5卫 |
0 |
29 |
5室0厅4卫 |
0 |
30 |
1室1厅0卫 |
0 |
31 |
5室1厅3卫 |
0 |
32 |
2室1厅2卫 |
0 |
33 |
5室2厅4卫 |
0 |
34 |
1室2厅1卫 |
0 |
35 |
5室1厅4卫 |
0 |
36 |
5室0厅2卫 |
0 |
37 |
2室0厅1卫 |
0 |
38 |
4室0厅1卫 |
0 |
39 |
2室1厅0卫 |
0 |
40 |
4室1厅3卫 |
0 |
41 |
4室2厅1卫 |
0 |
42 |
5室1厅5卫 |
0 |
43 |
5室0厅3卫 |
0 |
44 |
未知室1厅1卫 |
0 |
45 |
未知室0厅0卫 |
0 |
46 |
5室2厅2卫 |
0 |
47 |
2室0厅2卫 |
0 |
48 |
6室1厅3卫 |
0 |
49 |
4室0厅4卫 |
0 |
50 |
2室2厅3卫 |
0 |
51 |
6室2厅2卫 |
0 |
grouproom = data.groupby(by='房间格局').count()
grouproom
|
城区 |
小区 |
面积 |
方向 |
价格 |
房间格局 |
|
|
|
|
|
1室0厅0卫 |
21 |
21 |
21 |
21 |
21 |
1室0厅1卫 |
453 |
453 |
453 |
453 |
453 |
1室0厅2卫 |
1 |
1 |
1 |
1 |
1 |
1室1厅0卫 |
6 |
6 |
6 |
6 |
6 |
1室1厅1卫 |
521 |
521 |
521 |
521 |
521 |
1室1厅2卫 |
2 |
2 |
2 |
2 |
2 |
1室2厅1卫 |
5 |
5 |
5 |
5 |
5 |
2室0厅1卫 |
6 |
6 |
6 |
6 |
6 |
2室0厅2卫 |
1 |
1 |
1 |
1 |
1 |
2室1厅0卫 |
1 |
1 |
1 |
1 |
1 |
2室1厅1卫 |
366 |
366 |
366 |
366 |
366 |
2室1厅2卫 |
5 |
5 |
5 |
5 |
5 |
2室2厅1卫 |
106 |
106 |
106 |
106 |
106 |
2室2厅2卫 |
13 |
13 |
13 |
13 |
13 |
2室2厅3卫 |
1 |
1 |
1 |
1 |
1 |
3室0厅4卫 |
1 |
1 |
1 |
1 |
1 |
3室1厅1卫 |
213 |
213 |
213 |
213 |
213 |
3室1厅2卫 |
58 |
58 |
58 |
58 |
58 |
3室1厅3卫 |
3 |
3 |
3 |
3 |
3 |
3室2厅1卫 |
109 |
109 |
109 |
109 |
109 |
3室2厅2卫 |
76 |
76 |
76 |
76 |
76 |
3室2厅3卫 |
1 |
1 |
1 |
1 |
1 |
4室0厅1卫 |
6 |
6 |
6 |
6 |
6 |
4室0厅4卫 |
1 |
1 |
1 |
1 |
1 |
4室1厅1卫 |
278 |
278 |
278 |
278 |
278 |
4室1厅2卫 |
196 |
196 |
196 |
196 |
196 |
4室1厅3卫 |
3 |
3 |
3 |
3 |
3 |
4室2厅1卫 |
5 |
5 |
5 |
5 |
5 |
4室2厅2卫 |
31 |
31 |
31 |
31 |
31 |
4室2厅4卫 |
3 |
3 |
3 |
3 |
3 |
4室3厅4卫 |
1 |
1 |
1 |
1 |
1 |
5室0厅1卫 |
8 |
8 |
8 |
8 |
8 |
5室0厅2卫 |
2 |
2 |
2 |
2 |
2 |
5室0厅3卫 |
3 |
3 |
3 |
3 |
3 |
5室0厅4卫 |
4 |
4 |
4 |
4 |
4 |
5室0厅5卫 |
18 |
18 |
18 |
18 |
18 |
5室1厅1卫 |
47 |
47 |
47 |
47 |
47 |
5室1厅2卫 |
156 |
156 |
156 |
156 |
156 |
5室1厅3卫 |
13 |
13 |
13 |
13 |
13 |
5室1厅4卫 |
2 |
2 |
2 |
2 |
2 |
5室1厅5卫 |
3 |
3 |
3 |
3 |
3 |
5室2厅2卫 |
2 |
2 |
2 |
2 |
2 |
5室2厅4卫 |
1 |
1 |
1 |
1 |
1 |
5室2厅5卫 |
2 |
2 |
2 |
2 |
2 |
5室3厅5卫 |
1 |
1 |
1 |
1 |
1 |
6室1厅3卫 |
1 |
1 |
1 |
1 |
1 |
6室2厅2卫 |
1 |
1 |
1 |
1 |
1 |
6室2厅3卫 |
1 |
1 |
1 |
1 |
1 |
6室2厅4卫 |
1 |
1 |
1 |
1 |
1 |
8室2厅5卫 |
1 |
1 |
1 |
1 |
1 |
未知室0厅0卫 |
1 |
1 |
1 |
1 |
1 |
未知室1厅1卫 |
1 |
1 |
1 |
1 |
1 |
room_df['数量'] = grouproom.values
room_df
|
房间格局 |
数量 |
0 |
1室1厅1卫 |
21 |
1 |
1室0厅1卫 |
453 |
2 |
2室2厅1卫 |
1 |
3 |
2室1厅1卫 |
6 |
4 |
3室2厅1卫 |
521 |
5 |
3室2厅2卫 |
2 |
6 |
4室2厅2卫 |
5 |
7 |
3室1厅3卫 |
6 |
8 |
3室1厅2卫 |
1 |
9 |
8室2厅5卫 |
1 |
10 |
5室2厅5卫 |
366 |
11 |
5室3厅5卫 |
5 |
12 |
3室1厅1卫 |
106 |
13 |
6室2厅4卫 |
13 |
14 |
6室2厅3卫 |
1 |
15 |
2室2厅2卫 |
1 |
16 |
3室2厅3卫 |
213 |
17 |
1室1厅2卫 |
58 |
18 |
4室2厅4卫 |
3 |
19 |
4室1厅1卫 |
109 |
20 |
4室1厅2卫 |
76 |
21 |
4室3厅4卫 |
1 |
22 |
5室1厅2卫 |
6 |
23 |
1室0厅0卫 |
1 |
24 |
3室0厅4卫 |
278 |
25 |
5室0厅1卫 |
196 |
26 |
5室1厅1卫 |
3 |
27 |
1室0厅2卫 |
5 |
28 |
5室0厅5卫 |
31 |
29 |
5室0厅4卫 |
3 |
30 |
1室1厅0卫 |
1 |
31 |
5室1厅3卫 |
8 |
32 |
2室1厅2卫 |
2 |
33 |
5室2厅4卫 |
3 |
34 |
1室2厅1卫 |
4 |
35 |
5室1厅4卫 |
18 |
36 |
5室0厅2卫 |
47 |
37 |
2室0厅1卫 |
156 |
38 |
4室0厅1卫 |
13 |
39 |
2室1厅0卫 |
2 |
40 |
4室1厅3卫 |
3 |
41 |
4室2厅1卫 |
2 |
42 |
5室1厅5卫 |
1 |
43 |
5室0厅3卫 |
2 |
44 |
未知室1厅1卫 |
1 |
45 |
未知室0厅0卫 |
1 |
46 |
5室2厅2卫 |
1 |
47 |
2室0厅2卫 |
1 |
48 |
6室1厅3卫 |
1 |
49 |
4室0厅4卫 |
1 |
50 |
2室2厅3卫 |
1 |
51 |
6室2厅2卫 |
1 |
room_df = room_df[room_df['数量'] > 50]
room_df
|
房间格局 |
数量 |
1 |
1室0厅1卫 |
453 |
4 |
3室2厅1卫 |
521 |
10 |
5室2厅5卫 |
366 |
12 |
3室1厅1卫 |
106 |
16 |
3室2厅3卫 |
213 |
17 |
1室1厅2卫 |
58 |
19 |
4室1厅1卫 |
109 |
20 |
4室1厅2卫 |
76 |
24 |
3室0厅4卫 |
278 |
25 |
5室0厅1卫 |
196 |
37 |
2室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)
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 |
大鹏新区 |
0 |
0 |
1 |
龙岗区 |
0 |
0 |
2 |
盐田区 |
0 |
0 |
3 |
南山区 |
0 |
0 |
4 |
坪山区 |
0 |
0 |
5 |
龙华区 |
0 |
0 |
6 |
宝安区 |
0 |
0 |
7 |
罗湖区 |
0 |
0 |
8 |
光明区 |
0 |
0 |
9 |
福田区 |
0 |
0 |
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.0 |
1821.0 |
1 |
龙岗区 |
1786082.0 |
13555.0 |
2 |
盐田区 |
135056.0 |
3422.0 |
3 |
南山区 |
318690.0 |
5664.0 |
4 |
坪山区 |
992655.0 |
14348.0 |
5 |
龙华区 |
222521.0 |
4017.0 |
6 |
宝安区 |
1812617.0 |
15982.0 |
7 |
罗湖区 |
1320652.0 |
14374.0 |
8 |
光明区 |
731725.0 |
11286.0 |
9 |
福田区 |
1510020.0 |
28506.0 |
mean_df['每平米租金(元)'] = round(mean_df['房租总金额']/mean_df['总面积'], 2)
mean_df
|
城区 |
房租总金额 |
总面积 |
每平米租金(元) |
0 |
大鹏新区 |
87100.0 |
1821.0 |
47.83 |
1 |
龙岗区 |
1786082.0 |
13555.0 |
131.77 |
2 |
盐田区 |
135056.0 |
3422.0 |
39.47 |
3 |
南山区 |
318690.0 |
5664.0 |
56.27 |
4 |
坪山区 |
992655.0 |
14348.0 |
69.18 |
5 |
龙华区 |
222521.0 |
4017.0 |
55.39 |
6 |
宝安区 |
1812617.0 |
15982.0 |
113.42 |
7 |
罗湖区 |
1320652.0 |
14374.0 |
91.88 |
8 |
光明区 |
731725.0 |
11286.0 |
64.83 |
9 |
福田区 |
1510020.0 |
28506.0 |
52.97 |
df_merge = pd.merge(area_df, mean_df)
df_merge
|
城区 |
数量 |
房租总金额 |
总面积 |
每平米租金(元) |
0 |
大鹏新区 |
22 |
87100.0 |
1821.0 |
47.83 |
1 |
龙岗区 |
458 |
1786082.0 |
13555.0 |
131.77 |
2 |
盐田区 |
50 |
135056.0 |
3422.0 |
39.47 |
3 |
南山区 |
71 |
318690.0 |
5664.0 |
56.27 |
4 |
坪山区 |
288 |
992655.0 |
14348.0 |
69.18 |
5 |
龙华区 |
66 |
222521.0 |
4017.0 |
55.39 |
6 |
宝安区 |
570 |
1812617.0 |
15982.0 |
113.42 |
7 |
罗湖区 |
428 |
1320652.0 |
14374.0 |
91.88 |
8 |
光明区 |
245 |
731725.0 |
11286.0 |
64.83 |
9 |
福田区 |
564 |
1510020.0 |
28506.0 |
52.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)
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
|
counts |
freqs |
categories |
|
|
(0, 8] |
312 |
0.112962 |
(8, 15] |
505 |
0.182839 |
(15, 25] |
207 |
0.074946 |
(25, 40] |
583 |
0.211079 |
(40, 55] |
418 |
0.151340 |
(55, 70] |
227 |
0.082187 |
(70, 90] |
382 |
0.138306 |
(90, 120] |
95 |
0.034395 |
(120, 850] |
33 |
0.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

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 |
东南 |
0 |
0 |
0 |
1 |
西北 |
0 |
0 |
0 |
2 |
南 |
0 |
0 |
0 |
3 |
西 |
0 |
0 |
0 |
4 |
西南 |
0 |
0 |
0 |
5 |
东 |
0 |
0 |
0 |
6 |
北 |
0 |
0 |
0 |
7 |
东北 |
0 |
0 |
0 |
num_sum = data.groupby(by=data['方向']).count()
num_sum
|
城区 |
小区 |
面积 |
房间格局 |
价格 |
方向 |
|
|
|
|
|
东 |
266 |
266 |
266 |
266 |
266 |
东北 |
83 |
83 |
83 |
83 |
83 |
东南 |
590 |
590 |
590 |
590 |
590 |
北 |
406 |
406 |
406 |
406 |
406 |
南 |
1010 |
1010 |
1010 |
1010 |
1010 |
西 |
139 |
139 |
139 |
139 |
139 |
西北 |
108 |
108 |
108 |
108 |
108 |
西南 |
160 |
160 |
160 |
160 |
160 |
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 |
东南 |
266 |
846353.0 |
9311.0 |
1 |
西北 |
83 |
259858.0 |
3275.0 |
2 |
南 |
590 |
2281168.0 |
32360.0 |
3 |
西 |
406 |
1149286.0 |
10820.0 |
4 |
西南 |
1010 |
3158155.0 |
42690.0 |
5 |
东 |
139 |
388531.0 |
3198.0 |
6 |
北 |
108 |
332181.0 |
3706.0 |
7 |
东北 |
160 |
501586.0 |
7615.0 |
face_df['平均价格'] = round(face_df['总价格']/face_df['总面积'], 2)
face_df
|
方向 |
数量 |
总价格 |
总面积 |
平均价格 |
0 |
东南 |
266 |
846353.0 |
9311.0 |
90.90 |
1 |
西北 |
83 |
259858.0 |
3275.0 |
79.35 |
2 |
南 |
590 |
2281168.0 |
32360.0 |
70.49 |
3 |
西 |
406 |
1149286.0 |
10820.0 |
106.22 |
4 |
西南 |
1010 |
3158155.0 |
42690.0 |
73.98 |
5 |
东 |
139 |
388531.0 |
3198.0 |
121.49 |
6 |
北 |
108 |
332181.0 |
3706.0 |
89.63 |
7 |
东北 |
160 |
501586.0 |
7615.0 |
65.87 |
l = [i for i in range(8)]
_num = 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)
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、结语
主要来深圳一段时间,租房的问题是一个大问题,就自己爬取了一些信息,然后就进行了一部分分析。采取的样本并不是特别多。以上只是个人的数据分析与其他无关!
关注技术,学习进步!