用自己最近完成課程作業(yè)回收的問(wèn)卷結(jié)果做了一個(gè)python的小練習(xí)。目的是對(duì)問(wèn)卷中量表的各個(gè)問(wèn)題進(jìn)行分辨力計(jì)算。(分辨力的計(jì)算方法:先根據(jù)受測(cè)對(duì)象全體的總分排序;然后取出總分最高的25%的人和總分最低的25%的人,并計(jì)算這兩部分人在每一條陳述上的平均分;將這兩個(gè)平均數(shù)相減,所得出的就是這一條陳述的分辨力系數(shù)。)原文件中前1-6題為基本信息題,第7-21列為量表題目。
1 首先讀入文件。
import pandas as pd import numpy as np
2 把量表的部分選出來(lái),即從第6+1列到第21-1+1列
data=pd.read_csv('path',encoding="gb2312")#這里加上encoding="gb2312"是因?yàn)楸砀裰杏胁糠种形膬?nèi)容
select=data[data.columns[6:21]]
data.info()
3 查看select結(jié)果如下:

4 根據(jù)分辨力的計(jì)算方法,寫了一個(gè)函數(shù)(函數(shù)中heapq模塊中的nlargest和nsmallest函數(shù)可以很方便地得到指定最值個(gè)數(shù)的list,由于是list不能直接計(jì)算均值,這里還用了pd.DataFrame對(duì)數(shù)據(jù)格式進(jìn)行了轉(zhuǎn)換)
def getper(ds,s):
import heapq
x=range(0,15)
for i in x:
maxn=pd.DataFrame(heapq.nlargest(len(s)/4,s[s.columns[i]])).mean()
minn=pd.DataFrame(heapq.nsmallest(len(s)/4,s[s.columns[i]])).mean()
ds[i+6]=maxn-minn
return ds
ds=pd.DataFrame() ds=getper(ds,select) ds
結(jié)果:

將ds轉(zhuǎn)置后排序
ds2=ds.T ds2.sort(0) #這樣做是因?yàn)槲視簳r(shí)不知道怎么直接對(duì)某一行進(jìn)行排序...查了好多暫時(shí)沒(méi)有查到 ..方法待補(bǔ)充
得到結(jié)果如下,分辨力從低到高:
