今天下午,成長群的群主申總提出,群里每個人找一個戰友,互幫互助。一石激起千層浪,群里面積極向上好青年們就開始踴躍自我介紹,一個比一個優秀,讓人羨慕不已。我正想要參與其中,突然想到我的活學活用系列需要更新了。沒有困難,創造困難也要上。于是,仔細想一想,可能出現幾種情況:
成都創新互聯公司是一家專注于成都做網站、網站建設與策劃設計,渭南網站建設哪家好?成都創新互聯公司做網站,專注于網站建設10年,網設計領域的專業建站公司;建站業務涵蓋:渭南等地區。渭南做網站價格咨詢:18982081108
如果用Python來隨機配對,能解決上面的問題。還有一個好處,每個月初,有了新的成員加進來之后,可以重新打亂配對一次,這樣每個月都會有一個新的戰友配對,就可以結交一個新朋友,豈不更好。
把全體群成員放在一個集合里面,然后隨機的從這個集合中挑出兩個元素,作為一對戰友,然后把這倆哥們從集合中刪除,剩下的成員組成了新的集合,再對新的集合重復上面的操作,一直到新的集合為空,程序結束
在Python中可以用list或者set來實現
set和list的區別如下:
set是無序的,不可重復的
list是有序的,可以重復的
直覺上set比較適合,于是查看set的文檔,看有沒有適合的操作函數。發現set的操作函數有5個:
其中pop()從集合中刪除并返回隨機的一個元素,好像很符合我的要求,于是動手嘗試。
輸入的結果如下:
成功了O(∩_∩)O哈哈~
PS:因為可能存在成員數為單數的情況,為了不使程序出錯,這里添加了一個try-except
上面是用set實現的,那用list能實現嗎?
答案是:可以
查看Python文檔,發現一個函數非常適合:random.shuffle,這個家伙能把一個list中的成員洗牌打亂,那么我們就可以按照順序把大亂以后的list中的成員打印出來,挨著的兩個成員就成為戰友。實現如下:
輸入的結果如下:
成功,而且不會因為單數問題報錯,實現起來也比set簡單,更重要的一點是程序運行后生成了一個雷暴members保存了所有的戰友匹配信息。方便保存。
這里有個知識點是list的切片,list[i:j]返回的是一個小list,是原來list的第i個元素到第j個元素。
如果要應用到群成員配對,只需要把members的內容替換成為愿意程序配對的群成員們就可以啦
set創建和pop()函數
list創建,list切片
random.shuffle(list)給list洗牌
1. 常用函數庫
? scipy包中的stats模塊和statsmodels包是python常用的數據分析工具,scipy.stats以前有一個models子模塊,后來被移除了。這個模塊被重寫并成為了現在獨立的statsmodels包。
?scipy的stats包含一些比較基本的工具,比如:t檢驗,正態性檢驗,卡方檢驗之類,statsmodels提供了更為系統的統計模型,包括線性模型,時序分析,還包含數據集,做圖工具等等。
2. 小樣本數據的正態性檢驗
(1) 用途
?夏皮羅維爾克檢驗法 (Shapiro-Wilk) 用于檢驗參數提供的一組小樣本數據線是否符合正態分布,統計量越大則表示數據越符合正態分布,但是在非正態分布的小樣本數據中也經常會出現較大的W值。需要查表來估計其概率。由于原假設是其符合正態分布,所以當P值小于指定顯著水平時表示其不符合正態分布。
?正態性檢驗是數據分析的第一步,數據是否符合正態性決定了后續使用不同的分析和預測方法,當數據不符合正態性分布時,我們可以通過不同的轉換方法把非正太態數據轉換成正態分布后再使用相應的統計方法進行下一步操作。
(2) 示例
(3) 結果分析
?返回結果 p-value=0.029035290703177452,比指定的顯著水平(一般為5%)小,則拒絕假設:x不服從正態分布。
3. 檢驗樣本是否服務某一分布
(1) 用途
?科爾莫戈羅夫檢驗(Kolmogorov-Smirnov test),檢驗樣本數據是否服從某一分布,僅適用于連續分布的檢驗。下例中用它檢驗正態分布。
(2) 示例
(3) 結果分析
?生成300個服從N(0,1)標準正態分布的隨機數,在使用k-s檢驗該數據是否服從正態分布,提出假設:x從正態分布。最終返回的結果,p-value=0.9260909172362317,比指定的顯著水平(一般為5%)大,則我們不能拒絕假設:x服從正態分布。這并不是說x服從正態分布一定是正確的,而是說沒有充分的證據證明x不服從正態分布。因此我們的假設被接受,認為x服從正態分布。如果p-value小于我們指定的顯著性水平,則我們可以肯定地拒絕提出的假設,認為x肯定不服從正態分布,這個拒絕是絕對正確的。
4.方差齊性檢驗
(1) 用途
?方差反映了一組數據與其平均值的偏離程度,方差齊性檢驗用以檢驗兩組或多組數據與其平均值偏離程度是否存在差異,也是很多檢驗和算法的先決條件。
(2) 示例
(3) 結果分析
?返回結果 p-value=0.19337536323599344, 比指定的顯著水平(假設為5%)大,認為兩組數據具有方差齊性。
5. 圖形描述相關性
(1) 用途
?最常用的兩變量相關性分析,是用作圖描述相關性,圖的橫軸是一個變量,縱軸是另一變量,畫散點圖,從圖中可以直觀地看到相關性的方向和強弱,線性正相關一般形成由左下到右上的圖形;負面相關則是從左上到右下的圖形,還有一些非線性相關也能從圖中觀察到。
(2) 示例
(3) 結果分析
?從圖中可以看到明顯的正相關趨勢。
6. 正態資料的相關分析
(1) 用途
?皮爾森相關系數(Pearson correlation coefficient)是反應兩變量之間線性相關程度的統計量,用它來分析正態分布的兩個連續型變量之間的相關性。常用于分析自變量之間,以及自變量和因變量之間的相關性。
(2) 示例
(3) 結果分析
?返回結果的第一個值為相關系數表示線性相關程度,其取值范圍在[-1,1],絕對值越接近1,說明兩個變量的相關性越強,絕對值越接近0說明兩個變量的相關性越差。當兩個變量完全不相關時相關系數為0。第二個值為p-value,統計學上,一般當p-value0.05時,可以認為兩變量存在相關性。
7. 非正態資料的相關分析
(1) 用途
?斯皮爾曼等級相關系數(Spearman’s correlation coefficient for ranked data ),它主要用于評價順序變量間的線性相關關系,在計算過程中,只考慮變量值的順序(rank, 值或稱等級),而不考慮變量值的大小。常用于計算類型變量的相關性。
(2) 示例
(3) 結果分析
?返回結果的第一個值為相關系數表示線性相關程度,本例中correlation趨近于1表示正相關。第二個值為p-value,p-value越小,表示相關程度越顯著。
8. 單樣本T檢驗
(1) 用途
?單樣本T檢驗,用于檢驗數據是否來自一致均值的總體,T檢驗主要是以均值為核心的檢驗。注意以下幾種T檢驗都是雙側T檢驗。
(2) 示例
(3) 結果分析
?本例中生成了2列100行的數組,ttest_1samp的第二個參數是分別對兩列估計的均值,p-value返回結果,第一列1.47820719e-06比指定的顯著水平(一般為5%)小,認為差異顯著,拒絕假設;第二列2.83088106e-01大于指定顯著水平,不能拒絕假設:服從正態分布。
9. 兩獨立樣本T檢驗
(1) 用途
?由于比較兩組數據是否來自于同一正態分布的總體。注意:如果要比較的兩組數據不滿足方差齊性, 需要在ttest_ind()函數中添加參數equal_var = False。
(2) 示例
(3) 結果分析
?返回結果的第一個值為統計量,第二個值為p-value,pvalue=0.19313343989106416,比指定的顯著水平(一般為5%)大,不能拒絕假設,兩組數據來自于同一總結,兩組數據之間無差異。
10. 配對樣本T檢驗
(1) 用途
?配對樣本T檢驗可視為單樣本T檢驗的擴展,檢驗的對象由一群來自正態分布獨立樣本更改為二群配對樣本觀測值之差。它常用于比較同一受試對象處理的前后差異,或者按照某一條件進行兩兩配對分別給與不同處理的受試對象之間是否存在差異。
(2) 示例
(3) 結果分析
?返回結果的第一個值為統計量,第二個值為p-value,pvalue=0.80964043445811551,比指定的顯著水平(一般為5%)大,不能拒絕假設。
11. 單因素方差分析
(1) 用途
?方差分析(Analysis of Variance,簡稱ANOVA),又稱F檢驗,用于兩個及兩個以上樣本均數差別的顯著性檢驗。方差分析主要是考慮各組之間的平均數差別。
?單因素方差分析(One-wayAnova),是檢驗由單一因素影響的多組樣本某因變量的均值是否有顯著差異。
?當因變量Y是數值型,自變量X是分類值,通常的做法是按X的類別把實例成分幾組,分析Y值在X的不同分組中是否存在差異。
(2) 示例
(3) 結果分析
?返回結果的第一個值為統計量,它由組間差異除以組間差異得到,上例中組間差異很大,第二個返回值p-value=6.2231520821576832e-19小于邊界值(一般為0.05),拒絕原假設, 即認為以上三組數據存在統計學差異,并不能判斷是哪兩組之間存在差異 。只有兩組數據時,效果同 stats.levene 一樣。
12. 多因素方差分析
(1) 用途
?當有兩個或者兩個以上自變量對因變量產生影響時,可以用多因素方差分析的方法來進行分析。它不僅要考慮每個因素的主效應,還要考慮因素之間的交互效應。
(2) 示例
(3) 結果分析
?上述程序定義了公式,公式中,"~"用于隔離因變量和自變量,”+“用于分隔各個自變量, ":"表示兩個自變量交互影響。從返回結果的P值可以看出,X1和X2的值組間差異不大,而組合后的T:G的組間有明顯差異。
13. 卡方檢驗
(1) 用途
?上面介紹的T檢驗是參數檢驗,卡方檢驗是一種非參數檢驗方法。相對來說,非參數檢驗對數據分布的要求比較寬松,并且也不要求太大數據量。卡方檢驗是一種對計數資料的假設檢驗方法,主要是比較理論頻數和實際頻數的吻合程度。常用于特征選擇,比如,檢驗男人和女人在是否患有高血壓上有無區別,如果有區別,則說明性別與是否患有高血壓有關,在后續分析時就需要把性別這個分類變量放入模型訓練。
?基本數據有R行C列, 故通稱RC列聯表(contingency table), 簡稱RC表,它是觀測數據按兩個或更多屬性(定性變量)分類時所列出的頻數表。
(2) 示例
(3) 結果分析
?卡方檢驗函數的參數是列聯表中的頻數,返回結果第一個值為統計量值,第二個結果為p-value值,p-value=0.54543425102570975,比指定的顯著水平(一般5%)大,不能拒絕原假設,即相關性不顯著。第三個結果是自由度,第四個結果的數組是列聯表的期望值分布。
14. 單變量統計分析
(1) 用途
?單變量統計描述是數據分析中最簡單的形式,其中被分析的數據只包含一個變量,不處理原因或關系。單變量分析的主要目的是通過對數據的統計描述了解當前數據的基本情況,并找出數據的分布模型。
?單變量數據統計描述從集中趨勢上看,指標有:均值,中位數,分位數,眾數;從離散程度上看,指標有:極差、四分位數、方差、標準差、協方差、變異系數,從分布上看,有偏度,峰度等。需要考慮的還有極大值,極小值(數值型變量)和頻數,構成比(分類或等級變量)。
?此外,還可以用統計圖直觀展示數據分布特征,如:柱狀圖、正方圖、箱式圖、頻率多邊形和餅狀圖。
15. 多元線性回歸
(1) 用途
?多元線性回歸模型(multivariable linear regression model ),因變量Y(計量資料)往往受到多個變量X的影響,多元線性回歸模型用于計算各個自變量對因變量的影響程度,可以認為是對多維空間中的點做線性擬合。
(2) 示例
(3) 結果分析
?直接通過返回結果中各變量的P值與0.05比較,來判定對應的解釋變量的顯著性,P0.05則認為自變量具有統計學意義,從上例中可以看到收入INCOME最有顯著性。
16. 邏輯回歸
(1) 用途
?當因變量Y為2分類變量(或多分類變量時)可以用相應的logistic回歸分析各個自變量對因變量的影響程度。
(2) 示例
(3) 結果分析
?直接通過返回結果中各變量的P值與0.05比較,來判定對應的解釋變量的顯著性,P0.05則認為自變量具有統計學意義。
1 要求:實現兩個列表中的元素逐一配對。
2 1、普通方法:
3 L1 = ['x','y','z']
4 L2 = [1,2,3]
5 L3 = []
6 for a in L1:
7 ... for b in L2:
8 ... L3.append((a,b))
9 ...
10 print L3
11 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
12 ####################################################
13 2、列表解析:
14 L1 = ['x','y','z']
15 L2 = [1,2,3]
16 L3 = [ (a,b) for a in L1 for b in L2 ]
17 print L3
18 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
本節將介紹使用多級索引(分層索引)和其他高級索引技巧
分層或多級次索引的存在是非常有意義的,因為它打開了復雜的數據分析和操作的大門,特別是處理高維數據
從本質上講,它允許您在較低維度的數據結構包括 Series(1d) 和 DataFrame(2d) 中存儲和操作任意維度的數據
在本節中,我們將展示分層索引的確切含義,以及如何結合前面介紹的所有 pandas 索引功能使用
在 0.24.0 版本之后, MultiIndex.label 重命名為 MultiIndex.codes 。 MultiIndex.set_labels 重命名為 MultiIndex.set_codes .
MultiIndex 對象是標準 Index 對象的分層模式,它通常在 pandas 對象中存儲軸標簽
你可以把 MultiIndex 看成一個元組數組,其中每個元組都是唯一的。 MultiIndex 有如下創建方式
當傳遞給 Index 構造函數一個元組列表時,它將嘗試返回一個 MultiIndex 。
下面的示例演示了初始化 MultiIndex 的不同方法。
當你想要對兩個可迭代對象中的每個元素進行兩兩配對時,可以使用 MultiIndex.from_product()
您也可以使用 MultiIndex.from_frame() 方法直接從 DataFrame 中構造一個 MultiIndex 。
為了方便起見,你可以直接將數組列表傳遞給 Series 或 DataFrame 的 index 參數來自動構造一個 MultiIndex
所有的 MultiIndex 構造函數都接受一個 name 參數,該參數存儲索引級別的名稱。如果沒有設置,則值為 None
索引可以放在任何軸上,索引的層級也可以隨你設置
這已經簡化了較高層次的索引,使控制臺的輸出更容易看清。
注意 ,索引的顯示方式可以通過 pandas.set_options() 中的 multi_sparse 選項來控制。
值得注意的是,將元組用作軸上的原子標簽也是可以的
多索引之所以重要,是因為它允許您執行分組、選擇和重塑操作,我們將在下面以及后續部分中描述這些操作
get_level_values() 方法能夠返回特定級別的標簽向量
分級索引的一個重要特性是,您可以通過標識數據中的子組的部分標簽來選擇數據
部分選擇以一種完全類似于在常規 DataFrame 中選擇列的方式,返回的結果會 "降低" 分層索引的級別
MultiIndex 會保留索引的所有已經定義了的級別,盡管它們實際上可能并沒有被使用。
在對索引進行切片時,您可能會注意到這一點。例如
這樣做的目的是為了避免重新計算級別,以提高切片的性能。如果你只想看某一級別,可以使用 get_level_values() 方法
可以使用 remove_unused_levels() 方法重構 MultiIndex
在具有 MultiIndex 的不同索引對象之間的操作會自動對齊
Series/DataFrames 的 reindex() 方法可以傳入一個 MultiIndex ,甚至可以是一個元組列表或元組數組
文章標題:兩兩配對函數python,兩兩配對算法
文章網址:http://m.newbst.com/article30/phhgso.html
成都網站建設公司_創新互聯,為您提供手機網站建設、企業網站制作、網站收錄、網站設計、商城網站、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯