需求: 将之前爬取链家房源清理过的数据 做可视化分析 下面是之前写的博客
目的是熟练掌握pyecharts可视化 及pandas的运用
前提是安装了 pyecharts pip install pyecharts
柱状图

OK 读完题目的需求之后我们 需要查看数据集
打开Pycharm 通过pandas 读取文件 对文件有个大概的了解
像 shape head tail info 这些基本的函数 属性就不多说了 不会的可以看我之前的博客或者Ai
python
# 导包 起别名
import pandas as pd
# * 就是导入所有 pyecharts 有大概20种图
from pyecharts.charts import *
# 导入配置项
from pyecharts import options as opts
# 这个是设置在终端可以查看到的数据长度 可以对比一下区别
# 正常情况下的文件列名有很多的话是查看不完全的
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)
df = pd.read_excel('cleaned_lianjia.xlsx')
# 这里就可以使用pandas中的cut函数对价格进行分类 就不用写冗长的if else判断语句了
# 这里bins也可以写数字 例如3 就是分成3段 但是具体的区间就不能控制
df['price_level'] = pd.cut(df['price'], bins=[0, 50, 100, 150, 200, 100000],
labels=['0-50万', '50-100万', '100-150万', '150-200万', '200万以上'])
# 使用value_counts()函数对价格进行分类统计 返回值默认按照从大到小排序
# 如果想从小到大排序的话 ascending=True 传入此参数即可
price_level_count = df['price_level'].value_counts()
# 统计每个价格区间的房源数量并显示百分比
# round(1) 保留1位小数
percent = (price_level_count / sum(price_level_count) * 100).round(1)
# 返回值是Series对象
print(percent)
现在数据有了 我们可以进行绘图了
python
# 写法一 链式写法 推荐这种写法
bar = (
# 实例化一个对象
# init_opts 初始化配置
# 设置图表初始化选项 宽度1200px、高度600px、页面标题为"房源价格区间分布" 就是 渲染器为SVG格式
Bar(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='房源价格区间分布', renderer='svg'))
# 这里所需的数据类型为列表 获取Series的索引 将其转化为列表
.add_xaxis(percent.index.tolist())
# 获取Series 的值 返回的是array类型的 需要强转
# 索引里面有内置的方法 转化成列表
.add_yaxis('价格区间', list(percent.values))
).render('bar.html') # 渲染成html文件 可以通过浏览器打开查看
# 写法二
bar = Bar()
bar.add_xaxis()
bar.add_yaxis()

由于Pyecharts参数很多 配置项也很多 在官网有Api文档可以观看 中文简介 - Document
pyecharts 全局配置项_w3cschool 这个网站Api会更加完善一些 适合有一些基础的看
推荐大家看这个 需要用什么效果就去官网搜索 然后复制修改即可
运行此文件 查看效果

这是什么都不加的效果图 会比matplotlib精致 好看很多
接下来 是个示例 主要是向大家了解一下这些经常用到的配置项 这样对照着学习 看 会快一些
这些配置项很多 但是略懂些英语就不是很难 掌握规律 多敲即可

python
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
# 创建柱形图实例
Bar(init_opts=opts.InitOpts(
width="900px",
height="500px", # 设置 图表宽高
theme="white", # 'light' 'dark' 'white' 或内置主题
# 动画配置 持续时间1000ms 缓动效果为cubicOut(平滑淡出)
animation_opts=opts.AnimationOpts(duration=1000, easing="cubicOut")
))
.add_xaxis(["A", "B", "C"]) # X轴分类数据
.add_yaxis("系列1", [10, 20, 30], # Y轴系列数据
label_opts=opts.LabelOpts(is_show=True, position="top"), # 显示顶部标签
color="auto", # ECharts 系列级别颜色
stack=None, # 不适用堆叠效果
category_gap="30%") # 分类间距30%
.set_global_opts(
title_opts=opts.TitleOpts(title="示例", subtitle="副标题"), # 标题和副标题
toolbox_opts=opts.ToolboxOpts(is_show=True), # 显示工具箱(下载、保存等)
legend_opts=opts.LegendOpts(is_show=True), # 显示图例
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="shadow"), # 提示框配置
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=True), # X轴为分类轴 有边界留白
yaxis_opts=opts.AxisOpts(type_="value", min_=0), # Y轴为数值轴,最小值0
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")] # 数据缩放控件
)
.set_series_opts(
markpoint_opts=opts.MarkPointOpts( # 标记点配置
data=[opts.MarkPointItem(type_="max"), opts.MarkPointItem(type_="min")] # 显示最大值和最小值
),
markline_opts=opts.MarkLineOpts( # 标记线配置
data=[opts.MarkLineItem(type_="average")] # 显示平均值线
)
)
)
# 渲染到 HTML
bar.render("bar.html")
# 或在 notebook 中显示
bar.render_notebook()
以下是实现上图效果的 代码
python
bar = (
Bar(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='房源价格区间分布', renderer='svg'))
.add_xaxis(percent.index.tolist())
.add_yaxis('价格区间', list(percent.values),
# 这个label_opts就是在柱状图上显示数据的配置项 是否显示 数据的位置 数据的字体大小等 都可以设置
label_opts=opts.LabelOpts(is_show=True, position='top', font_weight='bold', font_size=12))
# 添加全局配置项
.set_global_opts(
# 标题配置 副标题配置 后面是对标题以及副标题文字修改调整的配置项 调整大小 颜色 粗细
title_opts=opts.TitleOpts(title='长沙链家二手房价格分布', subtitle='价格区间',
title_textstyle_opts=opts.TextStyleOpts(font_weight='bold', font_size=25),
subtitle_textstyle_opts=opts.TextStyleOpts(font_size='17', font_weight='bold')),
toolbox_opts=opts.ToolboxOpts(is_show=True),
visualmap_opts=opts.VisualMapOpts(is_show=True), # 添加视觉映射配置项 就是那个颜色区域 对应价格区间
datazoom_opts=opts.DataZoomOpts(is_show=True, type_='inside'), # 设置成inside 鼠标放在图片中滑动滚轮即可缩放 也可以设置成slider 需要拖动图标
legend_opts=opts.LegendOpts(is_show=True),
tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='shadow'),
xaxis_opts=opts.AxisOpts(type_='category', name='价格区间',
axislabel_opts=opts.LabelOpts(text_width=20, font_size=14, font_weight='bold'),
name_textstyle_opts=opts.TextStyleOpts(font_size=16, font_weight='bold')),
# 设置x轴的配置项 字体大小 粗细 因为我觉得原始的样子不是很明显需要调整一下
yaxis_opts=opts.AxisOpts(type_='value', min_=0, name='房源数量',
name_textstyle_opts=opts.TextStyleOpts(font_size=16, font_weight='bold'),
axislabel_opts=opts.LabelOpts(text_width=20, font_size=14, font_weight='bold')),
# y轴也是
)
# 添加系列配置项
.set_series_opts(
# 添加标记点 可以标记最小值 最大值 平均值 这里标记最小值 美观一些 折线图会更加适用
markpoint_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='min')]),
# 添加标记线 可以标记平均值,最大值,最小值 这里标记的是数据中的平均值
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average')]),
)
).render('bar.html')
最终的效果图如下显示 这样的话会比较美观 具有观赏性

到此 第一个题目就做完了
饼图

python
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 1000)
df = pd.read_excel('cleaned_lianjia.xlsx')
# 提取各户型的房源数量 以室分割 取分割后的一个元素 后面加个室 会更好
df['room_number'] = df['rooms'].str.split('室').str[0]+'室'
numbers = df['room_number'].value_counts()
data = [(i, int(j)) for i, j in zip(numbers.index, list(numbers.values))]
# 特别注意这里 饼图传入的参数是序列化对象 一般是 列表套元组 或者列表套列表的形式 参数都是python中的数据类型 int64 str等
# 但是 numbers.values 获取的是Series对象中的值 而形成的列表 每个值都是 ndarray.int64 类型的 此时需要强转成python中的int类型 否则就生成不了图表
python
pie = (
Pie(init_opts=opts.InitOpts(width='1200px', height='600px', page_title='房型分布', renderer='svg'))
# 添加数据 center 就是这个饼图在画布中的百分比位置 左右 上下 radius 内外半径分别为画布的45%和75%,形成环形效果 玫瑰图的类型
.add('各户型统计', data_pair=data, center=['30%', '50%'], radius=['45%', '75%'], rosetype='radius',
label_opts=opts.LabelOpts(is_show=True, font_size=12, font_weight='bold', position='outside',
formatter='{b}:{c}({d}%)')) # 标签格式:{b}=分类名, {c}=数值, {d}=百分比
.set_global_opts(
title_opts=opts.TitleOpts(title='房型分布', subtitle='室的数量'),
# 将颜色区域 水平放置在左下角 会比较美观些
visualmap_opts=opts.VisualMapOpts(is_show=True, pos_left='left', orient='horizontal', pos_bottom='bottom'),
# 添加工具栏 将工具栏垂直放置靠近左边的图形
toolbox_opts=opts.ToolboxOpts(is_show=True, pos_left='800px', pos_top='30px', orient='vertical'),
)
).render('pie.html')
效果图

本次的案例分析就到此结束啦 谢谢大家的观看 你的点赞和关注是我更新的最大动力
如果感兴趣的话可以看看我之前的博客 我也会继续学习