python求協方差矩陣
⑴ python數據分析之主成分分析
主成分分析,又稱PCA,是指將多個變數通過線性變換以後選出較少個重要變數的一種多元統計方法。
主成分分析計算步驟:
1、計算協方差矩陣
2、求出相應的特徵值及相應的正交化單位向量
3、選擇主成分
4、計算主成分載荷
5、計算主成分得分
⑵ 怎麼用python表示出二維高斯分布函數,mu表示均值,sigma表示協方差矩陣,x表示數據點
clear
closeall
%%%%%%%%%%%%%%%%%%%%%%%%%生成實驗數據集
rand('state',0)
sigma_matrix1=eye(2);
sigma_matrix2=50*eye(2);
u1=[0,0];
u2=[30,30];
m1=100;
m2=300;%樣本數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm1數據集
Y1=multivrandn(u1,m1,sigma_matrix1);
Y2=multivrandn(u2,m2,sigma_matrix2);
scatter(Y1(:,1),Y1(:,2),'bo')
holdon
scatter(Y2(:,1),Y2(:,2),'r*')
title('SM1數據集')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm2數據集
u11=[0,0];
u22=[5,5];
u33=[10,10];
u44=[15,15];
m=600;
sigma_matrix3=2*eye(2);
Y11=multivrandn(u11,m,sigma_matrix3);
Y22=multivrandn(u22,m,sigma_matrix3);
Y33=multivrandn(u33,m,sigma_matrix3);
Y44=multivrandn(u44,m,sigma_matrix3);
figure(2)
scatter(Y11(:,1),Y11(:,2),'bo')
holdon
scatter(Y22(:,1),Y22(:,2),'r*')
scatter(Y33(:,1),Y33(:,2),'go')
scatter(Y44(:,1),Y44(:,2),'c*')
title('SM2數據集')
end
functionY=multivrandn(u,m,sigma_matrix)
%%生成指定均值和協方差矩陣的高斯數據
n=length(u);
c=chol(sigma_matrix);
X=randn(m,n);
Y=X*c+ones(m,1)*u;
end
⑶ 協方差矩陣的理解
為了便於理解和驗證,可以參考一下, http://www.ab126.com/shuxue/2788.html 所提供的協方差的在線計算器。
統計里最基本的概念就是樣本的均值,方差,或者再加個標准差。假定有一個含有n個樣本的集合X={X1,…,Xn},依次給出這些概念的公式描述:
很顯然,均值描述的是樣本集合的中間點,它告訴我們的信息是很有限的。
而標准差給我們描述的則是樣本集合的各個樣本點到均值的距離之平均。以這兩個集合為例,[0,8,12,20]和[8,9,11,12],兩個集合的均值都是10,但顯然兩個集合差別是很大的,計算兩者的標准差,前者是8.3,後者是1.8,顯然後者較為集中,故其標准差小一些,標准差描述的就是這種「散布度」。
看出方差與標准差關系沒有?
為什麼除以n-1而不是除以n? 這個稱為貝塞爾修正。在統計學中樣本的均差多是除以自由度(n-1),它的意思是樣本能自由選擇的程度,當選到只剩一個時,它不可能再有自由了,所以自由度是(n-1)。這樣能使我們以較小的樣本集更好的逼近總體的標准差,即統計上所謂的「無偏估計」。
下面採用Python演算一下:
參考: https://blog.csdn.net/lyl771857509/article/details/79439184
計算步驟:
求和: 1+2+3+4=10
平均值: =2.5
方差:
上面幾個統計量看似已經描述的差不多了,但我們應該注意到,標准差和方差一般是用來描述一維數據的,但現實生活我們常常遇到含有多維數據的數據集,這個時候怎麼辦?
協方差該出場了!
協方差可以通俗的理解為:兩個變數在變化過程中是同方向變化?還是反方向變化?同向或反向程度如何?
換種說法:
協方差是度量各個維度偏離其均值的程度。協方差的值如果為正值,則說明兩者是正相關的,結果為負值就說明負相關的,如果為0,也是就是統計上說的「相互獨立」。
與方差對比:
方差是用來度量單個變數「自身變異」大小的總體參數,方差越大表明該變數的變異越大
協方差是用來度量兩個變數之間「協同變異」大小的總體參數,即二個變數相互影響大小的參數,協方差的絕對值越大,則二個變數相互影響越大。
採用協方差在線計算器練習一下:
輸入值 X=1 ,5 ,6
輸入值 Y=4, 2, 9
計算步驟:
在分析協方差矩陣之前有必要搞清矩陣維數的概念!以女孩子找對象為例,一般關心幾個點
這里是5個維數。如果同時有幾個男孩子備選,則會形成多個行,有對比才有會傷害。
可以這樣形象理解:在女孩心中,多個男孩形成一個個行向量,即多個樣本。
另外,再回憶一下系數矩陣的來歷。含有n個未知量,由m個方程組成線性方程組的一般形式為:
將系數按它們的位置排列形成一個表格:
這個表格就是方程組的系數矩陣,它的維數是由未知量個數即n來決定的。
下面介紹的協方差矩陣僅與維數有關,和樣本數量無關。
設 為n維隨機變數,稱矩陣
為n維隨機變數 的協方差矩陣(covariance matrix),也記為 ,其中
為了簡易起見,先舉一個簡單的三變數的例子,假設數據集有{x,y,z}三個維度,
則協方差矩陣為:
更進一步:
矩陣
其協方差矩陣為
還是有點抽象???
那就結合實例來理解,可能更方便一些。
假定有下列矩陣:
我們來計算一下協方差矩陣。
結果如下:
可以看出
驗算一下:
輸入值 X= [1, 5, 6]
輸入值 Y= [4 ,3 , 9]
再驗算一下:
輸入值 X= [4 ,3 , 9]
輸入值 Y= [4 ,7 , 2]
⑷ python(pandas模塊)
1.什麼是pandas? numpy模塊和pandas模塊都是用於處理數據的模塊。 numpy主要用於針對數組進行統計計算,處理數字數據比較方便。 pandas除了可以處理數字數據,還可...
⑸ python實現資產配置(2)--Blacklitterman 模型
在 python實現資產配置(1)----Markowitz 投資組合模型 中, 我們已經見過如何使用Markowitz求得最優資產配比. 這是一種在已知未來各資產的概率分布,然後再求解的方法.
Markowitz模型輸入參數包括歷史數據法和情景分析法兩種方法,情景分析法的缺點是主觀因素,隨意性太強,因此使用歷史數據法, 將資產的均值和協方差輸入模型是比較常見的作法. 不過, 不足之處很明顯: 未來的資產收益率分布不一定與過去相同. 此外, Markowitz 模型結果對輸入參數過於敏感.
Black-Litterman模型就是基於此的改進. 其核心思想是將投資者對大類資產的觀點 (主觀觀點) 與市場均衡收益率 (先驗預期收益率)相結合,從而形成新的預期收益率(後驗預期收益率). 這里的先驗預期收益率的分布可以是貝葉斯推斷中的先驗概率密度函數的多元正態分布形式,投資者的主觀觀點就是貝葉斯推斷中的似然函數(可以看作新的信息, 因為做出主觀判斷必然是從外界獲取得到了這些資產的收益率變化信息), 而相應的, 後驗預期收益率也可以從後驗概率密度函數中得到. 具體的推導可以看我的這篇文章: 從貝葉斯定理到貝葉斯推斷 .
BL模型的求解步驟包括下面幾步:
(1) 使用歷史數據估計預期收益率的協方差矩陣作為先驗概率密度函數的協方差.
(2) 確定市場預期之收益率向量, 也就是先驗預期收益之期望值. 作為先驗概率密度函數的均值. 或者使用現有的期望值和方差來反推市場隱含的均衡收益率(Implied Equilibrium Return Vector), 不過在使用這種方法時, 需要知道無風險收益率 的大小.
(3) 融合投資人的個人觀點,即根據歷史數據(看法變數的方差)和個人看法(看法向量的均值)
(4) 修正後驗收益.
是均衡收益率協方差的調整系數,可以根據信心水平來判斷. 是歷史資產收益率的協方差矩陣, P是投資者的觀點矩陣, 是似然函數(即投資者觀點函數)中的協方差矩陣,其值為 的對角陣, 是先驗收益率的期望值.
(5) 投資組合優化: 將修正後的期望值與協方差矩陣即 重新代入Markowitz投資組合模型求解.
(1)定義求解函數,輸入為投資者觀點P,Q以及目前資產的市場收益率矩陣,輸出為後驗的市場收益率和協方差矩陣.
(2) 實列分析
我們繼續研究 python實現資產配置(1)----Markowitz 投資組合模型 中的五支股票: 白雲機場, 福建高速, 華夏銀行, 生益科技和浙能電力. 假設現在分析師的觀點為:
獲取股票數據, 並且獲得後驗的均值和方差:
這時候,已經可以使用Markowitz模型進行資產的配置. 定義新的函數blminVar以求解資產配置權重. 該函數的輸入變數為blacklitterman函數的輸出結果, 以及投資人的目標收益率goalRet.假設目標收益率為年化70%,則goalRet = 0.7:
輸出結果為:
0-5分別對應上面的五隻股票.
⑹ 主成分分析(PCA)
PCA演算法的主要步驟是:
(1) 對向量X進行去中心化
(2) 計算向量X的協方差矩陣,自由度可以選擇0或1
(3)計算協方差矩陣的特徵值和特徵向量
(4)選取最大的k個特徵值及其特徵向量
(5)用X與特徵向量相乘
python實現:
from sklearn.datasets import load_iris
import numpy as np
def pca(X, k):
X = X - X.mean(axis=0)
X_cov = np.cov(X.T, ddof = 0)
eigenvalues, eigenvectors = eig(X_cov)
klarge_index = eigenvalues.argsort()[-k:][::-1]
k_eigenvectors = eigenvectors[klarge_index]
return np.dor(X, k_eigenvectors.T)
iris = load_iris()
X = iris.data
k = 2
X_pca = pca(X, k)
⑺ excel相關系數矩陣怎麼解讀
excel相關系數矩陣是由一組變數相互之間的相關系數構成的一張表。相關系數矩陣,那麼要求得協方差矩陣。就用Excel和python來分別求得協方差矩陣和相關系數矩陣。相關系數和協方差—excel教程化學合成實驗中經常需要考察壓力隨溫度的變化情況。
⑻ 如何用python實現Markowitz投資組合優化
0.導入需要的包import pandas as pd
import numpy as np
import statsmodels.api as sm #統計運算
import scipy.stats as scs #科學計算
import matplotlib.pyplot as plt #繪圖
1.選取幾只感興趣的股票
000413 東旭光電,000063 中興通訊,002007 華蘭生物,000001 平安銀行,000002 萬科A
並比較一下數據(2015-01-01至2015-12-31)
In[1]:
stock_set = ['000413.XSHE','000063.XSHE','002007.XSHE','000001.XSHE','000002.XSHE']
noa = len(stock_set)
df = get_price(stock_set, start_date = '2015-01-01', end_date ='2015-12-31', 'daily', ['close'])
data = df['close']
#規范化後時序數據
(data/data.ix[0]*100).plot(figsize = (8,5))
Out[1]:
2.計算不同證券的均值、協方差
每年252個交易日,用每日收益得到年化收益。計算投資資產的協方差是構建資產組合過程的核心部分。運用pandas內置方法生產協方差矩陣。
In [2]:
returns = np.log(data / data.shift(1))
returns.mean()*252
Out[2]:
000413.XSHE 0.184516
000063.XSHE 0.176790
002007.XSHE 0.309077
000001.XSHE -0.102059
000002.XSHE 0.547441
In [3]:
returns.cov()*252
Out[3]:
3.給不同資產隨機分配初始權重
由於A股不允許建立空頭頭寸,所有的權重系數均在0-1之間
In [4]:
weights = np.random.random(noa)
weights /= np.sum(weights)
weights
Out[4]:
array([ 0.37505798, 0.21652754, 0.31590981, 0.06087709, 0.03162758])
4.計算預期組合年化收益、組合方差和組合標准差
In [5]:
np.sum(returns.mean()*weights)*252
Out[5]:
0.21622558669017816
In [6]:
np.dot(weights.T, np.dot(returns.cov()*252,weights))
Out[6]:
0.23595133640121463
In [7]:
np.sqrt(np.dot(weights.T, np.dot(returns.cov()* 252,weights)))
Out[7]:
0.4857482232609962
5.用蒙特卡洛模擬產生大量隨機組合
進行到此,我們最想知道的是給定的一個股票池(證券組合)如何找到風險和收益平衡的位置。
下面通過一次蒙特卡洛模擬,產生大量隨機的權重向量,並記錄隨機組合的預期收益和方差。
In [8]:
port_returns = []
port_variance = []
for p in range(4000):
weights = np.random.random(noa)
weights /=np.sum(weights)
port_returns.append(np.sum(returns.mean()*252*weights))
port_variance.append(np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252, weights))))
port_returns = np.array(port_returns)
port_variance = np.array(port_variance)
#無風險利率設定為4%
risk_free = 0.04
plt.figure(figsize = (8,4))
plt.scatter(port_variance, port_returns, c=(port_returns-risk_free)/port_variance, marker = 'o')
plt.grid(True)
plt.xlabel('excepted volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
Out[8]:
6.投資組合優化1——sharpe最大
建立statistics函數來記錄重要的投資組合統計數據(收益,方差和夏普比)
通過對約束最優問題的求解,得到最優解。其中約束是權重總和為1。
In [9]:
def statistics(weights):
weights = np.array(weights)
port_returns = np.sum(returns.mean()*weights)*252
port_variance = np.sqrt(np.dot(weights.T, np.dot(returns.cov()*252,weights)))
return np.array([port_returns, port_variance, port_returns/port_variance])
#最優化投資組合的推導是一個約束最優化問題
import scipy.optimize as sco
#最小化夏普指數的負值
def min_sharpe(weights):
return -statistics(weights)[2]
#約束是所有參數(權重)的總和為1。這可以用minimize函數的約定表達如下
cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})
#我們還將參數值(權重)限制在0和1之間。這些值以多個元組組成的一個元組形式提供給最小化函數
bnds = tuple((0,1) for x in range(noa))
#優化函數調用中忽略的唯一輸入是起始參數列表(對權重的初始猜測)。我們簡單的使用平均分布。
opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)
opts
Out[9]:
status: 0
success: True
njev: 4
nfev: 28
fun: -1.1623048291871221
x: array([ -3.60840218e-16, 2.24626781e-16, 1.63619563e-01, -2.27085639e-16, 8.36380437e-01])
message: 'Optimization terminated successfully.'
jac: array([ 1.81575805e-01, 5.40387481e-01, 8.18073750e-05, 1.03137662e+00, -1.60038471e-05, 0.00000000e+00])
nit: 4
得到的最優組合權重向量為:
In [10]:
opts['x'].round(3)
Out[10]:
array([-0. , 0. , 0.164, -0. , 0.836])
sharpe最大的組合3個統計數據分別為:
In [11]:
#預期收益率、預期波動率、最優夏普指數
statistics(opts['x']).round(3)
Out[11]:
array([ 0.508, 0.437, 1.162])
7.投資組合優化2——方差最小
接下來,我們通過方差最小來選出最優投資組合。
In [12]:
#但是我們定義一個函數對 方差進行最小化
def min_variance(weights):
return statistics(weights)[1]
optv = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
optv
Out[12]:
status: 0
success: True
njev: 7
nfev: 50
fun: 0.38542969450547221
x: array([ 1.14787640e-01, 3.28089742e-17, 2.09584008e-01, 3.53487044e-01, 3.22141307e-01])
message: 'Optimization terminated successfully.'
jac: array([ 0.3851725 , 0.43591119, 0.3861807 , 0.3849672 , 0.38553924, 0. ])
nit: 7
方差最小的最優組合權重向量及組合的統計數據分別為:
In [13]:
optv['x'].round(3)
Out[13]:
array([ 0.115, 0. , 0.21 , 0.353, 0.322])
In [14]:
#得到的預期收益率、波動率和夏普指數
statistics(optv['x']).round(3)
Out[14]:
array([ 0.226, 0.385, 0.587])
8.組合的有效前沿
有效前沿有既定的目標收益率下方差最小的投資組合構成。
在最優化時採用兩個約束,1.給定目標收益率,2.投資組合權重和為1。
In [15]:
def min_variance(weights):
return statistics(weights)[1]
#在不同目標收益率水平(target_returns)循環時,最小化的一個約束條件會變化。
target_returns = np.linspace(0.0,0.5,50)
target_variance = []
for tar in target_returns:
cons = ({'type':'eq','fun':lambda x:statistics(x)[0]-tar},{'type':'eq','fun':lambda x:np.sum(x)-1})
res = sco.minimize(min_variance, noa*[1./noa,],method = 'SLSQP', bounds = bnds, constraints = cons)
target_variance.append(res['fun'])
target_variance = np.array(target_variance)
下面是最優化結果的展示。
叉號:構成的曲線是有效前沿(目標收益率下最優的投資組合)
紅星:sharpe最大的投資組合
黃星:方差最小的投資組合
In [16]:
plt.figure(figsize = (8,4))
#圓圈:蒙特卡洛隨機產生的組合分布
plt.scatter(port_variance, port_returns, c = port_returns/port_variance,marker = 'o')
#叉號:有效前沿
plt.scatter(target_variance,target_returns, c = target_returns/target_variance, marker = 'x')
#紅星:標記最高sharpe組合
plt.plot(statistics(opts['x'])[1], statistics(opts['x'])[0], 'r*', markersize = 15.0)
#黃星:標記最小方差組合
plt.plot(statistics(optv['x'])[1], statistics(optv['x'])[0], 'y*', markersize = 15.0)
plt.grid(True)
plt.xlabel('expected volatility')
plt.ylabel('expected return')
plt.colorbar(label = 'Sharpe ratio')
⑼ PCA(主成分分析)python實現
回顧了下PCA的步驟,並用python實現。深刻的發現當年學的特徵值、特徵向量好強大。
PCA是一種無監督的學習方式,是一種很常用的降維方法。在數據信息損失最小的情況下,將數據的特徵數量由n,通過映射到另一個空間的方式,變為k(k<n)。
這里用一個2維的數據來說明PCA,選擇2維的數據是因為2維的比較容易畫圖。
這是數據:
畫個圖看看分布情況:
協方差的定義為:
假設n為數據的特徵數,那麼協方差矩陣M, 為一個n n的矩陣,其中Mij為第i和第j個特徵的協方差,對角線是各個特徵的方差。
在我們的數據中,n=2,所以協方差矩陣是2 2的,
通過numpy我們可以很方便的得到:
得到cov的結果為:
array([[ 0.61655556, 0.61544444],
[ 0.61544444, 0.71655556]])
由於我們之前已經做過normalization,因此對於我們來說,
這個矩陣就是 data*data的轉置矩陣。
得到結果:
matrix([[ 5.549, 5.539],
[ 5.539, 6.449]])
我們發現,其實協方差矩陣和散度矩陣關系密切,散度矩陣 就是協方差矩陣乘以(總數據量-1)。因此他們的 特徵根 和 特徵向量 是一樣的。這里值得注意的一點就是,散度矩陣是 SVD奇異值分解 的一步,因此PCA和SVD是有很大聯系的,他們的關系這里就不詳細談了,以後有機會再寫下。
用numpy計算特徵根和特徵向量很簡單,
但是他們代表的意義非常有意思,讓我們將特徵向量加到我們原來的圖里:
其中紅線就是特徵向量。有幾點值得注意:
藍色的三角形就是經過坐標變換後得到的新點,其實他就是紅色原點投影到紅線、藍線形成的。
得到特徵值和特徵向量之後,我們可以根據 特徵值 的大小,從大到小的選擇K個特徵值對應的特徵向量。
這個用python的實現也很簡單:
從eig_pairs選取前k個特徵向量就行。這里,我們只有兩個特徵向量,選一個最大的。
主要將原來的數據乘以經過篩選的特徵向量組成的特徵矩陣之後,就可以得到新的數據了。
output:
數據果然變成了一維的數據。
最後我們通過畫圖來理解下數據經過PCA到底發生了什麼。
綠色的五角星是PCA處理過後得到的一維數據,為了能跟以前的圖對比,將他們的高度定位1.2,其實就是紅色圓點投影到藍色線之後形成的點。這就是PCA,通過選擇特徵根向量,形成新的坐標系,然後數據投影到這個新的坐標系,在盡可能少的丟失信息的基礎上實現降維。
通過上述幾步的處理,我們簡單的實現了PCA第一個2維數據的處理,但是原理就是這樣,我們可以很輕易的就依此實現多維的。
用sklearn的PCA與我們的pca做個比較:
得到結果:
用我們的pca試試
得到結果:
完全一致,完美~
值得一提的是,sklearn中PCA的實現,用了部分SVD的結果,果然他們因緣匪淺。
⑽ Python pandas用法
在Python中,pandas是基於NumPy數組構建的,使數據預處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數據設計的,而NumPy更適合處理統一的數值數組數據。
使用下面格式約定,引入pandas包:
pandas有兩個主要數據結構:Series和DataFrame。
Series是一種類似於一維數組的對象,它由 一組數據 (各種NumPy數據類型)以及一組與之相關的 數據標簽(即索引) 組成,即index和values兩部分,可以通過索引的方式選取Series中的單個或一組值。
pd.Series(list,index=[ ]) ,第二個參數是Series中數據的索引,可以省略。
Series類型索引、切片、運算的操作類似於ndarray,同樣的類似Python字典類型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之間的主要區別在於Series之間的操作會根據索引自動對齊數據。
DataFrame是一個表格型的數據類型,每列值類型可以不同,是最常用的pandas對象。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index為指定的列、行索引,並按照順序排列。
如果創建時指定了columns和index索引,則按照索引順序排列,並且如果傳入的列在數據中找不到,就會在結果中產生缺失值:
數據索引 :Series和DataFrame的索引是Index類型,Index對象是不可修改,可通過索引值或索引標簽獲取目標數據,也可通過索引使序列或數據框的計算、操作實現自動化對齊。索引類型index的常用方法:
重新索引 :能夠改變、重排Series和DataFrame索引,會創建一個新對象,如果某個索引值當前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, ) :index/columns為新的行列自定義索引;fill_value為用於填充缺失位置的值;method為填充方法,ffill當前值向前填充,bfill向後填充;limit為最大填充量; 默認True,生成新的對象,False時,新舊相等不復制。
刪除指定索引 :默認返回的是一個新對象。
.drop() :能夠刪除Series和DataFrame指定行或列索引。
刪除一行或者一列時,用單引號指定索引,刪除多行時用列表指定索引。
如果刪除的是列索引,需要增加axis=1或axis='columns'作為參數。
增加inplace=True作為參數,可以就地修改對象,不會返回新的對象。
在pandas中,有多個方法可以選取和重新組合數據。對於DataFrame,表5-4進行了總結
適用於Series和DataFrame的基本統計分析函數 :傳入axis='columns'或axis=1將會按行進行運算。
.describe() :針對各列的多個統計匯總,用統計學指標快速描述數據的概要。
.sum() :計算各列數據的和
.count() :非NaN值的數量
.mean( )/.median() :計算數據的算術平均值、算術中位數
.var()/.std() :計算數據的方差、標准差
.corr()/.cov() :計算相關系數矩陣、協方差矩陣,是通過參數對計算出來的。Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關系數。DataFrame的corr和cov方法將以DataFrame的形式分別返回完整的相關系數或協方差矩陣。
.corrwith() :利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關系數。傳入一個Series將會返回一個相關系數值Series(針對各列進行計算),傳入一個DataFrame則會計算按列名配對的相關系數。
.min()/.max() :計算數據的最小值、最大值
.diff() :計算一階差分,對時間序列很有效
.mode() :計算眾數,返回頻數最高的那(幾)個
.mean() :計算均值
.quantile() :計算分位數(0到1)
.isin() :用於判斷矢量化集合的成員資格,可用於過濾Series中或DataFrame列中數據的子集
適用於Series的基本統計分析函數,DataFrame[列名]返回的是一個Series類型。
.unique() :返回一個Series中的唯一值組成的數組。
.value_counts() :計算一個Series中各值出現的頻率。
.argmin()/.argmax() :計算數據最大值、最小值所在位置的索引位置(自動索引)
.idxmin()/.idxmax() :計算數據最大值、最小值所在位置的索引(自定義索引)
pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。下表對它們進行了總結,其中read_csv()、read_table()、to_csv()是用得最多的。
在數據分析和建模的過程中,相當多的時間要用在數據准備上:載入、清理、轉換以及重塑。
在許多數據分析工作中,缺失數據是經常發生的。對於數值數據,pandas使用浮點值NaN(np.nan)表示缺失數據,也可將缺失值表示為NA(Python內置的None值)。
替換值
.replace(old, new) :用新的數據替換老的數據,如果希望一次性替換多個值,old和new可以是列表。默認會返回一個新的對象,傳入inplace=True可以對現有對象進行就地修改。
刪除重復數據
利用函數或字典進行數據轉換
df.head():查詢數據的前五行
df.tail():查詢數據的末尾5行
pandas.cut()
pandas.qcut() 基於分位數的離散化函數。基於秩或基於樣本分位數將變數離散化為等大小桶。
pandas.date_range() 返回一個時間索引
df.apply() 沿相應軸應用函數
Series.value_counts() 返回不同數據的計數值
df.aggregate()
df.reset_index() 重新設置index,參數drop = True時會丟棄原來的索引,設置新的從0開始的索引。常與groupby()一起用
numpy.zeros()