Python數據分析(四):常用函數 & 實戰 1

前邊幾節我們一起學習了NumPy的安裝入門和必備的基礎知識,那麼從今天開始,我們就將正式開始學習NumPy中實用的數據分析技能了。

我們按照上一節的方式,盡量以實例為主,在文章的最後,依然會放上文中所用的函數的匯總表格。關於文中所用的數據,感興趣的用戶可以在圖靈社區搜尋「NumPy學習指南」,並在隨書下載標籤中下載到。

Python數據分析(四):常用函數 & 實戰 1...

文件讀寫

通常情況下,數據是以文件形式存儲的,學會讀寫文件是深入學習NumPy的基礎。

作為示例,我們創建一個單位矩陣,並將其存儲到文件中。

(1)單位矩陣:即對角線上的元素均為1,其餘元素均為0的正方形矩陣。在NumPy中可以用eye()函數創建單位矩陣,只需要給定一個用於指定矩陣大小的參數。

import numpy as np

i2 = np.eye(2)

print i2

(2)使用savetxt()函數將數據存儲到文件中,需要指定文件名以及要保存的數組。

np.savetxt(“eye.txt”, i2)

Python數據分析(四):常用函數 & 實戰 1...

Python數據分析(四):常用函數 & 實戰 1...

如圖所示,我們成功地創建了一個2*2的單位矩陣i2,並將其保存在了當前目錄下的eye.txt文件中。

讀取CSV文件

CSV(Comma-Separated Value)格式是一種常見的文件格式,通常,數據庫的轉存文件就是CSV格式的,文件中的各個字段對應於數據庫表中的列。

NumPy中的loadtxt()函數可以方便地讀取CSV文件,自動切分字段,並將數據載入NumPy數組。

我們以載入蘋果公司的歷史股價數據為例展開敘述,股價數據存儲在CSV文件中,第一列為股票代碼以標識股票,第二列為dd-mm-yyyy格式的日期,第三列為空,隨後各列一次是開盤價、最高價、最低價和收盤價,最後一列為當日的成交量。我們來看一行數據實例:

Python數據分析(四):常用函數 & 實戰 1...

下面我們把收盤價和成交量分別載入到兩個數組中,如下所示:

Python數據分析(四):常用函數 & 實戰 1...

在這裡,我們先進入了數據所在的文件夾,並用loadtxt()函數中將收盤價、成交量兩列數據導入了c, v兩個變量中。在loadtxt()函數中,第一個參數是數據所在的路徑(包括文件名),第二個參數是分隔符,在這裡我們使用逗號,第三個參數則是選擇將哪些列的數據導入,我們將unpack參數設置為True,代表分拆存儲不同列的數據,即分別將收盤價和成交量的數組賦值給變量c和v。

計算平均值

(1)VWAP(Volume-Weighted Average Price, 成交量加權平均價格)是一個很重要的經濟學量,代表著金融資產的「平均」價格,某個價格的成交量越高,則其權重就越大。

import numpy as np

c, v = np.loadtxt(‘data.csv’, delimiter = ‘,’, usecols = (6, 7), unpack = True)

vwap = np.average(c, weights = v)

print “VWAP =”, vwap

Python數據分析(四):常用函數 & 實戰 1...

如上,我們使用了average()函數來計算加權平均值,其中第一個參數為需要計算均值的數組,weights參數則代表著權重參數。

(2)NumPy中也有計算算數平均值的函數,那就是mean()函數;同時,我們還可以用數組的mean()方法來計算均值。

print “mean =”, np.mean(c)

print “mean =”, c.mean()

Python數據分析(四):常用函數 & 實戰 1...

取值範圍

在NumPy中,我們可以使用min()和max()函數來尋找最小值和最大值,使用ptp()函數來計算數組的取值範圍(即max(array) – min(array))。

Python數據分析(四):常用函數 & 實戰 1...

簡單統計分析

我們可以使用median()函數來取得中位數,使用var()函數獲得數組的方差,使用std()函數來獲得數組的標準差。

c = np.loadtxt(‘data.csv’, delimiter = ‘,’, usecols = (6, ), unpack = True)

print “median =”, np.median(c)

print “variance =”, np.var(c)

print “standard deviation =”, np.std(c)

Python數據分析(四):常用函數 & 實戰 1...

請點擊此處輸入圖片描

股票收益率

收盤價的分析常常是基於股票收益率和對數收益率的,簡單收益率是兩個價格之間的變化率,而對數收益率則是所有價格取對數以後兩兩之間的差值。

(1)首先,我們來計算簡單收益率。NumPy中的diff()函數可以返回一個由相鄰數組元素的差值構成的數組,由於是每相鄰的兩個元素產生一個差值,所以返回的數組會比原數組的長度小1,為了計算收益率,我們還需要用差值除以前一天的價格。

returns = np.diff(c) / c[:-1]

print “standard deviation =”, np.std(returns)

c[:-1]代表從第一天到倒數第二天的收盤價組成的數組,即簡單收益率中的分母部分。然後,我們用std()函數來計算標準差。

Python數據分析(四):常用函數 & 實戰 1...

(2)對數收益率的計算更為簡單,我們先用log()函數得到每個收盤價的對數,然後對結果使用diff()函數來求得每相鄰兩天之間的差值即可。

logreturns = np.diff(np.log(c))

print “Standard deviation =”, np.std(logreturns)

Python數據分析(四):常用函數 & 實戰 1...

(3)我們可能會對哪些交易日的收益率為正值感興趣。在NumPy中,我們可以用where()函數來做到這一點。where()可以根據指定的條件返回所有滿足條件的數組元素的索引值。

posretindices = np.where(returns > 0)

print “Indices with positive returns”, posretindices

Python數據分析(四):常用函數 & 實戰 1...

(4)在投資學中,波動率(volatility)是對價格變動的一種度量。歷史波動率可以根據歷史價格計算得出。年波動率=(對數收益率的標準差/對數收益率的均值)/交易日倒數的平方根,通常交易日取252天。

annual_volatility = np.std(logreturns) / np.mean(logreturns)

annual_volatility /= np.sqrt(1. / 252.)

print annual_volatility

此處需要注意的是,在Python中,整數的除法和浮點數的除法運算機制不同,我們必須要用浮點數才能得到正確的結果。

Python數據分析(四):常用函數 & 實戰 1...

我們回顧一下今天用到的函數:

Python數據分析(四):常用函數 & 實戰 1...

好了,今天我們就先到這裡,下次我們再繼續學習NumPy實戰分析過程中常用的一些函數,包括日期處理、匯總分析、簡單的可視化功能體驗、計算線性模型等,對數據分析感興趣的朋友可以關注下後續的更新。

相關閱讀

推薦閱讀:
》人到中年,不調三情,不理三人,不睡三覺!說的真到位!