python結(jié)果批量導出excel(二)

之前用stata 16的putexcel將結(jié)果批量導出到excel畅卓,考慮到python在自動化辦公上有明顯優(yōu)勢,因此蟋恬,試著用python將結(jié)果批量導出excel翁潘。

stata結(jié)果導入excel-描述統(tǒng)計

python結(jié)果批量導出excel(一)介紹了頻率分析、交叉分析和多重響應結(jié)果批量導出excel歼争。

本篇介紹卡方檢驗拜马,描述統(tǒng)計結(jié)果批量導出excel。

一沐绒、分析內(nèi)容

  1. 卡方檢驗俩莽;
  2. 描述統(tǒng)計結(jié)果;

目標:只需要修改字段名乔遮,實現(xiàn)卡方檢驗扮超,描述統(tǒng)計結(jié)果批量導出excel。

二蹋肮、具體代碼

1. 導入第三方庫

import pandas as pd
import numpy as np
import scipy.stats as stats

2. 構造頻率分析和交叉分析函數(shù)

此處頻率分析函數(shù)和交叉分析函數(shù)構造和python結(jié)果批量導出excel(一)相同出刷。

#單變量頻率分析結(jié)果
def fre(df,c):
    if type(df[c])=='str':
        df[c]=df[c].apply(lambda x:x.strip()) #去除空格
    fre=df.groupby(c)[c].count().sort_values(ascending=False).reset_index(name='頻數(shù)') #計數(shù),由高到低
    fre=fre[-fre[c].isin([''])] #刪除空值
    fre.loc['總計']=['總計',sum(fre['頻數(shù)'])] #算總數(shù)
    fre['百分比']=fre['頻數(shù)'].apply(lambda x:x/fre.loc['總計','頻數(shù)']) #算百分比
    fre['百分比']=fre['百分比'].apply(lambda x:format(x,'.2%')) #百分比以%形式呈現(xiàn)
    print(fre)
    return fre
# 交叉分析結(jié)果
def cross(df,row,col,colorder=0):
    cross_row=df[row]
    cross_col=df[col]
    total=pd.crosstab(cross_row,cross_col,margins=True,margins_name='合計') #生成交叉頻數(shù)表
    per=pd.crosstab(cross_row,cross_col,margins=True,margins_name='合計',normalize='index') #生成行百分比
    # per=pd.crosstab(cross_row,cross_col,margins=True,margins_name='合計',normalize='columns') #生成列百分比
    if colorder:
        total=total[colorder] #修改列的順序
        per=per[colorder] #修改列的順序
    per=per.applymap(lambda x:format(x,'.2%')) #百分比以%形式呈現(xiàn)
    summary=pd.merge(total,per,on=row)
    print(summary)
    return summary

3.構造卡方檢驗函數(shù)

通過構造卡方檢驗函數(shù)坯辩,返回結(jié)果X2= 馁龟,p=,當然漆魔,結(jié)果呈現(xiàn)形式坷檩,可以根據(jù)需求自行構造却音。

# 卡方檢驗
def chi2sqaure_test(df,row,col):
    cross_row=df[row]
    cross_col=df[col]
    crosstable=pd.crosstab(cross_row,cross_col)
    chi2,p,dof,expected=stats.chi2_contingency(crosstable)
    result='X2 = '+format(chi2,'.2f')+' p = '+format(p,'.3f')
    return result

4. 構造交叉分析+卡方檢驗導出函數(shù)

#多個單變量+交叉分析結(jié)果+卡方檢驗結(jié)果在1個sheet中
def fre_cross_with_chi2test_one_sheet(df,rowls,colls,sheetname,writer,colorder=0):
    start_row=0
    for c in colls:
        f=fre(df,c)
        f.to_excel(writer,index=0,sheet_name=sheetname,startrow=start_row)
        start_row=start_row+len(f['百分比'])+2

        for r in rowls:
            crosstable=cross(df,r,c,colorder)
            crosstable.to_excel(writer,index=1,sheet_name=sheetname,startrow=start_row)

            start_row=start_row+crosstable.shape[0]+1
            chi2_re=chi2sqaure_test(df,r,c)
            chi2_result=pd.DataFrame(np.array(['卡方檢驗:',chi2_re]))
            chi2_result.to_excel(writer,index=0,sheet_name=sheetname,startrow=start_row,header=False)
            start_row=start_row+chi2_result.shape[0]+2
            print(start_row)
    
    writer.save()
    writer.close()

5. 構造描述統(tǒng)計函數(shù)

# 修改值,文本轉(zhuǎn)數(shù)值
def replace(df,colls):
    dfreplace=df[colls]
    dfreplace.replace('非常不符合',1 , inplace = True)
    dfreplace.replace('比較不符合',2 , inplace = True)
    dfreplace.replace('一般',3 , inplace = True)
    dfreplace.replace('比較符合',4 , inplace = True)
    dfreplace.replace('非常符合',5 , inplace = True)
    return dfreplace

# 描述統(tǒng)計(樣本量淌喻,均值僧家,標準差,最小值裸删,中位數(shù)八拱,最大值)在1個sheet
def describe_one_sheet(df, colls,sheetname,writer):
    numls=[]
    meanls=[]
    stdls=[]
    minvaluels=[]
    medianls=[]
    maxvaluels=[]
    for colname in colls:
        col=df[colname]
        num=col.count()
        numls.append(num)
        mean=col.mean()
        meanls.append(mean)
        std=col.std()
        stdls.append(std)
        minvalue=col.min()
        minvaluels.append(minvalue)
        median=col.median()
        medianls.append(median)
        maxvalue=col.max()
        maxvaluels.append(maxvalue)

    # meanls=[round(i,2) for i in meanls] #均值保留2位小數(shù)
    # stdls=[round(i,3) for i in stdls]#標準差保留3位小數(shù)

    describe={'題項':colls,
    '樣本量':numls,
    '均值':meanls,
    '標準差':stdls,
    '最小值':minvaluels,
    '中位數(shù)':medianls,
    '最大值':maxvaluels
    }

    stats=pd.DataFrame(describe,columns=['題項','樣本量','均值',
        '標準差','最小值','中位數(shù)','最大值'])

    stats['均值']=stats['均值'].apply(lambda x:format(x,'.2f')) #均值保留2位小數(shù)
    stats['標準差']=stats['標準差'].apply(lambda x:format(x,'.3f'))#標準差保留3位小數(shù)

    stats.to_excel(writer,index=0,sheet_name=sheetname,startrow=0)
    writer.save()
    writer.close()

6. 主函數(shù)并調(diào)用

其中,自變量為11個:因變量為:13個

def main():
    df=pd.read_excel('data.xlsx') # 數(shù)據(jù)源

    colnamels=list(df.columns.values) #打印出字段的索引和列名涯塔,方便檢索
    # for i,c in enumerate(colnamels): 
    #     print(i,c)
        
    file_dir='result.xlsx' #輸入excel文件
    writer=pd.ExcelWriter(file_dir) #用于追寫excel

    order=['非常不符合','比較不符合','一般','比較符合','非常符合'] #交叉列的排序

    rowls=colnamels[140:151] #自變量
    colls=colnamels[11:24] #因變量
    fre_cross_with_chi2test_one_sheet(df,rowls,colls,sheetname='交叉分析',colorder=order,writer=writer)
    dfreplace=replace(df,colls)#修改值肌稻,文本轉(zhuǎn)數(shù)字
    des_col_name=list(dfreplace.columns.values)

    describe_one_sheet(dfreplace,des_col_name,sheetname='描述統(tǒng)計',writer=writer)

main()

三、效果

將上述代碼結(jié)合后匕荸,大約花費16s的時間將上述分析結(jié)果導出excel爹谭。

1. 含卡方檢驗的交叉分析

含卡方檢驗的交叉分析.gif

2. 描述統(tǒng)計

描述統(tǒng)計.png

python結(jié)果批量導出excel(一):頻率分析、交叉分析和多重響應

python結(jié)果批量導出excel(二):卡方檢驗榛搔,描述統(tǒng)計

python結(jié)果批量導出excel(三):組間差異比較(F檢驗诺凡、T檢驗和事后比較)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者践惑。
  • 序言:七十年代末腹泌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尔觉,更是在濱河造成了極大的恐慌凉袱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侦铜,死亡現(xiàn)場離奇詭異专甩,居然都是意外死亡,警方通過查閱死者的電腦和手機钉稍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門涤躲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贡未,你說我怎么就攤上這事种樱。” “怎么了羞秤?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長左敌。 經(jīng)常有香客問我瘾蛋,道長,這世上最難降的妖魔是什么矫限? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任哺哼,我火速辦了婚禮佩抹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘取董。我一直安慰自己棍苹,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布茵汰。 她就那樣靜靜地躺著枢里,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹂午。 梳的紋絲不亂的頭發(fā)上栏豺,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音豆胸,去河邊找鬼奥洼。 笑死,一個胖子當著我的面吹牛晚胡,可吹牛的內(nèi)容都是我干的灵奖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼估盘,長吁一口氣:“原來是場噩夢啊……” “哼瓷患!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忿檩,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尉尾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后燥透,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沙咏,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年班套,在試婚紗的時候發(fā)現(xiàn)自己被綠了肢藐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吱韭,死狀恐怖吆豹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情理盆,我是刑警寧澤痘煤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站猿规,受9級特大地震影響衷快,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姨俩,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一蘸拔、第九天 我趴在偏房一處隱蔽的房頂上張望师郑。 院中可真熱鬧,春花似錦调窍、人聲如沸宝冕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽地梨。三九已至,卻和暖如春先誉,著一層夾襖步出監(jiān)牢的瞬間湿刽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工褐耳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诈闺,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓铃芦,卻偏偏與公主長得像雅镊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刃滓,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359