4.2知识点 · 课时
数据可视化入门
学会用 Python 的 print 输出文本柱状图,理解数据可视化的原理。
让数据"看得见"
上一节我们用 Python 算出了统计量(均值、最值)。但一堆数字不够直观——图表才能让人一眼看懂趋势。
这一节我们用 Python 的 print() 画出文本柱状图。不用装任何库,纯代码实现,帮你理解可视化的原理。
最简单的图表:文本柱状图
思路很简单:用 # 号的数量表示数值大小。
# 基础版:用 # 画柱子
values = [3, 5, 2, 7, 4]
labels = ["A", "B", "C", "D", "E"]
for i in range(len(values)):
bar = "#" * values[i] # 把 # 重复 values[i] 次
print(labels[i], bar, values[i])
输出:
A ### 3
B ##### 5
C ## 2
D ####### 7
E #### 4
"# " * 7就是"# # # # # # # "——字符串乘法,Python 的一个巧妙特性。
应用:屏幕时间柱状图
把上一节的屏幕时间数据画出来:
screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
print("=== 一周屏幕时间(每小时 = 1 个 #)===\n")
for i in range(len(days)):
# 每小时对应一个 #(用 int() 取整)
bar = "█" * int(screen_time[i])
print(f"{days[i]} {bar} {screen_time[i]}h")
输出:
周一 ███ 3.5h
周二 ████ 4.2h
周三 ███ 3.8h
周四 █████ 5.1h
周五 ██████ 6.5h
周六 ████████ 8.2h
周日 ███████ 7.6h
一眼就能看出:周末屏幕时间明显比工作日多。这就是可视化的力量。
加上均值参考线
给图表加一条"平均值线",让对比更清晰:
screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
avg = sum(screen_time) / len(screen_time) # 均值 5.56
print(f"日均参考线: {round(avg, 1)}h\n")
for i in range(len(days)):
bar = "█" * int(screen_time[i])
# 高于均值标 ↑,低于均值标 ↓
if screen_time[i] > avg:
mark = "↑ 超出"
else:
mark = "↓ 低于"
print(f"{days[i]} {bar} {screen_time[i]}h {mark}")
输出:
日均参考线: 5.6h
周一 ███ 3.5h ↓ 低于
周二 ████ 4.2h ↓ 低于
周三 ███ 3.8h ↓ 低于
周四 █████ 5.1h ↓ 低于
周五 ██████ 6.5h ↑ 超出
周六 ████████ 8.2h ↑ 超出
周日 ███████ 7.6h ↑ 超出
工作日全部低于均值,周末全部超出——规律一目了然。
对比:第二章的工具 vs 第四章的代码
| 第二章:Flourish 工具 | 第四章:Python 代码 | |
|---|---|---|
| 方式 | 在网页上拖拽操作 | 写代码实现 |
| 灵活性 | 受工具功能限制 | 想怎么画就怎么画 |
| 可重复性 | 每次手动操作 | 代码写一次,换数据自动出图 |
| 适合场景 | 快速出漂亮图表 | 批量处理、自动化、定制 |
第二章用工具(Flourish)画图,第四章用代码画图。代码的优势是:换一组数据,图表自动更新——这就是编程处理数据的威力。
📱 项目实践:完整版数据报告
把上一节的统计 + 这一节的图表,合成一份完整的报告:
# ===== 数字习惯完整报告 v2.0 =====
screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
# 统计
total = sum(screen_time)
avg = total / len(screen_time)
print("=" * 30)
print(" 一周屏幕时间报告")
print("=" * 30)
print(f"总计: {total} 小时")
print(f"日均: {round(avg, 1)} 小时")
print(f"最高: {max(screen_time)} 小时")
print(f"最低: {min(screen_time)} 小时")
print()
# 图表
print("屏幕时间分布:")
for i in range(len(days)):
bar = "█" * int(screen_time[i])
print(f" {days[i]} {bar} {screen_time[i]}h")
print()
print(f"日均参考: {'─' * int(avg)} {round(avg, 1)}h")
🤔 思考
- 如果要让柱子等比例缩放(数据很大时不会太长),该怎么改?
- 怎么用代码画折线图?(提示:用字符的位置模拟坐标系)
- 为什么说"用代码画图"比"用工具画图"更适合处理大量数据?
📝 知识小结
- 文本柱状图:用字符(
#或█)的重复次数表示数值,用"█" * n实现 - f-string:格式化输出,让图表整齐
- 可视化的核心:把数字变成直观的图形
- 代码画图的优势:可重复、可自动化、可定制
- 对比第二章:工具画图(快捷)vs 代码画图(灵活),各有适用场景