碧桂园公园上城楼盘-酒店安保领班工作总结范文

综合案例--北京租房数据统计分析
2023年9月22日发(作者:窦章)

综合案例--北京租房数据统计分析

Table of Contents

前⾔

原始数据请点击

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

#

设置中⽂字体

from pylab import mpl

mpl.rcParams["-serif"] = ["SimHei"]

获取数据

file_data = pd.read_csv("./data/链家北京租房数据.csv")

file_data

区域⼩区名称户型⾯积(㎡)价格(元/⽉)

0东城万国城MOMA1室0厅59.11平⽶10000

1东城北官厅胡同2号院3室0厅56.92平⽶6000

2东城和平⾥三区1室1厅40.57平⽶6900

3东城菊⼉胡同2室1厅57.09平⽶8000

4东城交道⼝北⼆条35号院1室1厅42.67平⽶5500

..................

8218顺义怡馨家园3室1厅114.03平⽶5500

8219顺义旭辉26街区4房间2卫59平⽶5000

8220顺义前进花园⽟兰苑3室1厅92.41平⽶5800

8221顺义双裕⼩区2室1厅71.81平⽶4200

8222顺义樱花园⼆区1室1厅35.43平⽶2700

8223 rows × 5 columns

#

看⼀看数据的⼤概情况

file_data.describe()

价格(元/⽉)

count8223.000000

mean9512.297823

std9186.752612

min566.000000

25%4800.000000

50%6800.000000

50%6800.000000

75%10000.000000

max150000.000000

价格(元/⽉)

数据基本处理

重复值和空值处理

#

重复值

# file_ated()

#dataframeshape

通过观察来观测结果

file_data = file_data.drop_duplicates()

file_data.shape

(5773, 5)

#

空值处理

file_data = file_data.dropna()

file_data.shape

(5773, 5)

数据转换类型

⾯积数据类型转换

file_data.head()

区域⼩区名称户型⾯积(㎡)价格(元/⽉)

0东城万国城MOMA1室0厅59.11平⽶10000

1东城北官厅胡同2号院3室0厅56.92平⽶6000

2东城和平⾥三区1室1厅40.57平⽶6900

3东城菊⼉胡同2室1厅57.09平⽶8000

4东城交道⼝北⼆条35号院1室1厅42.67平⽶5500

#

单个值实现

# ,

切⽚取值去掉字符串后两位

file_data["⾯积()"].values[0][:-2]

'59.11'

#

创建⼀个空的数组

data_new = np.array([])

data_area = file_data["⾯积()"].values

for i in data_area:

data_new = np.append(data_new, np.array(i[:-2]))

# data_new

转换中的数据类型

data_new = data_new.astype(np.float64)

#

替换

file_data.loc[:, "⾯积()"] = data_new

file_data.head()

区域⼩区名称户型⾯积(㎡)价格(元/⽉)

0东城万国城MOMA1室0厅59.1110000

1东城北官厅胡同2号院3室0厅56.926000

2东城和平⾥三区1室1厅40.576900

3东城菊⼉胡同2室1厅57.098000

4东城交道⼝北⼆条35号院1室1厅42.675500

户型表达⽅式转换

#

取出需要修改的列

house_data = file_data["户型"]

#

创建⼀个新数组

temp_list = []

# repalce,

⽅法更改并放⼊新的数组中

for i in house_data:

# print(i)

new_info = i.replace("房间", "")

temp_list.append(new_info)

#

替换数据表中原来的数据

file_data.loc[:, "户型"] = temp_list

file_data

区域⼩区名称户型⾯积(㎡)价格(元/⽉)

0东城万国城MOMA1室0厅59.1110000

1东城北官厅胡同2号院3室0厅56.926000

2东城和平⾥三区1室1厅40.576900

3东城菊⼉胡同2室1厅57.098000

4东城交道⼝北⼆条35号院1室1厅42.675500

..................

8218顺义怡馨家园3室1厅114.035500

8219顺义旭辉26街区4室2卫59.005000

8220顺义前进花园⽟兰苑3室1厅92.415800

8221顺义双裕⼩区2室1厅71.814200

8222顺义樱花园⼆区1室1厅35.432700

区域⼩区名称户型⾯积(㎡)价格(元/⽉)

5773 rows × 5 columns

图标分析

房源数量、 位置分布分析

# unique()

⽅法去重

file_data["区域"].unique()

array(['东城', '丰台', '亦庄开发区', '⼤兴', '房⼭', '昌平', '朝阳', '海淀', '⽯景⼭', '西城',

'通州', '门头沟', '顺义'], dtype=object)

new_df = pd.DataFrame({"区域":file_data["区域"].unique(),

"数量":[0]*13})

new_df

区域数量

0东城0

1丰台0

2亦庄开发区0

3⼤兴0

4房⼭0

5昌平0

6朝阳0

7海淀0

8⽯景⼭0

9西城0

10通州0

11门头沟0

12顺义0

#

获取每个区域房源数量

# :

分组聚合按照区域进⾏分组

# count(),

聚合统计每个区域房源数量

area_count = file_data.groupby(by="区域").count()

# dataframe

将上⾯的的取值赋值数量列

new_df["数量"] = area_count.values

户型数量分析

house_data = file_data["户型"]

house_data.head()

0 10

1 30

2 11

3 21

4 11

Name: 户型, dtype: object

def all_house(arr):

"""统计户型的数量"""

# , numpy

去重转化为了字符串数组

key = np.unique(arr)

#

创建新字典储存数据

result = {}

for k in key:

# arr key

判断中的每⼀个值是否与中的第⼀个值相同

# boolseries

并返回类型的

mask = (arr == k)

# true, false

就保留就去除

arr_new = arr[mask]

# masktrue

获取的个数

v = arr_new.size

# k, arr_newsize

使⽤作为索引作为值

result[k] = v

return result

house_info = all_house(house_data)

house_info

{'00': 1,

'10': 10,

'10': 244,

'11': 126,

'11': 844,

'12': 13,

'20': 1,

'20': 23,

'21': 120,

'21': 2249,

'22': 22,

'22': 265,

'23': 1,

'30': 3,

'30': 12,

'31': 92,

'31': 766,

'32': 48,

'32': 489,

'33': 1,

'33': 10,

'41': 15,

'41': 58,

'42': 24,

'42': 191,

'43': 5,

'43': 9,

'45': 2,

'50': 1,

'50': 1,

'51': 3,

'51': 7,

'52': 7,

'52': 49,

'53': 3,

'53': 24,

'54': 1,

'55': 1,

'60': 1,

'61': 1,

'61': 1,

'62': 5,

'63': 2,

'63': 6,

'64': 2,

'71': 1,

'72': 2,

'73': 3,

'74': 1,

'84': 2,

'91': 2,

'92': 1,

'95': 2}

#

去掉统计数量较少的值

house_data = dict((key, value) for key,

value in house_info.items() if value > 50)

show_houses = pd.DataFrame({"户型": [x for x in house_data.keys()],

"数量": [x for x in house_data.values()]})

show_houses

户型数量

01室0厅244

11室1卫126

21室1厅844

32室1卫120

42室1厅2249

52室2厅265

63室1卫92

73室1厅766

83室2厅489

94室1厅58

104室2厅191

户型数量

#

图形展⽰房屋类型

house_type = show_houses["户型"]

house_type_num = show_houses["数量"]

plt.barh(range(11), house_type_num)

plt.yticks(range(11), house_type)

plt.xlim(0, 2500)

plt.title("北京市各区域租房数量统计")

plt.xlabel("数量")

plt.ylabel("房屋类型")

#

给每个条上⾯添加具体数字

for x, y in enumerate(house_type_num):

# print(x, y)

plt.text(y+0.5, x-0.2, "%s" %y)

plt.show()

平均租⾦分析

df_all = pd.DataFrame({"区域": file_data["区域"].unique(),

"房租总⾦额": [0]*13,

"总⾯积": [0]*13})

df_all.head()

区域房租总⾦额总⾯积

0东城00

1丰台00

2亦庄开发区00

3⼤兴00

4房⼭00

# series,

⽅式按区域分组价格叠加聚合

sum_price = file_data["价格(/)"].groupby(file_data["区域"]).sum()

# series,

⽅式按区域分组⾯积叠加聚合

sum_area = file_data["⾯积()"].groupby(file_data["区域"]).sum()

#

赋值

df_all["房租总⾦额"] = sum_price.values

df_all["总⾯积"] = sum_area.values

df_all

区域房租总⾦额总⾯积

0东城394555027353.99

1丰台440489350922.79

2亦庄开发区131840015995.53

3⼤兴228695035884.15

4房⼭72675015275.41

5昌平252151535972.92

6朝阳20281396166921.72

7海淀727935057210.39

8⽯景⼭115650013956.67

9西城563697537141.64

10通州271960046625.23

11门头沟104830020258.20

12顺义219090033668.97

#

计算各个区域每平⽅⽶的房租

# round

四舍五⼊到⼩数后两位

df_all["每平⽶租⾦()"] = round(df_all["房租总⾦额"] / df_all["总⾯积"], 2)

df_all

区域房租总⾦额总⾯积每平⽶租⾦(元)

0东城394555027353.99144.24

1丰台440489350922.7986.50

2亦庄开发区131840015995.5382.42

3⼤兴228695035884.1563.73

4房⼭72675015275.4147.58

5昌平252151535972.9270.09

6朝阳20281396166921.72121.50

7海淀727935057210.39127.24

8⽯景⼭115650013956.6782.86

9西城563697537141.64151.77

10通州271960046625.2358.33

11门头沟104830020258.2051.75

12顺义219090033668.9765.07

区域房租总⾦额总⾯积每平⽶租⾦(元)

# ,

合并两个表格默认内拼接模式

df_merge = pd.merge(new_df, df_all)

#

降序排列

df_merge.sort_values(by="每平⽶租⾦()", ascending=False)

区域数量房租总⾦额总⾯积每平⽶租⾦(元)

9西城442563697537141.64151.77

0东城282394555027353.99144.24

7海淀605727935057210.39127.24

6朝阳159720281396166921.72121.50

1丰台577440489350922.7986.50

8⽯景⼭175115650013956.6782.86

2亦庄开发区147131840015995.5382.42

5昌平347252151535972.9270.09

12顺义297219090033668.9765.07

3⼤兴362228695035884.1563.73

10通州477271960046625.2358.33

11门头沟285104830020258.2051.75

4房⼭18072675015275.4147.58

#

图形可视化

num = df_merge["数量"]

price = df_merge["每平⽶租⾦()"]

lx = df_merge["区域"]

l = [i for i in range(13)]

# ,

创建画布承接对象

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

#

显⽰折线图

ax1 = fig.add_subplot(111) # 1*1,1

把画布分为放在位置

ax1.plot(l, price, "or-", label="价格")

# forenumerate()

循环⾥函数是⼀个枚举函数,

# ()

可⽤于将⼀个可遍历的数据对象如列表、元组或字符串

#

组合为⼀个索引序列,同时列出数据和数据下标。

# zip()

将可遍历的俩数据结构对应元素打包成⼀个个元组返回

for i, (_x, _y) in enumerate(zip(l, price)):

# x, y(),

传⼊的坐标数据值以及需要标注的值

plt.text(_x+0.2, _y, price[i])

ax1.set_ylim([0, 160])

ax1.set_ylabel("价格")

plt.legend(loc="upper right")

#

显⽰条形图

ax2 = ax1.twinx()

plt.bar(l, num, label="数量", alpha=0.2, color="green")

ax2.set_ylabel("数量")

plt.legend(loc="upper left")

plt.xticks(l, lx)

plt.show()

#

查看房屋的最⼤⾯积和最⼩⾯积

print('房屋最⼤⾯积是%d平⽶'%(file_data['⾯积()'].max()))

print('房屋最⼩⾯积是%d平⽶'%(file_data['⾯积()'].min()))

#

查看房租的最⾼值和最⼩值

print('房租最⾼价格为每⽉%d'%(file_data['价格(/)'].max()))

print('房屋最低价格为每⽉%d'%(file_data['价格(/)'].min()))

房屋最⼤⾯积是1133平⽶

房屋最⼩⾯积是11平⽶

房租最⾼价格为每⽉150000

房屋最低价格为每⽉566

#

⾯积划分

area_divide = [1, 30, 50, 70, 90, 120, 140, 160, 1200]

area_cut = pd.cut(list(file_data["⾯积()"]), area_divide)

area_cut_num = area_cut.describe()

area_cut_num

countsfreqs

categories

(1, 30]410.007102

(30, 50]7100.122986

categories

(50, 70]15660.271263

(70, 90]10940.189503

(90, 120]10820.187424

(120, 140]3810.065997

(140, 160]2740.047462

(160, 1200]6250.108263

countsfreqs

#

图像可视化

area_per = (area_cut_num["freqs"].values)*100

labels = ['30平⽶以下', '30-50平⽶', '50-70平⽶', '70-90平⽶',

'90-120平⽶','120-140平⽶','140-160平⽶','160平⽶以上']

plt.figure(figsize=(15, 8), dpi=100)

plt.pie(x=area_per, labels=labels, autopct="%.2f %%")

plt.legend()

plt.show()

#!/usr/bin/env python

# coding: utf-8

#

Table of Contents

#

平均租⾦分析

# In[576]:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

#

设置中⽂字体

from pylab import mpl

mpl.rcParams["-serif"] = ["SimHei"]

# #

获取数据

# In[577]:

file_data = pd.read_csv("")

file_data

# In[578]:

#

看⼀看数据的⼤概情况

file_data.describe()

# #

数据基本处理

# ##

重复值和空值处理

# In[579]:

#

重复值

# file_ated()

#dataframeshape

通过观察来观测结果

file_data = file_data.drop_duplicates()

file_data.shape

# In[580]:

#

空值处理

file_data = file_data.dropna()

file_data.shape

# ##

数据转换类型

# ###

⾯积数据类型转换

# In[581]:

file_data.head()

# In[582]:

#

单个值实现

# ,

切⽚取值去掉字符串后两位

file_data["⾯积()"].values[0][:-2]

# In[583]:

#

创建⼀个空的数组

data_new = np.array([])

data_area = file_data["⾯积()"].values

for i in data_area:

data_new = np.append(data_new, np.array(i[:-2]))

# data_new

转换中的数据类型

data_new = data_new.astype(np.float64)

#

替换

file_data.loc[:, "⾯积()"] = data_new

file_data.head()

# ###

户型表达⽅式转换

# In[584]:

#

取出需要修改的列

house_data = file_data["户型"]

#

创建⼀个新数组

temp_list = []

# repalce,

⽅法更改并放⼊新的数组中

for i in house_data:

# print(i)

new_info = i.replace("房间", "")

temp_list.append(new_info)

#

替换数据表中原来的数据

file_data.loc[:, "户型"] = temp_list

file_data

# #

图标分析

# ##

房源数量、位置分布分析

# In[585]:

# unique()

⽅法去重

file_data["区域"].unique()

# In[586]:

new_df = pd.DataFrame({"区域":file_data["区域"].unique(),

"数量":[0]*13})

new_df

# In[587]:

#

获取每个区域房源数量

# :

分组聚合按照区域进⾏分组

# count(),

聚合统计每个区域房源数量

area_count = file_data.groupby(by="区域").count()

# dataframe

将上⾯的的取值赋值数量列

new_df["数量"] = area_count.values

# ##

户型数量分析

# In[588]:

house_data = file_data["户型"]

house_data = file_data["户型"]

house_data.head()

# In[589]:

def all_house(arr):

"""统计户型的数量"""

# , numpy

去重转化为了字符串数组

key = np.unique(arr)

#

创建新字典储存数据

result = {}

for k in key:

# arr key

判断中的每⼀个值是否与中的第⼀个值相同

# boolseries

并返回类型的

mask = (arr == k)

# true, false

就保留就去除

arr_new = arr[mask]

# masktrue

获取的个数

v = arr_new.size

# k, arr_newsize

使⽤作为索引作为值

result[k] = v

return result

house_info = all_house(house_data)

house_info

# In[590]:

#

去掉统计数量较少的值

house_data = dict((key, value) for key,

value in house_info.items() if value > 50)

# In[591]:

show_houses = pd.DataFrame({"户型": [x for x in house_data.keys()],

"数量": [x for x in house_data.values()]})

show_houses

# In[592]:

#

图形展⽰房屋类型

house_type = show_houses["户型"]

house_type_num = show_houses["数量"]

plt.barh(range(11), house_type_num)

plt.yticks(range(11), house_type)

plt.xlim(0, 2500)

plt.title("北京市各区域租房数量统计")

plt.xlabel("数量")

plt.ylabel("房屋类型")

#

给每个条上⾯添加具体数字

for x, y in enumerate(house_type_num):

# print(x, y)

plt.text(y+0.5, x-0.2, "%s" %y)

plt.show()

# ##

平均租⾦分析

# In[593]:

df_all = pd.DataFrame({"区域": file_data["区域"].unique(),

"房租总⾦额": [0]*13,

"总⾯积": [0]*13})

df_all.head()

# In[594]:

# series,

⽅式按区域分组价格叠加聚合

sum_price = file_data["价格(/)"].groupby(file_data["区域"]).sum()

# series,

⽅式按区域分组⾯积叠加聚合

sum_area = file_data["⾯积()"].groupby(file_data["区域"]).sum()

#

赋值

df_all["房租总⾦额"] = sum_price.values

df_all["总⾯积"] = sum_area.values

df_all

# In[595]:

#

计算各个区域每平⽅⽶的房租

# round

四舍五⼊到⼩数后两位

df_all["每平⽶租⾦()"] = round(df_all["房租总⾦额"] / df_all["总⾯积"], 2)

df_all

# In[596]:

# ,

合并两个表格默认内拼接模式

df_merge = pd.merge(new_df, df_all)

#

降序排列

df_merge.sort_values(by="每平⽶租⾦()", ascending=False)

# In[597]:

#

图形可视化

num = df_merge["数量"]

price = df_merge["每平⽶租⾦()"]

lx = df_merge["区域"]

l = [i for i in range(13)]

# ,

创建画布承接对象

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

#

显⽰折线图

ax1 = fig.add_subplot(111) # 1*1,1

把画布分为放在位置

ax1.plot(l, price, "or-", label="价格")

# forenumerate()

循环⾥函数是⼀个枚举函数,

# ()

可⽤于将⼀个可遍历的数据对象如列表、元组或字符串

#

组合为⼀个索引序列,同时列出数据和数据下标。

# zip()

将可遍历的俩数据结构对应元素打包成⼀个个元组返回

for i, (_x, _y) in enumerate(zip(l, price)):

# x, y(),

传⼊的坐标数据值以及需要标注的值

plt.text(_x+0.2, _y, price[i])

ax1.set_ylim([0, 160])

ax1.set_ylabel("价格")

plt.legend(loc="upper right")

#

显⽰条形图

ax2 = ax1.twinx()

plt.bar(l, num, label="数量", alpha=0.2, color="green")

ax2.set_ylabel("数量")

plt.legend(loc="upper left")

plt.xticks(l, lx)

plt.show()

# In[598]:

#

查看房屋的最⼤⾯积和最⼩⾯积

print('房屋最⼤⾯积是%d平⽶'%(file_data['⾯积()'].max()))

print('房屋最⼩⾯积是%d平⽶'%(file_data['⾯积()'].min()))

#

查看房租的最⾼值和最⼩值

print('房租最⾼价格为每⽉%d'%(file_data['价格(/)'].max()))

print('房屋最低价格为每⽉%d'%(file_data['价格(/)'].min()))

# In[599]:

#

⾯积划分

area_divide = [1, 30, 50, 70, 90, 120, 140, 160, 1200]

area_cut = pd.cut(list(file_data["⾯积()"]), area_divide)

area_cut_num = area_cut.describe()

area_cut_num

# In[600]:

#

图像可视化

area_per = (area_cut_num["freqs"].values)*100

labels = ['30平⽶以下', '30-50平⽶', '50-70平⽶', '70-90平⽶',

'90-120平⽶','120-140平⽶','140-160平⽶','160平⽶以上']

plt.figure(figsize=(15, 8), dpi=100)

plt.pie(x=area_per, labels=labels, autopct="%.2f %%")

plt.legend()

plt.show()

电焊机多少钱-股票分时图白色成交量

综合案例--北京租房数据统计分析

更多推荐

大兴房屋出租