MST

星途 面试题库

面试题:Python数据可视化的交互性实现及性能优化

使用Plotly库在Python中创建一个交互式数据可视化项目。数据集是一个包含10万条销售记录的表格,包含日期、产品名称、销售额等字段。要求实现:1. 可以通过日期范围滑块筛选数据;2. 以柱状图展示不同产品的销售额,鼠标悬停在柱子上显示具体销售额数值;3. 优化性能,确保在加载和交互操作时流畅。阐述整体设计思路、关键技术点以及如何进行性能优化,给出关键代码片段。
23.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

整体设计思路

  1. 数据读取:使用合适的库(如pandas)读取包含10万条销售记录的表格数据。
  2. 日期范围滑块:利用Plotly的交互组件功能创建日期范围滑块,根据滑块选择的日期范围筛选数据。
  3. 柱状图绘制:根据筛选后的数据,绘制不同产品销售额的柱状图,并添加鼠标悬停显示具体销售额数值的交互效果。
  4. 性能优化:在数据处理和可视化过程中采取优化措施,确保加载和交互操作流畅。

关键技术点

  1. pandas数据处理:用于高效读取、筛选和处理大规模数据集。
  2. Plotly交互组件:创建日期范围滑块和柱状图的交互效果。
  3. 数据采样与缓存:在性能优化方面,可能涉及数据采样以减少初始加载数据量,以及缓存数据避免重复计算。

性能优化

  1. 数据采样:在初始加载时,对数据进行采样,例如只加载部分数据用于快速展示,用户需要时再加载完整数据。
  2. 缓存机制:使用缓存存储已经计算好的结果,如特定日期范围的销售额统计,避免重复计算。
  3. 优化数据结构:确保数据在内存中的存储结构利于快速查询和处理,例如使用合适的数据类型。

关键代码片段

import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 读取数据
data = pd.read_csv('sales_records.csv')

# 将日期列转换为datetime类型
data['日期'] = pd.to_datetime(data['日期'])

# 创建日期范围滑块
fig = make_subplots()

# 添加柱状图
product_sales = data.groupby('产品名称')['销售额'].sum().reset_index()
fig.add_trace(go.Bar(
    x=product_sales['产品名称'],
    y=product_sales['销售额'],
    hovertext=product_sales['销售额'].astype(str),
    hoverinfo='text'
))

# 设置日期范围滑块
fig.update_layout(
    xaxis_title='产品名称',
    yaxis_title='销售额',
    title_text='不同产品销售额',
    xaxis=dict(
        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")
            ])
        ),
        rangeslider=dict(
            visible=True
        ),
        type="date"
    )
)

fig.show()