2015-08-16 40 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() 
相關問題