当前位置: 首页 > news >正文

python pyecharts 数据分析及可视化

一、任务要求:

任务一:药品消费趋势分析
【任务说明】
现有某医疗机构 10 年的药品销售数据,请根据任务要求完成数
据分析。
【任务要求】
读取所需数据集后对数据进行必要的清洗,分析中成药和西药在
这 10 年中销售占比以及销售额的变化情况,绘制出堆叠面积图并用
Django 框架渲染到前端页面,绘图要求如下:
1.使用 PyEcharts 库绘制堆叠面积图;
2.使用 Django 框架在前端页面中渲染展示堆叠面积图;

二、代码部分:

import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line# 读取数据
data_mpv_sale = pd.read_excel(r'./MPV销量数据2012-2021(1).xlsx')# 去重和排序
data_mpv_sale2 = data_mpv_sale.drop_duplicates(subset=['采集时间', '排名'], keep='last')
data_mpv_sale2 = data_mpv_sale2.sort_values(by=['采集时间', '排名'])
print(f"")
print(f"data_mpv_sale2:\n{data_mpv_sale2}")# 转换采集时间为日期格式,便于比较
data_mpv_sale2['采集时间'] = pd.to_datetime(data_mpv_sale2['采集时间'], format='%Y%m')# # 过滤2017年之后的数据
# data_mpv_sale3 = data_mpv_sale2[data_mpv_sale2['采集时间'] > '2017-01-01']
data_mpv_sale3 = data_mpv_sale2# 新增车型_厂商列
data_mpv_sale3['车型_厂商'] = data_mpv_sale3['车型'] + '_' + data_mpv_sale3['厂商']# 创建年份和月份列
data_mpv_sale3['年份'] = data_mpv_sale3['采集时间'].dt.year
data_mpv_sale3['月份'] = data_mpv_sale3['采集时间'].dt.month
print(f"data_mpv_sale3:\n{data_mpv_sale3}")# 定义季度函数
def jidu(month):
"""根据月份返回季度"""
if month <= 3:
return 1
elif month <= 6:
return 2
elif month <= 9:
return 3
else:
return 4# 应用季度函数
data_mpv_sale3['季度'] = data_mpv_sale3['月份'].apply(jidu)# 新增年份_季度列
data_mpv_sale3['年份_季度'] = data_mpv_sale3['年份'].astype(str) + '年' + data_mpv_sale3['季度'].astype(str) + '季度'# 汇总销量数据
sale_season = data_mpv_sale3.groupby(by=['车型_厂商', '年份_季度'])['销量'].sum()# 获取销量前20的车型
sale_total20 = data_mpv_sale3.groupby(by=['车型_厂商'])['销量'].sum().sort_values(ascending=False)[:20].index.valuesprint(f"sale_total20:\n{sale_total20}")# 定义时间列表
year = [2017, 2018, 2019, 2020, 2021]
season = [1, 2, 3, 4]
list_time = [f'{y}年{s}季度' for y in year for s in season if not (y == 2021 and s >= 3)]
print(f"list_time:\n{list_time}")# 创建字典存储销量
sale_dict = {}
for c in sale_total20:
sale_dict[c] = [int(sale_season.get((c, t), 0)) for t in list_time]
print(f"sale_dict:\n{sale_dict}")# 创建折线图
c = (
Line(init_opts=opts.InitOpts(width='800px', height='400px'))
.add_xaxis(xaxis_data=list_time)
.set_global_opts(
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
yaxis_opts=opts.AxisOpts(type_="value", axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True)),
xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
datazoom_opts=opts.DataZoomOpts(),
)
)# 绘制销量曲线
for name, sale_list in sale_dict.items():
c.add_yaxis(
series_name=name,
stack="总量", # 堆积
y_axis=sale_list,
areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
label_opts=opts.LabelOpts(is_show=False), # 隐藏数据标签
is_smooth=True, # 平滑曲线
)# 渲染图表
c.render_notebook() # 如果在Jupyter中运行
# 或者
c.render('mpv_sales_trend.html') # 保存为HTML文件

三、运行结果:

http://www.lryc.cn/news/575694.html

相关文章:

  • Python 将文件夹中的所有文件打包成Zip压缩包
  • easyExcel导入多sheet的Excel,存在合并单元格、列不固定的情况
  • 超实用AI工具分享——ViiTor AI视频配音功能教程(附图文)
  • html 照片环 - 图片的动态3D环绕
  • 渗透实战:使用隐式转换覆盖toString的反射型xss
  • Linux 统一方式安装多版本 JDK 指南
  • python基于协同过滤的动漫推荐系统
  • CSP-J 2021 入门级 第一轮(初赛) 阅读程序(1)
  • CSMA/CD相关习题---谢希仁课后题
  • 数据分享:医学数据集-糖尿病数据集
  • Git 使用规范与命令使用场景详解
  • 与 AI 聊天更顺畅:cat_code.py
  • MIT 6.824学习心得(1) 浅谈分布式系统概论与MapReduce
  • 【全志V821_FoxPi】3-2 Linux 5.4 SPI + XPT2046触摸(ADS7846) + tslib
  • 基于SpringBoot和Leaflet的区域冲突可视化-以伊以冲突为例
  • 重定向攻击与防御
  • 构建可无限扩展的系统:基于 FreeMarker + 存储过程 + Spring Boot 的元数据驱动架构设计
  • aws(学习笔记第四十七课) codepipeline-docker-build
  • [3D-portfolio] 版块包装高阶组件(封装到HOC) | Email表单逻辑 | 链式调用
  • 微服务分布式事务解决方案
  • 数据结构进阶 第七章 图(Graph)
  • 当ERP不再“一刀切“:ERP定制开发如何重塑企业数字神经
  • Charles抓包工具深度解析:从原理到实践的网络数据透视艺术
  • 利用云效实现自动化部署gitee仓库中的项目
  • Tailwind CSS 重用样式
  • 如果你在为理解RDA、PCA 和 PCoA而烦恼,不妨来看看丨TomatoSCI分析日记
  • 临床试验项目管理:高效推进新疗法上市
  • EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途
  • 用 Spark 优化亿级用户画像计算:Delta Lake 增量更新策略详解
  • Mac电脑如何搭建基于java后端的开发的各种工具服务