使用 PyCharm 創(chuàng)建科學(xué)項目
本節(jié)主要講述PyCharm 對科學(xué)計算提供了哪些支持?如何在PyCharm 里創(chuàng)建一個科學(xué)計算的項目,在創(chuàng)建項目前要做哪些準(zhǔn)備?以及對于這類項目在調(diào)試與運行過程中,PyCharm 又提供了哪些有用功能等等。
Tips: PyCharm 科學(xué)計算是 Profession(專業(yè)版)所提供的功能。
1. 科學(xué)計算
科學(xué)計算是當(dāng)今科學(xué)的"第三支柱",科學(xué)計算是解決科學(xué)和工程問題的計算機數(shù)學(xué)模型所需的工具、技術(shù)和理論的集合。
當(dāng)下我們大多數(shù)人接觸科學(xué)計算,都是由人工智能與機器學(xué)習(xí)開始的。人工智能 可以簡單理解為機器學(xué)習(xí)與大數(shù)據(jù)。 而 機器學(xué)習(xí) 是實現(xiàn)人工智能的方法,是人工智能研究的核心技術(shù),在大數(shù)據(jù)的支撐下,通過各種算法讓機器對數(shù)據(jù)進行深層次的統(tǒng)計分析以進行“自學(xué)”。機器學(xué)習(xí)中數(shù)據(jù)是非常重要的,而數(shù)據(jù)收集、分析與建模等過程與科學(xué)計算是密不可分的。
2. 常用Python科學(xué)計算庫
2.1 Matplotlib 官網(wǎng)
matplotlib是基于Python語言的開源項目,可用于開發(fā)2D圖表(包括3D圖表),以漸進、交互式方式實現(xiàn)數(shù)據(jù)可視化, 使用起來非常簡單。matplotlib是受MATLAB的啟發(fā)構(gòu)建的。MATLAB是數(shù)據(jù)繪圖領(lǐng)域廣泛使用的語言和工具。
可視化是在整個數(shù)據(jù)分析與挖掘的關(guān)鍵輔助工具,能將數(shù)據(jù)進行可視化,更直觀的呈現(xiàn),可以清晰的理解數(shù)據(jù),從而調(diào)整我們的分析方法。這是為什么要使用matplotlib的原因。
Matplotlib能夠繪制折線圖、散點圖、柱狀圖、直方圖、餅圖。我們根據(jù)不同統(tǒng)計圖的意義,以此來決定選擇哪種統(tǒng)計圖來呈現(xiàn)我們的數(shù)據(jù)。
- 折線圖:以折線的上升或下降來表示統(tǒng)計數(shù)量的增減變化的統(tǒng)計圖。能夠顯示數(shù)據(jù)的變化趨勢,反映事物的變化情況;
- 散點圖:用兩組數(shù)據(jù)構(gòu)成多個坐標(biāo)點,考察坐標(biāo)點的分布,判斷兩變量之間是否存在某種關(guān)聯(lián)或總結(jié)坐標(biāo)點的分布模式。能夠顯示數(shù)據(jù)的分布規(guī)律;
- 柱狀圖:排列在工作表的列或行中的數(shù)據(jù)可以繪制到柱狀圖中。能夠一眼看出各個數(shù)據(jù)的大小,比較數(shù)據(jù)之間的差別;
- 直方圖:由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。一般用橫軸表示數(shù)據(jù)范圍,縱軸表示分布情況。用于展示一組或者多組數(shù)據(jù)的分布狀況;
- 餅圖:用于表示不同分類的占比情況,通過弧度大小來對比各種分類。可以用于統(tǒng)計分類數(shù)據(jù)的占比情況。
2.2 Numpy 官網(wǎng)
Numpy(Numerical Python)是一個開源的Python科學(xué)計算庫,用于快速處理任意維度的數(shù)組。
Numpy支持常見的數(shù)組和矩陣操作。Numpy 使用 ndarray 對象來處理多維數(shù)組,該對象是一個快速而靈活的大數(shù)據(jù)容器。
使用 Python 列表可以存儲一維數(shù)組,通過列表的嵌套可以實現(xiàn)多維數(shù)組,那么為什么還需要使用Numpy 的 ndarray呢?這是因為對于同樣的數(shù)值計算任務(wù),ndarray的計算速度比直接使用Python快很多,節(jié)約了時間。機器學(xué)習(xí)的最大特點就是大量的數(shù)據(jù)運算,效率高是一個主要要求。
簡單說一下 ndarray 為什么快?
- ndarray 在存儲數(shù)據(jù)的時候,數(shù)據(jù)與數(shù)據(jù)的地址都是連續(xù)的,這樣就給使得批量操作數(shù)組元素時速度更快。這是因為ndarray中的所有元素的類型都是相同的,而 Python 列表中的元素類型是任意的,所以ndarray 在存儲元素時內(nèi)存可以連續(xù),而 python 原生 lis 就只能通過尋址方式找到下一個元素;
- ndarray支持并行化運算;
- Numpy 底層使用 C 語言編寫,內(nèi)部解除了GIL(全局解釋器鎖),其對數(shù)組的操作速度不受 Python解釋器的限制 ,所以,其效率遠高于純 Python 代碼。
關(guān)于 numpy 使用,請參考
2.3 Pandas 官網(wǎng)
專門用于數(shù)據(jù)挖掘的開源 python 庫, 以 Numpy 為基礎(chǔ),計算方面性能高; 具有獨特的數(shù)據(jù)結(jié)構(gòu)(DataFrame、Series與Panel)。
Numpy已經(jīng)能夠幫助我們處理數(shù)據(jù),能夠結(jié)合matplotlib解決部分?jǐn)?shù)據(jù)展示等問題,那么pandas的優(yōu)勢是什么呢?主要有以下三點:
- 便捷的數(shù)據(jù)處理能力;
- 讀取文件方便;
- 封裝了 Matplotlib、Numpy 的畫圖和計算。
關(guān)于如何使用 Pandas, 請參考
3. PyCharm 對科學(xué)計算支持
- Numpy、Matplotlib 與 Pandas支持
以上三個基本科學(xué)計算庫都是支持的,另外需要啟用Scientific Mode (View -> Scientific Mode
)才能正常顯示各種圖表,該模式僅在 PyCharm 的專業(yè)版中可用。
- Jupyter Notebook支持
Jupyter Notebook,原名IPython Notbook,是IPython的加強網(wǎng)頁版,一個開源Web應(yīng)用程序
名字源自Julia、Python 和 R(數(shù)據(jù)科學(xué)的三種開源語言),是一款程序員和科學(xué)工作者的編程/文檔/筆記/展示軟件,.ipynb文件格式是用于計算型敘述的JSON文檔格式的正式規(guī)范。 在下一小節(jié)將詳細介紹它的安裝與使用
- R 語言支持
此支持可通過 R 插件獲得,該插件支持使用 R 語言進行統(tǒng)計計算。
4. 創(chuàng)建科學(xué)項目
在PyCharm 里創(chuàng)建科學(xué)項目,我們通常會選擇用 Conda 解釋器,所以請事先安裝 Conda 或者 miniconda, 安裝細節(jié)請參考。
4.1 基本步驟
step1: 主菜單 File -> New -> Project
, 選擇 Scientific
step2: 在項目設(shè)置對話框窗口中,指定項目名稱,確保將 Conda 選為新環(huán)境,然后單擊"Create"。
step3: 自動創(chuàng)建了 main.py并且打開, 在其中加下面的代碼。(主要功能是用拆線圖展示北京與上海兩個城市一小時的溫度變化曲線。Tips: 使用Conda 解釋器,像Numpy , matplotlib 基本的科學(xué)計算包都已經(jīng)自帶了,不需要再單獨安裝。)
# 畫出溫度變化圖
import random
import matplotlib.pyplot as plt
# 準(zhǔn)備x, y坐標(biāo)的數(shù)據(jù)
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 增加北京的溫度數(shù)據(jù)
y_beijing = [random.uniform(1, 3) for i in x]
# 創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)
# 繪制折線圖
# plt.plot(x, y_shanghai)
plt.plot(x, y_shanghai, label="SHANGHAI")
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--', label="BEIJING")
# 顯示圖例
plt.legend(loc="best")
# 構(gòu)造x軸刻度標(biāo)簽
x_ticks_label = ["11:{}".format(i) for i in x]
# 構(gòu)造y軸刻度
y_ticks = range(40)
# 修改x,y軸坐標(biāo)的刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 添加網(wǎng)格顯示
plt.grid(True, linestyle='--', alpha=0.5)
# 添加x軸、y軸描述信息及標(biāo)題
plt.xlabel("Time")
plt.ylabel("Temperature")
plt.title("Temperature Change between 11am and 12am")
# 顯示圖像
plt.show()
step4: PyCharm 內(nèi)需啟用 Scientific Mode 才能正常顯示 matplotlib 相關(guān)圖表。主菜單View -> Scientific Mode
。
step5: 運行項目?F10 (Shift + F10), 代碼執(zhí)行完畢,會有如下三個工具窗口顯示:
-
"SciView"工具窗口。它有兩個選項卡, "data"選項卡中預(yù)覽數(shù)據(jù)幀,在"plot"選項卡中預(yù)覽 matplotlib 圖表;
-
"Documentation"工具窗口,顯示編輯器內(nèi)光標(biāo)插入位置處對象的內(nèi)聯(lián)文檔,比如光標(biāo)停留在matplotlib 包導(dǎo)入的地方,就會顯示 matplotlib 的相關(guān)信息;
-
Python 控制臺。執(zhí)行完畢后,自動打開,程序中涉及變量詳細值也在右側(cè)邊欄自動顯示出來。
4.2 分段執(zhí)行代碼
在 Scientific mode 模式,可以將代碼格式化為一組可執(zhí)行代碼片斷,每個片斷都可以單獨運行。要將代碼拆分為獨立運行的部分,只需在適當(dāng)?shù)奈恢锰砑? #%%
行。
在 main.py
中加入以下代碼:主要功能是生成一個散點圖。
import numpy as np
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
加了上面代碼后,main.py
除了生成上面的折線圖,還會再生成散點圖。為了使這兩張圖的生成分段執(zhí)行,如下圖所示,加兩行 # %% 行,然后分別點擊邊框中綠色箭頭執(zhí)行不同代碼。
4.3 查看數(shù)據(jù)細節(jié)
在 Python 控制臺中預(yù)覽變量時,可以單擊 View as Array
鏈接,在 SciView 工具窗口的"數(shù)據(jù)"選項卡中查看這些數(shù)據(jù)。
為了說明這個功能,我們在 main.py
添加一行代碼,創(chuàng)建一個多維數(shù)組
stock_change = np.random.normal(0, 1, (8, 10))
5. 小結(jié)
本節(jié)主要講解了 PyCharm 針對科學(xué)計算提供了哪些支持,其本身提供的功能都是簡單易學(xué)的,難點在對科學(xué)計算包提供功能的使用與理解,一方面是對 Python 語言的應(yīng)用,另一方面還是需要一定的高數(shù)、線性代數(shù)等方面的背景知識。在做一些不復(fù)雜的數(shù)據(jù)分析項目,使用 PyCharm 應(yīng)該是足夠的,如果對數(shù)據(jù)處理相對復(fù)雜,還是建議使用 Anacoda,畢竟它提供了更多專業(yè)的科學(xué)計算包,也提供了更多利于科學(xué)計算的工具。