Python数据分析——某地产网站二手房销售数据分析
2020-03-10 00:28
686 查看
一、数据分析的流程思路
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周成交周期较长还需进一步分析
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python网络爬虫实战:天猫胸罩销售数据分析
- 基于python爬取‘’春雨医生“网站患者提问数据制作数据云图分析患者需求
- 基于pandas python的美团某商家的评论销售数据分析(可视化)
- Python爬取分析北京二手房数据?数据结果真的太吓人了
- 如何用Python爬取分析北京二手房数据?
- 用python对2019年二手房价格进行数据分析
- 基于pandas python的美团某商家的评论销售(数据分析)
- Python网络爬虫实战:根据天猫胸罩销售数据分析中国女性胸部大小分布
- Python爬取招聘网站进行数据分析,福利待遇一清二楚,高薪很简单
- python分析链家二手房信息----数据分析实战(一)
- 使用python抓取分析链家网二手房数据
- python基于pandas数据分析实例——游戏的开发与销售
- Python 数据分析微专业课程--项目03 视频网站数据清洗整理和结论研究
- Python网络爬虫实战:抓取和分析天猫胸罩销售数据
- 利用Tableau和python对销售数据进行分析
- python数据分析与挖掘学习笔记(6)-电商网站数据分析及商品自动推荐实战与关联规则算法
- python数据分析与挖掘学习笔记(6)-电商网站数据分析及商品自动推荐实战与关联规则算法
- Python网络爬虫实战:根据天猫胸罩销售数据分析中国女性胸部大小分布
- 只需五步!哈佛学霸教你用Python分析相亲网站数据,在两万异性中找到真爱
- python数据分析练手小项目-汽车销售偷漏纳税人识别