2018年10月30日 星期二

利用Python計算資料各個moments(mean, variance, skewness, kurtosis)

(本篇文章利用Python實作)

這篇算是第一篇呼應這個Blog主題的文章了
因為只要會import package
就可以不用理解這些複雜的統計量囉~

其中我是使用anaconda中的jupyter來開發

這個IDE的介面很簡潔
也很推薦使用spyder
(Anaconda可以來找我工商嗎QQ)

首先匯入兩個最常使用的套件: numpy, pandas


import numpy as np
import pandas as pd

未來若有時間可以好好來聊聊這兩個套件的功能


data = pd.read_csv('m_pg6116_3dx.csv')
data.head()

接著利用pandas中讀取資料的函數: pd.read 來讀取csv檔

這個函數按下tab後可以看到他可以讀取其他類型的資料
接著可以利用.head()來看一下資料
括弧內可以放數字 代表顯示的筆數

以下以RET變數來介紹
接著就可以來計算各moment了
第一個是mean
由於python並不像R是專為統計或是資料科學開發的語言
因此很多簡單的功能都需要import套件
首先會用到的是numpy

np.mean(data['RET'])

這樣就可以輕鬆計算他的平均數囉

而資料的切片(slice)只要利用中括號([])
在打上欄位名稱就可以取出了
未來如果有時間可以再另外聊聊各種切片的方法(不知道會不會有這麼多時間)

標準差也可以輕鬆算出


np.std(data['RET'])

而這裡計算的是標準差 並不是變異數喔

所以計算變異數的同學需要再將他平方

再來計算skewness 也就是偏態


簡單的說 這個統計量就是在看一份資料有沒有左右傾斜
像是這樣:
而這個較複雜的統計量需要使用別的套件
也就是scipy.stats

from scipy.stats import skew

利用skew計算偏態


skew(data['RET'])

最後就可以來計算第四瞬間--峰態

是不是看到公式頭就昏了呢?
這個統計量是在計算是否有厚尾的現象
看資料尾端有無特別厚的現象
在某些財務的資料中
厚尾代表風險較高
所以需要特別關注這個統計量喔
若無厚尾這個值會接近3

因此該套件運算的是excess kurtosis
就是原本的公式再減掉3
因此接近0就沒有厚尾的現象
from scipy.stats import kurtosis
kurtosis(data['RET'])

就可以計算出峰態囉


而計算這些就是為了瞭解資料是否符合常態分布

所以可以先畫出資料的分布樣態
這邊是利用histogram直方圖
因此需要import matplotlib.pyplot
這是python中最常用來視覺化的套件

import matplotlib.pyplot as plt
plt.hist(data['RET'])

可以輕鬆繪出直方圖囉

可以看出資料的分布

看的出來有些類似標準常態分布

但只用看的是不準的
因此統計學家發展出了一個檢定方法來檢定是否符合
稱之為jarque-bera
stats.jarque_bera(data['RET'])

得出來的值是:

(303.63982005843224, 0.0)
p值接近0
因此應該拒絕虛無假設H0
顯著不等於標準常態分布

如果以上看不太懂得同學

只要知道後面的p值越小就越要拒絕就好了哈哈
或許以後有機會可以聊聊基本統計學(到底以後要聊多少東西)

所以今天學到了:

import各種package
運用套件的函數
計算mean, standard deviation, skewness, kurtosis
繪製直方圖
以及利用jarque-bera檢定是否為常態

這就是利用Python運算各moment的方法

未來會繼續分享各個資料分析的實例~

1 則留言: