一、数据分析的流程思路
1、明确分析目的和思路/提出假设
2、数据收集
3、数据处理/整理
4、数据分析/验证假设
5、数据展现/可视化图表
6、报告撰写
二、分析目的
- 需求01:每平米二手房单价(总价,按月均价)
- 需求02:各大区房屋面积总和,降序排序
- 需求03:按照周来分析,每一周中的北京市的二手房交易的数量是上涨还是下降趋势,还是基本不变?
- 需求04:按照周来分析,每一周的二手房成交的单位均价的走势怎么样?
- 需求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 成交 格林云墅 3室1厅 89.95 300 608 1.0 4.0 43.0 6424 1.01E+11 商品房 2018/3/1 普通住宅 满两年 非共有 3室1厅1厨1卫 中楼层(共9层) 暂无数据 73.63 塔楼 南 北 2014 精装 钢混结构 集中供暖 一梯两户 70 有 NaN NaN
2 366 2019-10-29 成交 三羊里 2室1厅 89.79 368 31 0.0 3.0 4.0 118 1.01E+11 商品房 2019/9/29 普通住宅 满两年 非共有 2室1厅1厨1卫 中楼层(共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 成交 碧桂园小区二区 1室0厅 58
15175 门头沟 2019-09 成交 新桥路小区 2室1厅 51.47
29127 西城 2019-05-12 成交 龙爪槐胡同 2室1厅 67.36
25210 通州 2019-06 成交 海棠湾一期 2室2厅 91.07
1797 大兴 2019-07 成交 丽园C区 3室2厅 141.48
33204 昌平 2019.09.03 新龙城 2室1厅 100.2
36054 东城 1905/7/11 前门东大街 3室1厅 69.79
5760 朝阳 2019-09-04 成交 富力城D区 2室1厅 85.04
12756 海淀 2019-09-30 成交 定慧北里 3室1厅 82.44
32146 亦庄开发区 2017-03-07 成交 荣京丽都 1室0厅 41.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 非共有 2室2厅1厨1卫 低楼层(共7层) 平层 暂无数据
17853 共有 2室1厅1厨1卫 顶层(共6层) 平层 暂无数据
29596 暂无数据 2室1厅1厨2卫 中楼层(共19层) 平层 暂无数据
14038 非共有 2室1厅1厨1卫 高楼层(共18层) 暂无数据 暂无数
27348 非共有 1室0厅1厨1卫 中楼层(共26层) 暂无数据 18.53
31512 非共有 2室1厅1厨1卫 中楼层(共6层) 平层 77.18
25027 非共有 1室0厅1厨1卫 低楼层(共7层) 暂无数据 暂无数据
687 非共有 1室1厅1厨1卫 中楼层(共15层) 平层 46.22
3567 共有 3室1厅1厨1卫 低楼层(共6层) 平层 暂无数据
15897 非共有 1室1厅1厨1卫 底层(共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 暂无数据 2室1厅1厨1卫 中楼层(共6层) 平层 NaN
35361 非共有 2室2厅1厨1卫 底层(共6层) 平层 NaN
35362 非共有 3室1厅1厨2卫 高楼层(共21层) 平层 117.11
35363 暂无数据 1室1厅1厨1卫 底层(共5层) 平层 NaN
35364 非共有 3室1厅1厨1卫 高楼层(共6层) 平层 84.11
35365 暂无数据 3室1厅1厨1卫 高楼层(共6层) 平层 NaN
35366 非共有 1室0厅0厨1卫 低楼层(共28层) 平层 NaN
35367 暂无数据 1室0厅0厨1卫 低楼层(共28层) 平层 NaN
35368 非共有 1室2厅1厨1卫 高楼层(共6层) 平层 NaN
35369 非共有 2室2厅1厨2卫 高楼层(共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 集中供暖 一梯四户 70 无
29064 集中供暖 两梯七户 70 有
23215 集中供暖 一梯三户 70 无
26982 集中供暖 一梯三户 70 无
3056 集中供暖 一梯三户 70 有
25895 集中供暖 一梯两户 70 无
33206 自供暖 一梯四户 70 无
31214 自供暖 两梯三户 70 有
7638 集中供暖 一梯九户 70 无
23420 集中供暖 一梯三户 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 双峪路小区 2室1厅 53.779999 180.0 151.0 1.0 85.0 144.0 8739.0 1.01E+11 商品房 2017-07-22 普通住宅 满两年 非共有 2室1厅1厨1卫 底层(共5层) 平层 38.150002 板楼 南 北 1980 简装 混合结构 集中供暖 一梯三户 70 无 151 days 2017 51
1675 大兴 203.0 2019-07-11 康泰园 1室1厅 60.099998 203.0 492.0 1.0 62.0 192.0 10405.0 1.01E+11 商品房 2018-03-06 普通住宅 暂无数据 非共有 1室1厅1厨1卫 底层(共18层) 平层 46.389999 板楼 南 北 2009 简装 钢混结构 集中供暖 一梯两户 70 有 492 days 2019 28
14601 海淀 938.5 2019-08-01 今日家园 4室1厅 179.509995 1380.0 66.0 1.0 21.0 17.0 842.0 1.01E+11 商品房 2019-05-27 普通住宅 暂无数据 非共有 4室1厅1厨3卫 中楼层(共9层) 跃层 156.351532 板楼 南 北 2000 精装 钢混结构 集中供暖 一梯六户 70 有 66 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周成交周期较长还需进一步分析