看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
中国主要城市的房价可以从以下网址获取:https://www.creprice.cn/rank/index.html。 该网页中会显示上一个月的房价排行情况,先复制前20个城市的数据,然后使用pd.read_clipboard()读取。我们来分析一下该月的数据(下例中用的是2020年10月数据)。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (8.0, 5.0) # 固定显示大小
plt.rcParams['font.family'] = ['sans-serif'] # 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 显示负号
dfr = pd.read_clipboard()
# 取源数据
dfr.head()
'''
   序号 城市名称 平均单价(元/㎡)  环比 同比
0   1   深圳    78,722  +2.61%  +20.44%
1   2   北京    63,554  -0.82%    -1.2%
2   3   上海    58,831   +0.4%    +9.7%
3   4   厦门    48,169  -0.61%   +9.52%
4   5   广州    38,351  -1.64%  +13.79%
'''
查看数据类型:
dfr.dtypes
'''
序号            int64
城市名称         object
平均单价(元/㎡)    object
环比           object
同比           object
dtype: object
'''
数据都是object类型,需要对数据进行提取和类型转换:
df = (
    # 去掉千分位符并转为整型
    dfr.assign(平均单价=dfr['平均单价(元/㎡)'].str.replace(',','').astype(int))
    .assign(同比=dfr.同比.str[:-1].astype(float)) # 去百分号并转为浮点型
    .assign(环比=dfr.环比.str[:-1].astype(float)) # 去百分号并转为浮点型
    .loc[:,['城市名称','平均单价','同比','环比']] # 重命名列
)
df.head()
'''
  城市名称  平均单价 同比  环比
0   深圳  78722  20.44  2.61
1   北京  63554  -1.20 -0.82
2   上海  58831   9.70  0.40
3   厦门  48169   9.52 -0.61
4   广州  38351  13.79 -1.64
'''
接下来就可以对整理好的数据进行分析了。首先看一下各城市的均价差异,数据顺序无须再调整,代码执行效果如图1所示。
(
    df.set_index('城市名称')
    .平均单价
    .plot
    .bar()
)

▲图1 各城市平均房价
各城市平均房价同比与环比情况如图2所示。
(
    df.set_index('城市名称')
    .loc[:, '同比':'环比']
    .plot
    .bar()
)

▲图2 各城市平均房价同比和环比
将同比与环比的极值用样式标注,可见东莞异常突出,房价同比、环比均大幅上升,如图3所示。
(
    df.style
    .highlight_max(color='red', subset=['同比', '环比'])
    .highlight_min(subset=['同比', '环比'])
    .format({'平均单价':"{:,.0f}"})
    .format({'同比':"{:2}%", '环比':"{:2}%"})
)

▲图3 各城市平均房价变化样式图
绘制各城市平均单价条形图,如图4所示。
# 条形图
(
    df.style
    .bar(subset=['平均单价'], color='yellow')
)

▲图4 各城市平均单价样式图
将数据样式进行综合可视化:将平均单价背景色设为渐变,并指定色系BuGn;同比、环比条形图使用不同色系,且以0为中点,体现正负;为比值加百分号。最终效果如图5所示。
(
    df.style
    .background_gradient(subset=['平均单价'], cmap='BuGn')
    .format({'同比':"{:2}%", '环比':"{:2}%"})
    .bar(subset=['同比'], 
        color=['#ffe4e4','#bbf9ce'], # 上涨、下降的颜色
        vmin=0, vmax=15, # 范围定为以0为基准的上下15
        align='zero'
        )
    .bar(subset=['环比'], 
        color=['red','green'], # 上涨、下降的颜色
        vmin=0, vmax=11, # 范围定为以0为基准的上下11
        align='zero'
        )
)

▲图5 各城市平均房价综合样式图
(完)
关于作者:李庆辉,数据产品专家,某电商公司数据产品团队负责人,擅长通过数据治理、数据分析、数据化运营提升公司的数据应用水平。
本文摘编自《深入浅出Pandas:利用Python进行数据处理与分析》
推荐语:这是一本全面覆盖了Pandas使用者的普遍需求和痛点的著作,基于实用、易学的原则,从功能、使用、原理等多个维度对Pandas做了全方位的详细讲解,既是初学者系统学习Pandas难得的入门书,又是有经验的Python工程师案头必不可少的查询手册。
附数据:
# 2020年10月数据
'''
序号	城市名称	平均单价(元/㎡)	环比	同比
1	深圳	78,722	+2.61%	+20.44%
2	北京	63,554	-0.82%	-1.2%
3	上海	58,831	+0.4%	+9.7%
4	厦门	48,169	-0.61%	+9.52%
5	广州	38,351	-1.64%	+13.79%
6	三亚	35,981	-0.19%	-3.88%
7	南京	33,301	+1.59%	+8.02%
8	杭州	32,181	+3.11%	+4.61%
9	天津	26,397	+2.34%	+3.5%
10	福州	25,665	-1.05%	-4.1%
11	宁波	24,306	-1.43%	+13.13%
12	珠海	23,293	-1.42%	-0.49%
13	温州	23,009	+3.01%	+7.01%
14	苏州	22,540	-1.35%	-2.8%
15	青岛	21,490	-1.7%	+1.95%
16	东莞	21,391	+6%	+34.44%
17	丽水	19,775	+2.3%	-1.78%
18	武汉	19,021	-0.18%	+4.51%
19	成都	17,443	-2.41%	+11.84%
20	无锡	17,131	-0.27%	+12.5%
'''
更新时间:2024-08-18 15:38:30 标签:python pandas 房价 可视化