前哨站/实操练习手册
实操练习手册

实操练习手册

24 道题分四组:Excel 8 题、Python 8 题、ECharts 4 题、综合 4 题。先自己做再点开答案。

怎么练① 用课程示例数据或自己下载的公开数据;② 每题先想"用什么图、为什么";③ 卡住看思路,再点参考答案对照。

Excel(第6章)

01

用透视表统计"各省销售额",并按降序排出前 10。

提示:行=省份,值=销售额求和,再排序+前10项筛选

解题思路聚合优先于画图;排名类图表必须先排序。
查看参考答案
SHELL
插入 → 数据透视表
行:省份  值:销售额(求和)
对销售额列 → 排序 → 降序 → 值筛选 → 前 10 项
02

统计"每月销售额"并做成折线图,x 轴必须是日期轴。

提示:透视表行=月份,插入折线图后设 x 轴为日期轴

解题思路文本类别的 x 轴会按字符串排序,导致 10 月排在 2 月前。
查看参考答案
SHELL
透视表:行=日期(按月分组),值=销售额
插入折线图 → 右键 x 轴 → 设置坐标轴格式 → 坐标轴类型选"日期坐标轴"
03

用条件格式把"各省销售额"做成热力色阶。

提示:开始 → 条件格式 → 色阶

解题思路顺序配色用同色相深浅,不要用彩虹色。
查看参考答案
SHELL
选中销售额数据区 → 开始 → 条件格式 → 色阶 → 选"绿-白"或"蓝-白"单色相方案
04

给"月度销售额"加迷你图趋势列(每个省一行一个趋势)。

提示:插入 → 迷你图 → 折线

解题思路迷你图适合密集报表,比单独画图更省版面。
查看参考答案
SHELL
选中要放迷你图的单元格 → 插入 → 迷你图 → 折线 → 数据范围选该省 12 个月 → 勾选"显示高点/低点"
05

把"销售额"和"订单量"画在一张图上(量级相差 20 倍),并说明风险。

提示:组合图 + 次坐标轴

解题思路双轴可被随意缩放,容易误导;必须在图注里写清。
查看参考答案
SHELL
选中两个系列 → 右键 → 更改系列图表类型 → 订单量设为"次坐标轴"
风险:两条轴的缩放比例可任意设置,可能制造虚假交叉;量级差不大时应拆成两张图
06

把 12 个分类的饼图改成更合适的图形。

提示:饼图只适合 ≤5 类

解题思路角度/面积精度低,分类多了无法比较。
查看参考答案
SHELL
改成"排序后的条形图",只标注 Top5 的数值与占比,其余合并为"其它"
07

做一张 KPI 卡片:本月销售额、环比、迷你趋势。

提示:大字号数字 + 同比箭头 + 迷你图

解题思路KPI 卡是一屏看板的"顶部结论区"。
查看参考答案
SHELL
A1:本月销售额(字号 28,加粗)
B1:环比 = (本月-上月)/上月,用条件格式图标集显示 ▲▼
C1:插入迷你图显示近 6 个月趋势
08

列出你这张报表里三处"可以删掉的墨水"。

提示:边框、网格、图例框、3D、背景

解题思路数据墨水比:删装饰而不是删数据。
查看参考答案
SHELL
示例:① 图表外边框 ② 竖向网格线 ③ 图例的边框与阴影
(保留:坐标轴、必要的刻度、数据标签)

Python(第8章)

09

读入 CSV,画"各省销售额 Top10"柱状图,标题写结论。

提示:sort_values + head(10) + ax.bar

解题思路先排序再画,标题写成结论。
查看参考答案
PYTHON
import pandas as pd, matplotlib.pyplot as plt
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

df = pd.read_csv('sales.csv').groupby('province', as_index=False)['sales'].sum()
top = df.sort_values('sales', ascending=False).head(10)

fig, ax = plt.subplots(figsize=(8, 4), dpi=120)
ax.bar(top['province'], top['sales'], color='#4E7CFF')
ax.set_title('广东销售额居首,前10省合计占全国 68%')
ax.set_ylabel('销售额(万元)')
ax.grid(axis='y', linestyle='--', alpha=.3); ax.set_axisbelow(True)
plt.tight_layout(); plt.savefig('top10.png', bbox_inches='tight')
10

画"月度销售额"折线图,并把最高点标注出来。

提示:ax.plot + ax.annotate

解题思路标注关键点比标所有点更有信息量。
查看参考答案
PYTHON
ax.plot(df['month'], df['sales'], marker='o')
i = df['sales'].idxmax()
ax.annotate(f"峰值 {df.loc[i,'sales']}", xy=(df.loc[i,'month'], df.loc[i,'sales']),
            xytext=(df.loc[i,'month'], df.loc[i,'sales']*1.1),
            arrowprops=dict(arrowstyle='->', color='gray'))
11

画"价格与销量"散点图,判断是否存在相关关系。

提示:ax.scatter + 透明度

解题思路散点看关系;点重叠时加 alpha。
查看参考答案
PYTHON
ax.scatter(df['price'], df['qty'], alpha=.5, s=30)
ax.set_xlabel('价格(元)'); ax.set_ylabel('销量(件)')
# 若想加趋势线:sns.regplot(data=df, x='price', y='qty')
12

画"销售额分布"直方图,判断是否右偏。

提示:ax.hist(bins=30)

解题思路直方图看形状:右偏说明少数大值拉高了均值。
查看参考答案
PYTHON
ax.hist(df['sales'], bins=30, color='#4E7CFF', edgecolor='white')
ax.set_title('销售额右偏:多数订单集中在中低区间')
ax.set_xlabel('销售额(元)'); ax.set_ylabel('订单数')
13

用 seaborn 画"星期 × 小时"访问量热力图。

提示:pivot_table + sns.heatmap

解题思路两维交叉用热力图,颜色用单色相顺序配色。
查看参考答案
PYTHON
import seaborn as sns
pivot = df.pivot_table(index='weekday', columns='hour', values='visits', aggfunc='sum')
sns.heatmap(pivot, cmap='Blues')
plt.title('访问高峰集中在工作日 9–11 点与 20–22 点')
14

用箱线图对比各省销售额分布,并说明异常值怎么处理。

提示:sns.boxplot

解题思路箱线图看中位数、四分位与离群点。
查看参考答案
PYTHON
sns.boxplot(data=df, x='province', y='sales')
# 异常值处理原则:先核对是否录入错误;真实极值不要删,
# 可改对数刻度或"Top N + 其它"合并展示
15

一个画布放两张子图(柱状 + 折线),共用一套配色。

提示:plt.subplots(1, 2)

解题思路多子图用面向对象写法更清晰。
查看参考答案
PYTHON
fig, axes = plt.subplots(1, 2, figsize=(11, 4))
axes[0].bar(top['province'], top['sales'], color='#4E7CFF'); axes[0].set_title('各省 Top10')
axes[1].plot(df_m['month'], df_m['sales'], color='#4E7CFF', marker='o'); axes[1].set_title('月度趋势')
plt.tight_layout()
16

用 pyecharts 输出一个可交互的柱状图 HTML。

提示:Bar().add_xaxis().add_yaxis().render()

解题思路pyecharts 产出 HTML,内置 ECharts 交互。
查看参考答案
PYTHON
from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (Bar().add_xaxis(top['province'].tolist())
            .add_yaxis('销售额', top['sales'].tolist())
            .set_global_opts(title_opts=opts.TitleOpts(title='各省销售额')))
bar.render('bar.html')

ECharts(第9章)

17

写一个完整的 HTML,画出四省销售额柱状图(含悬停提示与自适应)。

提示:init + setOption + resize

解题思路四大步:引库、容器、init、setOption。
查看参考答案
HTML
<!DOCTYPE html><html><head><meta charset="utf-8">
<script src="echarts.min.js"></script>
<style>#main{width:820px;height:420px}</style></head>
<body><div id="main"></div><script>
const c = echarts.init(document.getElementById('main'));
c.setOption({
  title:{text:'四省销售额对比'},
  tooltip:{trigger:'axis'},
  xAxis:{type:'category',data:['广东','江苏','山东','浙江']},
  yAxis:{type:'value'},
  series:[{type:'bar',data:[820,610,540,480],itemStyle:{color:'#4E7CFF'}}]
});
window.addEventListener('resize',()=>c.resize());
</script></body></html>
18

把柱状图改成"2024 / 2025 双系列柱状图"。

提示:series 放两个对象 + legend

解题思路多系列同名维度,图例自动生成。
查看参考答案
JAVASCRIPT
series:[
  {name:'2024', type:'bar', data:[820,610,540,480]},
  {name:'2025', type:'bar', data:[900,660,520,510]}
],
legend:{top:8}
19

画一个环形图展示"线上/门店"占比,并显示百分比。

提示:pie + radius 数组 + label.formatter

解题思路环形比实心饼更省墨水,也便于放总量。
查看参考答案
JAVASCRIPT
series:[{
  type:'pie', radius:['45%','70%'],
  label:{formatter:'{b}\n{d}%'},
  data:[{value:1048,name:'线上'},{value:735,name:'门店'}]
}]
20

数据量太大,折线图挤在一起,加缩放。

提示:dataZoom

解题思路inside 支持滚轮/拖拽,slider 提供可视滑块。
查看参考答案
JAVASCRIPT
dataZoom:[{type:'inside'},{type:'slider',height:18,bottom:8}]

综合(第10章)

21

为"在线教育平台"设计一屏运营看板的版式(说出每块放什么)。

提示:顶部 KPI → 中部趋势 → 底部明细

解题思路F 型/三段式,一屏看到核心结论。
查看参考答案
SHELL
顶部(4 个 KPI 卡):月活用户、总访问量、会话数、咨询率(含环比)
中部左:访问用户量趋势(折线,按周)
中部右:渠道访问用户量 Top5(条形)
底部左:地区分布(分级设色地图)
底部右:会话页面排行(条形,可点击下钻)
筛选器:时间(月份)、终端(PC/移动)
22

把"咨询率 3.2%,环比下降 1.1pp"写成一句结论型标题。

提示:包含指标、数值、变化、原因线索

解题思路标题回答"发生了什么",副标题回答"为什么"。
查看参考答案
SHELL
主标题:7 月咨询率降至 3.2%(环比 -1.1pp),主要拖累来自华东渠道
副标题:口径——有效咨询=发起会话且 msg_count>0;时间范围 2025-07-01~07-31
23

给出三个"这张看板能不能用"的自检问题。

提示:结论、口径、可操作性

解题思路看板要能支持决策,不只是好看。
查看参考答案
SHELL
① 一屏内能否读出至少一个结论?
② 每个指标的统计口径是否写清楚(范围/时间/去重规则)?
③ 看到异常后,有没有下钻路径能定位到原因?
24

同一份数据,用"排序条形图"和"饼图"各画一次,比较可读性并给出结论。

提示:动手做对比

解题思路亲手对比过,才会形成判断力。
查看参考答案
SHELL
结论:12 个分类的饼图几乎无法比较相邻扇区,标签还会重叠;排序条形图能立刻读出排名与前 3 名占比。
经验规则:分类 >5 个一律不用饼图。