2016年,深城。
實驗室的第二個週末。
小林昭頂著兩個黑眼圈,準時出現在302室。
他花了一週的課餘時間,總算把那本《統計學習方法》的前五章硬啃了下來。
雖然很多地方還是一知半解,但至少那些名詞不再像外星語了。
孫奇師兄看到他,招了招手。
“過來。”
小林昭走過去,孫奇指著自己的電腦螢幕。
“認識這是什麽嗎?”
螢幕上是一張巨大的表格,密密麻麻全是數字和一些看不懂的字元。
“資料?”小林昭試探著回答。
“這是我們上一個專案采集到的原始資料,關於城市交通流量的。”孫奇的表情很嚴肅,“周老師讓我帶你做的第一個實踐任務,就是處理這批資料。”
“怎麽處理?”小林昭有點興奮,終於要上手了。
“資料清洗。”孫奇吐出四個字。
“啊?”
“看到這些空值、異常值、還有這些格式不統一的亂碼了嗎?”孫奇用滑鼠劃拉著,“你的任務,就是把這些‘髒資料’全部找出來,然後用合理的方式填充或者刪除,最後整理成一個幹淨、規範的資料庫。”
小林昭的臉瞬間垮了下來。
他還以為能做什麽高大上的分析建模,結果就是個體力活,跟讓他去打掃衛生差不多。
“師兄,這……這也太枯燥了吧?”
“枯燥?”孫奇推了推眼鏡,鏡片後的目光透著嚴肅,“林昭,我告訴你,在資料科學這個領域,百分之八十的時間,都是在幹這種枯燥的活。模型再牛,演演算法再先進,喂給它一堆垃圾資料,出來的也隻會是垃圾結果。”
“周老師讓你從這兒開始,就是在磨你的性子。你連地基都懶得打,還想蓋摩天大樓?”
孫奇的話,讓小林昭心裏那點不切實際的幻想瞬間熄滅。
“去吧,我給你開了個最低許可權的賬戶,隻能讀,不能改。你先把所有你認為是‘髒資料’的行號和列號,記在一個txt檔案裏。今天下班前給我。”
小林昭垂頭喪氣地回到自己的座位上,開啟那個巨大的資料檔案。
他一行一行地看,眼睛都快看花了。
這批資料足足有十幾萬行,幾十個列。手動去找?找到猴年馬月去?
他煩躁地抓了抓頭發,拿出手機,準備向大林昭求救。
“哥,救命!他們讓我手動洗資料,這活兒不是人幹的!”
訊息發出去,卻遲遲沒有迴音。
小林昭泄氣地把手機扔到一邊。
看來隻能靠自己了。
他強迫自己靜下心來,盯著螢幕。
雖然過程很痛苦,但他慢慢發現了一些規律。
比如,某些列的空值特別多,某些列的數值明顯超出了正常範圍。
他一邊記錄,一邊在腦子裏思考。
手動肯定不行,效率太低了。
能不能用程式來做?
他想起了大林昭之前發給他的那些Python入門教程。
雖然他當時隻是囫圇吞棗地看了一遍,但一些基本的語法還記得。
比如,用pandas庫讀取資料,用迴圈遍曆每一行,用if語句判斷條件……
一個模糊的想法在他腦海中形成。
他開啟Python編輯器,開始磕磕絆絆地敲程式碼。
十分鍾後,第一次報錯:IndentationError。他盯著那行紅色提示看了半天,才意識到Python用縮排來區分程式碼塊,而他剛纔在if語句下麵,忘了敲那四個空格。
修好縮排,再次執行。第二次報錯:KeyError。他寫的列名“使用者ID”和表格裏的“使用者ID_1”對不上。他罵了一句,把所有的列名都改了一遍。
第三次,第四次,第五次。
紅色的報錯資訊像潮水一樣湧來,又被他一條一條地擊退。當最後一次按下執行鍵,螢幕上不再彈出紅色,而是安靜地滾動著他設定的輸出資訊時,他整個人癱在椅背上。
程式開始跑動,螢幕上快速地滾動著他設定的輸出資訊。
【發現第32行第5列存在空值】
【發現第158行第11列存在異常值:99999】
【發現第……】
成了!
小林昭激動得差點從椅子上跳起來。
雖然這個指令碼很簡陋,隻能處理幾種最簡單的“髒資料”,但它確確實實地跑起來了!
他把程式輸出的結果整理成一個txt檔案,然後走到孫奇身後。
“師兄,我弄完了。”
孫奇正戴著耳機聽音樂,聞言摘下一隻,有些驚訝地轉過頭。
“這麽快?我看看。”
他接過小林昭遞過來的U盤,開啟那個txt檔案。
當他看到裏麵羅列得整整齊齊、足足有上千行的錯誤記錄時,他愣住了。
“你……你手動找的?”他不敢相信。
“不是。”小林昭撓了撓頭,有點不好意思,“我寫了個小程式跑的。”
孫奇的目光瞬間變了。
他一把搶過U盤,找到那個名為“clean_data.py”的檔案,點開。
當他看到那段雖然稚嫩、但邏輯清晰的程式碼時,他徹底說不出話了。
他的手指在螢幕上虛點著,眼神裏滿是難以置信。
他沉默地看了足足五分鍾,然後轉過頭,眼神像是在看一個外星生物。
“你……你以前學過程式設計?”
“自學了一點點。”
“周老師……周老師他孃的真是撿到寶了。”孫奇喃喃自語,然後猛地拍了一下大腿。
“走!師兄請你吃飯!吃好的!”
……
2026年,星辰互娛。
秦詩妍拿著一份市場部剛提交的報告,走進林昭的辦公室,臉上帶著一絲困惑。
“林昭,你看一下這個。市場部根據現有的使用者資料,做了一個‘非遺宇宙’第一期內容的潛在受眾分析,預估核心使用者大概在五百萬左右。但我覺得這個數字太保守了。”
林昭接過報告,掃了一眼,便直接扔進了旁邊的碎紙機。
“這份報告,連同做這份報告的人,都可以一起畢業了。”林昭的語氣很平靜。
“為什麽?”秦詩妍不解,“他們的分析方法,是公司以前一直在用的,雖然老套,但至少不會出錯。”
“因為他們的資料來源就是一堆垃圾。”
林昭開啟自己的電腦,調出一個後台界麵。
“星辰互娛過去五年的使用者資料,從來沒有做過係統性的清洗和整理。這裏麵至少有百分之三十是僵屍使用者、營銷號,還有大量因為資料采集錯誤導致的‘噪聲’。”
“用這種垃圾資料做分析,就像在沼澤地上蓋房子,看上去有模有樣,其實一推就倒。”
秦詩妍看著他,“那你的意思是?”
“我已經讓技術部的人,花了一週時間,把整個資料庫重新清洗了一遍。”
林昭點開另一個界麵,上麵是兩張對比鮮明的使用者活躍度曲線圖。
一張是清洗前的,波動雜亂,毫無規律。
一張是清洗後的,曲線平滑,呈現出清晰的週期性規律。
“你看這裏,”林昭指著螢幕上的一個高峰,“清洗之後我們才發現,我們平台有一批非常優質的使用者,他們集中在深夜活躍,對高質量、有深度的文化內容有極強的付費意願。但這批人,在以前的分析報告裏,被當成‘異常資料’給過濾掉了。”
秦詩妍的目光驟然一亮。
“你的意思是,我們的核心使用者,比我們想象的要多得多?”
“不是多得多。”林昭靠在椅背上,看著她,“是精準得多。”
“基於這份幹淨的資料,我重新跑了一遍模型。‘非遺宇宙’的核心受眾,不是五百萬。是一千二百萬。而且他們的付費轉化率,是普通使用者的三倍以上。”
秦詩妍看著林昭,腦中有什麽東西豁然開朗。
“你之前在董事會上,自己投錢也要做這個專案,就是因為你早就看到了這些?”
林昭笑了笑,沒有承認,也沒有否認。
就在這時,林昭的手機震動了一下。
他拿起來看了一眼,是時光信使的訊息。
是小林昭發來的。
“哥,我今天用你教的Python,把師兄都鎮住了!他請我吃了頓肯德基全家桶!撐死我了!”
後麵還附了一張照片,是一個吃得隻剩骨頭的全家桶。
林昭的嘴角,不自覺地揚起一個真實的弧度。
“出息。”