Python数据分析——某地产网站二手房销售数据分析

一、数据分析的流程思路

1、明确分析目的和思路/提出假设

2、数据收集

3、数据处理/整理

4、数据分析/验证假设

5、数据展现/可视化图表

6、报告撰写

二、分析目的

  1. 需求01:每平米二手房单价(总价,按月均价)
  2. 需求02:各大区房屋面积总和,降序排序
  3. 需求03:按照周来分析,每一周中的北京市的二手房交易的数量是上涨还是下降趋势,还是基本不变?
  4. 需求04:按照周来分析,每一周的二手房成交的单位均价的走势怎么样?
  5. 需求05:按大区/小区/地区分析平均挂牌周期

三、数据收集

已有某地产网站的数据,存储在csv文件中。

四、数据处理

4.1 引入python数据分析库

import numpy as np #用于常规的数据运算
import pandas as pd  #用于数据分析,包括数据的引入,特征的提取以及数据的清洗转移等
import matplotlib as mpl #用于数据的可视化
import matplotlib.pyplot as plt #方便快速绘制2D图表

4.2 设置绘图中文支持

mpl.rcParams["font.family"] = "SimHei" #设置字体
mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

% matplotlib inline #将那些用于matplotlib绘制的图显示在页面里而不是弹出一个窗口

4.3 读取数据

lianjia = pd.read_csv("XXXXXXXX.csv",  encoding="utf-8",  sep="\t") # 读取csv文件
pd.set_option("max_colwidth", 60)     # 设置每个字段,最多显示60个字符
pd.set_option("max_columns", 50)      # 设置每个dataframe显示 50个字段
lianjia.head(3) #查看前三行

结果:

成交价(万)	成交时间	所在小区	户型	建筑面积	挂牌价格(万)	成交周期(天)	调价(次)	带看(次)	关注(人)	浏览(次	链家编号	交易权属	挂牌时间	房屋用途	房屋年限	房权所属	房屋户型	所在楼层	户型结构	套内面积(㎡)	建筑类型	房屋朝向	建成年代	装修情况	建筑结构	供暖方式	梯户比例	产权年限	配备电梯	xx1	xx2
0	大兴	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
1	297	2019-10-29 成交	格林云墅	3189.95	300	608	1.0	4.0	43.0	6424	1.01E+11	商品房	2018/3/1	普通住宅	满两年	非共有	3111卫	中楼层(9)	暂无数据	73.63	塔楼	南 北	2014	精装	钢混结构	集中供暖	一梯两户	70	有	NaN	NaN
2	366	2019-10-29 成交	三羊里	2189.79	368	31	0.0	3.0	4.0	118	1.01E+11	商品房	2019/9/29	普通住宅	满两年	非共有	2111卫	中楼层(6)	平层	80.44	板楼	南 北	2009	其他	钢混结构	集中供暖	一梯两户	70	无	NaN	NaN

查看数据整体结构

lianjia.info() #查看数据整体结构

结果:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 38393 entries, 0 to 38392
Data columns (total 32 columns):
成交价(万)     38393 non-null object
成交时间       38379 non-null object
所在小区       38379 non-null object
户型         38379 non-null object
建筑面积       38379 non-null object
挂牌价格(万)    38379 non-null object
成交周期(天)    38379 non-null object
调价(次)      38379 non-null float64
带看(次)      38379 non-null float64
关注(人)      38379 non-null float64
浏览(次       38379 non-null object
链家编号       38379 non-null object
交易权属       38379 non-null object
挂牌时间       38379 non-null object
房屋用途       38379 non-null object
房屋年限       38379 non-null object
房权所属       38379 non-null object
房屋户型       38379 non-null object
所在楼层       38379 non-null object
户型结构       38379 non-null object
套内面积(㎡)    38379 non-null object
建筑类型       38379 non-null object
房屋朝向       38379 non-null object
建成年代       38379 non-null object
装修情况       38379 non-null object
建筑结构       38379 non-null object
供暖方式       38379 non-null object
梯户比例       38379 non-null object
产权年限       38379 non-null object
配备电梯       38379 non-null object
xx1        3022 non-null object
xx2        3022 non-null object
dtypes: float64(3), object(29)
memory usage: 9.4+ MB

4.4 数据预处理

4.4.1 处理大区

成交价比其他字段非空数据要多,经查看原始表是因为大区存放在这个字段下。下面新增加一个大区字段。

lianjia["大区"] = lianjia["成交价(万)"]    # 把  "成交价(万)"  这个字段的值赋值给  大区  这个字段
lianjia[["大区", "成交价(万)"]].head(10) #查看新增加字段
大区	成交价(万)
0	大兴	大兴
1	297	297
2	366	366
3	226	226
4	548	548
5	245	245
6	254	254
7	193	193
8	280	280
9	347	347

将大区字段中的数字替换为区名

lianjia["大区"] = lianjia["大区"].str.replace("-", "").replace("\d+", np.nan, regex=True) #去掉特殊符号-,将数字替换为nan
lianjia["大区"].fillna(inplace=True, method="ffill") #将空值替换为前面的区名
lianjia.dropna(axis=0, inplace=True, thresh=20) #删除大区nan nan nan这样的行

# 将大区字段挪到第一列
lianjia_daqu = lianjia["大区"]
lianjia.drop("大区", axis=1, inplace=True)
lianjia.insert(0, "大区", lianjia_daqu)
display(lianjia[["大区", "成交时间", "所在小区", "户型", "建筑面积"]].sample(10))#查看结果
        大区	成交时间     	所在小区	        户型	建筑面积
6654	房山	2019-08 成交	碧桂园小区二区	1058
15175	门头沟	2019-09 成交	新桥路小区	    2151.47
29127	西城	2019-05-12 成交	龙爪槐胡同	    2167.36
25210	通州	2019-06 成交	海棠湾一期	    2291.07
1797	大兴	2019-07 成交	丽园C区	        32141.48
33204	昌平	2019.09.03	    新龙城	        21100.2
36054	东城	1905/7/11	    前门东大街	    3169.79
5760	朝阳	2019-09-04 成交	富力城D区	    2185.04
12756	海淀	2019-09-30 成交	定慧北里	        3182.44
32146	亦庄开发区	2017-03-07 成交	荣京丽都	    1041.44

4.4.2 处理xx1,xx2

从前面的info列表可以看到xx1,xx2两个字段绝大多数是缺失值

display(lianjia["xx1"].unique())   # 查看xx1去重后的值 
display(lianjia["xx2"].unique())   # 查看xx2去重后的值
array([nan, '70', '40', '50', '未知'], dtype=object)  
array([nan, '有', '无', '暂无数据'], dtype=object)
### 删除 xx1, xx2 这两列
lianjia.drop(axis=1, columns=["xx1", "xx2"], inplace=True) #删除xx1,xx2这两列

所有字段均无缺失值

<class 'pandas.core.frame.DataFrame'>
Int64Index: 35357 entries, 1 to 35369
Data columns (total 31 columns):
大区         35357 non-null object
成交价(万)     35357 non-null object
成交时间       35357 non-null object
所在小区       35357 non-null object
户型         35357 non-null object
建筑面积       35357 non-null object
挂牌价格(万)    35357 non-null object
成交周期(天)    35357 non-null object
调价(次)      35357 non-null float64
带看(次)      35357 non-null float64
关注(人)      35357 non-null float64
浏览(次       35357 non-null object
链家编号       35357 non-null object
交易权属       35357 non-null object
挂牌时间       35357 non-null object
房屋用途       35357 non-null object
房屋年限       35357 non-null object
房权所属       35357 non-null object
房屋户型       35357 non-null object
所在楼层       35357 non-null object
户型结构       35357 non-null object
套内面积(㎡)    35357 non-null object
建筑类型       35357 non-null object
房屋朝向       35357 non-null object
建成年代       35357 non-null object
装修情况       35357 non-null object
建筑结构       35357 non-null object
供暖方式       35357 non-null object
梯户比例       35357 non-null object
产权年限       35357 non-null object
配备电梯       35357 non-null object
dtypes: float64(3), object(28)
memory usage: 8.6+ MB

4.4.3 处理时间

#查看跟日期有关的所有字段
display(lianjia[["成交时间", "成交周期(天)", "挂牌时间"]].sample(10))
display(lianjia[["成交时间", "成交周期(天)", "挂牌时间"]].dtypes)

在这里插入图片描述

# 先把 "成交时间" 这个字段上的  " 成交"  字符串去掉
lianjia["成交时间"] = lianjia["成交时间"].str.replace(" 成交", "")
# 统一时间格式
lianjia["成交时间"] = pd.to_datetime(lianjia["成交时间"])
lianjia["挂牌时间"] = pd.to_datetime(lianjia["挂牌时间"])
# 计算成交周期,并转换为天数
lianjia["成交周期(新)"] = lianjia["成交时间"] - lianjia["挂牌时间"]
lianjia["成交周期(天)"] = lianjia["成交周期(新)"].dt.days
#获取成交时间年、周
lianjia["成交时间(年)"] = lianjia["成交时间"].dt.year
lianjia["成交时间(周)"] = lianjia["成交时间"].dt.week

4.4.4 处理其他字段

lianjia[["大区", "所在小区", "户型", "建筑面积"]].loc[[30922, 32852, 8784, 31629]]
	    大区	    所在小区	        户型	建筑面积
30922	亦庄开发区	林肯公园二期C区	#NAME?	--
32852	昌平	    首开智慧社	    车位	6.99 户型结构
8784	房山	    行宫园一里	    #NAME?	--
31629	亦庄开发区	新海南里      	#NAME?	--
#删除户型为车位的行,并不需要分析车位,而且对应的建筑面积也不规范
lianjia.drop(lianjia[(lianjia["户型"] == "车位")].index, inplace=True)
#删除户型为#NAME?,删除建筑面积为--的行
lianjia.drop(lianjia[(lianjia["户型"] == "#NAME?") | (lianjia["建筑面积"] == "--")].index, inplace=True)
# 建筑面积中文字符和空格变为空,并转换为浮点值
lianjia["建筑面积"] = lianjia["建筑面积"].str.replace("[\s\u4e00-\u9fa5]", "", regex=True)
lianjia["建筑面积"] = lianjia["建筑面积"].astype(np.float32)
lianjia[["成交价(万)", "挂牌价格(万)", "调价(次)", "带看(次)", "关注(人)", "浏览(次"]].sample(10)
        成交价(万)	挂牌价格(万)调价(次)带看(次) 关注(人)浏览(次
10648	290	        290	            0.0	    2.0	    8.0	     288
30125	363	        390	            0.0	    6.0	    14.0	 3680
14244   648   	    680	            0.0	    0.0	    0.0	   暂无数据
21619	209-214 	226	            1.0	    2.0	    3.0	     155
27061	327-334 	355	            1.0	    6.0	    132.0	 1423
4598	499	        480	            0.0	    27.0	42.0	 924
35070	805   	    850	            1.0	    24.0	51.0	 13856
5253	437	        437	            1.0	    46.0	82.0	 962
1369	293-324	    暂无数据   	    0.0	    0.0	    0.0	   暂无数据
12051	586	        600	            1.0   	84.0	55.0	 5399
# 成交价类似293-324,取两个数字的平均值
#函数按照-拆分,如果是一个数字则直接返回该数字,如果是两个数字则计算平均值后返回
def handle(value):
    values2 = str(value).split("-")
    if len(values2) == 1:
        return value
    else:
        result = (float(values2[0]) + float(values2[1])) / 2
        return str(result)

lianjia["成交价(万)"] = lianjia["成交价(万)"].map(handle)    #  调用函数进行映射
lianjia["成交价(万)"] = lianjia["成交价(万)"].astype(np.float32)
#处理
lianjia["挂牌价格(万)"] = lianjia["挂牌价格(万)"].str.replace("暂无数据", "0")
lianjia["浏览(次"] = lianjia["浏览(次"].str.replace("暂无数据", "0")
#转换数据类型
lianjia["挂牌价格(万)"] = lianjia["挂牌价格(万)"].astype(np.float32)
lianjia["成交周期(天)"] = lianjia["成交周期(天)"].astype(np.float32)
lianjia["浏览(次"] = lianjia["浏览(次"].astype(np.float32)
lianjia[[ "链家编号", "交易权属", "房屋用途", "房屋年限"]].sample(10)
        链家编号	   交易权属	房屋用途	 房屋年限
30379	1.01E+11	商品房	普通住宅	 暂无数据
32736	1.01E+11	商品房	普通住宅	 暂无数据
4078	1.01E+11	商品房	普通住宅	 满五年
9624	1.01E+11	商品房	普通住宅	 满五年
7003	1.01E+11	商品房	普通住宅	 满五年
31937	1.01E+11	商品房	公寓	 暂无数据
13796	1.01E+11	商品房	普通住宅	 暂无数据
5560	1.01E+11	已购公房	普通住宅	 满五年
11346	1.01E+11	商品房	普通住宅  满五年
598 	1.01E+11    商品房	普通住宅	 满五年
lianjia[[ "房权所属", "房屋户型", "所在楼层", "户型结构", "套内面积(㎡)"]].sample(10)
        房权所属	房屋户型	    所在楼层  	  户型结构	套内面积(㎡)
29047	非共有	2211卫	低楼层(7)	平层	暂无数据
17853	共有	2111卫	顶层(6)	    平层	暂无数据
29596	暂无数据	2112卫	中楼层(19)	平层	暂无数据
14038	非共有	2111卫	高楼层(18)	暂无数据	暂无数
27348	非共有	1011卫	中楼层(26)	暂无数据	18.53
31512	非共有	2111卫	中楼层(6)	平层	77.18
25027	非共有	1011卫	低楼层(7)	暂无数据	暂无数据
687	    非共有	1111卫	中楼层(15)	平层	46.22
3567	共有	3111卫	低楼层(6)	平层	暂无数据
15897	非共有	1111卫	底层(6)	    平层	暂无数据

#使用相同户型面积填充套内面积
temp_df1 = lianjia[~lianjia["套内面积(㎡)"].str.contains("暂无|建|数")][["房权所属", "房屋户型", "所在楼层",                                  "户型结构", "套内面积(㎡)"]]
temp_df2 = lianjia[lianjia["套内面积(㎡)"].str.contains("暂无|建|数")][["房权所属", "房屋户型", "所在楼层",                                    "户型结构", "套内面积(㎡)"]]
temp_df2["套内面积(㎡)"] = temp_df2["套内面积(㎡)"].replace("暂无数据", np.nan)
temp_df2["套内面积(㎡)"] = temp_df2["套内面积(㎡)"].replace("暂无数", np.nan)
temp_df2["套内面积(㎡)"] = temp_df2["套内面积(㎡)"].replace("\d+\s+.*", np.nan, regex=True)
lianjia_new5 = pd.concat((temp_df1, temp_df2))
lianjia[["房权所属", "房屋户型", "所在楼层",  "户型结构", "套内面积(㎡)"]]  = lianjia_new5[["房权所属",                             "房屋户型", "所在楼层",  "户型结构", "套内面积(㎡)"]]
lianjia[["房权所属", "房屋户型", "所在楼层",  "户型结构", "套内面积(㎡)"]].tail(10)
        房权所属	房屋户型	    所在楼层	     户型结构	套内面积(㎡)
35360	暂无数据	2111卫	中楼层(6)	平层	NaN
35361	非共有	2211卫	底层(6)	    平层	NaN
35362	非共有	3112卫	高楼层(21)	平层	117.11
35363	暂无数据	1111卫	底层(5)	    平层	NaN
35364	非共有	3111卫	高楼层(6)	平层	84.11
35365	暂无数据	3111卫	高楼层(6)	平层	NaN
35366	非共有	1001卫	低楼层(28)	平层	NaN
35367	暂无数据	1001卫	低楼层(28)	平层	NaN
35368	非共有	1211卫	高楼层(6)	平层	NaN
35369	非共有	2212卫	高楼层(6)	平层	NaN
# 类型转换
lianjia["套内面积(㎡)"] = lianjia["套内面积(㎡)"].astype(np.float32)
# 使用每种户型的面积的平均值来进行替换
lianjia["套内面积(㎡)"] = lianjia["套内面积(㎡)"].fillna(
lianjia.groupby("房屋户型")["套内面积(㎡)"].transform("mean"))
lianjia[[ "建筑类型", "房屋朝向", "建成年代", "装修情况", "建筑结构"]].sample(10)
        建筑类型	房屋朝向	建成年代	装修情况	建筑结构
28721	板楼	南 北	1960	简装	混合结构
21679	板楼	南 北	2009	其他	钢混结构
20617	板楼	东 西	2004	简装	混合结构
30381	板楼	南 北	2001	简装	混合结构
32116	板楼	南 北	2013	简装	钢混结构
2539	板楼	南 北	2003	精装	混合结构
15401	板楼	南 北	1980	精装	混合结构
21363	板楼	南 北	2012	简装	钢混结构
13273	板楼	南 北	1996	其他	混合结构
5942	板楼	南 西 北	2007	其他	钢混结构
lianjia[[ "供暖方式", "梯户比例", "产权年限", "配备电梯"]].sample(10)
        供暖方式	梯户比例	产权年限	配备电梯
22469	集中供暖	一梯四户	7029064	集中供暖	两梯七户	7023215	集中供暖	一梯三户	7026982	集中供暖	一梯三户	703056	集中供暖	一梯三户	7025895	集中供暖	一梯两户	7033206	自供暖	一梯四户	7031214	自供暖	两梯三户	707638	集中供暖	一梯九户	7023420	集中供暖	一梯三户	70#产权年限未知的用70填充
lianjia["产权年限"] = lianjia["产权年限"].str.replace("未知", "70")
lianjia["产权年限"] = lianjia["产权年限"].astype(np.int32)
# 删除 成交周期(新) 这个字段
lianjia.drop("成交周期(新)", axis=1, inplace=True)

4.4.5 检查处理后的数据

lianjia.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 34520 entries, 1 to 35369
Data columns (total 34 columns):
大区         34520 non-null object
成交价(万)     34520 non-null float32
成交时间       34520 non-null datetime64[ns]
所在小区       34520 non-null object
户型         34520 non-null object
建筑面积       34520 non-null float32
挂牌价格(万)    34520 non-null float32
成交周期(天)    34520 non-null float32
调价(次)      34520 non-null float64
带看(次)      34520 non-null float64
关注(人)      34520 non-null float64
浏览(次       34520 non-null float32
链家编号       34520 non-null object
交易权属       34520 non-null object
挂牌时间       34520 non-null datetime64[ns]
房屋用途       34520 non-null object
房屋年限       34520 non-null object
房权所属       34520 non-null object
房屋户型       34520 non-null object
所在楼层       34520 non-null object
户型结构       34520 non-null object
套内面积(㎡)    34475 non-null float32
建筑类型       34520 non-null object
房屋朝向       34520 non-null object
建成年代       34520 non-null object
装修情况       34520 non-null object
建筑结构       34520 non-null object
供暖方式       34520 non-null object
梯户比例       34520 non-null object
产权年限       34520 non-null int32
配备电梯       34520 non-null object
成交周期()    34520 non-null timedelta64[ns]
成交时间(年)    34520 non-null int64
成交时间(周)    34520 non-null int64
dtypes: datetime64[ns](2), float32(6), float64(3), int32(1), int64(2), object(19), timedelta64[ns](1)
memory usage: 8.3+ MB
lianjia.sample(3)
大区	成交价(万)	成交时间	所在小区	户型	建筑面积	挂牌价格(万)	成交周期(天)	调价(次)	带看(次)	关注(人)	浏览(次	链家编号	交易权属	挂牌时间	房屋用途	房屋年限	房权所属	房屋户型	所在楼层	户型结构	套内面积(㎡)	建筑类型	房屋朝向	建成年代	装修情况	建筑结构	供暖方式	梯户比例	产权年限	配备电梯	成交周期()	成交时间(年)	成交时间(周)
17501	门头沟	160.0	2017-12-20	双峪路小区	2153.779999	180.0	151.0	1.0	85.0	144.0	8739.0	1.01E+11	商品房	2017-07-22	普通住宅	满两年	非共有	2111卫	底层(5)	平层	38.150002	板楼	南 北	1980	简装	混合结构	集中供暖	一梯三户	70151 days	2017	51
1675	大兴	203.0	2019-07-11	康泰园	1160.099998	203.0	492.0	1.0	62.0	192.0	10405.0	1.01E+11	商品房	2018-03-06	普通住宅	暂无数据	非共有	1111卫	底层(18)	平层	46.389999	板楼	南 北	2009	简装	钢混结构	集中供暖	一梯两户	70492 days	2019	28
14601	海淀	938.5	2019-08-01	今日家园	41179.509995	1380.0	66.0	1.0	21.0	17.0	842.0	1.01E+11	商品房	2019-05-27	普通住宅	暂无数据	非共有	4113卫	中楼层(9)	跃层	156.351532	板楼	南 北	2000	精装	钢混结构	集中供暖	一梯六户	7066 days	2019	31

五、分析需求

5.1 每平米二手房单价

# 总建筑面积
lianjia["建筑面积"].sum()
2961666.2
# 总成交金额
lianjia["成交价(万)"].sum()
15145877.0
# 计算每平米单价
result = lianjia["成交价(万)"].sum() / lianjia["建筑面积"].sum()
display(str(result) + "万")
'5.1139717万'

5.2 各大区房屋面积总和,降序排序

result_df = lianjia.groupby("大区")["建筑面积"].agg({"建筑面积":"sum"})
result_df = result_df.sort_values("建筑面积", ascending=False)
display(result_df)
	建筑面积
大区	
亦庄开发区	300565.843750
昌平	289278.125000
顺义	286023.375000
房山	259237.218750
大兴	253338.468750
通州	251888.953125
朝阳	247918.687500
海淀	238134.578125
门头沟	230544.812500
丰台	229984.734375
西城	202130.656250
石景山	165606.250000
其他(平谷密云怀柔延庆)	7014.509766

5.3 每周的北京市的二手房交易的数量变化?

result_df = lianjia.groupby(["成交时间(年)","成交时间(周)"]).size()
display(result_df.loc[2019].head(60))
成交时间(周)
1      459
2      110
3      144
4      157
5      283
6        1
7       46
8      104
9      620
10     190
11     176
12     151
13     171
14     690
15     270
16     286
17     292
18    1252
19     365
20     445
21     439
22    1642
23     418
24     470
25     486
26     651
27    1625
28     602
29     700
30     913
31    2432
32     660
33     733
34     769
35    2596
36     956
37    1007
38     994
39    1229
40    1541
41     861
42     988
43    1157
44     508
dtype: int64
year = 2019
mpl.rcParams["font.size"] = 12
plt.figure(figsize=(12,6))
plt.bar(result_df.loc[year].index, result_df.loc[year].values)
plt.xticks(result_df.loc[year].index)
plt.yticks(np.linspace(0, 2750, 20))
font = {"family":"Kaiti",
       "style":"oblique",
        "weight":"normal",
        "color":"green",
        "size": 20
       }
plt.xlabel("周", fontdict=font)
plt.ylabel("成交数", fontdict=font)
plt.grid(axis="y", color="g", ls=":", lw=1)
plt.title(str(year) + "年北京市各周二手房成交量", fontdict=font, color= "r")

在这里插入图片描述成交量在每四周左右会有一个大幅上涨。有可能是在月初或者月末的时间点,需要进一步探查。

5.4 每周的二手房成交的单位均价的走势

result_df = lianjia.groupby(["成交时间(年)","成交时间(周)"])[["成交价(万)", "建筑面积"]].agg({"成交价(万)":"sum", "建筑面积":"sum"})
result_df["单位均价"] = result_df["成交价(万)"] / result_df["建筑面积"]
display(result_df.loc[2019].head(60))
year = 2019
mpl.rcParams["font.size"] = 12
plt.figure(figsize=(12,6))
plt.plot(result_df.loc[year].index, result_df.loc[year]["单位均价"])

在这里插入图片描述
单位均价程上升趋势,到20周后保持平稳。

result_df2= lianjia.groupby(["成交时间(年)","成交时间(周)"])["成交周期(天)"].agg(
{"成交周期(天)":"mean"})
display(result_df2.loc[2019].head(60))
year = 2019

mpl.rcParams["font.size"] = 12

plt.figure(figsize=(12,6))

plt.bar(result_df2.loc[year].index, result_df2.loc[year]["成交周期(天)"])

plt.xticks(result_df.loc[year].index)
plt.yticks(np.linspace(0, 225, 10))
font = {"family":"Kaiti",
       "style":"oblique",
        "weight":"normal",
        "color":"green",
        "size": 20
       }
plt.xlabel("周", fontdict=font)
plt.ylabel("成交周期(天)", fontdict=font)
plt.grid(axis="y", color="g", ls=":", lw=1)
plt.title(str(year) + "年北京市各周二手房成交周期", fontdict=font, color= "r")

在这里插入图片描述
第6、18、22、27、31、35、40周成交周期较长还需进一步分析

原创文章 7 获赞 6 访问量 1000

猜你喜欢

转载自blog.csdn.net/Lady_Stark/article/details/104608192