據(jù)技能賽數(shù)據(jù)清洗與分析:25分拿分策略與實(shí)戰(zhàn)技巧)
1. 25分到底考什么任務(wù)三第4子任務(wù)的定位與分值拆分1.1 賽項(xiàng)里數(shù)據(jù)清洗與分析為什么要單獨(dú)考2019年全國(guó)職業(yè)技能大賽大數(shù)據(jù)技術(shù)賽項(xiàng)的整套賽題是一個(gè)完整的離線數(shù)據(jù)業(yè)務(wù)鏈路數(shù)據(jù)產(chǎn)生之后進(jìn)入采集通道落到存儲(chǔ)引擎然后交給清洗環(huán)節(jié)去粗取精最后再通過(guò)分析把數(shù)據(jù)變成能輔助決策的結(jié)果。任務(wù)三的第4個(gè)子任務(wù)數(shù)據(jù)清洗與分析恰恰卡在鏈路最關(guān)鍵的腰部——前面做好的數(shù)據(jù)表能不能用、后面分析出來(lái)的結(jié)論有沒(méi)有說(shuō)服力都取決于這道題做得扎實(shí)不扎實(shí)。參加過(guò)這類賽事的選手都知道賽題里的任務(wù)編號(hào)有不少門道。任務(wù)三放在整套題的中間偏后位置意味著前幾個(gè)子任務(wù)已經(jīng)把原始數(shù)據(jù)準(zhǔn)備好了到這一道題時(shí)你面對(duì)的往往是帶著缺失值、重復(fù)行、超范圍數(shù)值、格式不統(tǒng)一的大寬表。職業(yè)技能大賽的出題邏輯和學(xué)校里的課程作業(yè)完全不一樣課程作業(yè)里數(shù)據(jù)基本是干凈的大賽里的數(shù)據(jù)則是從真實(shí)業(yè)務(wù)場(chǎng)景里抽出來(lái)的臟得有多自然題目就有多真實(shí)。這道25分的題本質(zhì)上是考察兩件事你能不能把臟數(shù)據(jù)理順以及理順之后你能不能問(wèn)出有價(jià)值的問(wèn)題。1.2 分值是均勻分布還是集中給點(diǎn)凡是認(rèn)真研究過(guò)這份賽題答案的人都能發(fā)現(xiàn)一個(gè)規(guī)律25分不是均勻撒在每一步操作上的。出題方會(huì)故意讓某個(gè)清洗動(dòng)作占8分、某個(gè)分析結(jié)果占10分剩下的幾分留給過(guò)程和輸出格式這樣做是為了拉開(kāi)區(qū)分度——只會(huì)點(diǎn)點(diǎn)鼠標(biāo)的人拿不到高分真正理解數(shù)據(jù)的人能一路暢通。按照歷年備賽時(shí)對(duì)照題目答案的統(tǒng)計(jì)習(xí)慣這道題的分值在心里可以這樣預(yù)估數(shù)據(jù)清洗部分大約占812分集中在缺失值處理、重復(fù)行刪除、異常值修正這些硬性操作上數(shù)據(jù)分析部分占1012分通常要求輸出分組統(tǒng)計(jì)結(jié)果、同比環(huán)比或者排行前幾的明細(xì)最后還有23分給的是導(dǎo)出文件命名、字段命名、表頭規(guī)范這類看起來(lái)不起眼但評(píng)分時(shí)繞不開(kāi)的細(xì)節(jié)。明確了分值分布再去答題策略就完全不一樣了清洗環(huán)節(jié)寧可多花時(shí)間也不能丟分分析環(huán)節(jié)要優(yōu)先寫(xiě)清楚結(jié)論口徑輸出格式要留出最后5分鐘專門檢查而不是全部一股腦兒做完。很多第一次參賽的人最大的誤區(qū)是先把數(shù)據(jù)全清洗干凈再開(kāi)始分析。事實(shí)上賽題并不會(huì)給你一條完美的清洗主線多數(shù)情況下清洗到能回答目標(biāo)問(wèn)題的程度就夠了不必追求理論上的絕對(duì)干凈。2. 數(shù)據(jù)清洗考試最穩(wěn)的拿分點(diǎn)也是翻車最集中的環(huán)節(jié)2.1 缺失值別一上來(lái)就刪先回答為什么空數(shù)據(jù)清洗的第一刀幾乎永遠(yuǎn)落在缺失值上。賽題給的表很少有干干凈凈沒(méi)有空格的常見(jiàn)的情況有三種某個(gè)字段整列都是空、某幾行關(guān)鍵字段缺失、以及用空字符串或者null字符串冒充空值。這三種情況的處理策略完全不一樣混在一起處理就會(huì)翻車。先處理整列都空的情況。這一列如果確實(shí)是賽題故意留的空列它對(duì)你的分析目標(biāo)沒(méi)有任何用處直接判斷不需要納入結(jié)果表即可。但如果題目后邊的分析題要用到這個(gè)字段那說(shuō)明數(shù)據(jù)鏈路在更早的環(huán)節(jié)出了問(wèn)題這時(shí)候就要回到前面幾個(gè)子任務(wù)的產(chǎn)出目錄里去找原始文件重新核對(duì)字段對(duì)應(yīng)關(guān)系。某個(gè)字段部分缺失時(shí)需要看缺失比例缺失比例不到5%且該字段是數(shù)值型時(shí)可以用分組中位數(shù)或者均值填充缺失比例高但它又是分析主鍵的一部分就要回到主鍵關(guān)聯(lián)邏輯去排查看看是不是上游join出了問(wèn)題。另外要注意Excel或者文本文件里常見(jiàn)的null字符串這種看起來(lái)是空、實(shí)際上占著字符位置的值在數(shù)值計(jì)算時(shí)最坑人必須先統(tǒng)一替換成真正的空再走填充邏輯。拿SQL環(huán)境舉例一個(gè)穩(wěn)妥的處理順序是-- 1. 把字符串形式的NULL統(tǒng)一成真NULL UPDATE cleaned_sales SET quantity NULL WHERE quantity null; -- 2. 用分組中位數(shù)填充數(shù)值型缺失 UPDATE cleaned_sales t JOIN ( SELECT category, MEDIAN(price) AS m_price FROM cleaned_sales WHERE price IS NOT NULL GROUP BY category ) x ON t.category x.category SET t.price x.m_price WHERE t.price IS NULL;這里用中位數(shù)而不是平均值是因?yàn)榇筚悢?shù)據(jù)經(jīng)常有極端價(jià)格存在均值會(huì)被帶偏中位數(shù)更穩(wěn)健。這個(gè)細(xì)節(jié)很多人不知道但恰好在某些年份賽題答案的給分點(diǎn)上出現(xiàn)過(guò)。2.2 異常值用業(yè)務(wù)規(guī)則而不是統(tǒng)計(jì)規(guī)則去篩異常值處理是數(shù)據(jù)清洗里最容易引起爭(zhēng)議的部分因?yàn)楫惓5亩x本身就模糊。賽題里最常出現(xiàn)的異常類型大概是這么幾類異常類型典型表現(xiàn)推薦處理方式范圍外數(shù)值年齡出現(xiàn)300、價(jià)格出現(xiàn)負(fù)數(shù)按業(yè)務(wù)字段合理范圍修正或剔除邏輯矛盾下單時(shí)間晚于發(fā)貨時(shí)間以主流程時(shí)間為準(zhǔn)修正前后順序單位不一致部分記錄按元部分按萬(wàn)元統(tǒng)一換算基準(zhǔn)單位后再參與計(jì)算重復(fù)值同一主鍵出現(xiàn)多行內(nèi)容完全相同按主鍵去重保留第一條極端離群點(diǎn)個(gè)別值遠(yuǎn)超正常范圍結(jié)合業(yè)務(wù)判斷是否保留并單獨(dú)標(biāo)注針對(duì)范圍外數(shù)值建議直接按業(yè)務(wù)常識(shí)定規(guī)則年齡字段必須落在0到120之間價(jià)格字段必須大于等于0。有些選手遇到負(fù)價(jià)格第一反應(yīng)是刪行結(jié)果把有效記錄給刪了。更好的做法是先查一下這個(gè)字段在其他子任務(wù)里的口徑比如負(fù)價(jià)格可能是退款金額被混進(jìn)了銷售明細(xì)這種情況應(yīng)該拆分到退款表而不是粗暴刪除。邏輯矛盾的處理方向要記住一條鐵律以主鏈路的時(shí)間節(jié)點(diǎn)為基準(zhǔn)。下單時(shí)間晚于發(fā)貨時(shí)間這種矛盾通常是錄入時(shí)區(qū)不同導(dǎo)致的分析時(shí)要統(tǒng)一到發(fā)貨時(shí)間所在時(shí)區(qū)之后再判斷。如果賽題沒(méi)有特別說(shuō)明時(shí)區(qū)問(wèn)題就用任務(wù)一里元數(shù)據(jù)表給出的默認(rèn)時(shí)區(qū)所有時(shí)間的清洗口徑保持一致保證后續(xù)分析不會(huì)因?yàn)闀r(shí)區(qū)混用而對(duì)不上數(shù)。2.3 重復(fù)值與格式統(tǒng)一最容易順手丟分的細(xì)節(jié)重復(fù)值處理聽(tīng)起來(lái)簡(jiǎn)單實(shí)際操作里面有個(gè)很隱蔽的坑很多表里看起來(lái)重復(fù)的行其實(shí)只是主鍵以外的字段完全一樣但主鍵字段并不重復(fù)。這類情況不能直接刪得先看主鍵有沒(méi)有唯一性約束。如果一張干凈的業(yè)務(wù)流水表里存在同一訂單號(hào)出現(xiàn)兩次的情況要么是上游抽數(shù)時(shí)發(fā)生了重復(fù)要么是訂單表本身含有多行明細(xì)后者并不算異常。正確做法是先做一次分組計(jì)數(shù)確認(rèn)重復(fù)的粒度。SELECT order_id, COUNT(*) AS cnt FROM raw_sales GROUP BY order_id HAVING COUNT(*) 1;如果重復(fù)粒度確實(shí)是整行所有字段全部一樣那基本可以判斷是抽取環(huán)節(jié)帶出來(lái)的冗余保留任意一行即可。如果只有部分字段重復(fù)而其他字段不同則要看這些不同字段是否構(gòu)成分析所需的維度否則保留一行并標(biāo)注疑似重復(fù)即可。這個(gè)先確認(rèn)再動(dòng)手的習(xí)慣在競(jìng)賽里直接決定了你刪的是臟數(shù)據(jù)還是有效數(shù)據(jù)。格式統(tǒng)一的坑則更瑣碎日期字段有的帶時(shí)分秒、有的只有日期字符串字段里隱藏著肉眼看不見(jiàn)的全角空格數(shù)值字段被存成了文本導(dǎo)致排序異常。這些問(wèn)題的共性解法是先探查后清洗。拿到表之后先做一輪字段級(jí)別的distinct抽樣用眼睛確認(rèn)每個(gè)字段的真實(shí)形態(tài)再寫(xiě)清洗腳本。競(jìng)賽時(shí)間緊很多選手跳過(guò)探查直接寫(xiě)清洗邏輯結(jié)果清洗腳本跑出來(lái)的結(jié)果比原始數(shù)據(jù)還要奇怪這類教訓(xùn)每年都有。3. 數(shù)據(jù)分析讓結(jié)果輸出向考點(diǎn)意圖靠攏3.1 從題目措辭反推分析目標(biāo)數(shù)據(jù)清洗做完緊接著的分析題才是真正拉分的環(huán)節(jié)。歷年賽題里的分析問(wèn)法其實(shí)翻來(lái)覆去就那么幾類但每年都有大量選手在分析上跑偏根源在于沒(méi)有仔細(xì)讀題。分析題的題干往往在措辭里藏著口型要求排名前10的一定要有排序和limit要求占比情況的一定要有分母要求同比/環(huán)比的一定要有時(shí)間維度做join。一個(gè)實(shí)用的方法是把題干里的動(dòng)詞和名詞拆出來(lái)對(duì)照。比如題干寫(xiě)統(tǒng)計(jì)每月各類別銷售總額那輸出表至少要包含月份、類別、銷售總額三個(gè)字段一個(gè)都不能少寫(xiě)對(duì)比上半年與下半年的客單價(jià)差異則必須有上半年、下半年兩個(gè)分組且要明確客單價(jià)的分子和分母口徑。這些內(nèi)容在閱卷時(shí)都是按字段給分的少寫(xiě)一個(gè)字段哪怕計(jì)算結(jié)果完全正確也給不了滿分。3.2 分組聚合的寫(xiě)法和輸出口徑用SQL還是用Python做分析取決于賽題給你的數(shù)據(jù)形態(tài)和你更熟練的工具。但無(wú)論用哪個(gè)分組聚合的輸出口徑必須統(tǒng)一。所謂口徑就是每個(gè)指標(biāo)的計(jì)算定義。比如銷售額到底是訂單原價(jià)還是實(shí)際支付價(jià)用戶數(shù)到底是去重用戶還是訂單用戶數(shù)。賽題后面如果有附屬說(shuō)明表一般會(huì)寫(xiě)明口徑如果沒(méi)有就按最符合業(yè)務(wù)直覺(jué)的規(guī)則來(lái)并且在答案里寫(xiě)明自己的口徑選擇。閱卷時(shí)能看出你做了口徑判斷這本就是分析能力的一部分。以SQL為例子一個(gè)完整的分組分析往往長(zhǎng)成這樣SELECT DATE_FORMAT(order_date, %Y-%m) AS month, category, ROUND(SUM(actual_amount), 2) AS total_amount, COUNT(DISTINCT user_id) AS user_cnt, ROUND(SUM(actual_amount) / COUNT(DISTINCT user_id), 2) AS per_user_avg FROM cleaned_sales WHERE order_status completed GROUP BY month, category ORDER BY month, total_amount DESC;這里有個(gè)關(guān)鍵習(xí)慣把where條件放在聚合之前先過(guò)濾再聚合別等聚合結(jié)果出來(lái)再過(guò)濾。這不僅是SQL執(zhí)行效率的問(wèn)題更是避免邏輯錯(cuò)誤的關(guān)鍵。很多選手喜歡在子查詢里先分組再在外面加where寫(xiě)出來(lái)特別繞一不留神就把分組后的聚合結(jié)果當(dāng)成過(guò)濾條件最后對(duì)不上答案。3.3 比對(duì)的幾種常見(jiàn)形態(tài)環(huán)比、同比、占比、排名大賽分析題最愛(ài)考的四類輸出邏輯各有各的坑。環(huán)比分析一定會(huì)涉及上一個(gè)時(shí)間段的數(shù)據(jù)最常見(jiàn)的寫(xiě)法是用lag窗口函數(shù)或者自關(guān)聯(lián)取上一周期值。用SQL的時(shí)候推薦先用窗口函數(shù)把上一周期值放到同一行再做差這樣邏輯清晰。自關(guān)聯(lián)寫(xiě)法容易在多對(duì)多join時(shí)產(chǎn)生重復(fù)計(jì)數(shù)一旦基數(shù)對(duì)不上結(jié)果就亂了。同比分析則要特別注意時(shí)間窗口的天數(shù)差異比如2月的同比要處理閏年季度同比要處理季度天數(shù)不同。賽題如果沒(méi)特別說(shuō)明默認(rèn)按自然月/自然季對(duì)齊即可不需要引入工作日調(diào)整這種復(fù)雜邏輯。占比分析要先確認(rèn)分子分母的層級(jí)比如某品類占全店銷售的比例分母應(yīng)該是全店整體而非當(dāng)前篩選范圍。還有個(gè)隱藏的坑分母里要不要包含退款訂單。這個(gè)要看題干的銷售額是否已經(jīng)做過(guò)退款剔除如果前面清洗時(shí)已經(jīng)把退款單刪掉了分母就直接用清洗后的數(shù)據(jù)不需要二次處理。排名分析反而最簡(jiǎn)單最需要注意的就是并列排名怎么算。SQL里rownum、rank、dense_rank之間的差別賽題答案通常按rank并列會(huì)跳號(hào)來(lái)給分。如果只用order by加limit而完全避開(kāi)排名函數(shù)遇到并列時(shí)輸出行數(shù)會(huì)跟答案對(duì)不上這也是一個(gè)高頻丟分點(diǎn)。4. 工具鏈選擇與比賽環(huán)境的隱形限制4.1 選SQL還是Python看賽題給的數(shù)據(jù)形態(tài)很多選手備賽時(shí)糾結(jié)到底用SQL還是Python做數(shù)據(jù)清洗分析其實(shí)這個(gè)問(wèn)題在比賽現(xiàn)場(chǎng)根本不該糾結(jié)。判斷標(biāo)準(zhǔn)很簡(jiǎn)單數(shù)據(jù)量級(jí)不大、字段結(jié)構(gòu)清晰的場(chǎng)景SQL的調(diào)試成本更低出結(jié)果更快數(shù)據(jù)有多表關(guān)聯(lián)、復(fù)雜清洗鏈路、自定義函數(shù)處理邏輯的場(chǎng)景Python的代碼可維護(hù)性更高不容易在中間步驟里迷路。我個(gè)人的建議是清洗階段以SQL為主、Python為輔分析階段反過(guò)來(lái)。原因是清洗階段的探查—修改—驗(yàn)證循環(huán)很頻繁SQL里寫(xiě)一句select再套一層update執(zhí)行力非常順滑到了分析階段需要連續(xù)做多層篩選、分組、合并Python里用pandas鏈?zhǔn)讲僮鞅萐QL層層嵌套可讀性強(qiáng)得多。曾經(jīng)和我一起備賽的一位A同學(xué)在模擬題里堅(jiān)持所有步驟都用SQL結(jié)果到第三層嵌套子查詢時(shí)把自己繞暈了最后在時(shí)間上吃了大虧。后來(lái)他改成清洗用SQL分析用pandas速度提升了至少一半。4.2 編碼與路徑比賽環(huán)境里的第一個(gè)坑正式比賽環(huán)境里最容易出現(xiàn)的問(wèn)題根本不是分析邏輯跑不通而是文件讀不出來(lái)。數(shù)據(jù)文本的編碼格式是GBK還是UTF-8在Windows環(huán)境下經(jīng)常是重災(zāi)區(qū)。很多選手把csv文件拖進(jìn)Excel或者Python里直接讀看到亂碼才意識(shí)到編碼不對(duì)這一來(lái)一回就是十幾分鐘。正確的做法是建表或讀取之前先看一遍任務(wù)說(shuō)明里注明的編碼格式如果沒(méi)有注明就用記事本或者文本工具打開(kāi)文件看一眼亂碼就切換到GBK沒(méi)亂碼就是UTF-8。Python讀取時(shí)的寫(xiě)法是這樣的import pandas as pd df pd.read_csv(sales.csv, encodinggbk) # 如果還是亂碼可以換成 encodingutf-8 # 還可以用 errorsignore 先跑通再回來(lái)補(bǔ)編碼另一個(gè)坑是文件路徑不能帶中文。某些比賽環(huán)境里工具鏈對(duì)中文路徑支持不完善一旦工作目錄或者輸出路徑里有中文程序就會(huì)在某個(gè)莫名其妙的步驟里報(bào)錯(cuò)。穩(wěn)妥的做法是開(kāi)賽后第一件事就是在純英文路徑下建立自己的工作目錄把題目給到的數(shù)據(jù)文件全部拷貝進(jìn)去后面所有的中間結(jié)果都往這個(gè)目錄里寫(xiě)。4.3 結(jié)果表導(dǎo)出的格式約定這道題的最終答案通常要求以結(jié)果表文件的形式提交文件格式、命名規(guī)則、字段順序在題目里都會(huì)有明確要求。很多選手自以為看清楚了實(shí)際上漏看了字段順序這四個(gè)字。分析表字段的順序在閱卷程序里是嚴(yán)格匹配的——第一列必須對(duì)應(yīng)題目第一個(gè)要求的字段第二列第二個(gè)順序錯(cuò)了哪怕值全對(duì)都會(huì)被判定為結(jié)構(gòu)不符。導(dǎo)出CSV時(shí)還要注意Excel打開(kāi)后的數(shù)據(jù)精度問(wèn)題。有些統(tǒng)計(jì)結(jié)果浮點(diǎn)數(shù)位數(shù)很長(zhǎng)直接導(dǎo)出會(huì)顯示成科學(xué)計(jì)數(shù)法或者被Excel截?cái)唷=ㄗh所有數(shù)值字段在導(dǎo)出前統(tǒng)一round到題目要求的小數(shù)位數(shù)沒(méi)有要求就統(tǒng)一保留2位小數(shù)。這個(gè)習(xí)慣還能避免另一個(gè)問(wèn)題多個(gè)工具之間互相打開(kāi)結(jié)果文件時(shí)因?yàn)楦↑c(diǎn)精度不一致導(dǎo)致看似同樣的數(shù)據(jù)對(duì)不上的情況。5. 答案怎么才能踩中給分點(diǎn)閱卷視角的答題組織5.1 過(guò)程文件比最終結(jié)果更重要這道題雖然只有25分但在閱卷時(shí)它看的往往不是唯一一張結(jié)果表而是一組過(guò)程文件。通常來(lái)說(shuō)你要提交的包括清洗后的數(shù)據(jù)表、分析結(jié)果表、以及必要的說(shuō)明文檔。有些年份的評(píng)分規(guī)則里甚至要求保留清洗前后的對(duì)照文件沒(méi)有中間過(guò)程文件直接扣分。很多選手不理解為什么答案要附中間過(guò)程覺(jué)得我最終結(jié)果是對(duì)的就行。但大賽閱卷有一個(gè)現(xiàn)實(shí)約束閱卷人員需要驗(yàn)證結(jié)果是怎么來(lái)的只有最終結(jié)果沒(méi)有過(guò)程哪怕結(jié)果對(duì)了也沒(méi)法確認(rèn)你是自己做出來(lái)的。反過(guò)來(lái)如果過(guò)程文件完整哪怕最終結(jié)果差了一點(diǎn)點(diǎn)往往能靠過(guò)程分撈回不少。所以答題時(shí)我習(xí)慣這么做每完成一個(gè)清洗動(dòng)作就把當(dāng)前表導(dǎo)出一次快照命名按01原始數(shù)據(jù)、02去重、03填充、04分析結(jié)果這樣的節(jié)奏遞增。最后提交時(shí)整個(gè)過(guò)程鏈路一目了然閱卷時(shí)好感度直接拉滿。5.2 一張結(jié)果表的表頭決定一大半分結(jié)果表設(shè)計(jì)也是一門學(xué)問(wèn)不是隨便把計(jì)算結(jié)果堆在一起就行。字段命名要清晰、直觀盡量跟題目里的用詞保持一致。題目寫(xiě)銷售額你就別叫total_sale_amount題目寫(xiě)商品類別你就別叫category_code。雖然語(yǔ)義等價(jià)但在機(jī)器判卷環(huán)節(jié)默認(rèn)答案的字段名就是題目的原始措辭命名對(duì)不上很吃虧。表頭還要注意不要帶多余字段。分析結(jié)果表只保留題目要求輸出的字段別把清洗過(guò)程中用到的輔助字段比如填充標(biāo)記、原始值備份也帶進(jìn)結(jié)果表那只會(huì)讓閱卷程序產(chǎn)生疑惑。每個(gè)字段的類型也要盡量對(duì)齊百分比字段要明確是小數(shù)0.25還是25%日期字段要統(tǒng)一成同一種格式。這些細(xì)節(jié)在往年賽題答案的評(píng)分說(shuō)明里幾乎每一項(xiàng)都對(duì)應(yīng)著一到兩個(gè)給分點(diǎn)。5.3 踩過(guò)坑后的自查順序交卷前的最后幾分鐘與其坐在那里干等不如按固定順序做一遍自查。我整理了一個(gè)清單每次比賽都用它檢查文件命名是否完全與題目一致注意大小寫(xiě)和下劃線檢查結(jié)果表的字段名、字段順序、字段數(shù)量是否與題目一致抽樣驗(yàn)證幾行數(shù)據(jù)看數(shù)值是否在合理范圍比如沒(méi)有負(fù)銷售額、日期都在合理區(qū)間用SQL或者Python重新跑一遍主結(jié)果表與原始表的關(guān)聯(lián)確認(rèn)表間行數(shù)能對(duì)上如果有多個(gè)結(jié)果文件確認(rèn)文件之間的主鍵能夠互相匹配這幾條全部過(guò)完通常不超過(guò)8分鐘但每次都能攔下一兩個(gè)低級(jí)錯(cuò)誤。曾經(jīng)有位選手分析做得很漂亮結(jié)果提交時(shí)發(fā)現(xiàn)文件名少寫(xiě)了一個(gè)下劃線直接扣掉了2分。這種分丟得太冤了而且賽場(chǎng)上完全可避免。6. 從備賽到正式賽時(shí)間分配與練習(xí)建議6.1 25分建議的時(shí)間預(yù)算和優(yōu)先級(jí)整個(gè)賽項(xiàng)通常持續(xù)數(shù)小時(shí)任務(wù)三內(nèi)部還有多個(gè)子任務(wù)所以落到數(shù)據(jù)清洗與分析這一題的時(shí)間非常有限。我的經(jīng)驗(yàn)是給這道25分的題留出45到60分鐘的凈時(shí)間其中前10分鐘讀題和探查數(shù)據(jù)20分鐘做清洗20分鐘做分析最后5分鐘檢查輸出。時(shí)間如果再緊優(yōu)先保清洗環(huán)節(jié)因?yàn)榍逑词呛罄m(xù)所有分析的前置條件清洗錯(cuò)了一步后面全白搭。分析環(huán)節(jié)如果出現(xiàn)了做不出來(lái)的情況不要死磕。先把能做的簡(jiǎn)單分組統(tǒng)計(jì)結(jié)果寫(xiě)上至少把字段結(jié)構(gòu)搭出來(lái)后面再回頭補(bǔ)復(fù)雜指標(biāo)。賽場(chǎng)上一旦卡住最忌諱的就是在一個(gè)小坑上耗半小時(shí)那會(huì)把后面所有題目的時(shí)間預(yù)算全部吃掉。6.2 練到什么程度才算穩(wěn)備賽階段訓(xùn)練這道題不用追求題海戰(zhàn)術(shù)而是要把每一種數(shù)據(jù)臟類型和每一種分析輸出形態(tài)都練到肌肉記憶的程度。給自己定一個(gè)標(biāo)準(zhǔn)拿到任意一張帶臟數(shù)據(jù)的表15分鐘內(nèi)能完成探查和清洗方案設(shè)計(jì)再花15分鐘跑完清洗和基礎(chǔ)分析這就算入門了如果能在最后檢查時(shí)一眼掃出字段命名、格式、口徑的隱患那就穩(wěn)了。練習(xí)時(shí)還有一個(gè)重要習(xí)慣每練完一道題就把自己的輸出和參考答案做一次字段級(jí)對(duì)比不要只看數(shù)值對(duì)不對(duì)。找出自己漏掉的字段和寫(xiě)錯(cuò)的命名總結(jié)成一張個(gè)人錯(cuò)題單。備賽后期這張錯(cuò)題單比任何模擬題都值錢因?yàn)樗涗浀氖悄銈€(gè)人的易錯(cuò)點(diǎn)而不是通用知識(shí)點(diǎn)。6.3 復(fù)盤時(shí)最值得盯的幾類錯(cuò)誤正式賽結(jié)束之后復(fù)盤我最關(guān)注四類錯(cuò)誤運(yùn)行環(huán)境類編碼、路徑、工具版本、邏輯類重復(fù)分組、過(guò)濾順序、輸出類字段命名、文件格式、時(shí)間類某個(gè)環(huán)節(jié)超時(shí)導(dǎo)致后面?zhèn)}促。這四類錯(cuò)誤的性質(zhì)完全不一樣環(huán)境類錯(cuò)誤靠提前踩點(diǎn)比賽場(chǎng)地可以大幅減少邏輯類錯(cuò)誤靠大量練習(xí)來(lái)強(qiáng)化輸出類錯(cuò)誤靠習(xí)慣性的自查清單來(lái)兜底時(shí)間類錯(cuò)誤則需要平時(shí)就按正式賽的時(shí)長(zhǎng)做整套模擬。如果要說(shuō)一句最想告訴后來(lái)者的話這道25分的題表面上考的是工具操作實(shí)際考的是你有沒(méi)有一套穩(wěn)定可靠的工作流。工具隨時(shí)可以換數(shù)據(jù)臟的方式千奇百怪但只要你的處理流程是固定的、可重復(fù)的、每一步都留痕的遇到什么樣的臟數(shù)據(jù)都不會(huì)慌。備賽時(shí)我們習(xí)慣用同一套流程反復(fù)跑不同數(shù)據(jù)集跑到后來(lái)清洗和分析已經(jīng)不是做題而是一種自然的操作反射。到賽場(chǎng)上你會(huì)發(fā)現(xiàn)這份從容才是拿分最可靠的底氣。