2015-08-16 38 views
0

我想创建一个小程序,它允许我使用Python中的raw_input(现在只是输入)函数将一组数字输入到OLS函数中如何使用输入或raw_input创建输入到OLS程序

目前,我有代码看起来像这样

import pandas as pd 
from pandas import DataFrame 
from pandas.stats.api import ols 

inp=raw_input("Enter String A") 
A=map(int,inp.split()) 

inp=raw_input("Enter String B") 
B=map(int,inp.split()) 

inp=raw_input("Enter String C") 
C=map(int,inp.split()) 


def firstreg(): 

    df = pd.DataFrame({'A':[A], 'B':[B], 'C':[C]}) 
    reg = ols (y=df['A'], x=df[['B','C']]) 
    print reg 

firstreg() 

正如你看到的我是想用A=map(int,inp.split())来解决我的问题。它没有工作。我也用A=array(inp)A=float(inp)A=str(inp)尝试和解决我的问题都无济于事。主要问题是OLS函数是Pandas需要输入的字符串才能工作。

我想有这样的程序运行:

  1. 运行该文件regression.py

  2. 它要求输入字符串一个

  3. 用户输入他们的一组数字或者作为“1,2,3等...”或者“1 2 3等...”
  4. 然后用户对做同样的处理Enter String B输入字符串C
  5. 然后该程序打印出基于该OLS模型回归结果中def firstreg():

我希望这个问题是有道理的。

回答

1

看起来与此代码的问题是,你在这行嵌套另一个列表内的整数列表:

df = pd.DataFrame({'A':[A], 'B':[B], 'C':[C]}) 

什么,你在这里做的是采取每个上面创建的列表使用地图功能,然后将其放置在另一个列表中。 [A]输入字符串"1 2 3"将变成[[1, 2, 3]]这不是我们想要的。替换该行:

df = pd.DataFrame({'A': A, 'B': B, 'C': C}) 

它应该工作。

编辑:

写出完整:

import pandas as pd 
from pandas import DataFrame 
from pandas.stats.api import ols 


def first_reg(A, B, C): 
    df = pd.DataFrame({'A': A, 'B': B, 'C': C}) 
    reg = ols(y=df['A'], x=df[['B', 'C']]) 
    print reg 

def main(): 
    user_input = raw_input('Enter String A: ') 
    A = [int(x) for x in user_input.split()] 
    user_input = raw_input('Enter String B: ') 
    B = [int(x) for x in user_input.split()] 
    user_input = raw_input('Enter String C: ') 
    C = [int(x) for x in user_input.split()] 
    first_reg(A, B, C) 

if __name__ == '__main__': 
    main() 
相关问题