2017-05-23 7 views
0

EDIT - dataframe.describe()를 사용하여 데이터 프레임을 수행하는 방법을 찾았습니다. - 수정 된 버전 아래에 첨부했습니다. 이렇게하면 "DataExtract"가 한 번만 실행되고 데이터 프레임이 회귀 또는 ScatterPlot 함수에서 사용되도록 반환됩니다.Python Pandas - 다른 함수에 데이터 프레임 전달

import pandas as pd 


# Extracting the data - Real query would be extracting X and Y from a SQL query and converting to a pandas frame 
def DataExtract(Y, X): 
    d = {Y: [1, 3, 3, 9, 5], 
     X: [6, 7, 8, 9, 10]} 
    df = pd.DataFrame(d) 
    df = df.copy(deep=True) 
    return df 


# Build process using the data extracted in DataExtract 
def Regression(df): 
    from statsmodels.formula.api import ols 
    df.describe() 
    df.columns = ['Y', 'X'] 
    model = ols("Y ~ X", df).fit() 
    print(model.summary()) 


# Plot a graph for a given dataframe 
def ScatterPlot(df): 
    import matplotlib.pyplot as plt 
    df.describe() 
    df.columns = ['Y', 'X'] 
    df.plot.scatter(x='X', y='Y') 
    plt.show() 

DataSet = DataExtract("a","b") 
Regression(DataSet) 

- 나는 내가 현재 내 기능을 컴파일하는 방법의 단순화 된 예를 아래에 동봉 된이 사이트

에 주로 덕분에 몇 가지 분석 기능을 개발하고 초보자 수준에서 파이썬을 사용하기 시작했습니다 그런 다음 GUI에 의해 호출됩니다. 여기서 우리는 프레임을 생성 한 다음 "회귀 분석"또는 "데이터 수집"기능을 사용하여 사용자가 데이터로 수행하고자하는 작업에 따라 결과를 얻습니다.

사용자는 출력 내가 출력에 도달하기 위해 "결합"함수를 호출해야으로이 건물이 정말 효율적이지 않습니다

import pandas as pd 

    #Extracting the data - Real query would be extracting X and Y from a SQL query and converting to a pandas frame 
    def DataExtract(Y, X): 
      d = {Y : [1, 3, 3, 9, 5], 
       X : [6, 7, 8, 9, 10]} 
      df = pd.DataFrame(d) 
      df = df.copy(deep=True) 
      return df 

    #Build process using the data extracted in DataExtract 
    def Regression(df): 
      from statsmodels.formula.api import ols 
      df.columns = ['Y','X'] 
      model = ols("Y ~ X", df).fit() 
      print(model.summary()) 

    #Plot a graph for a given dataframe 
    def ScatterPlot(df): 
      import matplotlib.pyplot as plt 
      df.columns = ['Y', 'X'] 
      df.plot.scatter(x='X', y='Y') 
      plt.show() 

    def CombinedRegression(Y,X): 
     Regression(DataExtract(Y, X)) 

    def CombinedScatterPlot(Y,X): 
     ScatterPlot(DataExtract(Y, X)) 

    CombinedRegression("given Y","given X") 

    CombinedScatterPlot("given Y","given X") 

를 생성하기 위해 "CombinedRegression"또는 "CombinedScatterPlot"중 하나를 부를 것이다 그것은 회귀 및 ScatterPlot 함수 모두에 사용되는 동일한 데이터 임에도 불구하고 궁극적으로 매번 "DataExtract"함수를 생성해야합니다. 어떤 버튼을 클릭했는지에 따라 GUI는 a 및 b 슬롯을 어느 기능으로도 방출합니다.

궁극적으로 1) 매개 변수 a 및 b를 사용하여 데이터를 추출하고 2) 회귀 또는 산포 음모 또는 둘 다 사용자가 줄 명령을 받았다. 당신이

답변

0

한 가지 방법을 도움을

고마워요은 dataframe X과 dataframe Y 주위에 통과하는 것입니다.

import pandas as pd 

#Extracting the data - Real query would be extracting X and Y from a SQL query and converting to a pandas frame 
def DataExtract(Y, X): 
    d = {Y : [1, 3, 3, 9, 5], 
      X : [6, 7, 8, 9, 10]} 
    return df_X, df_Y 

#Build process using the data extracted in DataExtract 
def Regression(X, Y): 
    from statsmodels.formula.api import ols 
    model = ols("Y ~ X", df).fit() 
    print(model.summary()) 

#Plot a graph for a given dataframe 
def ScatterPlot(X, Y): 
    import matplotlib.pyplot as plt 
    plt.scatter(x=X, y=Y) 
    plt.show() 

if __name__ == '__main__': 
    X, Y = DataExtract() 
    Regression(X, Y) 
    Scatterplot(X, Y) 
+0

안녕 Roelant는 답변 주셔서 감사합니다. 필자가 작성한 시퀀스를 실행하려고 시도했지만 오류가 발생했습니다. pdf.DataFrame과 같이 2 개의 데이터 프레임 df_X, df_Y를 정의하더라도 회귀 또는 ScatterPlot 함수 중 하나로 전달하지 않는 것 같습니다. – MatNaomi

0

정말 필요한 것은 전달해야하는 X, Y 매개 변수로 실행하려는 주 기능을 호출하는 것입니다. 그런 다음 해당 함수 내에서 DataExtract 함수로 전달하면 데이터 프레임을 만들고 반환하며 거기에서 계속됩니다.

import pandas as pd 

#Extracting the data - Real query would be extracting X and Y from a SQL query and converting to a pandas frame 
def DataExtract(Y, X): 
    d = {Y : [1, 3, 3, 9, 5], X : [6, 7, 8, 9, 10]} 
    df = pd.DataFrame(d) 
    return df 

#Build process using the data extracted in DataExtract 
def Regression(X, Y): 
    from statsmodels.formula.api import ols 
    df = DataExtract(X, Y) 
    df.columns = ['Y','X'] 
    model = ols("Y ~ X", df).fit() 
    print(model.summary()) 

#Plot a graph for a given dataframe 
def ScatterPlot(X, Y): 
    import matplotlib.pyplot as plt 
    df = DataExtract(X, Y) 
    df.columns = ['Y', 'X'] 
    df.plot.scatter(x='X', y='Y') 
    plt.show() 

... 사용자가 두 가지를 모두 수행하기를 원한다면, 당신은 같은 것을 할 수있는 :

def DoBoth(X, Y): 
    ScatterPlot(X, Y) 
    Regression(X, Y) 
+0

안녕하세요 pshep, 답변 주셔서 감사합니다. 그러나 시퀀스가 ​​완벽하게 실행되지만 "회귀 분석"또는 "ScatterPlot"을 실행할 때마다 실행되는 DataExtract로 인해 효율성 문제가 발생할 수 있으므로 가능하면 두 데이터 분해를 격리하고 싶습니다. 다른 함수 (실제 "DataExtract"쿼리는 더 많은 메모리를 소비합니다.) 한 번 실행 한 다음 생성 된 프레임을 사용합니다. – MatNaomi

+0

데이터가 호출되는 방식을 정확히 모르는 경우 호출간에 데이터 프레임을 메모리에 유지하지 못할 수도 있습니다. 추출 된 데이터가 전체 데이터 세트보다 상당히 작다고 가정 할 때 데이터 프레임을 파일 (또는 다른 데이터베이스)에 저장하고 호출하는 것이 훨씬 쉽습니다. – pshep123

+0

@MatNaomi - 필요한 경우 두 가지 기능을 모두 실행할 수있는 비트를 추가했습니다. – pshep123