本文目錄一覽:
python計算多個數組的相關性
線性相關:主要採用皮爾遜相關係數來度量連續變數之間的線性相關強度;
線性相關係數|r| 相關程度
0=|r|0.3 低度相關
0.3=|r|0.8 中度相關
0.8=|r|1 高度相關
1 函數
相關分析函數:
DataFrame.corr()
Series.corr(other)
說明:
如果由數據框調用corr方法,那麼將會計算每個列兩兩之間的相似度
如果由序列調用corr方法,那麼只是計算該序列與傳入序列之間的相關度
返回值:
dataFrame調用:返回DataFrame
Series調用: 返回一個數值型,大小為相關度
2 案例
import pandas
data=pandas.read_csv(‘C:\\Users\\Desktop\\test.csv’)
print(data.corr())
#由數據框調用corr方法,將會計算每個列兩兩之間的相似度,返回的是一個矩形
print(data[‘人口’].corr(data[‘文盲率’]))
#由某一列調用corr方法,只是計算該序列與傳入序列(本例中的’文盲率’)之間的相關度
print(data[‘超市購物率’,’網上購物率’,’文盲率’,’人口’]).corr()
相關性係數介紹+python代碼實現 correlation analysis
參考文獻:
1. python 皮爾森相關係數
2. 統計學之三大相關性係數(pearson、spearman、kendall)
皮爾森係數
重點關注第一個等號後面的公式,最後面的是推導計算,暫時不用管它們。看到沒有,兩個變數(X, Y)的皮爾森相關性係數(ρX,Y)等於它們之間的協方差cov(X,Y)除以它們各自標準差的乘積(σX, σY)。
公式的分母是變數的標準差,這就意味著計算皮爾森相關性係數時,變數的標準差不能為0(分母不能為0),也就是說你的兩個變數中任何一個的值不能都是相同的。如果沒有變化,用皮爾森相關係數是沒辦法算出這個變數與另一個變數之間是不是有相關性的。
皮爾森相關係數(Pearson correlation coefficient)也稱皮爾森積矩相關係數(Pearson product-moment correlation coefficient) ,是一種線性相關係數。皮爾森相關係數是用來反映兩個變數線性相關程度的統計量。相關係數用r表示,其中n為樣本量,分別為兩個變數的觀測值和均值。r描述的是兩個變數間線性相關強弱的程度。r的絕對值越大表明相關性越強。
簡單的相關係數的分類
0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關
r描述的是兩個變數間線性相關強弱的程度。r的取值在-1與+1之間,若r0,表明兩個變數是正相關,即一個變數的值越大,另一個變數的值也會越大;若r0,表明兩個變數是負相關,即一個變數的值越大另一個變數的值反而會越小。r 的絕對值越大表明相關性越強,要注意的是這裡並不存在因果關係。
斯皮爾曼相關性係數,通常也叫斯皮爾曼秩相關係數。「秩」,可以理解成就是一種順序或者排序,那麼它就是根據原始數據的排序位置進行求解,這種表徵形式就沒有了求皮爾森相關性係數時那些限制。下面來看一下它的計算公式:
計算過程就是:首先對兩個變數(X, Y)的數據進行排序,然後記下排序以後的位置(X』, Y』),(X』, Y』)的值就稱為秩次,秩次的差值就是上面公式中的di,n就是變數中數據的個數,最後帶入公式就可求解結果
帶入公式,求得斯皮爾曼相關性係數:ρs= 1-6 (1+1+1+9)/6 35=0.657
而且,即便在變數值沒有變化的情況下,也不會出現像皮爾森係數那樣分母為0而無法計算的情況。另外,即使出現異常值,由於異常值的秩次通常不會有明顯的變化(比如過大或者過小,那要麼排第一,要麼排最後),所以對斯皮爾曼相關性係數的影響也非常小!
由於斯皮爾曼相關性係數沒有那些數據條件要求,適用的範圍就廣多了。
肯德爾相關性係數,又稱肯德爾秩相關係數,它也是一種秩相關係數,不過它所計算的對象是分類變數。
分類變數可以理解成有類別的變數,可以分為
無序的,比如性別(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等級(重度肥胖,中度肥胖、輕度肥胖、不肥胖)。
通常需要求相關性係數的都是有序分類變數。
舉個例子。比如評委對選手的評分(優、中、差等),我們想看兩個(或者多個)評委對幾位選手的評價標準是否一致;或者醫院的尿糖化驗報告,想檢驗各個醫院對尿糖的化驗結果是否一致,這時候就可以使用肯德爾相關性係數進行衡量。
pandas.DataFrame.corr()
DataFrame.corr(method=’pearson’, min_periods=1)[source]
Compute pairwise correlation of columns, excluding NA/null values
Parameters:
method : {『pearson』, 『kendall』, 『spearman』}
pearson : standard correlation coefficient
kendall : Kendall Tau correlation coefficient
spearman : Spearman rank correlation
min_periods : int, optional
Minimum number of observations required per pair of columns to have a valid result. Currently only available for pearson and spearman correlation
Returns:
y : DataFrame
numpy.corrcoef(x,y = None,rowvar = True,bias = class’numpy._globals._NoValue’,ddof = class’numpy._globals._NoValue’ )
返回Pearson乘積矩相關係數。
cov有關更多詳細信息,請參閱文檔。相關係數矩陣R和協方差矩陣C之間的關係為
R的值在-1和1之間(含)。
參數:
x:array_like
包含多個變數和觀察值的1維或2維數組。x的每一行代表一個變數,每一列都是對所有這些變數的單獨觀察。另請參閱下面的rowvar。
y:array_like,可選
一組額外的變數和觀察。y的形狀與x相同。
rowvar:布爾,可選
如果rowvar為True(默認),則每行表示一個變數,並在列中有觀察值。否則,該關係將被轉置:每列表示一個變數,而行包含觀察值。
bias : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
ddof : _NoValue, optional Has no effect, do not use. Deprecated since version 1.10.0.
返回:
R:ndarray 變數的相關係數矩陣。
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, copy ) :index/columns為新的行列自定義索引;fill_value為用於填充缺失位置的值;method為填充方法,ffill當前值向前填充,bfill向後填充;limit為最大填充量;copy 默認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()
原創文章,作者:HGYRY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130013.html