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