Notes · 2024.11.16

大数据实践 95

实践训练,分比课设低。

1 min · school · data

大数据实践训练出了 95。比课设低一截。我没有去要那 5 分。这门课更脏:数据不整齐,脚本要重跑,跑完发现编码又炸。机房显示器反光,csv 在编辑器里列对不齐,老师走过来问「你这列是什么」,我答不上来的那一次,比扣分更清楚这门课在练什么。

干净的 notebook 交得出作业。脏数据才接近后来要处理的东西。95 我接受。再高一点,说明我可能把数据洗得太假。

数据不整齐的时候

课程给的表,看着像已经洗过。打开才知道日期两种格式、空值有的是空字符串、有的是 NULL、有的是中文「无」。第一次我按课件的 dropna 一把删,行数少了一大截,后面的统计全部漂。漂了还画图,图很好看,结论是错的。

后来规定自己:先打印缺失、唯一值、异常范围,再决定删还是填。填的理由写在 notebook 第一格,不要写在心里。心里的理由隔夜就忘,忘了就无法重跑。重跑是这门课的基本动作。换一台机房电脑,路径、Python 版本、依赖都会变。变了还能出同一张表,才叫实践。

列名有中文、有空格、有从 Excel 带过来的不可见字符。看不见的字符会让 df['日期'] 取不到列。取不到时我先打印 repr(列名),不要先怪数据没了。数据还在,名字不干净。不干净的名字,课程练习仓库里我留过一列对照。对照很土。土过之后,后来切片、评测集里再碰到「列明明在」,我还是先 repr。

编码踩过坑。Windows 下 GBK,mac 上 UTF-8,提交到评测环境又是另一种。乱码看起来像数据坏了。数据没坏,是我没把编码写进脚本开头。从那次起,读文件显式写编码,不再靠默认。

脚本要能重跑

notebook 可以演示。交作业如果只交 notebook,老师换个工作目录就会红。我把关键步骤抽成函数,随机种子写死,输出目录写死。演示用 notebook,复查用脚本。复查那一步课上不强制,我自己强制。强制的原因是:有一次我改了中间格子,下面的图还是旧输出,报告截的是旧图,口头讲的是新结论。对不上的那几分钟,比 95 分难看。

日志我写得很朴素。每一步打印行数。行数跳了就停。不要指望自己能从折线图看回行数。折线图会安慰人。行数不会。

这门课的分没有课设高,我猜有一部分在报告和现场提问。提问问的是「你为什么删这列」。答「因为脏」,不够。要说脏在哪、删了影响什么、不删会怎样。影响说不清,就先别删。

随机种子没写死的那一次,两次运行的聚类中心漂了,报告截的是第一次,口头讲的是第二次。老师让我当场再跑。再跑对不上截图。对不上就只能承认。承认之后 95。95 比当场圆一个不存在的「稳定结果」干净。稳定要靠种子、靠版本、靠输出目录,不靠嘴。

脏和后来那些脏

后来做 RAG 切片、评测集、错误案例,都是这一类脏。切片边界切错,检索看起来还能出字,字对不上出处。评测集混进训练句,分数会虚。错误案例如果不归档,下周你以为模型好了,其实只是那几条碰巧过了。

实习和课程的差别,不是工具更新,是没有人给你已经切好的题。课程至少还有评分表。评分表外的脏,要自己建表:哪一步、什么输入、期望、实际。大数据实践 95,是我第一次被迫承认:漂亮 notebook 可以交作业,不能当系统。

仓库里那份练习还在。我偶尔打开看自己当年怎么给列起名。起名随便,后来的自己会骂。现在起名宁可长,不要用 tmp2。tmp2 在凌晨很香,在一周后是毒药。

作业要求交 notebook。我另外留一份纯脚本。脚本在命令行一键出表和图。老师若只看 notebook,脚本像多余。多余在自己重跑时值钱。值钱的东西课上不给分,我仍留。95 分没有因为多一份脚本变 100。100 也不是这门课的目标。目标是脏数据下次还认得出。

95 分停在这里

我不会把 95 改写成「更擅长工程」。就是这门课我没到课设那种齐。齐需要时间。时间那学期给了赛和另一门课设。给完,这门就 95。

下一份脏数据,先写重跑步骤,再画图。图可以少。步骤不能少。步骤少了,95 会变成一次无法复查的表演。表演在课程里能过。表演在评测里过不了。