我制作了一些计算Cronbach Alpha的代码.但是我使用lambda函数并不太好.有没有办法通过使用lambda而不是svar()函数来减少代码并提高效率,并通过使用numpy数组来摆脱一些for循环?
import numpy as np
def svar(X):
n = float(len(X))
svar=(sum([(x-np.mean(X))**2 for x in X]) / n)* n/(n-1.)
return svar
def CronbachAlpha(itemscores):
itemvars = [svar(item) for item in itemscores]
tscores = [0] * len(itemscores[0])
for item in itemscores:
for i in range(len(item)):
tscores[i]+= item[i]
nitems = len(itemscores)
#print "total scores=", tscores, 'number of items=', nitems
Calpha=nitems/(nitems-1.) * (1-sum(itemvars)/ svar(tscores))
return Calpha
###########Test################
itemscores = [[ 4,14,3,3,23,4,52,3,33,3],
[ 5,14,4,3,24,5,55,4,15,3]]
print "Cronbach alpha = ", CronbachAlpha(itemscores)
Run Code Online (Sandbox Code Playgroud) 我想要这个等式的最后4个值.
有没有更好的方法一步到位,比如修改方程或除了使用之外的其他提取技术 delete
a=5
d=2
n = np.cumsum(d ** np.arange(1, a+1))
print 'n=', n
n = np.delete(n,0)
print 'n extracted=', n
n= [ 2 6 14 30 62]
n extracted= [ 6 14 30 62]
Run Code Online (Sandbox Code Playgroud) 可以说我有
q=2
y=[5,10,5,15,20,25,30,35,5,10,15,20]
n=len(y)
Run Code Online (Sandbox Code Playgroud)
我想制作一个具有 nxq 维度的矩阵,其中第一行为 [5,10],第二行为 [10,5],第三行为 [5,15] ...等。
有没有办法做到这一点,或者我必须使用for loopandconcatenate函数?
我正在创建一个列,为某些字符串添加标记,并在此处输入代码:
import pandas as pd
import numpy as np
import re
data=pd.DataFrame({'Lang':["Python", "Cython", "Scipy", "Numpy", "Pandas"], })
data['Type'] = ""
pat = ["^P\w", "^S\w"]
for i in range (len(data.Lang)):
if re.search(pat[0],data.Lang.ix[i]):
data.Type.ix[i] = "B"
if re.search(pat[1],data.Lang.ix[i]):
data.Type.ix[i]= "A"
print data
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱那个for循环?如果它numpy有一个arange类似于我想要找到的功能.
可以说我有一个数据帧
df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})
Run Code Online (Sandbox Code Playgroud)
如果S是密封投标,N是没有投标的人,Nan不存在,O是公开投标.
我想计算出公式为(E + A)/(E + A + N)的投标人的百分比.做透视表然后实现等式的最佳方法是什么?
df=pd.DataFrame({'Location': [ 'Ala', 'SS', 'Ala', 'Ala', 'SS', 'Ala', 'SS', 'TXE', 'TXE', 'TXE'],
'Bid': ['E','N','E','N','N','E', 'E',np.nan,np.nan,'A']})
pt = df.pivot_table(rows='Location', cols='Bid', aggfunc='size', fill_value=0)
pt['Percentage']=(pt.A + pt.E)/(pt.A+pt.E+pt.N)
print (pt)
>>>
Bid A E N Percentage
Location
Ala 0 3 1 0.750000
SS 0 1 2 0.333333
TXE 1 0 0 1.000000
[3 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)
这是计算百分比的最佳方式还是比枢轴表有更好的方法?