MST

星途 面试题库

面试题:Python中Pandas复杂数据可视化问题

给定一个时间序列的销售数据DataFrame,索引为日期,包含不同地区的销售额。要求使用Pandas和Plotly绘制一个交互式图表,展示各地区销售额随时间的变化趋势,并且可以通过交互操作选择特定时间段查看销售额变化。请说明实现过程中数据处理和可视化设置的关键步骤及可能遇到的问题和解决方案。
37.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

数据处理关键步骤

  1. 导入必要库
import pandas as pd
import plotly.express as px
  1. 读取数据:假设数据存储在一个CSV文件中,使用pd.read_csv读取数据,并将日期列设置为索引,同时确保日期格式正确。
df = pd.read_csv('sales_data.csv')
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
  1. 数据整理:确保数据格式适合绘图,如检查数据是否有缺失值,若有缺失值,可选择填充或删除相关行。
if df.isnull().any().any():
    df.fillna(0, inplace=True)  # 这里简单填充为0,也可根据业务逻辑选择其他填充方式

可视化设置关键步骤

  1. 使用Plotly Express绘制图表:使用px.line函数绘制折线图,x轴为日期,y轴为销售额,按地区进行分组。
fig = px.line(df.reset_index(), x='date', y=df.columns, title='各地区销售额随时间变化趋势')
  1. 添加交互功能:为图表添加滑块来选择特定时间段。
fig.update_xaxes(
    rangeslider_visible=True,
    rangeselector=dict(
        buttons=list([
            dict(count=1, label="1m", step="month", stepmode="backward"),
            dict(count=6, label="6m", step="month", stepmode="backward"),
            dict(count=1, label="YTD", step="year", stepmode="todate"),
            dict(count=1, label="1y", step="year", stepmode="backward"),
            dict(step="all")
        ])
    )
)
  1. 显示图表
fig.show()

可能遇到的问题及解决方案

  1. 日期格式问题
    • 问题:读取数据时日期格式不正确,导致绘图x轴显示异常。
    • 解决方案:使用pd.to_datetime函数将日期列转换为正确的日期格式。
  2. 缺失值问题
    • 问题:数据中存在缺失值,可能影响绘图效果或导致计算错误。
    • 解决方案:可根据业务需求,选择填充缺失值(如使用均值、中位数、前向填充、后向填充等方法)或删除包含缺失值的行。
  3. 性能问题
    • 问题:当数据量非常大时,绘制交互式图表可能会变得缓慢。
    • 解决方案:可以对数据进行采样,减少数据点数量,例如按周、月等时间间隔重新采样数据。例如:
df = df.resample('M').sum()  # 按月重新采样并求和