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

打印 上一主题 下一主题

主题 1970|帖子 1970|积分 5910

在数据分析的世界中,数据处理可视化是密不可分的两个环节。
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转换为条形图。
  1. import pandas as pd
  2. import numpy as np
  3. import plotly.express as px
  4. # 创建一个示例 DataFrame
  5. data = {
  6.     "date": pd.date_range(start="2024-01-01", periods=100),
  7.     "sales": np.random.randint(100, 500, size=100),
  8. }
  9. df = pd.DataFrame(data)
  10. # 使用 Plotly Express 创建折线图
  11. fig = px.line(df, x="date", y="sales", title="时间序列销售数据")
  12. fig.show()
复制代码

在这个例子中,x='date'和y='sales'将DataFrame的列名映射到了图表的坐标轴上。
将数据中的某个列(Series)取出来,可以直接绘制条形图。
  1. series = df["sales"]
  2. fig = px.bar(series)
  3. fig.show()
复制代码

1.2. 索引与绘图的关联

Pandas的索引(如时间戳、分类标签)在绘图中也扮演着重要角色。
我们可以直接将Pandas索引作为图表的坐标轴,从而简化数据处理过程。
比如,如果一个DataFrame的索引是时间戳,那么它默认就成为X轴
  1. data = {
  2.     "date": pd.date_range(start="2024-01-01", periods=100),
  3.     "sales": np.random.randint(100, 500, size=100),
  4. }
  5. df = pd.DataFrame(data)
  6. # 将日期设置为索引
  7. df.set_index('date', inplace=True)
  8. # 绘制图表,不需要指定X轴
  9. fig = px.line(df, y='sales', title='以索引为时间轴的销售数据')
  10. fig.show()
复制代码

对于多级索引(MultiIndex)数据,Plotly也提供了强大的支持。
我们可以利用多级索引来生成分面图(Facet Plot)或动态筛选图表。
  1. # 创建多级索引
  2. df = df.reset_index()
  3. df["region"] = ["North", "South"] * 50
  4. df.set_index(["region", "date"], inplace=True)
  5. # 绘制分面图
  6. fig = px.line(
  7.     df.reset_index(),
  8.     x="date",
  9.     y="sales",
  10.     facet_col="region",
  11.     title="按地区分面的销售数据",
  12. )
  13. fig.show()
复制代码

在处理多级索引时,需要注意索引重置与列名转换的题目。
上面的示例中,我们先将date索引转换为平凡列,然后把平凡列region和date一起转换为多级索引。
2. 数据预处理与可视化的交响曲

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

在实际的数据分析中,数据每每存在缺失值异常值
Pandas提供了丰富的数据清洗工具,而Plotly可以将清洗前后的数据可视化出来,让我们更好的把握数据的变化。
首先,生成包罗客户年事(含缺失值异常值)、销售额(对数正态分布)和区域的模仿数据集。
  1. import pandas as pd
  2. import numpy as np
  3. import plotly.express as px
  4. # 模拟含噪声数据
  5. np.random.seed(42)
  6. dates = pd.date_range('2023-01-01', periods=100)
  7. # Customer_Age 年龄包含异常值(生成平均40,标准差30的数据)
  8. df = pd.DataFrame({
  9.     'Date': dates,
  10.     'Customer_Age': np.random.normal(40, 30, 100),  
  11. })
  12. # 人为添加缺失值
  13. df.loc[np.random.choice(100, 15), 'Customer_Age'] = np.nan
复制代码
故意添加15%的年事缺失值,并设置年事范围异常(生成年事的部分中有异常的年事)。
然后,绘制原始数据的分布图:
  1. # 原始数据分布
  2. raw_hist = px.histogram(
  3.     df,
  4.     x='Customer_Age',
  5.     title='原始数据分布(含缺失值与异常值)',
  6.     labels={'Customer_Age': '客户年龄'},
  7.     nbins=20
  8. )
  9. raw_hist.show()
复制代码

接下来,开始清洗数据:

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表