赞
踩
数据来源链家租房网站。随机爬虫了5000多数据。删除了信息相同的一部分信息。余下的会从五个维度进行分析!
# 导包
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
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
# 检测重复数据,
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)
# 把面积转化为数组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.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
# 一共有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
小区 | 面积 | 房间格局 | 方向 | 价格 | |
---|---|---|---|---|---|
城区 | |||||
光明区 | 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) # 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()
这里的户型太多了,有些户型太少,所以进行了取舍,舍弃户型数量小于的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) # 延长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()
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) # for x,y in enumerate(num): # plt.text(y,x,'%2f'%y) plt.title('深圳市各区租房数量与价格') plt.show()
# 查看房屋最贵,最便宜
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
<function matplotlib.pyplot.show(*args, **kw)>
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['数量'] # _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()
主要来深圳一段时间,租房的问题是一个大问题,就自己爬取了一些信息,然后就进行了一部分分析。采取的样本并不是特别多。以上只是个人的数据分析与其他无关!
关注技术,学习进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。