最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)學(xué)建模StatsModels統(tǒng)計回歸模型數(shù)據(jù)的準備

 更新時間:2021年10月18日 16:54:10   作者:youcans  
這篇文章主要介紹了Python數(shù)學(xué)建模StatsModels統(tǒng)計回歸模型數(shù)據(jù)的準備學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

1、讀取數(shù)據(jù)文件

回歸分析問題所用的數(shù)據(jù)都是保存在數(shù)據(jù)文件中的,首先就要從數(shù)據(jù)文件讀取數(shù)據(jù)。

數(shù)據(jù)文件的格式很多,最常用的是 .csv,.xls 和 .txt 文件,以及 sql 數(shù)據(jù)庫文件的讀取 。

使用 pandas 從數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)的程序最為簡單,示例如下:

(1)讀取 .csv 文件:

    df = pd.read_csv("./example.csv", engine="python", encoding="utf_8_sig")
    # engine="python"允許處理中文路徑,encoding="utf_8_sig"允許讀取中文數(shù)據(jù)

(2)讀取 .xls 文件:

df = pd.read_excel("./example.xls", sheetname='Sheet1', header=0, encoding="utf_8_sig")
    # sheetname 表示讀取的sheet,header=0 表示首行為標題行, encoding 表示編碼方式

(3)讀取 .txt 文件:

    df = pd.read_table("./example.txt", sep="\t", header=None)
    # sep 表示分隔符,header=None表示無標題行,第一行是數(shù)據(jù)

2、數(shù)據(jù)文件的拆分與合并

統(tǒng)計回歸所需處理的數(shù)據(jù)量可能非常大,必要時需對文件進行拆分或合并,也可以用 pandas 進行處理,示例如下:

(1)將 Excel 文件分割為多個文件

    # 將 Excel 文件分割為多個文件
    import pandas as pd
    dfData = pd.read_excel('./example.xls', sheetname='Sheet1')
    nRow, nCol = dfData.shape  # 獲取數(shù)據(jù)的行列
    # 假設(shè)數(shù)據(jù)共有198,000行,分割為 20個文件,每個文件 10,000行
    for i in range(0, int(nRow/10000)+1):
        saveData = dfData.iloc[i*10000+1:(i+1)*10000+1, :]  # 每隔 10,000
        fileName= './example_{}.xls'.format(str(i))
        saveData.to_excel(fileName, sheet_name = 'Sheet1', index = False)

(2)將 多個 Excel 文件合并為一個文件

    # 將多個 Excel 文件合并為一個文件
    import pandas as pd
    ## 兩個 Excel 文件合并
    #data1 = pd.read_excel('./example0.xls', sheetname='Sheet1')
    #data2 = pd.read_excel('./example1.xls', sheetname='Sheet1')
    #data = pd.concat([data1, data2])
    # 多個 Excel 文件合并
    dfData = pd.read_excel('./example0.xls', sheetname='Sheet1')
    for i in range(1, 20):
        fileName = './example_{}.xls'.format(str(i))
        dfNew = pd.read_excel(fileName)
        dfData = pd.concat([dfData, dfNew])
    dfData.to_excel('./example', index = False)
    # = 關(guān)注 Youcans,分享原創(chuàng)系列 https://blog.csdn.net/youcans =

3、數(shù)據(jù)的預(yù)處理

在實際工作中,在開始建立模型和擬合分析之前,還要對原始數(shù)據(jù)進行數(shù)據(jù)預(yù)處理(data preprocessing),主要包括:缺失值處理、重復(fù)數(shù)據(jù)處理、異常值處理、變量格式轉(zhuǎn)換、訓(xùn)練集劃分、數(shù)據(jù)的規(guī)范化、歸一化等。

數(shù)據(jù)預(yù)處理的很多內(nèi)容已經(jīng)超出了 Statsmodels 的范圍,在此只介紹最基本的方法:

(1)缺失數(shù)據(jù)的處理

導(dǎo)入的數(shù)據(jù)存在缺失是經(jīng)常發(fā)生的,最簡單的處理方式是刪除缺失的數(shù)據(jù)行。使用 pandas 中的 .dropna() 刪除含有缺失值的行或列,也可以 對特定的列進行缺失值刪除處理 。

    dfNew = dfData.dropna(axis = 0))  # 刪除含有缺失值的行

有時也會填充缺失值或替換缺失值,在此就不做介紹了。 

(2)重復(fù)數(shù)據(jù)的處理

對于重復(fù)數(shù)據(jù),通常會刪除重復(fù)行。使用 pandas 中的 .duplicated() 可以查詢重復(fù)數(shù)據(jù)的內(nèi)容,使用 .drop_duplicated() 可以刪除重復(fù)數(shù)據(jù),也可以對指定的數(shù)據(jù)列進行去重。

    dfNew = dfData.drop_duplicates(inplace=True)  # 刪除重復(fù)的數(shù)據(jù)行

(3)異常值處理

數(shù)據(jù)中可能包括異常值, 是指一個樣本中的數(shù)值明顯偏離樣本集中其它樣本的觀測值,也稱為離群點。異常值可以通過箱線圖、正態(tài)分布圖進行識別,也可以通過回歸、聚類建模進行識別。

箱線圖技術(shù)是利用數(shù)據(jù)的分位數(shù)識別其中的異常點。箱形圖分析也超過本文的內(nèi)容,不能詳細介紹了。只能籠統(tǒng)地說通過觀察箱形圖,可以查看整體的異常情況,進而發(fā)現(xiàn)異常值。

    dfData.boxplot()  # 繪制箱形圖

對于異常值通常不易直接刪除,需要結(jié)合具體情況進行考慮和處理。使用 pandas 中的 .drop() 可以直接刪除異常值數(shù)據(jù)行,或者使用判斷條件來判定并刪除異常值數(shù)據(jù)行。

    # 按行刪除,drop() 默認 axis=0 按行刪除
    dfNew = dfData.drop(labels=0)   # 按照行號 labels,刪除 行號為 0 的行
    dfNew = dfData.drop(index=dfData[dfData['A']==-1].index[0])   # 按照條件檢索,刪除 dfData['A']=-1 的行

4、Python 例程(Statsmodels)

4.1 問題描述

數(shù)據(jù)文件中收集了 30個月本公司牙膏銷售量、價格、廣告費用及同期的市場均價。
 ?。?)分析牙膏銷售量與價格、廣告投入之間的關(guān)系,建立數(shù)學(xué)模型;
 ?。?)估計所建立數(shù)學(xué)模型的參數(shù),進行統(tǒng)計分析;
 ?。?)利用擬合模型,預(yù)測在不同價格和廣告費用下的牙膏銷售量。

本問題及數(shù)據(jù)來自:姜啟源、謝金星,數(shù)學(xué)模型(第 3版),高等教育出版社。
需要說明的是,本文例程并不是問題最佳的求解方法和結(jié)果,只是使用該問題及數(shù)據(jù)示范讀取數(shù)據(jù)文件和數(shù)據(jù)處理的方法。

4.2 Python 程序

# LinearRegression_v3.py
# v1.0: 調(diào)用 statsmodels 實現(xiàn)一元線性回歸
# v2.0: 調(diào)用 statsmodels 實現(xiàn)多元線性回歸
# v3.0: 從文件讀取數(shù)據(jù)樣本
# 日期:2021-05-06
# Copyright 2021 YouCans, XUPT
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
def main():
    # 讀取數(shù)據(jù)文件
    readPath = "../data/toothpaste.csv"  # 數(shù)據(jù)文件的地址和文件名
    try:
        if (readPath[-4:] == ".csv"):
            dfOpenFile = pd.read_csv(readPath, header=0, sep=",")  # 間隔符為逗號,首行為標題行
            # dfOpenFile = pd.read_csv(filePath, header=None, sep=",")  # sep: 間隔符,無標題行
        elif (readPath[-4:] == ".xls") or (readPath[-5:] == ".xlsx"):  # sheet_name 默認為 0
            dfOpenFile = pd.read_excel(readPath, header=0)  # 首行為標題行
            # dfOpenFile = pd.read_excel(filePath, header=None)  # 無標題行
        elif (readPath[-4:] == ".dat"):  # sep: 間隔符,header:首行是否為標題行
            dfOpenFile = pd.read_table(readPath, sep=" ", header=0)  # 間隔符為空格,首行為標題行
            # dfOpenFile = pd.read_table(filePath,sep=",",header=None) # 間隔符為逗號,無標題行
        else:
            print("不支持的文件格式。")
        print(dfOpenFile.head())
    except Exception as e:
        print("讀取數(shù)據(jù)文件失敗:{}".format(str(e)))
        return
    # 數(shù)據(jù)預(yù)處理
    dfData = dfOpenFile.dropna()  # 刪除含有缺失值的數(shù)據(jù)
    print(dfData.dtypes)  # 查看 df 各列的數(shù)據(jù)類型
    print(dfData.shape)  # 查看 df 的行數(shù)和列數(shù)
    # colNameList = dfData.columns.tolist()  # 將 df 的列名轉(zhuǎn)換為列表 list
    # print(colNameList)  # 查看列名列表 list
    # featureCols = ['price', 'average', 'advertise', 'difference']  # 篩選列,建立自變量列名 list
    # X = dfData[['price', 'average', 'advertise', 'difference']]  # 根據(jù)自變量列名 list,建立 自變量數(shù)據(jù)集
    # 準備建模數(shù)據(jù):分析因變量 Y(sales) 與 自變量 x1~x4  的關(guān)系
    y = dfData.sales  # 根據(jù)因變量列名 list,建立 因變量數(shù)據(jù)集
    x0 = np.ones(dfData.shape[0])  # 截距列 x0=[1,...1]
    x1 = dfData.price  # 銷售價格
    x2 = dfData.average  # 市場均價
    x3 = dfData.advertise  # 廣告費
    x4 = dfData.difference  # 價格差,x4 = x1 - x2
    X = np.column_stack((x0,x1,x2,x3,x4))  #[x0,x1,x2,...,x4]
    # 建立模型與參數(shù)估計
    # Model 1:Y = b0 + b1*X1 + b2*X2 + b3*X3 + b4*X4 + e
    model = sm.OLS(y, X)  # 建立 OLS 模型
    results = model.fit()  # 返回模型擬合結(jié)果
    yFit = results.fittedvalues  # 模型擬合的 y 值
    print(results.summary())  # 輸出回歸分析的摘要
    print("\nOLS model: Y = b0 + b1*X + ... + bm*Xm")
    print('Parameters: ', results.params)  # 輸出:擬合模型的系數(shù)
    # 擬合結(jié)果繪圖
    fig, ax = plt.subplots(figsize=(10, 8))
    ax.plot(range(len(y)), y, 'bo', label='sample')
    ax.plot(range(len(yFit)), yFit, 'r--', label='predict')
    ax.legend(loc='best')  # 顯示圖例
    plt.show()  # YouCans, XUPT
    return
if __name__ == '__main__':
    main()

4.3 程序運行結(jié)果:

   period  price  average  advertise  difference  sales
0       1   3.85     3.80       5.50       -0.05   7.38
1       2   3.75     4.00       6.75        0.25   8.51
2       3   3.70     4.30       7.25        0.60   9.52
3       4   3.70     3.70       5.50        0.00   7.50
4       5   3.60     3.85       7.00        0.25   9.33
OLS Regression Results                            
==============================================================================
Dep. Variable:                  sales   R-squared:                       0.895
Model:                            OLS   Adj. R-squared:                  0.883
Method:                 Least Squares   F-statistic:                     74.20
Date:                Fri, 07 May 2021   Prob (F-statistic):           7.12e-13
Time:                        11:51:52   Log-Likelihood:                 3.3225
No. Observations:                  30   AIC:                             1.355
Df Residuals:                      26   BIC:                             6.960
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          8.0368      2.480      3.241      0.003       2.940      13.134
x1            -1.1184      0.398     -2.811      0.009      -1.936      -0.300
x2             0.2648      0.199      1.332      0.195      -0.144       0.674
x3             0.4927      0.125      3.938      0.001       0.236       0.750
x4             1.3832      0.288      4.798      0.000       0.791       1.976
==============================================================================
Omnibus:                        0.141   Durbin-Watson:                   1.762
Prob(Omnibus):                  0.932   Jarque-Bera (JB):                0.030
Skew:                           0.052   Prob(JB):                        0.985
Kurtosis:                       2.885   Cond. No.                     2.68e+16
==============================================================================
OLS model: Y = b0 + b1*X + ... + bm*Xm
Parameters:  const    8.036813
x1      -1.118418
x2       0.264789
x3       0.492728
x4       1.383207

在這里插入圖片描述

版權(quán)說明:

本問題及數(shù)據(jù)來自:姜啟源、謝金星,數(shù)學(xué)模型(第 3版),高等教育出版社
本文內(nèi)容及例程為作者原創(chuàng),并非轉(zhuǎn)載書籍或網(wǎng)絡(luò)內(nèi)容。

以上就是Python數(shù)學(xué)建模StatsModels統(tǒng)計回歸模型數(shù)據(jù)的準備的詳細內(nèi)容,更多關(guān)于數(shù)學(xué)建模StatsModels統(tǒng)計回歸模型數(shù)據(jù)準備的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python dict如何定義

    python dict如何定義

    在本篇文章里小編給大家整理的是關(guān)于python dict如何定義的相關(guān)知識點內(nèi)容,需要的朋友們可以參考下。
    2020-09-09
  • 各個系統(tǒng)下的Python解釋器相關(guān)安裝方法

    各個系統(tǒng)下的Python解釋器相關(guān)安裝方法

    這篇文章主要介紹了各個系統(tǒng)下的Python解釋器相關(guān)安裝方法,Python在很多Linux發(fā)行版中已經(jīng)被默認安裝,需要的朋友可以參考下
    2015-10-10
  • Python+logging輸出到屏幕將log日志寫入文件

    Python+logging輸出到屏幕將log日志寫入文件

    這篇文章主要給大家介紹了關(guān)于Python+logging輸出到屏幕將log日志寫入文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python pandas庫中的isnull()詳解

    Python pandas庫中的isnull()詳解

    今天小編就為大家分享一篇Python pandas庫中的isnull()詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 簡單談?wù)刾ython的反射機制

    簡單談?wù)刾ython的反射機制

    本文主要介紹python中的反射,以及該機制的簡單應(yīng)用,熟悉JAVA的程序員,一定經(jīng)常和Class.forName打交道。在很多框架中(Spring,eclipse plugin機制)都依賴于JAVA的反射能力,而在python中,也同樣有著強大的反射能力,本文將做簡單的介紹
    2016-06-06
  • 對Python的Django框架中的項目進行單元測試的方法

    對Python的Django框架中的項目進行單元測試的方法

    這篇文章主要介紹了對Python的Django框架中的項目進行單元測試的方法,使用Django中的tests.py模塊可以輕松地檢測出一些常見錯誤,需要的朋友可以參考下
    2016-04-04
  • win10系統(tǒng)下Anaconda3安裝配置方法圖文教程

    win10系統(tǒng)下Anaconda3安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了win10系統(tǒng)下Anaconda3安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能

    Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能

    這篇文章主要介紹了Flask項目中實現(xiàn)短信驗證碼和郵箱驗證碼功能,需本文通過截圖實例代碼的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2019-12-12
  • python安裝讀取grib庫總結(jié)(推薦)

    python安裝讀取grib庫總結(jié)(推薦)

    這篇文章主要介紹了python安裝讀取grib庫總結(jié),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Pytorch中膨脹卷積的用法詳解

    Pytorch中膨脹卷積的用法詳解

    今天小編就為大家分享一篇Pytorch中膨脹卷積的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論

合水县| 普安县| 胶南市| 嘉鱼县| 岢岚县| 万安县| 武城县| 德庆县| 浑源县| 龙门县| 宣恩县| 长葛市| 招远市| 淮阳县| 江口县| 阜康市| 吉木萨尔县| 云梦县| 慈溪市| 潮安县| 潞西市| 皮山县| 绩溪县| 曲靖市| 察雅县| 渑池县| 灵寿县| 合山市| 青岛市| 常山县| 奈曼旗| 陆河县| 疏附县| 余江县| 朝阳区| 梅州市| 衡水市| 霍邱县| 内黄县| 潜江市| 衡阳县|