999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向Python應用的大學教學改革初探

2017-09-28 21:10:58秦科劉貴松
計算機教育 2017年9期
關鍵詞:教學改革實驗教學

秦科++劉貴松

摘 要:數據分析與處理是計算機應用面臨的一項重要任務。針對國內大學的程序設計教學與數據分析存在脫節這一現象,分析Python自身的特點和Python計算生態的發展現狀,結合工程項目中的應用經驗,提出面向數據分析的Python程序設計語言教學改革方法并以案例說明。

關鍵詞:Python;教學改革;實驗教學;計算生態

0 引 言

隨著時代的發展,構建在互聯網生態模式之上的云計算、大數據、人工智能等新技術,正滲透到每一個行業,引發產業生產、服務模式的變革,并且已經取得一系列重要成果。在此背景下,大學教學如何跟上時代步伐,是值得每一個高校教師深入思考的問題。程序設計作為計算機專業大學生的必修課程和必須掌握的基本技能,其教學改革在新時代下尤顯必要。

傳統的大學教學中,一直都以C/C++或Java作為教學語言。誠然,C/C++和Java是當今使用人數最多的語言,但在“互聯網+”時代,面對大數據分析時,特別是面對數據采集、仿真建模、結果驗證與數據可視化時,他們就不再是最佳選擇。

Python作為一種解釋型超高級語言,具備交互式、可移植、面向對象的特點。它功能強大,適用于多種操作系統,有完善豐富的工具包,正在得到越來越多的應用,而且越來越被重視。2017年4月,北京理工大學計算機學院和高等教育出版社聯合承辦了“第一屆高等學校Python語言及計算生態教學研討會”,提出了計算生態的概念[1],大力推動了Python教學。在此背景下,根據我們在Python教學和科研中的應用經驗,對如何進行基于Python計算生態的教學改革進行探討。

1 Python語言的興起與優勢

從20世紀中期到今天,短短的70年間,電子計算機經歷了飛速的發展,出現了許多不同的程序設計語言,例如Pascal、Fortran、C、C++、Java、PHP、C#等,這些不同的語言,都體現了不同的設計哲學,也反映了不同的時代特點。

然而,每種程序設計語言都有其局限性。Python的設計者Guido von Rossum希望有一種語言,既具有C方便地調用計算機功能接口的能力,又可以像一些腳本語言一樣輕松地編程。Python正是在這種背景下被創造出來。

同C/C++和Java等語言相比,Python有以下優勢:

(1)簡單易學。Python是一種代表簡單主義思想的語言,語法簡單,學習起來容易上手。這使學生能夠專注于解決問題而不是學習語言本身。

(2)解釋性。Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。這使得Python更加簡單,更易于移植。

(3)面向對象。Python既支持面向過程的編程,也支持面向對象的編程。

(4)可擴展性。為了提升運行效率,可以采用C/C++來編寫關鍵代碼,然后在Python程序中使用它們。

(5)混合編程。Python被稱為膠水語言,是由于可以很容易地將Python與其他語言進行混合編程。這樣方便地利用已有的各種工具包,提高開發效率。

(6)豐富的庫。Python有強大的標準庫,并且Python的生態系統開始拓展到第三方包,例如用于Web框架的web.py ,用于科學計算的numpy,以及用于數據可視化的matplotlib等。

Python作為一種跨平臺編程語言,已經被移植在以Linux、Windows、Mac、Android為代表的許多平臺上。由于Python的開放性,有豐富的來自開源社區的成熟庫支持,從而可以基于Python完成各種工作,例如數據采集(如網絡爬蟲)、圖像處理、機器學習、科學計算等。

2 針對Python的應用支持與國內外課程建設情況

正由于Python具有上述優點,它獲得了業界的廣泛支持。例如在Google公司,Python是繼C++和Java之后,使用率排名第三的編程語言,使用Python的開發團隊也是Google的第三大研發部門。

(1)Tensorflow:TensorFlow是由Google Brain小組開發的用于機器學習和深度神經網絡的工具。據統計,Tensorflow是目前使用人數最多的開源深度學習框架[2]。TensorFlow本身是使用C++實現的,然后用Python封裝。Tensorflow可以根據用戶給出的所有指令創建一個計算圖,該圖被內部優化和編譯成可執行的C++代碼。這樣Tensorflow就可以利用Python 帶來的開發速度和C++帶來的執行速度。

(2)Google App Engine:Google App Engine(GAE),是谷歌推出的云平臺,它完全把CPU、內存等硬件基礎設施抽象化,這樣只需要關注代碼的編寫,不需要關注硬件、操作系統或者物理位置。Python是GAE最早支持編程的語言之一,任何使用Python編寫的程序,都可以配合Google Python API,很方便地在GAE上創建、部署、運行Python程序。

(3)Caffe(Convolutional Architecture for Fast Feature Embedding):Caffe是由Berkeley AI Research(BAIR)和Berkeley Vision and Learning Center (BVLC)社區貢獻者開發的另一個深度學習框架。同Tensorflow一樣,Caffe也是采用C++進行編寫,然后提供Python封裝,從而既可以利用C++的高執行效率,也可享受Python的高開發效率。

(4)在好萊塢,工業光魔公司(Industrial Light) 采用Python制作商業動畫,在“阿貝斯(Abyss)”“星球之旅(Star Trek)”“Indiana Jones”等超級大片中驚艷登場。endprint

(5)ERP和CRM軟件的開發也開始基于Python完成;Red Hat曾用Python和Tk一起成功開發配置和管理操作系統的可視界面,整個系統可以全面控制Linux操作系統,并根據用戶選擇對配置文件作自動更新。

正由于Python是受到業界的歡迎,國外很多高校(如麻省理工學院、斯坦福大學、加州大學洛杉磯分校等)已經用Python作為程序設計語言的教學對象。在Coursera等在線教育平臺上,可以發現有來自密歇根大學、萊斯大學、約翰霍普金斯大學等眾多高校的Python課程;國內南京大學張莉老師的課程也在其中。然而國內這方面的工作做得還遠遠不夠。截至2015年,我國開設Python語言教學的高校不超過10所[3]。目前在國內大力推動Python教學改革的主要有北京理工大學嵩天老師等人,已編著并出版相應的大學教材[4],受到廣泛歡迎。哈爾濱工業大學車萬翔老師等人分析了C語言作為入門語言的不足和Python作為入門語言的優勢,闡述了計算機專業高級語言程序設計課程的改革方案和實施效果[5]。南京大學張莉老師發表了《基于MOOC的“用Python玩轉數據”翻轉課堂實踐與研究》,研究證明:采用Python教學可以較好地提高學生的主動學習能力、學習興趣和熱情以及問題求解能力[6]。

3 基于Python的教學科研應用改革案例

3.1 輸入輸出

輸入輸出(I/O)是每個程序都必須具備的重要功能。常見的I/O可以分為3類:標準I/O(終端打印等)、文件I/O和網絡I/O。以終端I/O為例:

/* Basic I/O in C */

#include

int main()

{

char name[20]; /* char數組,保存第一行輸入,作為名字輸出 */

scanf("%s", name); /*讀取第一行輸入 */

printf("Hello %s\n", name);

return 0;

}

以上用C語言編寫的有效代碼共計8行,輸入輸出都采用標準庫函數。由于C語言本身設計方面的缺陷(如果第一行輸入超出char數組大小),可能導致嚴重的緩沖區溢出問題。針對這一問題,C++對數組越界進行了保護,從而提高系統安全性。

如果采用Java實現,則有效代碼共10行。由于Java的面向對象編程思想,下面這個示例程序中多了很多對象構造的流程,引用的庫看起來也相對較多,如下所示。我們只需要對這段代碼進行稍微修改,就可以實現網絡I/O和文件I/O。例如,替換“System.in”,就能夠實現對文件或者網絡流讀取。將“Reader”和“InputStream”替換,就能夠實現寫入。

/ * Basic I/O in Java */

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class HelloWorld {

public static void main(String[] args) throws Exception { /*所有Java程序的入口函數 */

/* 新建輸入對象,用來讀取標準輸入。其中對象構造有嵌套*/

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

String name = reader.readLine(); /* 讀取第一行輸入 */

System.out.printf("Hello %s\n", name);

}

}

相比之下,基于Python的代碼則非常短小簡潔:

/* Basic I/O in Python */

import sys

name = sys.stdin.readline() /* 讀取第一行輸入 */

print("Hello " + name)

有效代碼僅僅只有3行!同樣,替換其中的“sys.stdin”可以實現對文件讀取。對于動態類型的Python來說,所有的變量都不需要繁復的聲明,直接用就可以,再加上解釋執行的特點,無需定義入口函數即可運行。

以上是對C/C++、Java、Python在基本終端I/O操作上的比較,當推廣到文件I/O和網絡I/O后,Python的優勢會更突出,詳見表1。

3.2 數據操作

數據處理是大數據時代我們面臨的首要問題。然而,由于信息化系統建設過程中,數據可能以不同的結構存在,可能是純文本文件、CSV格式,也可能是Excel格式,或者是各種不同廠商的數據庫格式。

當然,可以采用C++或Java來讀取各種異構數據源,但過程相當繁瑣,需要利用各種底層驅動,甚至是一些商業化組件。以Excel文件讀取為例,為了處理Excel數據,C/C++代碼需要用到libxl商業庫,而Java也需要用到Apache POI開源庫。而利用Python對Excel文件進行讀取則需要利用Pandas開源數據處理分析庫,示例代碼如下:

/* Read Excel in Python */

import pandas

df = pandas.read_excel('sample.xls')

print df.columns /* 輸出列名 */

values = df['列名'].values /* 獲取某一列的所有數據 */

FORMAT = ['列名1', '列名2', '列名3'] /* 獲取指定列組成的數據幀 */

df_selected = df[FORMAT]

總的來說,在數據庫操作方面,C++、Java和Python的支持都非常好。C++和Java都為SQL提供了標準的連接、驅動管理類,不同的數據庫只需要加載不同的驅動就可以。Java對數據庫有比較好的語言級別支持,相應的驅動也比較豐富。Python也提供語言級別的支持,同時第三方庫十分豐富,甚至一種數據庫有多個不同的連接庫。另外值得一提的是, 盡管當前很多流行的分布式大數據平臺及分布式數據庫使用Java編寫,但利用Python同樣能夠方便地基于第三方庫實現操作Hbase、Hive以及其他非關系數據庫,如Mongodb、Redis等,這種特點是C/C++不能比擬的。表2為Python與C++、Java在數據庫操作上的比較。

由于Python對各種文件和數據庫的支持都非常好,它十分適合編寫數據庫之間,數據庫與文件之間相互導入導出數據的腳本,是大數據處理的首選語言。

3.3 數據可視化

豐富的可視化數據圖形能夠更好地對數據進行展示。利用數據可視化,可方便分析人員從宏觀上了解數據的形態和分布,或者進行最后的結果展示。

Python提供了豐富的數據可視化工具,如pandas、Seaborn、Bokeh、matplotlib等。下面以matplotlib為例說明如何利用Python完成數據繪圖與可視化。

假定我們要展現的數據用CSV格式保存,內容見表3。目標是基于matplotlib進行直觀的數據總體分布展示,例如利用直方圖統計年齡分布、利用箱體圖展示薪資水平、利用散點圖繪制年齡與收入的相關關系。完整代碼如下:

import matplotlib.pyplot as plt

import pandas as pd

df = pd.read_csv("example.csv") /* 讀取數據 */

fig = plt.figure()

ax1 = fig.add_subplot(1,4,1) /* 定義展示布局 */

ax1.hist(df["Age"], bins = 5) /* 定義直方圖 */

plt.axis([20,45,0,5])

plt.title("Age distribution")

plt.xlabel("Age")

plt.ylabel("Employee")

plt.show()

ax2 = fig.add_subplot(1,4,2) /* 確定圖在畫布中的位置 */

ax2.boxplot(df["Age"]) /* 定義箱線圖 */

ax3 = fig.add_subplot(1,4,3)

ax3.bar(df["Age"],df["Income"]) /* 定義條形圖 */

ax3.set_title("Income distribution")

ax3.set_xlabel("Age")

ax3.set_ylabel("Income")

ax4 = fig.add_subplot(1,4,4)

ax4.scatter(df["Age"],df["Income"]) /* 定義散點圖 */

ax4.set_title("Income distribution")

ax4.set_xlabel("Age")

ax4.set_ylabel("Income")

plt.show()

得到的可視化效果如圖1所示。

Python的開放性還表現為利用支持庫,實現如圖1所示的各類統計效果和復雜的展示(如地圖、熱力圖以及復雜網絡等)。此外,除了構建在Python之上的原生庫,還有大量其他的數據可視化工具包(如基于Javascript的Plot.ly、百度的Echart等),這些工具包同時也提供Python的調用封裝,豐富了基于Python的可視化效果,體現了強大的Python計算生態。

3.4 圖像處理與深度神經網絡

深度學習的出現點燃了研究者對神經網絡和機器學習的研究熱情,特別是基于Google Tensorflow的AlphaGo接連擊敗世界圍棋冠軍,更加吸引了人們對深度學習的關注。在深度學習領域,很多優秀的開源平臺與框架(如Tensorflow、Caffe、Theano、MXNet等)都提供Python接口。這也從側面反映出Python計算生態已經建立。下面以Tensorflow提供的Python接口為例,介紹Python在圖像處理與深度神經網絡方面的應用。

卷積神經網絡是深度學習的一個重要模型。Tensorflow已經屏蔽了關于卷積神經網絡的具體結構,如神經元函數、拓撲連接狀態等。程序員只需要通過參數指定,就能完成網絡模型的設計,例如

conv1 = tf.layers.conv2d(inputs=input_layer,filters=32,kernel_size=[5, 5], padding="same",activation=tf.nn.relu)

pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

通過設置輸入層ID、激活函數、padding方法、核大小等參數,就可以唯一確定輸入層、卷積層、池化層,再通過調整參數并選擇一定的學習算法,結合pillow、scikit-image等基于Python的圖像處理工具包,從而可以利用深度網絡自動完成特征學習,完成模式識別或圖像分類工作。

4 結 語

每一種程序設計語言的發展都與時代背景密切相關。Python作為一種開放性語言,具有簡潔高效的特點,并且擁有豐富的標準庫和第三方工具包,使得它處理起各類數據具有得天獨厚的優勢。教學實踐證明,Python在輸入輸出、數據操作、數據可視化、圖像處理與深度神經網絡等有諸多優點,顯示Python計算生態已經逐漸形成并不斷完善。根據多年的實際教學效果來看,由于學生能夠快速基于Python編寫強大的應用模塊,這對于提升學生學習興趣、提高知識掌握水平,是大有裨益的。在今后的教學工作中,具有一定的推廣價值。

參考文獻:

[1] 王雪. 北理工承辦“全國高校Python語言及計算生態教學研討會”[EB/OL]. [2017-04-25]. http://www.bit.edu.cn/xww/zhxw/139071.htm.

[2] 黃文堅, 唐源. TensorFlow實戰[M]. 北京: 電子工業出版社, 2017.

[3] 嵩天, 黃天羽, 禮欣. Python語言: 程序設計課程教學改革的理想選擇[J]. 中國大學教學, 2016(2): 42-47.

[4] 嵩天, 黃天羽, 禮欣. Python語言程序設計基礎[M]. 2版. 北京: 高等教育出版社, 2017.

[5] 車萬翔, 蘇小紅, 袁永峰, 等. 計算機專業高級語言程序設計課程改革探索[J]. 計算機教育, 2014(13): 56-58.

[6] 張莉, 金瑩, 張潔. 基于MOOC的“用Python玩轉數據”翻轉課堂實踐與研究[J]. 工業和信息化教育, 2017(3): 70-76.

(編輯:彭遠紅)endprint

猜你喜歡
教學改革實驗教學
小議初中化學演示實驗教學
甘肅教育(2020年4期)2020-09-11 07:42:36
電容器的實驗教學
物理之友(2020年12期)2020-07-16 05:39:20
對初中化學實驗教學的認識和體會
甘肅教育(2020年8期)2020-06-11 06:10:04
幾何體在高中數學實驗教學中的應用
基于人才培養的技工學校德育實效性研究
成才之路(2016年25期)2016-10-08 09:51:08
現代信息技術在高職數學教學改革中的應用研究
科技視界(2016年20期)2016-09-29 12:59:03
以職業技能競賽為導向的高職單片機實踐教學改革研究
科技視界(2016年20期)2016-09-29 11:20:38
微課時代高等數學教學改革的實踐與探索
科技視界(2016年20期)2016-09-29 11:16:19
主站蜘蛛池模板: 欧洲亚洲欧美国产日本高清| 国产特级毛片| 亚洲第一区在线| 精品一区二区三区中文字幕| 一本综合久久| 久久频这里精品99香蕉久网址| 激情无码视频在线看| 亚洲无码高清视频在线观看| 青青青国产视频手机| 亚洲嫩模喷白浆| 国产资源免费观看| 日韩黄色精品| 国产精品久久久久无码网站| 亚洲天堂精品在线观看| 久热99这里只有精品视频6| 色亚洲成人| 欧美在线中文字幕| 萌白酱国产一区二区| 国产精品美女免费视频大全| 亚洲av无码人妻| 波多野结衣一二三| 亚洲人成网线在线播放va| 欧美亚洲日韩中文| 婷婷久久综合九色综合88| 精品精品国产高清A毛片| 午夜无码一区二区三区在线app| 国产麻豆精品久久一二三| 婷婷六月综合| 亚洲第一极品精品无码| 欧美黄色网站在线看| 国产午夜精品鲁丝片| 97人人模人人爽人人喊小说| 99免费视频观看| 中文字幕av无码不卡免费| 日本亚洲成高清一区二区三区| 欧美啪啪网| 午夜人性色福利无码视频在线观看| 九色在线观看视频| 亚洲第一精品福利| 99久久国产精品无码| 美女裸体18禁网站| 91精品aⅴ无码中文字字幕蜜桃| 亚洲天堂免费在线视频| 一本大道东京热无码av| 91小视频在线播放| 国产精品久久久久久久伊一| 国产亚洲精品yxsp| 91毛片网| 日韩欧美一区在线观看| 成人亚洲天堂| 91丝袜乱伦| 欧美a√在线| 亚洲人成高清| 国产第八页| 五月激激激综合网色播免费| 456亚洲人成高清在线| 91黄视频在线观看| 99热这里只有精品国产99| 91蜜芽尤物福利在线观看| 国产成人精品亚洲日本对白优播| 久久永久视频| 日本影院一区| 日韩精品成人网页视频在线| 无码不卡的中文字幕视频| 97人人做人人爽香蕉精品| 亚洲国产天堂在线观看| 97人人做人人爽香蕉精品| 色播五月婷婷| 国产日本一区二区三区| 国产sm重味一区二区三区| 免费在线视频a| 国产二级毛片| 国产成人无码Av在线播放无广告| 欧美亚洲日韩不卡在线在线观看| 国产本道久久一区二区三区| 国产成人a在线观看视频| 亚洲一区无码在线| 综合天天色| 国产高潮流白浆视频| 在线播放国产99re| 中文字幕啪啪| 久久黄色小视频|