如何解决pandas数据框中的变量?

问题描述

我在Excel中执行了求解器函数以最小化变量并获得成功。我们可以在下面看到我的制作方法

  • 首先,我们获得了与“客队”,“客场”,“主场”的比赛表 团队”,“主场得分”,“比赛总数”,“主场移动”:

Excel table

  • 然后,我们得到每个团队需要最小化的变量:

Variables minimized

  • 这是我想在其中生成的求解器功能的设置 Python:

Set Up solver function

在Python中,我导入了表“ Away Team”,“ Away Pts”,“ Home Team”,“ Home Pts”,“ Game Total”和“ Home MoV”信息,然后创建了更多与以下内容相关的两列将被最小化的变量。在添加的第一列中,变量与主队实力(ht1,ht2,...,ht18)相关,等同于Excel中AB列中的变量,在第二列中,有客队实力变量(at1,at2 ,...,at18),相当于Excel中的AC列。

它们将用于公式中,以便像以前在Excel中一样为主队和客队计算参数估算

  1. PEhome = Hadj + ht [i]-at [i];
  2. PEaway = Aadj + ht [i]-at [i]

其中Hadj是“房屋调整”,而Aadj是“客舱调整”。

  • 如何获得 Hadj Aadj 以及所有 ht [i] at [i] 解决方法是否应用OLS最小化?

我最大的挑战是知道如何在python中进行设置,如果真的需要添加带有变量的列,以及如何组织所有这些以使用scipy.minimization。

注意:在使用“ np.linalg.lstsq”之前,我已经解决了变量,该操作变得如此简单和容易,但是目前,我的变量在熊猫数据帧的每一行中都会发生变化。我的疑问是如何设置所有这些值以解决这些值。因此,我尝试应用“ scipy.minimization”来完成此任务,但没有成功。但这不是正确的组织方式。下面的代码

# Variables to be minimized
'''Get unique variables in columns 'HT' and 'AT',sort items,and append more two variables that will be also minimized: 'Hadj',and 'Aadj',that is home and away adjustments.'''

var = np.concatenate([games['HT'].unique(),games['AT'].unique()])
var = sorted(var,key=lambda x: int("".join([i for i in x if i.isdigit()])))
var = np.append(var,['Hadj','Aadj'])


# Initial values for var to be minimized
initial = np.repeat(10.,var.size)

# ratings for home and away team
def func(coeffs,var,games):
    # Parameter Estimate for Home and Away teams:
    lookup = dict()
    for i in range(len(var)):
        lookup[var[i]] = coeffs[i]
    games = games.replace(lookup)

'''functions = Home Adjustment + home team - away team
              Away Adjustment + home team - away team'''


    peH = games['Hadj'] + games['HT'] - games['AT']
    peA = games['Aadj'] + games['HT'] - games['AT']
    
    # EXP Function
    expFH = math.exp(peH) / (1 + math.exp(peH))
    expFA = math.exp(peA) / (1 + math.exp(peA))
    
    # Z score
    homeZs = norm.cdf(expFH)
    awayZs = norm.cdf(expFA)
    
    # Estimated Points
    estHP = avgHP + (homeZs * stdevHP)
    estAP = avgAP + (awayZs * stdevAP)
    
    # Errors Sq for each teams,then sum them all
    homeEsq = np.array((estHP - games['Home Pts'])**2).sum()
    awayEsq = np.array((estAP - games['Away Pts'])**2).sum()
    totalEsq = homeEsq + awayEsq
    
    return totalEsq

res = minimize(func,x0=initial,args=(var,games))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)