Python数学建模StatsModels统计回归可视化示例详解

目录
  • 1、如何认识可视化?
  • 2、StatsModels 绘图工具包 (Graphics)
  • 3、Matplotlib 绘图工具包
  • 4、Seaborn 绘图工具包
  • 5、多元回归案例分析(Statsmodels)
    • 5.1 问题描述
    • 5.2 问题分析
      • 观察数据分布特征
      • 观察数据间的相关性
      • 建模与拟合
  • 6、Python 例程(Statsmodels)
    • 6.1 问题描述
    • 6.2 Python 程序
    • 6.3 程序运行结果:

1、如何认识可视化?

需要指出的是,虽然不同绘图工具包的功能、效果会有差异,但在常用功能上相差并不是很大。与选择哪种绘图工具包相比,更重要的是针对不同的问题,需要思考选择什么方式、何种图形去展示分析过程和结果。换句话说,可视化只是手段和形式,手段要为目的服务,形式要为内容服务,这个关系一定不能颠倒了。

因此,可视化是伴随着分析问题、解决问题的过程而进行思考、设计和实现的,而且还会影响问题的分析和解决过程:

  • 可视化工具是数据探索的常用手段

回归分析是基于数据的建模,在导入数据后首先要进行数据探索,对给出的或收集的数据有个大概的了解,主要包括数据质量探索和数据特征分析。数据准备中的异常值分析,往往就需要用到箱形图(Boxplot)。对于数据特征的分析,经常使用频率分布图或频率分布直方图(Hist),饼图(Pie)。

  • 分析问题需要可视化工具的帮助

对于问题中变量之间的关系,有些可以通过定性分析来确定或猜想,需要进一步的验证,有些复杂关系难以由分析得到,则要通过对数据进行初步的相关分析来寻找线索。在分析问题、尝试求解的过程中,虽然可以得到各种统计量、特征值,但可视化图形能提供更快捷、直观、丰富的信息,对于发现规律、产生灵感很有帮助。

  • 解题过程需要可视化工具的支持

在解决问题的过程中,也经常会希望尽快获得初步的结果、总体的评价,以便确认解决问题的思路和方法是否正确。这些情况下,我们更关心的往往是绘图的便捷性,图形的表现效果反而是次要的。

  • 可视化是结果发布的重要内容

问题解决之后需要对结果进行呈现或发表,这时则需要结合表达的需要,特别是表达的逻辑框架,设计可视化的方案,选择适当的图形种类和形式,准备图形数据。在此基础上,才谈得上选择何种绘图工具包,如何呈现更好的表现效果。

2、StatsModels 绘图工具包 (Graphics)

Statsmodels 本身支持绘图功能(Graphics),包括拟合图(Fit Plots)、箱线图(Box Plots)、相关图(Correlation Plots)、函数图(Functional Plots)、回归图(Regression Plots)和时间序列图(Time Series Plots)。

Statsmodels 内置绘图功能 Graphics 的使用似乎并不流行,网络上的介绍也不多。分析其原因,一是 Graphics 做的并不太好用,文档和例程不友好,二是学习成本高:能用通用的可视化包实现的功能,何必还要花时间去学习一个专用的 Graphics?

下面是 Statsmodels 官方文档的例程,最简单的单变量线性回归问题,绘制样本数据散点图和拟合直线图。Graphics 提供了将拟合与绘图合二为一的函数 qqline(),但是为了绘制出样本数据则要调用 Matplotlib 的 matplotlib.pyplot.scatter(),所以…

import statsmodels.api as sm
import matplotlib.pyplot as plt
from statsmodels.graphics.gofplots import qqline
foodexp = sm.datasets.engel.load(as_pandas=False)
x = foodexp.exog
y = foodexp.endog
ax = plt.subplot(111)
plt.scatter(x, y)
qqline(ax, "r", x, y)
plt.show()
# = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =

下图看起来有点象 Seaborn中的 relplot,但把官方文档研究了半天也没搞明白,只好直接分析例程和数据,最后的结论是:基本没啥用。

这大概就是更多用户直接选择 Python 的可视化工具包进行绘图的原因吧。最常用的当属 Matplotlib 无疑,而在统计回归分析中 Seaborn 绘图工具包则更好用更炫酷。

3、Matplotlib 绘图工具包

Matplotlib 绘图包就不用介绍了。Matplotlib 用于 Statsmodels 可视化,最大的优势在于Matplotlib 谁都会用,实现统计回归的基本图形的也很简单。如果需要复杂的图形,炫酷的效果,虽然 Matplotlib 原理上也能实现,但往往需要比较繁琐的数据准备,并不常用的函数和参数设置。既然学习成本高,出错概率大,就没必要非 Matplotlib 不可了。

Matplotlib 在统计回归问题中经常用到的是折线图、散点图、箱线图和直方图。这也是 Matplotlib 最常用的绘图形式,本系列文中也有相关例程,本文不再具体介绍相关函数的用法。

例如,在本系列《Python学习笔记-StatsModels 统计回归(2)线性回归》的例程和附图,不仅显示了原始检测数据、理论模型数据、拟合模型数据,而且给出了置信区间的上下限,看起来还是比较“高级”的。但是,如果把置信区间的边界线隐藏起来,图形马上就显得不那么“高级”,比较“平常”了——这就是选择什么方式、何种图形进行展示的区别。

由此所反映的问题,还是表达的逻辑和数据的准备:要表达什么内容,为什么要表达这个内容,有没有相应的数据?问题的关键并不是什么工具包或什么函数,更不是什么颜色什么线性,而是有没有置信区间上下限的数据。

如果需要复杂的图形,炫酷的效果,虽然 Matplotlib 原理上也能实现,但往往需要比较繁琐的数据准备,使用并不常用的函数和参数设置。学习成本高,出错概率大,就没必要非 Matplotlib 不可了。

4、Seaborn 绘图工具包

Seaborn 是在 Matplotlib 上构建的,支持 Scipy 和 Statamodels 的统计模型可视化,可以实现:

  • 赏心悦目的内置主题及颜色主题
  • 展示和比较 一维变量、二维变量 各变量的分布情况
  • 可视化 线性回归模型中的独立变量和关联变量
  • 可视化 矩阵数据,通过聚类算法探究矩阵间的结构
  • 可视化 时间序列,展示不确定性
  • 复杂的可视化,如在分割区域制图

Seaborn 绘图工具包以数据可视化为中心来挖掘与理解数据,本身就带有一定的统计回归功能,而且简单好用,特别适合进行定性分析、初步评价。

下图给出了几种常用的 Seaborn 图形,分别是带拟合线的直方图(distplot)、箱线图(boxplot)、散点图(scatterplot)和回归图(regplot),后文给出了对应的程序。

实际上,这些图形用 StatsModels Graphics、Matplotlib 也可以绘制,估计任何绘图包都可以实现。那么,为什么还要推荐 Seaborn 工具包,把这些图归入 Seaborn 的实例呢?我们来看看实现的例程就明白了:简单,便捷,舒服。不需要数据准备和变换处理,直接调用变量数据,自带回归功能;不需要复杂的参数设置,直接给出舒服的图形,自带图形风格设计。

    fig1, axes = plt.subplots(2, 2, figsize=(10, 8))  # 创建一个 2行 2列的画布
    sns.distplot(df['price'], bins=10, ax=axes[0, 0])  # axes[0,1] 左上图
    sns.boxplot(df['price'], df['sales'], data=df, ax=axes[0, 1])  # axes[0,1] 右上图
    sns.scatterplot(x=df['advertise'], y=df['sales'], ax=axes[1, 0])  # axes[1,0] 左下图
    sns.regplot(x=df['difference'], y=df['sales'], ax=axes[1, 1])  # axes[1,1] 右下图
    plt.show()

5、多元回归案例分析(Statsmodels)

5.1 问题描述

数据文件中收集了 30个月本公司牙膏销售量、价格、广告费用及同期的市场均价。
  (1)分析牙膏销售量与价格、广告投入之间的关系,建立数学模型;
  (2)估计所建立数学模型的参数,进行统计分析;
  (3)利用拟合模型,预测在不同价格和广告费用下的牙膏销售量。

本问题及数据来自:姜启源、谢金星,数学模型(第 3版),高等教育出版社。

5.2 问题分析

本案例在Python数学建模StatsModels统计回归模型数据的准备中就曾出现,文中还提到该文的例程并不是最佳的求解方法和结果。

这是因为该文例程是直接将所有给出的特征变量(销售价格、市场均价、广告费、价格差)都作为自变量,直接进行线性回归。谢金星老师说,这不科学。科学的方法是先分析这些特征变量对目标变量(销量)的影响,然后选择能影响目标的特征变量,或者对特征变量进行适当变换(如:平方、对数)后,再进行线性回归。以下参考视频教程中的解题思路进行分析。

观察数据分布特征

案例问题的数据量很小,数据完整规范,实际上并不需要进行数据探索和数据清洗,不过可以看一下数据的分布特性。例程和结果如下,我是没看出什么名堂来,与正态分布的差距都不小。

    # 数据探索:分布特征
    fig1, axes = plt.subplots(2, 2, figsize=(10, 8))  # 创建一个 2行 2列的画布
    sns.distplot(dfData['price'], bins=10, ax=axes[0,0])  # axes[0,1] 左上图
    sns.distplot(dfData['average'], bins=10, ax=axes[0,1])  # axes[0,1] 右上图
    sns.distplot(dfData['advertise'], bins=10, ax=axes[1,0])  # axes[1,0] 左下图
    sns.distplot(dfData['difference'], bins=10, ax=axes[1,1])  # axes[1,1] 右下图
    plt.show()

观察数据间的相关性

既然将所有特征变量都作为自变量直接进行线性回归不科学,就要先对每个自变量与因变量的关系进行考察。

    # 数据探索:相关性
    fig2, axes = plt.subplots(2, 2, figsize=(10, 8))  # 创建一个 2行 2列的画布
    sns.regplot(x=dfData['price'], y=dfData['sales'], ax=axes[0,0])
    sns.regplot(x=dfData['average'], y=dfData['sales'], ax=axes[0,1])
    sns.regplot(x=dfData['advertise'], y=dfData['sales'], ax=axes[1,0])
    sns.regplot(x=dfData['difference'], y=dfData['sales'], ax=axes[1,1])
    plt.show()
    # = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =

单变量线性回归图还是很有价值的。首先上面两图(sales-price,sales-average)的数据点分散,与回归直线差的太远,说明与销量的相关性小——谢金星老师讲课中也是这样分析的。其次下面两图(sales-advertise,sales-difference)的线性度较高,至少比上图好多了,回归直线和置信区间也反映出线性关系。因此,可以将广告费(advertise)、价格差(difference)作为自变量建模进行线性回归。

进一步地,有人观察散点图后认为销量与广告费的关系(sales-advertise)更接近二次曲线,对此也可以通过回归图对 sales 与 advertise 进行高阶多项式回归拟合,结果如下图。

建模与拟合

模型1:将所有特征变量都作为自变量直接进行线性回归,这就是《模型数据的准备》中的方案。

模型 2:选择价格差(difference)、广告费(advertise)作为自变量建模进行线性回归。

模型 3:选择价格差(difference)、广告费(advertise)及广告费的平方项作为作为自变量建模进行线性回归。

下段给出了使用不同模型进行线性回归的例程和运行结果。对于这个问题的分析和结果讨论,谢金星老师在视频中讲的很详细,网络上也有不少相关文章。由于本文主要讲可视化,对结果就不做详细讨论了。

6、Python 例程(Statsmodels)

6.1 问题描述

数据文件中收集了 30个月本公司牙膏销售量、价格、广告费用及同期的市场均价。
  (1)分析牙膏销售量与价格、广告投入之间的关系,建立数学模型;
  (2)估计所建立数学模型的参数,进行统计分析;
  (3)利用拟合模型,预测在不同价格和广告费用下的牙膏销售量。

6.2 Python 程序

# LinearRegression_v4.py
# v4.0: 分析和结果的可视化
# 日期:2021-05-08
# Copyright 2021 YouCans, XUPT
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.sandbox.regression.predstd import wls_prediction_std
import matplotlib.pyplot as plt
import seaborn as sns
# 主程序 = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =
def main():
    # 读取数据文件
    readPath = "../data/toothpaste.csv"  # 数据文件的地址和文件名
    dfOpenFile = pd.read_csv(readPath, header=0, sep=",")  # 间隔符为逗号,首行为标题行
    # 准备建模数据:分析因变量 Y(sales) 与 自变量 x1~x4  的关系
    dfData = dfOpenFile.dropna()  # 删除含有缺失值的数据
    sns.set_style('dark')
    # 数据探索:分布特征
    fig1, axes = plt.subplots(2, 2, figsize=(10, 8))  # 创建一个 2行 2列的画布
    sns.distplot(dfData['price'], bins=10, ax=axes[0,0])  # axes[0,1] 左上图
    sns.distplot(dfData['average'], bins=10, ax=axes[0,1])  # axes[0,1] 右上图
    sns.distplot(dfData['advertise'], bins=10, ax=axes[1,0])  # axes[1,0] 左下图
    sns.distplot(dfData['difference'], bins=10, ax=axes[1,1])  # axes[1,1] 右下图
    plt.show()
    # 数据探索:相关性
    fig2, axes = plt.subplots(2, 2, figsize=(10, 8))  # 创建一个 2行 2列的画布
    sns.regplot(x=dfData['price'], y=dfData['sales'], ax=axes[0,0])
    sns.regplot(x=dfData['average'], y=dfData['sales'], ax=axes[0,1])
    sns.regplot(x=dfData['advertise'], y=dfData['sales'], ax=axes[1,0])
    sns.regplot(x=dfData['difference'], y=dfData['sales'], ax=axes[1,1])
    plt.show()
    # 数据探索:考察自变量平方项的相关性
    fig3, axes = plt.subplots(1, 2, figsize=(10, 4))  # 创建一个 2行 2列的画布
    sns.regplot(x=dfData['advertise'], y=dfData['sales'], order=2, ax=axes[0])  # order=2, 按 y=b*x**2 回归
    sns.regplot(x=dfData['difference'], y=dfData['sales'], order=2, ax=axes[1])  # YouCans, XUPT
    plt.show()
    # 线性回归:分析因变量 Y(sales) 与 自变量 X1(Price diffrence)、X2(Advertise) 的关系
    y = dfData['sales']  # 根据因变量列名 list,建立 因变量数据集
    x0 = np.ones(dfData.shape[0])  # 截距列 x0=[1,...1]
    x1 = dfData['difference']  # 价格差,x4 = x1 - x2
    x2 = dfData['advertise']  # 广告费
    x3 = dfData['price']  # 销售价格
    x4 = dfData['average']  # 市场均价
    x5 = x2**2  # 广告费的二次元
    x6 = x1 * x2  # 考察两个变量的相互作用
    # Model 1:Y = b0 + b1*X1 + b2*X2 + e
    # # 线性回归:分析因变量 Y(sales) 与 自变量 X1(Price diffrence)、X2(Advertise) 的关系
    X = np.column_stack((x0,x1,x2))  # [x0,x1,x2]
    Model1 = sm.OLS(y, X)  # 建立 OLS 模型: Y = b0 + b1*X1 + b2*X2 + e
    result1 = Model1.fit()  # 返回模型拟合结果
    yFit1 = result1.fittedvalues  # 模型拟合的 y 值
    prstd, ivLow, ivUp = wls_prediction_std(result1) # 返回标准偏差和置信区间
    print(result1.summary())  # 输出回归分析的摘要
    print("\nModel1: Y = b0 + b1*X + b2*X2")
    print('Parameters: ', result1.params)  # 输出:拟合模型的系数
    # # Model 2:Y = b0 + b1*X1 + b2*X2 + b3*X3 + b4*X4 + e
    # 线性回归:分析因变量 Y(sales) 与 自变量 X1~X4 的关系
    X = np.column_stack((x0,x1,x2,x3,x4))  #[x0,x1,x2,...,x4]
    Model2 = sm.OLS(y, X)  # 建立 OLS 模型: Y = b0 + b1*X1 + b2*X2 + b3*X3 + e
    result2 = Model2.fit()  # 返回模型拟合结果
    yFit2 = result2.fittedvalues  # 模型拟合的 y 值
    prstd, ivLow, ivUp = wls_prediction_std(result2) # 返回标准偏差和置信区间
    print(result2.summary())  # 输出回归分析的摘要
    print("\nModel2: Y = b0 + b1*X + ... + b4*X4")
    print('Parameters: ', result2.params)  # 输出:拟合模型的系数
    # # Model 3:Y = b0 + b1*X1 + b2*X2 + b3*X2**2 + e
    # # 线性回归:分析因变量 Y(sales) 与 自变量 X1、X2 及 X2平方(X5)的关系
    X = np.column_stack((x0,x1,x2,x5))  # [x0,x1,x2,x2**2]
    Model3 = sm.OLS(y, X)  # 建立 OLS 模型: Y = b0 + b1*X1 + b2*X2 + b3*X2**2 + e
    result3 = Model3.fit()  # 返回模型拟合结果
    yFit3 = result3.fittedvalues  # 模型拟合的 y 值
    prstd, ivLow, ivUp = wls_prediction_std(result3) # 返回标准偏差和置信区间
    print(result3.summary())  # 输出回归分析的摘要
    print("\nModel3: Y = b0 + b1*X1 + b2*X2 + b3*X2**2")
    print('Parameters: ', result3.params)  # 输出:拟合模型的系数
    # 拟合结果绘图
    fig, ax = plt.subplots(figsize=(8,6))  # YouCans, XUPT
    ax.plot(range(len(y)), y, 'b-.', label='Sample')  # 样本数据
    ax.plot(range(len(y)), yFit3, 'r-', label='Fitting')  # 拟合数据
    # ax.plot(range(len(y)), yFit2, 'm--', label='fitting')  # 拟合数据
    ax.plot(range(len(y)), ivUp, '--',color='pink',label="ConfR")  # 95% 置信区间 上限
    ax.plot(range(len(y)), ivLow, '--',color='pink')  # 95% 置信区间 下限
    ax.legend(loc='best')  # 显示图例
    plt.title('Regression analysis with sales of toothpaste')
    plt.xlabel('period')
    plt.ylabel('sales')
    plt.show()
    return
if __name__ == '__main__':
    main()

6.3 程序运行结果:

                            OLS Regression Results
==============================================================================
Dep. Variable:                  sales   R-squared:                       0.886
Model:                            OLS   Adj. R-squared:                  0.878
Method:                 Least Squares   F-statistic:                     105.0
Date:                Sat, 08 May 2021   Prob (F-statistic):           1.84e-13
Time:                        22:18:04   Log-Likelihood:                 2.0347
No. Observations:                  30   AIC:                             1.931
Df Residuals:                      27   BIC:                             6.134
Df Model:                           2
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          4.4075      0.722      6.102      0.000       2.925       5.890
x1             1.5883      0.299      5.304      0.000       0.974       2.203
x2             0.5635      0.119      4.733      0.000       0.319       0.808
==============================================================================
Omnibus:                        1.445   Durbin-Watson:                   1.627
Prob(Omnibus):                  0.486   Jarque-Bera (JB):                0.487
Skew:                           0.195   Prob(JB):                        0.784
Kurtosis:                       3.486   Cond. No.                         115.
==============================================================================
Model1: Y = b0 + b1*X + b2*X2
Parameters:
const    4.407493
x1       1.588286
x2       0.563482
                            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:                Sat, 08 May 2021   Prob (F-statistic):           7.12e-13
Time:                        22:18:04   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.3832      0.288      4.798      0.000       0.791       1.976
x2             0.4927      0.125      3.938      0.001       0.236       0.750
x3            -1.1184      0.398     -2.811      0.009      -1.936      -0.300
x4             0.2648      0.199      1.332      0.195      -0.144       0.674
==============================================================================
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
==============================================================================
Model2: Y = b0 + b1*X + ... + b4*X4
Parameters:
const    8.036813
x1       1.383207
x2       0.492728
x3      -1.118418
x4       0.264789
                            OLS Regression Results
==============================================================================
Dep. Variable:                  sales   R-squared:                       0.905
Model:                            OLS   Adj. R-squared:                  0.894
Method:                 Least Squares   F-statistic:                     82.94
Date:                Sat, 08 May 2021   Prob (F-statistic):           1.94e-13
Time:                        22:18:04   Log-Likelihood:                 4.8260
No. Observations:                  30   AIC:                            -1.652
Df Residuals:                      26   BIC:                             3.953
Df Model:                           3
Covariance Type:            nonrobust
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         17.3244      5.641      3.071      0.005       5.728      28.921
x1             1.3070      0.304      4.305      0.000       0.683       1.931
x2            -3.6956      1.850     -1.997      0.056      -7.499       0.108
x3             0.3486      0.151      2.306      0.029       0.038       0.659
==============================================================================
Omnibus:                        0.631   Durbin-Watson:                   1.619
Prob(Omnibus):                  0.729   Jarque-Bera (JB):                0.716
Skew:                           0.203   Prob(JB):                        0.699
Kurtosis:                       2.362   Cond. No.                     6.33e+03
==============================================================================
Model3: Y = b0 + b1*X1 + b2*X2 + b3*X2**2
Parameters:
const    17.324369
x1        1.306989
x2       -3.695587
x3        0.348612

以上就是Python数学建模StatsModels统计回归可视化的详细内容,更多关于数学建模StatsModels统计回归的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python数学建模库StatsModels统计回归简介初识

    目录 1.关于 StatsModels 2.文档 3.主要功能 4.获取和安装 1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 2.文档 最新版本的文档位于: https://www.statsmodels.org/stable/ 3.主要功能 1.线性回归模型: 普通最小二乘法 广义最小二乘法 加权最小二乘法 具有自回归误差的最小二乘法 分位数回归 递

  • Python数学建模StatsModels统计回归之线性回归示例详解

    目录 1.背景知识 1.1 插值.拟合.回归和预测 1.2 线性回归 2.Statsmodels 进行线性回归 2.1 导入工具包 2.2 导入样本数据 2.3 建模与拟合 2.4 拟合和统计结果的输出 3.一元线性回归 3.1 一元线性回归 Python 程序: 3.2 一元线性回归 程序运行结果: 4.多元线性回归 4.1 多元线性回归 Python 程序: 4.2 多元线性回归 程序运行结果: 5.附录:回归结果详细说明 1.背景知识 1.1 插值.拟合.回归和预测 插值.拟合.回归和预测

  • Python数据可视化 pyecharts实现各种统计图表过程详解

    1.pyecharts介绍 Echarts是一款由百度公司开发的开源数据可视化JS库,pyecharts是一款使用python调用echarts生成数据可视化的类库,可实现柱状图,折线图,饼状图,地图等统计图表. 2.柱状图 适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的比较情况. 优点: 利用柱子的高度,反映数据的差异,肉眼对高度差异很敏感. 缺点: 只适用中小规模的数据集. 柱状图最基本用法 from pyechart

  • Python数学建模StatsModels统计回归模型数据的准备

    目录 1.读取数据文件 (1)读取 .csv 文件: (2)读取 .xls 文件: (3)读取 .txt 文件: 2.数据文件的拆分与合并 (1)将 Excel 文件分割为多个文件 (2)将 多个 Excel 文件合并为一个文件 3.数据的预处理 (1)缺失数据的处理 (2)重复数据的处理 (3)异常值处理 4.Python 例程(Statsmodels) 4.1 问题描述 4.2 Python 程序 4.3 程序运行结果: 版权说明: 1.读取数据文件 回归分析问题所用的数据都是保存在数据文件

  • 利用python实现周期财务统计可视化

    正文之前 上午给爸爸打了个电话庆祝他50岁生日,在此之前搞了个大扫除,看了会知乎,到实验室已经十一点多了.约喜欢的妹子吃饭失败,以至于工作积极性收到了打击,所以就写个程序来统计下开学十一天的财务消费情况,更清楚的认识自己. 正文 废话不多说,先放代码: import matplotlib.pyplot as plt import matplotlib from pylab import mpl plt.rcParams['font.sans-serif']=['SimHei'] def getA

  • Python数学建模StatsModels统计回归可视化示例详解

    目录 1.如何认识可视化? 2.StatsModels 绘图工具包 (Graphics) 3.Matplotlib 绘图工具包 4.Seaborn 绘图工具包 5.多元回归案例分析(Statsmodels) 5.1 问题描述 5.2 问题分析 观察数据分布特征 观察数据间的相关性 建模与拟合 6.Python 例程(Statsmodels) 6.1 问题描述 6.2 Python 程序 6.3 程序运行结果: 1.如何认识可视化? 需要指出的是,虽然不同绘图工具包的功能.效果会有差异,但在常用功

  • Python数学建模PuLP库线性规划入门示例详解

    目录 1.什么是线性规划 2.PuLP 库求解线性规划 -(0)导入 PuLP库函数 -(1)定义一个规划问题 -(2)定义决策变量 -(3)添加目标函数 -(4)添加约束条件 -(5)求解 3.Python程序和运行结果 1.什么是线性规划 线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配.生产调度和混合问题.例如: max fx = 2*x1 + 3*x2 - 5*x3 s.t. x1 + 3*x2 + x3 <=

  • Python垃圾邮件的逻辑回归分类示例详解

     加载垃圾邮件数据集spambase.csv(数据集基本信息:样本数: 4601,特征数量: 57, 类别: 1 为垃圾邮件,0 为非垃圾邮件),阅读并理解数据. 按以下要求处理数据集 (1)分离出仅含特征列的部分作为 X 和仅含目标列的部分作为 Y. (2)将数据集拆分成训练集和测试集(70%和 30%). 建立逻辑回归模型 分别用 LogisticRegression 建模. 结果比对 (1)输出测试集前 5 个样本的预测结果. (2)计算模型在测试集上的分类准确率(=正确分类样本数/测试集

  • Python数学建模学习模拟退火算法旅行商问题示例解析

    目录 1.旅行商问题(Travelling salesman problem, TSP) 2.模拟退火算法求解旅行商问题 3. 程序说明 4.模拟退火算法求解旅行商问题 Python 程序 5.运行结果 1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权重最小的Hamilton回路:设有 n个城市和距离矩阵 D=[dij],其中dij表示城市i到城

  • python编程普通及类和静态方法示例详解

    目录 前言 运行环境 普通方法 类方法 静态方法 前言 本文主要讲述了python类中的三类常用方法,普通方法.类方法和静态方法.  本文主要参考了https://youtu.be/rq8cL2XMM5M,强烈推荐一看这个系列的所有视频. 运行环境 import sys sys.version 结果为 '3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]' 普通方

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

  • 对python GUI实现完美进度条的示例详解

    在用python做一个GUI界面时,想搞一个进度条实时显示下载进度,但查阅很多博客,最后的显示效果都类似下面这种: 这种效果在CMD界面看着还可以,但放到图形界面时就有点丑了,所以我用Canvas重新做了一个进度条,完美满足了我的要求,看着也比较舒服. import time import threading from tkinter import * def update_progress_bar(): for percent in range(1, 101): hour = int(perc

  • python中前缀运算符 *和 **的用法示例详解

    这篇主要探讨 ** 和 * 前缀运算符,**在变量之前使用的*and **运算符. 一个星(*):表示接收的参数作为元组来处理 两个星(**):表示接收的参数作为字典来处理 简单示例: >>> numbers = [2, 1, 3, 4, 7] >>> more_numbers = [*numbers, 11, 18] >>> print(*more_numbers, sep=', ') 2, 1, 3, 4, 7, 11, 18 用途: 使用 * 和

随机推荐