Pandas和Seaborn数据可视化

news2024/11/24 9:39:52

Pandas数据可视化

学习目标

本章内容不需要理解和记忆,重在【查表】!

  • 知道数据可视化的重要性和必要性
  • 知道如何使用Matplotlib的常用图表API
  • 能够找到Seaborn的绘图API

1 Pandas数据可视化

一图胜千言,人是一个视觉敏感的动物,大多数人对数字无法在较短的时间内找到规律和业务意义,可视化就势在必行。视觉化效应 (Visual effects) 是指人类认知过程中,只要将非视觉性信息转化成视觉信息,可以大大增强海马体的记忆与前额叶皮质的思维反应速度。

  • Pandas的数据可视化依赖于matplotlib模块的pyplot类,在安装Pandas时会自动安装Matplotlib
  • Matplotlib是一个专门的绘图可视化包,可以对图形做细节控制,绘制出出版质量级别的图形,通过Matplotlib,可以简单地绘制出常用的统计图形。
  • 除了Matplotlib以外还有很多用于可视化的包,比如Seaborn

1.1 Pandas内置Matplotlib

  • Pandas内置图表功能依赖其自带的Matplotlib包
  • dataframe对象或seriers对象直接调用plot()函数即可绘图
  • Pandas绘图的API使用方法和Matplotlib包相同
import pandas as pd
# 加载 anscombe数据
anscombe = pd.read_csv('data/anscombe.csv')
df1 = anscombe[anscombe['dataset']=='I']
df2 = anscombe[anscombe['dataset']=='II']
df3 = anscombe[anscombe['dataset']=='III']
df4 = anscombe[anscombe['dataset']=='IV']

df1.plot()  # 默认折线图
df1['x'].plot.bar()

# df.plot.line() # 折线图的全写方式
# df.plot.bar() # 柱状图
# df.plot.barh() # 横向柱状图 (条形图)
# df.plot.hist() # 直方图
# df.plot.box() # 箱形图
# df.plot.kde() # 核密度估计图
# df.plot.density() # 同 df.plot.kde()
# df.plot.area() # 面积图
# s.plot.pie() # 饼图
# df.plot.scatter() # 散点图
# df.plot.hexbin() # 六边形箱体图,或简称六边形图
plt.show()

在这里插入图片描述

1.2 解决中文显示以及关闭警告

  • 运行下边的代码,中午字符无法正常显示,而且出现警告信息
import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x,y)
plt.title('柱状图')
plt.show()
  • 设置中文字体
matplotlib.rcParams['font.family'] = 'SimHei'
  • 改变字体即可正常显示中文

    • simhei.ttf 字体文件放到 /root/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf 目录下

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 修改 /root/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data 目录下的 matplotlibrc 文件

      vim matplotlibrc
      # 增加以下内容
      font.family			 : sans-serif
      font.sans-serif		 : SimHei
      axes.unicode_minus   : False
      

在这里插入图片描述

  • 删除 /root/.cache 目录下的 matplotlib 文件

    cd /root/.cache
    rm -rf matplotlib
    

在这里插入图片描述

2 Pandas图表绘制

准备工作

import pandas as pd

anscombe = pd.read_csv('../data/e_anscombe.csv') # 资料中提供了这份数据
print(anscombe)

df1 = anscombe[anscombe['dataset']=='I']
df2 = anscombe[anscombe['dataset']=='II']
df3 = anscombe[anscombe['dataset']=='III']
df4 = anscombe[anscombe['dataset']=='IV']

2.1 折线图line

df1.plot() # 默认折线图
#df1.plot(kind='line') # 结果与df1.plot()
#df1.plot.line() # 结果与df1.plot()
# x轴是索引值,y轴是各列的具体值
# 也可以通过参数指定xy轴对应的列名
df1.plot.line(x='x', y='y')
plt.show()

在这里插入图片描述

2.2 柱状图bar

df1.plot.bar() # 柱状图
df1.plot.bar(stacked=True) # 柱状堆积
# 也可以通过参数指定xy轴对应的列名
df1.plot.bar(x='x', y='y')
plt.show()

在这里插入图片描述

2.3 水平条形图barh

df1.plot.barh() # 水平条形图
df1.plot.barh(stacked=True) # 水平条形堆积图
# 也可以通过参数指定xy轴对应的列名
df1.plot.barh(x='x', y='y')
plt.show()

在这里插入图片描述

2.4 饼图pie

# 饼图,只能展示一维数据
# 参数y指定列名
# 参数autopct='%.2f%%'指定显示百分比 %.2f%%表示保留2位小数
# 参数radius=0.9 指定饼图直径的比例,最大为1
# 参数figsize=(16, 8) 设定图片大小
df1.plot.pie(y='x', autopct='%.2f%%', radius=0.9, figsize=(16, 8)) 
plt.show()

在这里插入图片描述

2.5 散点图scatter

# 指定xy轴,grid=True开启背景辅助线
df1.plot.scatter(x='x', y='y', grid=True)
plt.show()

在这里插入图片描述

2.6 气泡图-特殊的scatter

# 参数s表示每个点的大小,与普通散点图相比能够描述三维数据
df1.plot.scatter(x='x', y='y', grid=True, s=df1['x']*100)
plt.show()

在这里插入图片描述

2.7 箱线图boxplot

  • 箱线图用于显示多种统计信息:最小值,1/4分位,中位数,3/4分位,最大值,以及离群值(如果有)
df1.boxplot()
# df1.plot.boxplot() # 报错
plt.show()

在这里插入图片描述

2.8 直方图hist

  • 直方图描述的是数据在不同区间内的分布情况,描述的数据量一般比较大,图示如下:
# 描述数据出现的次数
df1['x'].plot.hist()
plt.show()

在这里插入图片描述

2.9 蜂巢图hexbin

  • 蜂巢图又叫做六边形分箱图(Hexagonal Binning),也称六边形箱体图,或简称六边形图,是一种由六边形为主要元素的统计图表。它是一种比较特殊的图表,既是散点图的延伸,又兼具直方图和热力图的特征。
    • 颜色深浅表示该值出现的频率
# gridsize=12设定蜂箱格子的大小,数字越小格子越大
df1.plot.hexbin(x='x', y='y', gridsize=12)
plt.show()

在这里插入图片描述

3 Seaborn图表绘制

  • Seaborn是基于matplotlib的图形可视化python包。Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。

  • Matplotlib的API是按照图形的种类进行设计的,比如直方图、散点图等等; 而Seaborn不同,它的绘图API的设计初衷是为了更好的展示数据之间的关系,我们查看Seaborn的官方文档就能很直观的发现这一点。

  • Seaborn的官方文档和版本号

    • API文档 https://seaborn.pydata.org/api.html
    • 历史版本API文档 https://seaborn.pydata.org/archive.html
    • 本课程使用的Seaborn版本为 0.10.1
  • seaborn图的分类

    • 关系图:relplot关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
      • 散点图 scatterplot() (kind=“scatter”)
      • 线形图 lineplot() (kind=“line”)
    • 分布图
      • 单变量分布图
        • 直方图,质量估计图 distplot()
        • 核密度估计图 kdeplot()
      • 双变量关系图
        • 双变量关系图 jointplot()
        • 变量关系组图 pairplot()
        • 将数组中的数据点绘制为轴上的数据 rugplot()
    • 类别图:catplot 分类图表的接口,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图
      • 分类散点图
        • stripplot() (kind=“strip”)
        • swarmplot() (kind=“swarm”)
      • 分类分布图
        • boxplot() (kind=“box”)
        • violinplot() (kind=“violin”)
        • boxenplot() (kind=“boxen”)
      • 分类估计图
        • pointplot() (kind=“point”)
        • barplot() (kind=“bar”)
        • countplot() (kind=“count”)
    • 回归图
      • 回归模型图 Implot()
      • 线性回归图 regplot()
      • 线性回归残差图 residplot()
    • 矩阵图组合图
      • 热力图 heatmap()
      • 聚集图 clustermap()
  • 如果说Matplotlib的API规定了各种图形,那么Seaborn的API设计理念是为了更好的展示数据之间的关系;接下来我们就讲解较为常用的Seaborn绘图API

# 导包
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns # Anaconda内置,无需额外安装
# 加载数据
tips_df = pd.read_csv('data/05_tips.csv')
print(tips_df)

在这里插入图片描述

3.1 scatterplot关系散点图

# 指定数据集,指定x轴为消费订单金额,y轴为消费金额,
# 散点图通用的可选参数 hue='sex'通过颜色指定分组
# 散点图通用的可选参数 style='smoker' 通过形状指定分组
# 散点图通用的可选参数 size='time' 通过大小指定分组
sns.scatterplot(
    data=tips_df, 
    x='total_bill', 
    y='tip', 
    hue='sex', 
    style='smoker', 
    size='time'
)
plt.show()

在这里插入图片描述

3.2 relplot关系散点线形图

sns.relplot(data=tips_df, x='total_bill', y='tip') # 默认 kind='scatter'
sns.relplot(data=tips_df, x='total_bill', y='tip', kind='line')
plt.show()

在这里插入图片描述

3.3 stripplot分类散点图

f = plt.figure()
f.add_subplot(2,1,1)
# 按照x属性所对应的类别分别展示y属性的值,适用于分类数据
# 不同饭点的账单总金额的散点图
sns.stripplot(data=tips_df, x='time', y='total_bill')
f.add_subplot(2,1,2)
# hue通用参数按颜色划分
# jitter=True 当数据点重合较多时,尽量分散的展示数据点
# dodge=True 拆分分类
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
plt.show()

在这里插入图片描述

[TIPS解决多图同时展示问题]
# 下边的代码只能输出一张图表
sns.stripplot(data=tips_df, x='time', y='total_bill')
sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
plt.show()
# 所以我们使用下面的方法进行多图的输出
# f = plt.figure() # 创建画布
# f.add_subplot(2,1,1) # 在画布上申请图表空间,参数2,1,1表示2行1列中的第1个
# 图1 # sns.stripplot(data=tips_df, x='time', y='total_bill')
# f.add_subplot(2,1,2) # 在画布上申请图表空间,参数2,1,2表示2行1列中的第2个
# 图2 # sns.stripplot(data=tips_df, x='time', y='total_bill', jitter=True, dodge=True, hue='day')
# plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.4 violinplot分类小提琴图

  • 在箱线图基础上额外描述了数值出现的频率
# 下图分别描述午餐账单、晚餐账单的最大值、最小值、三个四分位数,以及所有账单金额出现的次数(频率)
sns.violinplot(data=tips_df, x='time', y='total_bill')
plt.show()

在这里插入图片描述

3.5 barplot分类平均值分布图

# 下图中黑色的粗线条展示了数据的分布(误差线), 线条越短, 数据分布越均匀
# 下图中每个柱的顶点就是该分类y指定列的平均值
sns.barplot(data=tips_df, x='day', y='total_bill')
plt.show()

在这里插入图片描述

3.6 countplot分类计数图

# 按x指定的列值分组统计出现次数
sns.countplot(data=tips_df, x='day')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.7 heatmap矩阵热力图

  • 将二维的矩阵数据输出为热力图,颜色深浅就表示数值的大小
# 男女在午餐晚餐的平均消费
new_df = tips_df.pivot_table(index='sex', columns='time', values='total_bill', aggfunc='mean')
print(new_df)
# 输出为热力图:男性在晚餐花费最多
sns.heatmap(data=new_df)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.8 pairplot成对关系图

  • 能够将df中所有或指定的数值类型的列,成对的进行组合展示两者之间的关系
sns.pairplot(tips_df)
#sns.pairplot(df) # 全部数值列进行两两组合
#sns.pairplot(df, vars=['列名1', '列名2']) # 指定要组合展示的列名
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 按右上、左下、中间轴线(左上至右下)的方式分别设置图表类型
pair_grid = sns.PairGrid(tips_df)
# 中间轴线上的图设为kdeplot
pair_grid.map_diag(sns.kdeplot) 
# 右上设为lineplot
pair_grid.map_upper(sns.lineplot) 
# 左下设为scatterplot
pair_grid.map_lower(sns.scatterplot) 
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.9 通用配置

  • 将 Seaborn 提供的样式声明代码 sns.set() 放置在绘图前,就可以设置图像的样式
sns.set(
    context='paper', 
    style='darkgrid', 
    palette='deep', 
    font='sans-serif', 
    font_scale=1
)
# context: 参数控制着默认的画幅大小,分别有 {paper, notebook, talk, poster} 四个值。其中,poster > talk > notebook > paper。
# style:参数控制默认样式,分别有 {darkgrid, whitegrid, dark, white, ticks},你可以自行更改查看它们之间的不同。
# palette:参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind} 等,你可以自行更改查看它们之间的不同。
# font:用于设置字体
# font_scale:设置字体大小

sns.scatterplot(data=tips_df, x='total_bill', y='tip', hue='sex', style='smoker', size='time')
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结

请对下面的内容 有印象、能找到、能理解、能看懂

  • Matplotlib:各种图形的API

    • 折线图 df.plot.line()
    • 柱状图 df.plot.bar()
    • 水平条形图 df.plot.barh()
    • 饼图 df.plot.pie()
    • 散点图 df.plot.scatter()
    • 气泡图 df.plot.scatter()
      • 在散点图的基础上,除了xy参数以外再增加一个s参数,可以展示三维数据
    • 面积图 df.plot.area()
    • 箱线图 df.boxplot()
      • 可以展示最大值、最小值、1/4分位数、中位数、3/4分位数
    • 直方图 df.plot.hist()
      • 描述一维数据,展示数据出现的次数
    • 蜂巢图 df.plot.hexbin()
      • 描述二维数据的同时,展示数据出现的次数
  • Seaborn:实现各种统计功能的图表API

    • API文档 https://seaborn.pydata.org/api.html
    • 历史版本API文档 https://seaborn.pydata.org/archive.html
    • 关系图:relplot关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
      • 散点图 scatterplot() (kind=“scatter”)
      • 线形图 lineplot() (kind=“line”)
    • 分布图
      • 单变量分布图
        • 直方图,质量估计图 distplot()
        • 核密度估计图 kdeplot()
      • 双变量关系图
        • 双变量关系图 jointplot()
        • 变量关系组图 pairplot()
        • 将数组中的数据点绘制为轴上的数据 rugplot()
    • 类别图:catplot 分类图表的接口,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图
      • 分类散点图
        • stripplot() (kind=“strip”)
        • swarmplot() (kind=“swarm”)
      • 分类分布图
        • boxplot() (kind=“box”)
        • violinplot() (kind=“violin”)
        • boxenplot() (kind=“boxen”)
      • 分类估计图
        • pointplot() (kind=“point”)
        • barplot() (kind=“bar”)
        • countplot() (kind=“count”)
    • 回归图
      • 回归模型图 Implot()
      • 线性回归图 regplot()
      • 线性回归残差图 residplot()
    • 矩阵图组合图
      • 热力图 heatmap()
      • 聚集图 clustermap()
  • Pyecharts

    • 官方文档 https://pyecharts.org/#/zh-cn/intro
    • 官方案例 https://gallery.pyecharts.org/#/README

ot() (kind=“strip”)
- swarmplot() (kind=“swarm”)
- 分类分布图
- boxplot() (kind=“box”)
- violinplot() (kind=“violin”)
- boxenplot() (kind=“boxen”)
- 分类估计图
- pointplot() (kind=“point”)
- barplot() (kind=“bar”)
- countplot() (kind=“count”)

  • 回归图

    • 回归模型图 Implot()
    • 线性回归图 regplot()
    • 线性回归残差图 residplot()
  • 矩阵图组合图

    • 热力图 heatmap()
    • 聚集图 clustermap()
  • Pyecharts

    • 官方文档 https://pyecharts.org/#/zh-cn/intro
    • 官方案例 https://gallery.pyecharts.org/#/README

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库-分库分表

什么是分库分表 分库分表是一种数据库优化策略。 目的:为了解决由于单一的库表数据量过大而导致数据库性能降低的问题 分库:将原来独立的数据库拆分成若干数据库组成 分表:将原来的大表(存储近千万数据的表)拆分成若干个小表 什么时候考虑分…

Web 性能优化|了解 HTTP 协议后才能理解的预加载

作者:谦行 一、前言 在性能优化过程中,开发者通常会集中精力在以下几个方面:服务器响应时间(RT)优化、服务端渲染(SSR)与客户端渲染优化、以及静态资源体积的减少。然而,对于许多用…

C(十五)函数综合(一)--- 开公司吗?

在这篇文章中,杰哥将带大家 “开公司”。 主干内容部分(你将收获):👉 为什么要有函数?函数有哪些?怎么自定义函数以及获得函数的使用权?怎么对函数进行传参?函数中变量的…

[嵌入式Linux]—STM32MP1启动流程

STM32MP1启动流程 1.启动模式 STM32MP1等SOC支持从多种设备中启动,如EMMC、SD、NAND、NOR、USB、UART等。其中USB、UART是作为烧录进行启动的。 STM32MP1内部ROM中存储有一段出厂代码来进行判断从哪种设备中启动,上电后这段代码会被执行,这…

使用java函数逆序一个单链表

代码功能 定义了一个ListNode类,用于表示单链表的节点,每个节点包含一个整数值和一个指向下一个节点的引用。 在ReverseLinkedList类的main方法中,创建了一个包含从1到10的整数的单链表。 定义了一个printList方法,用于打印链表的…

基于JavaWeb开发的java springmvc+mybatis酒水商城管理系统设计和实现

基于JavaWeb开发的java springmvcmybatis酒水商城管理系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承…

【JAVA基础】集合类之HashSet的原理及应用

近期几期内容都是围绕该体系进行知识讲解,以便于同学们学习Java集合篇知识能够系统化而不零散。 本文将介绍HashSet的基本概念,功能特点,使用方法,以及优缺点分析和应用场景案例。 一、概念 HashSet是 Java 集合框架中的一个重…

Spring Boot实现License生成与校验详解

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在软件开发领域,License(许可证)机制是保护软件版权、控制软件使用范围的重要手段。通过为软件生成唯一的License,开发者可以确保只有合法用户才能使用软件&…

右键菜单添加 Open Tabby here

如果安装了Tabby,为了提高效率在鼠标右键菜单中添加Open Tabby here,可以通过按 win R,并输入regedit 回车打开注册表编辑器 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell 然后在Shell下面新建项,名称为Tabby&#xf…

企业架构理论TOGAF从理论到实践:引领企业数字化转型的实践指南

在现代企业面临的数字化转型浪潮中,如何从战略层面实现技术与业务的全面融合,成为了众多企业的核心挑战。TOGAF(The Open Group Architecture Framework)不仅为企业提供了强大的理论框架,还通过实践验证了其在推动企业…

力扣 中等 39.组合总和

文章目录 题目介绍解法 题目介绍 解法 是216组合总和III链接的扩展 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();public List<List<Integer>> combinationSum(int[] can…

Windows 下安装mamba_ssm 记录,包括causal-conv1d和mamba-ssm

Windows 下安装mamba_ssm 记录 1 重要参考文献2 具体安装步骤3 一些提醒事项4 安装causal-conv1d5 安装mamba-ssm6 结果展示 1 重要参考文献 Window 下Mamba 环境安装踩坑问题汇总及解决方法 2 具体安装步骤 重点看的是这篇 Window 下Mamba 环境安装踩坑问题汇总及解决方法 …

【Redis】持久化(下)-- AOF

文章目录 AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略 AOF的重写机制概念触发重写机制AOF重写流程 启动时数据恢复混合持久化总结 AOF 概念 AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要作用是解决…

工行企业网银U盾展期后有两个证书问题的解决方法

工行企业网银U盾证书快到期后&#xff0c;可以自助展期&#xff0c;流程可以根据企业网银提示页面操作。操作后&#xff0c;可能存在两个新旧两个证书并存的情况&#xff0c;致使网银转账等操作失败&#xff0c;如图&#xff1a; 其原因是新证书生成后&#xff0c;旧证书没有删…

wsl配置图形显示环境 no $display environment variable

wsl运行fsl&#xff0c;安装好之后&#xff0c;可以使用bet&#xff0c;等命令行进行操作&#xff0c;但是不能使用fsl呼出窗口。 因为 wsl并不像原生linux具有destop桌面&#xff0c;它只有命令行。所以当运行fsl的时候会报错&#xff0c; application-specific initializat…

裁掉数千人、把工作外包给 AI!一年多后,这家巨头的 CEO恳求无人搭理

“对&#xff0c;裁掉几千名员工。” “好的&#xff0c;头儿。” “很好&#xff0c;那么这个人工智能可以做那些前雇员能做的一切事情&#xff1f;” “不&#xff0c;不全是。” “等等&#xff0c;什么&#xff1f;” “你刚刚裁掉的几百人都是硬件工程师&#xff0c;…

k8s的pod的管理和优化

资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务 所谓的部署服务&#xff0c;其实就是在kubernetes集群中运行一个个的容器…

Kubernetes--深入理解Pod资源管理

文章目录 kubectl --helpapi-resourcesapi-versionskubectl explain ... API资源资源规范PodServiceConfigMapSecret 显示资源删除资源详细描述RESTful API Pod资源管理Pod的核心概念Pod资源配置了解Pod运行状况Kubectl get pods xxxxkubectl describe pods xxxkubectl logs -f…

如何彻底掌握 JavaScript 23种设计模式

设计模式是解决特定问题的常用解决方案&#xff0c;它们可以帮助开发者编写更清晰、可维护、可扩展的代码。在 JavaScript 中&#xff0c;常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。本文将全面介绍 JavaScript 中常见的设计模式&#xf…

性能剖析利器-Conan|得物技术

作者 / 得物技术 - 仁慈的狮子 目录 一、背景 1. 局限性 2. 向前一步 二、原理剖析 1. 系统架构 2. 工作模式 3. reporter 三、稳定性验证 四、案例分析 五、写在最后 一、背景 线上问题的定位与优化是程序员进阶的必经之路&#xff0c;常见的问题定位手段有日志排查、分布式链…