Python 环境加载中…

数据分析在做什么

3 道练习题·预计 40 分钟·做对一题解锁下一段

完整通读本章 →

教学 01 / 08· 已读

前言

各位童鞋学到这里,手里其实已经攒了不少数据:实战 6 的记账本,记下了每一笔花销;学过爬虫课的童鞋,还从书店网站上抓下了一整个书店的图书。

数据是有了,可光把它们存着,并没有什么用。咱们真正想知道的是:这些数据能告诉我们什么?

比如,一年下来,钱主要花在了哪儿?哪个月花得最多?书店里,贵的书评分会不会更高?这些问题的答案,其实就藏在数据里。把答案找出来的过程,就叫数据分析。

那么,拿什么来做数据分析呢?这门课一共 10 章,用的是 Python 里做数据分析最常用的两个工具:

  • pandas:把数据装进一张「表」里。筛选、统计、分组、合并,几行代码就能搞定。
  • matplotlib:把数字画成图,让人一眼就看出趋势和差别。

练习用的数据有两份,都是编出来的:一份是 2026 年一整年的记账本,另一份是两点书店的图书和读者评分。前 8 章一样一样地学工具,最后两章是两个完整的分析项目,每个项目都要写出一份分析结论。

有一件事要先说在前面:pandas 和 matplotlib 加起来有几十 MB,第一次运行代码时,网页要先把它们下载下来。这时候输出区会显示下载进度,请耐心等一会儿。下载过一次以后,浏览器就记住了,下次不用再等这么久。

最后还想说一句。学数据分析,最怕的其实不是不会写代码,而是算出一个数,就急着下结论。所以这门课在教每一样工具的同时,还会一直追问两个问题:这个数说明了什么?它会不会骗了你?

学这一章之前,需要先学完基础课的第 0~9 章和实战 1~6,尤其是 实战 5 里的 csv 文件读写,这一章马上就会用到。爬虫课没学过也不要紧:最后一个项目要用到爬虫抓下的数据,网站已经提前替你准备好了。

目录

这一章会学到:

  • 一、从一个问题开始——什么样的问题能用数据回答
  • 二、数据分析的六步——提问、获取、清洗、探索、分析、结论
  • 三、先用学过的办法算一算——csv 模块加字典
  • 四、换成 pandas 试试——同样的事,三行代码
  • 五、常见坑
  • 六、自己查一次文档——pandas 的说明书在哪儿
  • 七、小结与回看

学完这一章,你会知道数据分析要做哪几件事,并用 pandas 读进第一份数据、算出第一个结果。

教学 02 / 08· 已读

一、从一个问题开始

拿到一份数据,很多童鞋的第一反应是:赶紧写代码,算点什么出来。其实先别急,第一件事应该是想清楚:我到底想知道什么?

比如手里有一年的记账本,你对自己说:「分析一下我的账。」这算不算一个问题呢?其实不算。因为它太笼统了,根本不知道该从哪儿下手:是算一共花了多少?还是看哪一类花得最多?

好的问题,要具体到能用数据回答。对比一下就清楚了:

笼统的具体的
我花钱多不多?2026 年一共花了多少?平均每个月多少?
钱都去哪儿了?每个类别各花了多少,哪个类别最多?
我是不是乱花钱?单笔超过 200 元的花销有几笔,都是什么?
周末是不是花得多?周末平均每天花多少,工作日平均每天花多少?

那么,右边这些具体的问题,有什么共同点呢?仔细看,有三点:

  • 说得出要算的数:总和、平均、个数,或者最大的那几笔。
  • 说得出比的是什么:类别和类别比,月份和月份比,周末和工作日比。
  • 数据里有对应的那一项:记账本的每一笔都记了日期、名称、类别、金额和付款方式,上面这些问题都用得上它们。

反过来,有些问题就没法用这份数据回答。比如「我买的东西值不值」,账本里根本没有记「值不值」,再怎么算也算不出来。问题提得出来,数据却回答不了,这种情况很常见。这时候只有两条路:要么换个问题,要么去找更多的数据。

道理说完了,咱们挑一个最简单的问题来练手:2026 年,每个类别各花了多少钱?

这个问题,第三节就动手来算。在那之前,先花两分钟看看数据分析的全貌:从提出问题到得出结论,一共要走哪几步?

教学 03 / 08· 已读

二、数据分析的六步

不管分析的是账单、图书还是天气,要做的事情大体都是下面这六步:

文本
① 提问:想清楚要回答什么
② 获取:把数据拿到手(自己记的、爬虫抓的、别人给的)
③ 清洗:处理缺失、重复、写错的数据
④ 探索:看看数据长什么样,有多少行、每列是什么、有没有怪的值
⑤ 分析:统计、分组、比较,必要时画成图
⑥ 结论:用大白话说清楚发现了什么,以及这个结论靠不靠得住

这门课的章节,基本就是沿着这六步来排的。每一步在哪一章学,可以对照这张表:

步骤在哪一章
获取、探索第 2 章「认识 DataFrame」
探索第 3 章「挑出想要的数据」、第 4 章「用几个数说清一列」
清洗第 5 章「把数据洗干净」
分析第 6 章「分组汇总与透视表」、第 7 章「把几张表拼起来」
分析、画图第 8 章「把数字画成图」
全部六步第 9、10 章两个项目

不过要注意,这六步并不是一条直线,走完一步就再也不回头。比如探索的时候发现数据有问题,就得回到清洗;分析出一个意想不到的结果,可能还要回到提问,换个角度再问一遍。这样来回走好几趟,是很正常的事。

六步里面,最容易被跳过的是第 ⑥ 步的后半句:结论靠不靠得住。为什么这么说呢?因为算出一个数很容易,难的是说清楚这个数能说明什么、不能说明什么,而这恰恰是分析里最有价值的部分。

教学 04 / 08

三、先用学过的办法算一算

回到第一节的问题:2026 年,每个类别各花了多少钱?pandas 还没学,咱们先用已经学过的办法试试看。

记账本存在 ledger_2026.csv 这个文件里。在网页里运行时,网站已经替你放好了这个文件;要是在自己电脑上运行,就得先从 练习靶场 把它下载下来,放在代码文件的旁边。

动手算之前,先看看文件里长什么样。下面的代码只读出文件的前 4 行:

Python· 可在网页运行
with open('ledger_2026.csv', encoding='utf-8') as f:
    for _ in range(4):
        print(f.readline().strip())

输出的结果:

文本
date,item,category,cost,payment
2026-01-01,房租,居住,2500,银行卡
2026-01-01,水电燃气,居住,156,支付宝
2026-01-01,早饭,餐饮,13,支付宝

第一行是表头,说明每一列记的是什么。可以看到,每一笔花销都记了五项:日期、名称、类别、金额和付款方式。

数据的样子清楚了,接下来就可以算了。思路是这样的:一行一行地读,碰到哪个类别,就把这一笔的金额加到这个类别的总数上。读文件用实战 5 学过的 csv 模块,累加用实战 2 学过的字典:

Python· 可在网页运行
import csv

totals = {}
with open('ledger_2026.csv', encoding='utf-8', newline='') as f:
    for row in csv.DictReader(f):
        totals[row['category']] = totals.get(row['category'], 0) + float(row['cost'])

for category, money in sorted(totals.items(), key=lambda item: item[1], reverse=True):
    print(f'{category}:{money:.2f} 元')

输出的结果:

文本
居住:32888.50 元
餐饮:23583.00 元
购物:4992.50 元
娱乐:3178.00 元
交通:1713.00 元
学习:1659.00 元
医疗:1181.50 元

这段代码里,最难懂的大概是最后那个 for 后面的一长串排序。咱们把它拆开来看:

  • totals.items() 把字典变成一对一对的(类别, 金额),比如 ('居住', 32888.5) 。
  • sorted() 负责排序。它不会改动原来的字典,而是排好以后,返回一个新的列表。
  • 那按什么排呢?key=lambda item: item[1] 就是在告诉 sorted() :每一对里取第 2 个值,也就是金额,按金额来排。lambda 是基础课第 6 章讲过的匿名函数,忘了的话可以回去看一眼。
  • reverse=True 的意思是倒过来排,从大到小。

这样一来,花得最多的类别就排在了最前面。看输出,答案出来了:居住花得最多,主要是因为每个月 2500 元的房租;其次是餐饮。

用学过的办法,这个问题总算是算出来了。不过回头看看这段代码,为了得到这几个数,咱们一共做了五件事:打开文件、一行一行地读、把金额从字符串转成数字、用字典累加,最后再排序。

而这还只是最简单的一个问题。要是接着再问一句「每个月、每个类别各花了多少?」,代码还得再长一截。

那么,有没有更省事的办法呢?有,下一节就来试试 pandas。在那之前,先做一道练习,用同样的办法把全年的花销加起来,把这个思路练熟。

练习 1 / 3一年花了多少题目有问题?

用 csv 模块读 ledger_2026.csv ,数一数一共记了几笔,把金额(cost 列)全部加起来。金额读出来是字符串,记得先转成数字。

运行后的输出应该是:

文本
1354 笔,共 69195.50 元
main.py
可编辑
做对当前题解锁下一段 ·03

推荐一个,全网最全最友好的中文 AI 编程指南: coding.stormzhang.ai

学习目录