数据处理和拟合模型——学习复盘

大家好,面对数学建模国赛的来临,今天我给大家总结了本人学习数据处理和拟合模型的知识总结,无论是参加国赛的大咖,还是零基础的小白,更是Ai的学习中,都离不开我们的数学建模知识,在这里我会用最全的知识复盘,让大家找到幸福开始的大门。

本章主要涉及到的知识点有:

  • 数据与大数据
  • Python数据预处理
  • 常见的统计分析模型
  • 随机过程与随机模拟
  • 数据可视化

1.1 数据与大数据

1.1.1 什么是数?什么是数据?

四字总结:万物皆数。为什么这么说呢,其实我们无论是生活中还是学习中的任何东西菊科转化为数据,数据是为了描述与传递信息;而信息的载体是多种多样的,人类能够感知与认知的信息。想必大部分人也了解过人工智能也听说过多模态,那么模态又是什么意思呢?模态包括:数值类数据,例如结构化的excel表格和SQL文件。文本类数据,例如新闻报道、微博评论、餐饮点评等文字。图像类数据,以一定尺寸的黑白或彩色图像在计算机内存储。音频类数据,例如音乐、电话录音等。信号类数据,例如地震波的波形、电磁波信号、脑电信号等。这些形式下的数据都可以用来数学建模,由此数学建模在我们生活中也是至关重要的。

1.1.2 数据与大数据

在我们平时生活中见的大多数数据最高的也就是以B为单位的数据,其实之所以有大数据这个概念,更多真正的大数据可能要以TB甚至PB、ZB来衡量。对于不同的数据量的数据,我们用到的方法也是不一样的,针对不同的数据量,我们要学会采用不同的方法去建立适合数据的模型。

1.1.3 数据科学的研究对象

数据科学是统计学、计算机科学和领域知识的交叉学科,而数学建模亦是如此,它需要数学基础,也需要计算机基础,但在解决实际工程问题的时候需要特定的工程背景。此三者缺一不可。

大数据科学研究的不仅仅是数据分析,它还包括了:

  • 数据的获取和存储:包括爬虫、软件定义存储、硬件存储有关背景知识等。
  • 数据的处理:包括分布式计算、并行计算、数据流等知识,以及Hadoop、Spark等大数据框架。
  • 数据的分析:包括统计学、数据挖掘与机器学习、计算机视觉、自然语言处理等内容,重在挖掘数据中的模式与知识。
  • 数据的管理:现代数据库系统及其架构等内容。
  • 数据的应用:数据可视化、数据相关软件的开发、报表分析以及如何将数据挖掘得到的结果还原为实际问题的解决方案。

1.2 数据的预处理

1.1.1为何需要预处理

在我们采集好数据时,往往得到的原始数据往往非常混乱、不全面,比如一些缺失值,0等等,模型往往无法从中有效识别并提取信息,这时候我们就需要通过一些函数或者其他方法将数据进行预处理,将所有数据转化为有效数据。

1.2.2 使用pandas处理数据的基础

Pandas是一个开源的Python库,提供了高性能、易用和灵活的数据结构,用于数据处理和分析。它建立在NumPy之上,使得处理结构化数据更加简单和高效。Pandas的两个主要数据结构是Series和DataFrame,可以理解为NumPy数组的增强版。它们提供了更多的功能和灵活性,使得数据处理变得更加直观和方便。

要使用Pandas,首先需要将其安装在你的Python环境中。可以通过使用pip命令来进行安装:

pip install pandas

安装完成后,我们可以通过以下方式将Pandas导入到Python代码中:

import pandas as pd

数据结构:Pandas提供了两种基本的数据结构:Series和DataFrame。

Series是一种一维的带标签的数组,可以存储任意类型的数据。它类似于带有标签的NumPy数组,但提供了更多的功能和灵活性。

import pandas as pd

data = [1, 2, 3, 4, 5]
s = pd.Series(data)
print(s)

输出结果:

0    1
1    2
2    3
3    4
4    5
dtype: int64

DataFrame是一种二维的表格型数据结构,可以存储多种类型的数据。它类似于Excel中的电子表格或SQL中的数据库表,提供了行、列的索引,方便对数据进行增删改查。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)
print(df)
     Name  Age Country
0   Alice   25     USA
1     Bob   30  Canada
2  Charlie   35      UK

数据读取和写入

Pandas可以从各种数据源中读取数据,包括CSV文件、Excel文件、数据库等。同时,也可以将数据写入到这些数据源中。

从CSV文件中读取数据

import pandas as pd

df = pd.read_csv('data.csv')
print(df)

输出结果:

   Name  Age Country
0  John   25     USA
1  Mary   30  Canada
2  Mark   35      UK

将数据写入CSV和Excel文件

import pandas as pd

df = pd.DataFrame({'Name': ['John', 'Mary', 'Mark'],
                   'Age': [25, 30, 35],
                   'Country': ['USA', 'Canada', 'UK']})

df.to_csv('data.csv', index=False)
df.to_excel('data.xlsx', index=False)

数据操作数

在数据操作方面,Pandas提供了丰富的功能,包括数据选择和索引、数据切片和过滤、数据缺失值处理、数据排序和排名等。

数据选择和索引

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 选择单列
print(df['Name'])

# 选择多列
print(df[['Name', 'Age']])

# 选择行
print(df.loc[0])

# 选择多行
print(df.loc[[0, 2]])

# 利用条件选择
print(df[df['Age'] > 30])

数据缺失值处理

import pandas as pd
import numpy as np

data = {'Name': ['Alice', np.nan, 'Charlie'],
        'Age': [25, np.nan, 35],
        'Country': ['USA', 'Canada', np.nan]}
df = pd.DataFrame(data)

# 检查缺失值
print(df.isnull())

# 填充缺失值
df_filled = df.fillna(0)
print(df_filled)

数据排序和排名

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 按某一列排序
df_sorted = df.sort_values('Age')
print(df_sorted)

# 排名
df['Rank'] = df['Age'].rank()
print(df)

分组和聚合

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 按照某一列进行分组
grouped = df.groupby('Country')

# 对分组后的数据进行聚合操作
agg_result = grouped['Age'].mean()
print(agg_result)

1.3 常见的统计分析模型

    1、简单线性回归预测:当只有一个自变量和一个因变量时,可以使用简单线性回归进行预测。该2方法假设自变量和因变量之间存在线性关系,并利用最小二乘法估计回归系数。

    2、多元线性回归预测:当存在多个自变量和一个因变量时,可以使用多元线性回归进行预测。该方法考虑了多个自变量对因变量的影响,并通过最小二乘法来估计回归系数。

    3、多项式回归预测:当自变量与因变量之间的关系不是严格线性时,可以使用多项式回归进行预测。该方法通过引入自变量的高次项(如平方项、立方项等)来拟合非线性关系。

    4、逻辑回归预测 :逻辑回归主要用于预测二元或多元分类问题。它通过将回归模型的输出映射到一个概率值,进而进行分类预测。逻辑回归常用于预测概率、判断分类结果等领域。

    5、非线性回归预测:当自变量与因变量之间的关系无法通过直线或多项式来拟合时,可以使用非线性回归进行预测。非线性回归模型可以根据具体问题选择适当的函数形式,如指数函数、对数函数等。

回归分析的步骤如下

数据收集:收集自变量和因变量的数据。
模型建立:选择适当的回归模型,例如简单线性回归、多元线性回归、多项式回归等。根据已有数据拟合模型,得到回归系数。
模型评估:通过评估指标(如R方值、均方误差等)来判断模型的拟合程度和预测效果。 模型应用:使用已建立的回归模型对新的自变量数据进行预测,得到因变量的预测值。

模型适用范围

预测分析:回归分析可以用于预测因变量的值。例如,根据过去销售额和广告投入的数据,建立回归模型来预测未来的销售额。
影响因素分析 :回归分析可以用于确定自变量对因变量的影响程度。例如,通过分析房屋价格与面积、位置、楼层等因素之间的关系,确定各个因素对房价的影响程度。
决策支持:回归分析可以用于辅助决策,帮助理解和解释数据,确定最佳决策方案。例如,在市场营销中,回归分析可以用于确定广告投入对销售额的影响,以优化广告预算的分配。
趋势分析:回归分析可以用于分析数据的趋势和变化规律。例如,根据过去几年的气温数据建立回归模型,分析气温随时间的变化趋势,以预测未来的气温变化。

例子学习:

import numpy as np
from matplotlib import  pyplot as plt

X=np.array([2,3,4,5,6]) #定义数据集
Y=2*X+np.random.normal(1,2,5) #Y是X的线性函数加上服从正态分布的随机误差
plt.scatter(X,Y)
#计算均值
x_mean=np.mean(X)
y_mean=np.mean(Y)
#计算回归系数:通过遍历X和Y的元素,计算回归系数a和截距b
n=0.0   #n为(X-x_mean)*(Y-y_mean)的累加和
d=0.0   #d为(X-x_mean)^2的累加和
for x,y in zip(X,Y):
    n+=(x-x_mean)*(y-y_mean)
    d+=(x-x_mean)**2
a=n/d   #回归系数
b=y_mean-a*x_mean   #截距
y_predict=[a*x+b for x in X]    #预测Y值
plt.scatter(X,Y)    #绘制回归线
plt.plot(X,y_predict,color='r')
ss_residual=sum((y_predict-Y)**2)   #残差平方和
ss_total=sum((Y-y_mean)**2)     #总平方和
score=1-ss_residual/ss_total
print(score)
n=5 #自由度
betal_hat=a #betal_hat为回归系数a
se_model=np.sqrt(ss_residual/(n-2)) #模型标准误差
sss=np.sqrt(sum((X-x_mean)**2)) #解释变量的离差平方和
t_val=betal_hat/(se_model/sss)  #t统计量
from scipy.stats import t
p_val=2*(1-t.cdf(t_val,n-2))    # 双侧检验的p值
print(p_val)

分类分析:

    通过样本数据中的分类依据以及具体的分类类别,预测后续给出的对象属于哪一类,这就是分类模型。

# 加载基础包
import pandas as pd
import numpy as np
import statsmodels.api as sm
from scipy import stats

# 读取数据
ST=pd.read_csv('./data/ST.csv')
ST.head()

st_logit=sm.formula.logit('ST~ARA+ASSET+ATO+ROA+GROWTH+LEV+SHARE',data=ST).fit()
print(st_logit.summary())

假设检验:

    是一种统计方法,用于基于样本数据对总体参数(如均值、方差等)进行推断。它允许我们评估一个统计假设是否成立,通常涉及两个相互对立的假设:零假设(H0​)和备择假设(H1​)。

  • 零假设(H0​)通常表示没有效应或差异,即我们想要检验的总体参数与某个特定值相等或位于某个区间内。
  • 备择假设(H1​)则表示存在效应或差异,即总体参数与零假设中的值不等或不位于零假设指定的区间。

随机过程与随机模拟:

    随机过程和随机模拟是数学建模中用于捕捉和分析现实世界不确定性的关键工具。随机过程通过在概率空间中定义随时间演变的随机变量序列,来描述和建模具有时间依赖性的随机现象,如股票价格波动或种群动态。而随机模拟则利用随机数生成器来模拟这些随机过程,通过在计算机上运行模拟实验来预测系统行为或评估决策方案的效果。这种模拟方法广泛应用于风险分析、优化问题、预测市场趋势以及支持决策制定,帮助我们深入理解复杂系统中的随机性和动态变化。通过结合随机过程的数学描述和随机模拟的实验验证,数学建模能够为现实世界问题提供更加精确和可靠的解决方案。

1.4 数据可视化

1.4.1 Python三大数据可视化工具库的简介

(1)Matplotlib:

    Matplotlib正如其名,脱胎于著名的建模软件Matlab,因此它的设计与Matlab非常相似,提供了一整套和Matlab相似的命令API,适合交互式制图,还可以将它作为绘图控件,嵌入其它应用程序中。同时,Matplotlib是Python数据可视化工具库的开山鼻祖。

Matplotlib是一个面向对象的绘图工具库,pyplot是Matplotlib最常用的一个绘图接口,调用方法如下:

import matplotlib.pyplot as plt

在Matplotlib中,我们可以想像自己手里拿着一支画笔🖌️,每一句代码都是往纸上添加一个绘图特征,下面我们以最简单的方式绘制散点图为例:

  • 创建一个图形对象,并设置图形对象的大小(可以想象成在白纸中添加一个图,并设置图的大小):plt.figure(figsize=(6,4))
  • 在纸上的坐标系中绘制散点:plt.scatter(x=x, y=y)
  • 设置x轴的标签label:plt.xlabel('x')
  • 设置y轴标签的label:plt.ylabel('y')
  • 设置图表的标题:plt.title('y = sin(x)')
  • 展示图标:plt.show() 

各个图相应的函数:

  • 线图:plot()
  • 散点图:scatter()
  • 条形图:bar()
  • 箱线图:barplot()
  • 饼图:pie()
  • 直方图和密度图:hist()
  • 多图合并显示:subplot()和subplots()
  • 随机矩阵画图:imshow()
  • 图表动态刷新:ion()和ioff()
(2)Seaborn:

  Seaborn主要用于统计分析绘图的,它是基于Matplotlib进行了更高级的API封装。Seaborn比matplotlib更加易用,尤其在统计图表的绘制上,因为它避免了matplotlib中多种参数的设置。Seaborn与matplotlib关系,可以把Seaborn视为matplotlib的补充。

  详细代码什么的这里就先不介绍了大家网上一搜一大堆

(3)Plotnine:

gplot2奠定了R语言数据可视化在R语言数据科学的统治地位,R语言的数据可视化是大一统的,提到R语言数据可视化首先想到的就是ggplot2。数据可视化一直是Python的短板,即使有Matplotlib、Seaborn等数据可视化包,也无法与R语言的ggplot2相媲美,原因在于当绘制复杂图表时,Matplotlib和Seaborn由于“每一句代码都是往纸上添加一个绘图特征”的特性而需要大量代码语句。Plotnine可以说是ggplot2在Python上的移植版,使用的基本语法与R语言ggplot2语法“一模一样”,使得Python的数据可视化能力大幅度提升,为什么ggplot2和Plotnine会更适合数据可视化呢?原因可以类似于PhotoShop绘图和PPT绘图的区别,与PPT一笔一画的绘图方式不同的是,PhotoShop绘图采用了“图层”的概念,每一句代码都是相当于往图像中添加一个图层,一个图层就是一类绘图动作,这无疑给数据可视化工作大大减负,同时更符合绘图者的认知。(简单的说就是它好比ps里面可以用图层,添加图层的同时图像肯定会越来越美观)。

1.4.2 基本图标Quick Start

类别型图表:类别型图表一般表现为:X类别下Y数值之间的比较,因此类别型图表往往包括:X为类别型数据、Y为数值型数据。类别型图表常常有:柱状图、横向柱状图(条形图)、堆叠柱状图、极坐标的柱状图、词云、雷达图、桑基图等等。具体实现就先不写了哈,时间有点紧张。

1.5 插值模型

1.5.1 线性插值法

线性插值法是一种简单的插值方法,用于估计数据集中两个已知点之间的未知点的值。其基本原理是假设在两个已知点之间,变量的变化是线性的,即变化率是恒定的。

1.4.2 三次样条插值

三次样条插值是一种在数值分析中常用的插值方法,它提供了一种在一组给定的数据点上构造一个平滑曲线的方法。与线性插值相比,三次样条插值能够更好地适应数据的局部变化,因为它在每个数据段之间使用三次多项式,而不是线性函数。

1.4.3 拉格朗日插值

拉格朗日插值是一种多项式插值方法,它可以用来在一组给定的数据点上构造一个多项式,这个多项式在所有数据点上的值都等于数据点的值。拉格朗日插值法的关键在于构造一个拉格朗日基多项式,然后利用这些基多项式来构造最终的插值多项式。

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值