丁德武,張 鵾,吳志男,王美能
(宜春學院 數(shù)學與計算機科學學院,江西 宜春 336000)
“大數(shù)據(jù)”時代已經(jīng)到來,在互聯(lián)網(wǎng)、金融、生物等領域中基于數(shù)據(jù)分析來發(fā)現(xiàn)問題,并作出科學、客觀的決策越來越重要。根據(jù)NewVantage Partners[1]的一項調(diào)研,幾乎全部(99 %)受訪企業(yè)都對數(shù)據(jù)技術做了不同層度的投入,其中近一半的企業(yè)進行數(shù)據(jù)驅(qū)動的創(chuàng)新或利用數(shù)據(jù)分析來提升競爭力。隨著企業(yè)對“大數(shù)據(jù)”越來越重視,“大數(shù)據(jù)”人才的需求將會越來越大。近年來,國內(nèi)高校相繼開設了“大數(shù)據(jù)”專業(yè),進行“大數(shù)據(jù)”人才培養(yǎng)。2016年,北京大學等3所高校首批獲教育部批準,設立了“數(shù)據(jù)科學與大數(shù)據(jù)技術”本科專業(yè)。截至2021年2月,全國前后六批、累計680余所高校獲批、設立了該專業(yè)。我院也于2019年獲批、設立了“數(shù)據(jù)科學與大數(shù)據(jù)技術”本科專業(yè)。
然而,由于“大數(shù)據(jù)”專業(yè)是一個全新的專業(yè),培養(yǎng)方案的研究尚在“初級階段”,存在培養(yǎng)目標不明確、課程體系不合理等各種問題。[2-3]加上“大數(shù)據(jù)”分析除了需要計算機專業(yè)知識,還需要數(shù)學、統(tǒng)計學基礎,以及一定的業(yè)務知識,相關課程的開設和教學難度也比較大。目前,我院“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析類課程教學存在的突出問題是:課程之間往往“各自為政”“貪多求全”,不同課程的內(nèi)容在一定程度上存在重復與交叉。同時,由于“貪多求全”,這些課程的教學內(nèi)容又往往過多,很容易出現(xiàn)趕進度、重理論、輕實踐等現(xiàn)象,導致學生缺乏獨立分析、解決實際問題的能力,難以達到企業(yè)對數(shù)據(jù)分析人才的要求。因此,對“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析類課程的教學改革勢在必行。
目前,國內(nèi)外高校已開展了多種新型“大數(shù)據(jù)”專業(yè)課程教學模式,如運用企業(yè)案例、增設項目實戰(zhàn)、建立興趣小組、強化校企合作等。[4-5]然而,這些方法大多針對具體的課程;作為具體課程常規(guī)教學的輔助方法,它們非常有效,但卻很難用來協(xié)調(diào)不同課程之間的課程銜接關系。
本研究中,我們通過構(gòu)建課程群來幫助協(xié)調(diào)多門課程。這里,課程群是指專業(yè)課程體系中用來負擔某類功能的幾門有機課程體系。[6]這種基于知識體系構(gòu)建的課程群通常具有如下優(yōu)勢:
(1)完善知識體系,適應時代要求。傳統(tǒng)的課程體系往往“各自為政”“貪多求全”,在授課學時有限的情況下,往往只能側(cè)重于概念與原理的簡單介紹。模塊化的課程群建設則以實際需求為導向,圍繞各個任務模塊開展教學工作,這不僅有助于知識體系的完善,也更能適應“新工科”的發(fā)展要求。此外,征服一個個課程模塊的成就感,還可以有效提高學生的學習積極性。
(2)促進知識融合,提升知識價值。通過課程群建設,可以逐步引導學生聚合知識點、形成知識鏈、構(gòu)建知識網(wǎng),可以有效培養(yǎng)學生綜合運用所學知識分析問題和解決問題的能力,從而提升知識的價值創(chuàng)造。
(3)加強理實結(jié)合,促進校企合作。模塊化課程群建設的改革思路,強化了理論聯(lián)系實際,契合了企業(yè)對數(shù)據(jù)分析人才的需求。合理選擇實訓項目,能有效促進知識向技能的轉(zhuǎn)化,實現(xiàn)學校教育與企業(yè)人才需求的高效對接。
綜上,課程群的構(gòu)建不僅可以解決不同課程內(nèi)容存在重復與交叉的問題,還將有助于培養(yǎng)學生分析和解決實際問題的能力,激發(fā)自主創(chuàng)新能力,提升應用技術能力。因此,我們擬通過課程群的建設來改革“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析類課程的教學。
總體而言,我們根據(jù)崗位能力需求對專業(yè)能力進行分解,特別是圍繞數(shù)據(jù)挖掘與數(shù)據(jù)分析全過程的各個任務模塊,來開展“大數(shù)據(jù)”專業(yè)的數(shù)據(jù)分析課程群建設。
首先,根據(jù)崗位需求對地方院?!按髷?shù)據(jù)”專業(yè)學生所需要的核心能力進行分析。“地方高校要對區(qū)域經(jīng)濟發(fā)展和產(chǎn)業(yè)轉(zhuǎn)型升級發(fā)揮支撐作用”是“新工科”建設(復旦共識)的一項重要內(nèi)容。[7]因而,結(jié)合地方院校的人才培養(yǎng)目標和辦學定位,以崗位需求和崗位能力要求為導向,厘清地方院?!按髷?shù)據(jù)”專業(yè)學生所需要的核心能力是“新工科”背景下人才培養(yǎng)的時代要求,也是本研究能夠達到預期目標的首要前提。
其次,圍繞這些核心能力提出了一種適合應用型“大數(shù)據(jù)”人才培養(yǎng)的課程群組成原則。合理的規(guī)劃課程群組成是“新工科”背景下課程體系建設的一個重要方向,[8]也是本研究能夠達到預期目標的根本保證。我們以企業(yè)的實際需求為導向,圍繞數(shù)據(jù)挖掘與數(shù)據(jù)分析全過程的各個任務模塊展開。通過制定更合理的培養(yǎng)目標、優(yōu)化課程體系,來構(gòu)建獨立的課程模塊,進而避免原課程體系中各課程之間的“各自為政”問題??傮w而言,課程模塊的設置遵循“以實際應用為導向,以能力建設為目標”的基本原則。
第三,依據(jù)《工程教育專業(yè)認證標準》,進一步探索課程群的建設標準和教育理念。這就是說,我們以《工程教育專業(yè)認證標準》為指導,在正確理解“標準”對計算機類專業(yè)課程體系各項要求的基礎上,對“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析課程群的設置及教學內(nèi)容優(yōu)化進行探索與實踐,并落實在教育教學的各個環(huán)節(jié),主要包括:教學團隊,課堂教學,課程考核等。同時,由于思政教育是實現(xiàn)“立德樹人”的一個重要途徑,也是高等教育的新時代要求。[9]我們還將找準各個課程模塊與思政教育的結(jié)合點,將課程思政的理念融入課程群建設。
目前,“大數(shù)據(jù)”專業(yè)的人才培養(yǎng)一般可分為三類:(1)大數(shù)據(jù)分析理論,重點學習大數(shù)據(jù)挖掘、分析和建模的基礎理論;(2)大數(shù)據(jù)開發(fā)運維,重點學習大數(shù)據(jù)領域軟件的開發(fā)、使用和運維方面的知識;(3)大數(shù)據(jù)應用技術,重點學習大數(shù)據(jù)技術在各行各業(yè)的應用,如金融大數(shù)據(jù)分析、生物醫(yī)藥大數(shù)據(jù)分析,等等。[10]
一般認為,地方院校的“大數(shù)據(jù)”專業(yè)應當定位于應用型“大數(shù)據(jù)”人才的培養(yǎng),基礎崗位一般為大數(shù)據(jù)開發(fā)工程師和應用數(shù)據(jù)分析師。因而,數(shù)據(jù)分析課程群建設應主要圍繞應用型“數(shù)據(jù)分析”崗位所需要的核心技能開展。這類崗位的主要崗位職責是“具備行業(yè)應用領域知識,提供基于數(shù)據(jù)挖掘分析的戰(zhàn)略決策”,對應的“大數(shù)據(jù)分析”核心技術知識通常應至少包括數(shù)據(jù)采集、數(shù)據(jù)預處理、數(shù)據(jù)存儲與管理、數(shù)據(jù)分析與挖掘,以及數(shù)據(jù)可視化等五大類別。
因此,我們在新一版的培養(yǎng)計劃中調(diào)整了相關課程的安排,形成了以上述討論為基礎的“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析課程群。整個課程群共建設了5門“數(shù)據(jù)分析類”課程,分別是“Python程序設計”“數(shù)據(jù)倉庫與數(shù)據(jù)挖掘”“機器學習”“數(shù)據(jù)采集與預處理”以及“大數(shù)據(jù)可視化”,課程詳細信息如表1所示。課程群以Python語言為基礎,所以在第三學期首先開設了“Python程序設計”。從后續(xù)課程的名稱可以看出這幾門課大多負責1-2個“數(shù)據(jù)分析”核心技能,只是“數(shù)據(jù)倉庫與數(shù)據(jù)挖掘”和“機器學習”這兩門課有所交叉,它們對應數(shù)據(jù)存儲與管理、數(shù)據(jù)分析與挖掘這兩大類別。其中,前者除了介紹數(shù)據(jù)存儲與管理方面的知識,還涉及數(shù)據(jù)挖掘的基礎理論,后者則側(cè)重介紹常用數(shù)據(jù)挖掘與機器學習方法的實現(xiàn)。
表1 宜春學院“大數(shù)據(jù)”專業(yè)數(shù)據(jù)分析課程群
在教育教學實踐方面,我們已經(jīng)組建了“數(shù)據(jù)分析類”課程校級教學團隊?!癙ython程序設計”“數(shù)據(jù)倉庫與數(shù)據(jù)挖掘”“機器學習”“數(shù)據(jù)采集與預處理”“大數(shù)據(jù)可視化”等課程建設都有老師分工負責。
此外,為了進一步加強課程群中各門課程之間的耦合,我們最初擬針對2-3個特定行業(yè)的實際數(shù)據(jù)分析任務來設計聚合這幾門課程的教學案例??紤]到“地方高校要對區(qū)域經(jīng)濟發(fā)展和產(chǎn)業(yè)轉(zhuǎn)型升級發(fā)揮支撐作用”這一“新工科”建設(復旦共識)重要任務,我們結(jié)合了宜春市中醫(yī)藥產(chǎn)業(yè)的地方特色和我院生物、藥學方面的優(yōu)勢學科,首先在這些課程中融入了生物學領域的實際案例,并最終增設了“生物信息學導論”課程來系統(tǒng)地介紹數(shù)據(jù)分析方法與生物醫(yī)藥問題之間的關聯(lián),以期更好地融入生物醫(yī)藥特色。該課程由團隊全體教師聯(lián)合授課。
案例教學法是圍繞一定的教學目標將真實需求進行典型化處理形成教學實例,是目前最有效的教學手段之一。這里,我們主要介紹“Python程序設計”和“數(shù)據(jù)采集與預處理”課程中使用的兩個生物學領域的教學案例。
案例1 從字符串處理到正則表達式引入的教學案例設計
字符串處理與正則表達式是課程群第一門課程“Python程序設計”中的教學內(nèi)容。在講解完字符串處理函數(shù)之后,我們先通過血紅素結(jié)合位點“CXXCH”的提取這一案例進行練習,進而過渡到正則表達式部分。這里,“CXXCH”是血紅素蛋白中用于結(jié)合血紅素的氨基酸基序(其中:“C”代表半胱氨酸,“H”代表組氨酸,“X”則表示任意氨基酸),如圖1A所示。本案例,我們共提供了40余個細胞色素c文件,如圖1B所示。
圖1 教學案例“血紅素結(jié)合位點CXXCH的提取”引入示意圖(A)“CXXCH”圖示,(B)部分案例文件截圖展示。
我們先使用其中一個文件(如細胞色素c MtrA)為例進行說明,其氨基酸序列為:MKKILLFKLIFISAFCLSSLTIAAENLESLLIKKFEEKQYSKSGADTCLTCHKKDEKVSSFFNSAHGISNQKGPMAGLQCETCHGPQGKHRGKNEPMITFGEQGNIDINKQNGICLSCHKNEMQSDWHNAAHQQQACSSCHNIHAEVDPILANAVSQNKVCADCHQAESHQTLMRSSHPLTNGQMTCTACHGAHGTINDVDLIKNNINQTCYTCHADKRGPLLWEHAPVVDDCTHCHNAHGSVNDNLLKTRAPLLCQQCHNGNPHAAVDQGIAGTNVFNSSGSCLNCHNQIHGSNHPSGNKLLK,我們將此氨基酸序列存儲到字符串變量mtrA中。
(1)字符串處理
由于“CXXCH”中的“X”代表任意氨基酸,從字符串處理的角度,最容易想到的是先找出1個“CH”的位置。這可以使用字符串函數(shù)find()完成,即:
mtrA.find(‘CH’),得到結(jié)果51,說明子串“CH”是從字符串mtrA的51號位置開始。
隨后,可以使用字符串切片方法簡單地切出第一個基序,即:
mtrA[mtrA.find(‘CH’)-3:mtrA.find(‘CH’)+2],得到結(jié)果“CLTCH”。
接下來,分析討論并引導學生自行編寫循環(huán)語句,得到全部的“CXXCH”基序。
此后,進一步分析討論代碼,發(fā)現(xiàn)存在某些問題,例如:我們只是查找了“CH”子串,并通過切片的方式切出了該子串及其前面的三個字符,理論上只是得到了一系列“XXXCH”子串,這并不能保證第一個字符是“C”。學生隨后又增加了判斷條件,完成了相關任務。
通常,在實際教學過程中,我們還會請2-3位同學來介紹他們自己設計的提取方法。
(2)正則表達式
在使用字符串函數(shù)完成任務后,我們開始過渡到正則表達式。首先,簡單介紹正則表達式的基本概念,隨后給出使用正則表達式處理此問題的代碼,如:
re.findall(‘C[A-Z][A-Z]CH’,mtrA),或者re.findall(‘C[A-Z]{2}CH’,mtrA)
即可得到全部“CXXCH”,結(jié)果為列表:[‘CLTCH’,‘CETCH’,‘CLSCH’,‘CSSCH’,‘CADCH’,‘CTACH’,‘CYTCH’,‘CTHCH’,‘CQQCH’,‘CLNCH’]。
從學生的課堂表現(xiàn)(聽課與自行實踐練習)來看,這種對比式的案例教學能引起學生對正則表達式的強烈興趣。
(3)課外延伸
回到問題本身,強調(diào)本案例的完整任務是處理“cytc.zip”文件中的40余個細胞色素c文件。因此,還需要學生使用“zipfile”模塊讀取文件包、獲取其中的所有細胞色素c文件并分別處理,由學生課外自主完成。
案例2 用Pandas進行蛋白質(zhì)相互作用數(shù)據(jù)篩選的教學案例設計
Pandas數(shù)據(jù)處理是課程群中課程“數(shù)據(jù)采集與預處理”的教學內(nèi)容。我們先使用圖片對Pandas數(shù)據(jù)結(jié)構(gòu)和Numpy多維數(shù)組做了類比,在介紹了常用數(shù)據(jù)結(jié)構(gòu)(特別是數(shù)據(jù)表)的基本概念和常用屬性之后,我們安排了蛋白質(zhì)相互作用數(shù)據(jù)篩選這樣一個教學案例來講解數(shù)據(jù)表的存載、索引和切片。
此前,我們在“Python程序設計”課程的“列表”部分用過一個只有10余條邊的小型網(wǎng)絡實例,在該課程的“模塊與包”部分又介紹過網(wǎng)絡分析工具包igraph與networkx。因此,在簡要回顧這些內(nèi)容后,我們使用圖2引入本例,并帶著學生們一起構(gòu)造了一個蛋白質(zhì)相互作用網(wǎng)絡。
圖2 教學案例“用Pandas進行蛋白質(zhì)相互作用數(shù)據(jù)篩選”引入示意圖
圖3 蛋白質(zhì)相互作用數(shù)據(jù)的前五行
(1)數(shù)據(jù)讀取
首先,簡要介紹Pandas中用于csv、excel等常用數(shù)據(jù)文件存取的函數(shù)pd.read_xxx和df.to_xxx(df應為某個具體的數(shù)據(jù)框?qū)ο?。然后,讀取我們從STRING數(shù)據(jù)庫下載的一個蛋白質(zhì)相互作用信息文件“211586.protein.links.detailed.v10.txt”。
我們先使用pd.read_csv(“211586.protein.links.
detailed.v10.txt”)函數(shù)讀取該文件;在得到錯誤結(jié)果后,引導學生通過幫助函數(shù)help()來查看pd.read_csv()函數(shù)的參數(shù)說明,并以默認參數(shù)sep=‘,’與header=‘infer’為例講解了如何結(jié)合實際數(shù)據(jù)來進行參數(shù)設置,并最終將語句修改為:
son=pd.read_csv(“211586.protein.links.detailed.v10.txt”,sep=“ ”)
至此,數(shù)據(jù)讀取介紹完畢。
隨后,使用len(son)可知共有705112行數(shù)據(jù),我們隨后使用語句son.head()來查看son對象,結(jié)果如下:
根據(jù)STRING數(shù)據(jù)庫的說明,前兩列(protein1、protein2)分別表示兩個蛋白質(zhì),接下來的neighborhood、fusion、cooccurence、coexpression、experimental、database與textmining等七列是使用了不同的打分方法對這兩個蛋白質(zhì)之間存在相互作用的可能性進行打分,combined_score這一列則是綜合打分結(jié)果。
(2)切片
在索引與切片方面,一般主要介紹索引方法at與iat、切片方法loc與iloc等幾個方法以及邏輯索引方法。
通過上面的圖片可以看出:許多分數(shù)較低(甚至為0),這說明這些相互作用的可靠性較低。我們需要先篩選出比較可靠的蛋白質(zhì)相互作用對,如:總分“較高的”(combined_score得分大于等于700)并且具有實驗證據(jù)的(experimental得分大于0)。這個任務可以用邏輯索引來完成,代碼如下:
son700=son[(son[‘experimental’]>0)&(son[‘combined_score’]>=700)]
隨后,可以使用loc或iloc切片出前兩列,代碼分別為:
ppi700=son700.loc[:,(‘protein1’,‘protein2’)],或者ppi700=son700.iloc[:,0:2]
接下來,使用語句len(ppi700)可知一共篩選得到了13446條符合條件的蛋白質(zhì)相互作用數(shù)據(jù),不到原始數(shù)據(jù)的2 %。
(3)索引與元素操作
在得到的ppi700對象中,我們需要進一步去除所有元素中代表物種信息的“211586.”。
首先,我們可以使用at或iat索引一個元素來進行處理,如:
a_protein=ppi700.at[121,‘protein1’],或者a_protein=ppi700.iat[0,0]
接下來,簡單復習并使用字符串處理函數(shù)處理得到的元素,代碼可以為:
a_protein.replace(“211586.”,“”),或者a_protein.split(‘.’)[1]。
隨后,我們討論如何去除ppi700對象中所有元素的“211586.”,主要介紹如下三種方法:
方法一:兩層循環(huán),此方法最容易想到。
for i in range(len(ppi700)):
for j in range(2):
ppi700.iat[i,j]=ppi700.iat[i,j].replace(“211586.”,“”)
ppi700.head()#用于查看處理后數(shù)據(jù)的前五行。
方法二:兩次map,此方法比較容易想到,涉及map與lambda函數(shù)。
ppi700[‘protein1’]=ppi700[‘protein1’].map(lambda s:s.replace(“211586.”,“”))
ppi700[‘protein2’]=ppi700[‘protein2’].map(lambda s:s.replace(“211586.”,“”))
方法三:一次applymap,此方法由Pandas庫提供。
ppi700.applymap(lambda s:s.replace(“211586.”,“”))
(4)保存數(shù)據(jù)
根據(jù)前面介紹的df.to_xxx系列函數(shù),可以使用ppi700.to_csv(“ppi700.txt”,sep=“ ”,index=False)語句將結(jié)果保存下來。
至此,我們通過對蛋白質(zhì)相互作用數(shù)據(jù)的篩選這一任務完成了對數(shù)據(jù)表的存載、索引和切片等內(nèi)容的講解。
(5)課外延伸
要求學生使用在“Python程序設計”課程中介紹的網(wǎng)絡分析工具包igraph或者networkx讀入文件“ppi700.txt”并轉(zhuǎn)換為網(wǎng)絡對象(提示:亦可直接將數(shù)據(jù)框?qū)ο髉pi700轉(zhuǎn)換為網(wǎng)絡對象),或者將該文件導入到網(wǎng)絡分析工具如Pajek或者Cytoscape中(圖2是使用Cytoscape的網(wǎng)絡展示)做進一步探索性學習、研究,由學生課外自主完成。
在獲批、設立“數(shù)據(jù)科學與大數(shù)據(jù)技術”專業(yè)之前,我院對“信息與計算科學”和“軟件工程”專業(yè)做了“大數(shù)據(jù)”方向改造。近年來,這些專業(yè)的教學實踐表明數(shù)據(jù)分析類課程在一定程度上存在重復與交叉等問題。
為使學生得到系統(tǒng)的數(shù)據(jù)分析與數(shù)據(jù)挖掘訓練,我們以崗位核心能力需求為導向開展了數(shù)據(jù)分析課程群的建設。課程群內(nèi)課程的設置涵蓋了“大數(shù)據(jù)”應用的各個環(huán)節(jié),符合“大數(shù)據(jù)”應用的真實場景。此外,我們還結(jié)合宜春市中醫(yī)藥產(chǎn)業(yè)的地方特色和我院生物、藥學方面的優(yōu)勢學科,介紹了在這些課程中融入生物學領域數(shù)據(jù)分析的實際教學案例。通過在我院“數(shù)據(jù)科學與大數(shù)據(jù)技術”專業(yè)的初步實踐表明,課程群的建設與相關課程的開設不僅更能適應企業(yè)的要求,還能有效地提高學生的學習積極性和實踐動手能力。