白魚秀
(榆林學(xué)院 信息工程學(xué)院, 榆林 719000)
習(xí)近平在中共中央政治局第二次會議學(xué)習(xí)中強調(diào),我們應(yīng)該深入了解大數(shù)據(jù)發(fā)展,推動實施國家大數(shù)據(jù)戰(zhàn)略,加快建設(shè)數(shù)字中國。國務(wù)院印發(fā)《新一代人工智能發(fā)展規(guī)劃》,鼓勵加快推動人工智能發(fā)展[1]。全國計算機等級考試(NCRE)加入“Python語言程序設(shè)計”科目。Python應(yīng)用領(lǐng)域廣泛,市場需求不斷上漲,大型門戶網(wǎng)站積累了海量信息,提取有價值的信息,應(yīng)用于數(shù)據(jù)挖掘、海量數(shù)據(jù)分析。就業(yè)前景可觀[2],機器學(xué)習(xí)、AI工程師,搜索引擎工程師、數(shù)據(jù)挖掘/分析工程師人才緊缺。
大學(xué)教學(xué)如何與時俱進,不被時代所淘汰,是每一個高校教師值得思考的問題。程序設(shè)計語言作為計算機專業(yè)必修課程和基本技能,注重培養(yǎng)學(xué)生計算思維能力[3],用計算機解決問題的能力。
目前,普通高校都是以傳統(tǒng)的C/C++或者Java作為學(xué)生編程入門語言。雖然,C/C++和Java語言一直占據(jù)計算機編程語言數(shù)一數(shù)二的位置,但是,C/C++或者Java語言兼顧性能采用較為復(fù)雜的語法規(guī)則[4],不容易快速掌握。并且,在當(dāng)前人工智能、大數(shù)據(jù)和互聯(lián)網(wǎng)+時代,它們不在是最佳選擇,所以其教學(xué)改革勢在必行。
Python作為一種可解釋性語言,易學(xué)、易讀、易維護,相比較其他不少主流編程語言,Python容易上手[5],具有更好的可讀性,非常適合編程初學(xué)者作為入門語言。作為一種免費開源語言,擁有豐富強大的第三方類庫[6],可以高效的開發(fā)各種應(yīng)用;其擴展性、嵌入性和跨平臺性也是其它語言所不能相比擬的;并且擁有龐大的開發(fā)者社區(qū)和論壇,學(xué)習(xí)和討論知識更容易,便捷。
隨著人工智能、大數(shù)據(jù)和物聯(lián)網(wǎng)等興起,Python已成為2017年最受歡迎的人工智能編程語言。人工智能+Python已應(yīng)用于很多領(lǐng)域。谷歌無人機、小冰、IBM Waston沃森、蘋果Siri和谷歌AlphaGo(阿爾法狗)等。
TIOBE排行榜能顯示當(dāng)下最熱門、使用最多的編程語言[7]。由圖1中TIOBE排行榜中顯示,JAVA和C++熱門語言不同程度在下滑,唯獨Python不斷增長并上升到第4名的位次。2012年至2017年,Python已成為開發(fā)者使用增長最快的程序設(shè)計語言。
圖1 Python發(fā)展趨勢
Python語言明確、優(yōu)雅、簡單。它的優(yōu)點主要顯現(xiàn)在以下幾個方面:
戰(zhàn)略定位明確:簡單嚴(yán)謹,易用專業(yè),注重解決問題不是語法本身。作為一名膠水語言,可以很方便的調(diào)用其它語言編寫的功能模塊,結(jié)合形成簡單強大的新程序。
軟件質(zhì)量高:Python簡潔優(yōu)雅,注重程序的可讀性、一致性。建立了面向?qū)ο蟪绦蚓幊趟枷耄瑥亩a的可重用性、可維護性更高。
開發(fā)效率高:Python語法簡單,沒有過多的條條框框的語法規(guī)則,對程序員友好,容易上手。并且自帶的各種模塊和豐富的第三方庫,使得開發(fā)者只需要很少的代碼量就可以實現(xiàn)強大的功能。
可移植性高:Python開發(fā)環(huán)境配置簡單,Linux和mac和環(huán)境都內(nèi)置了python,程序不需要做任何改變,可以在不同平臺上直接運行。
豐富強大的庫:Python資源豐富,提供了強大的標(biāo)準(zhǔn)庫支持,包含了解決各種問題的類庫,可以很容易的完成復(fù)雜的編程問題,高效的開發(fā)各種應(yīng)用。在數(shù)據(jù)抓取、數(shù)據(jù)分析與展示等方面都擁有強大堅實的基礎(chǔ)設(shè)施,建立了良好開放的生態(tài)環(huán)境。
大數(shù)據(jù)時代面臨的首要機遇是如何分析和運用獲取到的海量數(shù)據(jù)。Python語言十分善于獲取數(shù)據(jù)、分析數(shù)據(jù)和運用數(shù)據(jù)。所以可以借助Python增強數(shù)據(jù)利用及其處理能力,提高對大數(shù)據(jù)發(fā)展規(guī)律的掌握,使得數(shù)據(jù)在各項應(yīng)用中發(fā)揮作用。
計算機程序主要是把用戶輸入按特定需求轉(zhuǎn)換為輸出的過程,輸入輸出是計算機的基本功能。
分別用C語言、Java語言和Python語言實現(xiàn)從鍵盤輸入兩個整數(shù),實現(xiàn)這兩個數(shù)的求和。實現(xiàn)代碼分別如表1,表2,表3所示。
由上比較可知,C語言極大依賴程序員的自身編程能力,JAVA語言語法冗長,體態(tài)臃腫,Python重視程序的可讀性、簡潔性和一致性,抽象化了許多內(nèi)容,讓開發(fā)者專注于業(yè)務(wù)邏輯而不是關(guān)心語法結(jié)構(gòu)細節(jié),代碼行數(shù)少,用盡量少的代碼完成了更多的工作,更有利于學(xué)生入門上手,如表4所示。
目前,微信是大家互相分享和聊天的一種生活方式。大家會通過朋友圈分享有意思的文章與自己的生活。朋友圈比較有意思的信息是各位好友的個性簽名。我們以所有好友的個性簽名為數(shù)據(jù)源,爬取獲得所有好友的個性簽名信息。
表1 C語言實現(xiàn)兩個數(shù)的求和
表2 Java語言實現(xiàn)兩個數(shù)的求和
表3 Python語言實現(xiàn)兩個數(shù)的求和
表4 C/Java語言與Python語言的比較
首先獲取數(shù)據(jù),借助Python的itchat庫對所有好友的個性簽名數(shù)據(jù)進行獲取。itchat庫很好的兼容了微信個人賬號的API接口,使我們能便捷地獲取微信的數(shù)據(jù)信息。但是由于獲得到的個性簽名數(shù)據(jù)中存在很多表情符號等非文字信息,所以需要對數(shù)據(jù)進行預(yù)處理處理,運用正則表達式替換掉無關(guān)表情和符號,最終獲得所有好友的個性簽名純文本內(nèi)容信息,代碼實現(xiàn)如表5所示。
表5 獲取朋友圈個性簽名信息
由上可見,只需要10行代碼即可完成所有好友個性簽名的數(shù)據(jù)獲取與清洗。而C/Java語言完成此操作相對困難,需要調(diào)用底層驅(qū)動程序。同樣,C/Java讀取、分析Excel數(shù)據(jù)特別復(fù)雜,而Python中有很多現(xiàn)成可以利用的數(shù)據(jù)分析庫,如Pandas等,可以很方便的讀取Excel、Csv和Sql等格式數(shù)據(jù)。并且Scikit-Learn機器學(xué)習(xí)庫支持回歸、分類、聚類等強大的數(shù)據(jù)挖掘算法,可以對獲取到的數(shù)據(jù)進行快速的數(shù)據(jù)挖掘分析。
Python提供了豐富的用戶交互界面,可以直觀的了解數(shù)據(jù)分布形態(tài)。提供了很多繪制圖形的標(biāo)準(zhǔn)庫,比如強大的可視化matplotlib庫,支持繪制散點圖、折線圖、條形圖等二維和三維圖形。程序員只需要加載、調(diào)用,即可實現(xiàn)現(xiàn)有庫、函數(shù)功能的調(diào)用,省去自己編寫大量復(fù)雜底層代碼的過程。
我們根據(jù)上一步獲得的個性簽名信息數(shù)據(jù),繪制微信好友個性簽名詞云圖。詞云圖,又稱為文字云,是對文本中出現(xiàn)頻率較高的“關(guān)鍵詞”的可視化突出展示。首先把獲取到的數(shù)據(jù)拼接成為一個字符串,然后進行jieba分詞,最后調(diào)用wordcloud庫函數(shù)繪制相應(yīng)的詞云圖,最終所生成詞云圖如圖2所示。
圖2 朋友圈詞云圖
如表6所示。
此外,我們可以根據(jù)自己的興趣,獲得朋友圈其它信息,例如性別、地區(qū)等信息,分析微信好友男女比例和地區(qū)分布等并進行圖形展示。
表6 朋友圈個性簽名詞云圖
Python有效的結(jié)合了高性能與編寫程序簡單有趣的特色。在數(shù)據(jù)輸入輸出、數(shù)據(jù)分析和數(shù)據(jù)可視化方面,用較少的代碼快速完成某些復(fù)雜的實際應(yīng)用,可以大大的提高學(xué)生的學(xué)習(xí)興趣、熱情,從而對編寫程序產(chǎn)生樂趣,為經(jīng)后學(xué)習(xí)其它程序設(shè)計語言奠定基礎(chǔ)。