师悠逸 发表于 2025-6-2 23:23:22

『Plotly实战指南』--Plotly与Pandas的深度融合

在数据分析的世界中,数据处理与可视化是密不可分的两个环节。
Pandas作为Python数据处理的核心工具,以其强大的数据清洗、转换和分析能力,成为数据科学家和分析师的必备利器;
而Plotly则是交互式可视化的佼佼者,能够将复杂的数据以直观、动态的方式呈现出来。
当我们将Pandas与Plotly深度融合时,就能无缝衔接数据清洗、分析与可视化的全流程,大幅提升数据分析的效率和效果。
1. 从Pandas数据结构到Plotly图表

1.1. Series 与 DataFrame 数据创建图表

Plotly提供了强大的plotly.express模块,能够直接读取Pandas的数据结构,如Series和DataFrame,并快速生成各种交互式图表。
例如,使用px.line(df)可以将一个时间序列的DataFrame转换为折线图,而px.bar(series)则可以将一个Series转换为条形图。
import pandas as pd
import numpy as np
import plotly.express as px

# 创建一个示例 DataFrame
data = {
    "date": pd.date_range(start="2024-01-01", periods=100),
    "sales": np.random.randint(100, 500, size=100),
}
df = pd.DataFrame(data)

# 使用 Plotly Express 创建折线图
fig = px.line(df, x="date", y="sales", title="时间序列销售数据")
fig.show()
在这个例子中,x='date'和y='sales'将DataFrame的列名映射到了图表的坐标轴上。
将数据中的某个列(Series)取出来,可以直接绘制条形图。
series = df["sales"]
fig = px.bar(series)
fig.show()
1.2. 索引与绘图的关联

Pandas的索引(如时间戳、分类标签)在绘图中也扮演着重要角色。
我们可以直接将Pandas索引作为图表的坐标轴,从而简化数据处理过程。
比如,如果一个DataFrame的索引是时间戳,那么它默认就成为X轴。
data = {
    "date": pd.date_range(start="2024-01-01", periods=100),
    "sales": np.random.randint(100, 500, size=100),
}
df = pd.DataFrame(data)

# 将日期设置为索引
df.set_index('date', inplace=True)

# 绘制图表,不需要指定X轴
fig = px.line(df, y='sales', title='以索引为时间轴的销售数据')
fig.show()
对于多级索引(MultiIndex)数据,Plotly也提供了强大的支持。
我们可以利用多级索引来生成分面图(Facet Plot)或动态筛选图表。
# 创建多级索引
df = df.reset_index()
df["region"] = ["North", "South"] * 50
df.set_index(["region", "date"], inplace=True)

# 绘制分面图
fig = px.line(
    df.reset_index(),
    x="date",
    y="sales",
    facet_col="region",
    title="按地区分面的销售数据",
)
fig.show()
在处理多级索引时,需要注意索引重置与列名转换的问题。
上面的示例中,我们先将date索引转换为普通列,然后把普通列region和date一起转换为多级索引。
2. 数据预处理与可视化的交响曲

2.1. 数据清洗与验证可视化

在实际的数据分析中,数据往往存在缺失值和异常值。
Pandas提供了丰富的数据清洗工具,而Plotly可以将清洗前后的数据可视化出来,让我们更好的把握数据的变化。
首先,生成包含客户年龄(含缺失值和异常值)、销售额(对数正态分布)和区域的模拟数据集。
import pandas as pd
import numpy as np
import plotly.express as px

# 模拟含噪声数据
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100)

# Customer_Age 年龄包含异常值(生成平均40,标准差30的数据)
df = pd.DataFrame({
    'Date': dates,
    'Customer_Age': np.random.normal(40, 30, 100),
})

# 人为添加缺失值
df.loc = np.nan故意添加15%的年龄缺失值,并设置年龄范围异常(生成年龄的部分中有异常的年龄)。
然后,绘制原始数据的分布图:
# 原始数据分布
raw_hist = px.histogram(
    df,
    x='Customer_Age',
    title='原始数据分布(含缺失值与异常值)',
    labels={'Customer_Age': '客户年龄'},
    nbins=20
)
raw_hist.show()
接下来,开始清洗数据:

[*]dropna():删除年龄缺失的行
[*]query():过滤年龄异常值(保留18-65岁)
# 清洗数据clean_df = (    df    .dropna(subset=['Customer_Age'])# 删除缺失值    .query('18

玻倌瞽 发表于 2025-10-19 00:50:47

不错,里面软件多更新就更好了

打阗渖 发表于 2025-12-22 12:09:06

用心讨论,共获提升!

孜稞 发表于 2025-12-22 18:26:48

感谢分享,下载保存了,貌似很强大

祝娜娜 发表于 2025-12-31 20:35:39

很好很强大我过来先占个楼 待编辑

姘轻拎 发表于 2026-1-2 17:14:26

东西不错很实用谢谢分享

焦听云 发表于 2026-1-17 16:38:50

收藏一下   不知道什么时候能用到

汪之亦 发表于 2026-1-19 18:06:30

鼓励转贴优秀软件安全工具和文档!

廖彗云 发表于 2026-1-21 02:54:09

yyds。多谢分享

溧久苟 发表于 2026-1-22 15:25:57

不错,里面软件多更新就更好了

杆树 发表于 2026-1-25 04:17:41

喜欢鼓捣这些软件,现在用得少,谢谢分享!

浦乐 发表于 2026-1-26 05:53:51

感谢分享,学习下。

赴忽 发表于 2026-1-26 10:06:06

用心讨论,共获提升!

馑妣窟 发表于 2026-1-28 01:57:41

用心讨论,共获提升!

仇华乐 发表于 2026-2-2 04:37:29

分享、互助 让互联网精神温暖你我

陈兰芳 发表于 2026-2-4 06:15:05

谢谢分享,辛苦了

庞悦 发表于 2026-2-4 22:46:17

东西不错很实用谢谢分享

锄淫鲷 发表于 2026-2-5 06:19:43

感谢,下载保存了

卿搞笔 发表于 2026-2-8 03:25:00

感谢,下载保存了

蔬陶 发表于 2026-2-8 13:49:17

感谢,下载保存了
页: [1] 2
查看完整版本: 『Plotly实战指南』--Plotly与Pandas的深度融合