基于Python语言的数据处理与模型拟合个人研究总结

首先声明,笔者目前在读普通本科生,对数学建模的研究仅出于个人兴趣,非笔者专业课程。本篇文章只记录笔者在学习过程中遇到的问题以及个人总结,对一些常用的数据处理和模型拟合的方法进行汇总。

一、数据处理

在进行一些数学建模过程中,经常会遇到很多数据量庞大的题目,这里以2024年数维杯B题为例:

可以看到表格中数据层次不齐,含有很多缺失值。除此之外,我们发现表格中的数据类别混在一起来,需要我们精准把数据分类处理。从这里可以看出,数据处理将会是一个巨大工程。

关于如何进行数据处理,Python提供了一个很强大的数据处理包pandas.

 首先确保你的Python程序中含有pandas包

pip install pandas

导入pandas库,一般情况下会与numpy包一起使用,numpy是Python针对矩阵处理的函数库,对数据进行处理时,我们一般会先将数据转化为矩阵,方便处理。

import pandas as pd
import numpy as np

1.读取文件表格中的数据,这里会根据文件形式使用不同的函数.

读取CSV表格:data=pd.read_csv('文件地址')

读取Excel表格:data=pd.read_excel('文件地址')

2.查看数据

读取数据后,一般数据比较散乱,需要创建一个数据框架:

df=pd.DataFrame(data)这样便可以对数据直接进行处理.

print(df.head())#默认查看前五行
print(df.tail())#默认查看后五行

3.数据清洗

df.drop_duplicates(inplace=True)#去除重复值
df.dropna(inplace=True)  # 删除缺失值
df.fillna(value='your_value', inplace=True)  # 填充缺失值

以上均为基本的数据处理方法,除此之外,Python还提供了其他多种数据处理方法,如数据探索、数据筛选、数据转换等,这里就不一一赘述了。

如果对量纲比较敏感这里介绍两种规约方法min-max规约和Z-score规约:

具体可以参考:https://blog.csdn.net/Next_SummerAgain/article/details/127321209

二、模型分析

数据分析的最后,很多都要归于统计分析模型。其中,回归分析和分类分析是基本的模型分析理论。

1.回归分析

根据笔者理解,回归分析主要用于除了变量之间的相关性。主要处理数据均为离散型,同时要进行相关性分析。回归分析中主要考虑的是线性回归(另一种是逻辑回归,因为归于复杂,难以理解,这里不进行总结),线性回归又分一元线性回归和多元线性回归,根据自变量个数的不同采用不同的线性回归。幸好Python专门提供了线性回归函数,我们可以省去很多繁琐的步骤

model=LinearRegression().fit(x,y)#x为数据自变量集,y为因变量集

当然,实际情况中数据多是非线性回归,这里笔者通常采用另一种方式多项式回归进行非线性回归处理。根据泰勒级数展开式的特征(这应该是高等数学的内容吧,笔者非数学专业,可能表述有些不准确),任何连续曲线都可用多次多项式进行表示,故对于非线性回归模型,采用多项式拟合是十分便利的方法。

Python则在numpy包中提供了所需函数

# 使用numpy的polyfit函数进行多项式拟合
p = np.polyfit(x, y, deg=2)  # deg是多项式的纬度,一般情况纬度越高,拟合度越高

通过polyfit()我们很容易获得多项式系数,最后获取拟合曲线方程。这里笔者稍微提一个问题:过拟合。这是在进行曲线拟合时经常会出现的问题,对于多项式曲线拟合虽然纬度越高越准确,但在实际测试是会产生很大的误差。我们最后进行模型评估,将会出现较大失误,故进行多项式曲线拟合时需要对纬度进行考量。

2.分类分析

所谓分类,则是根据数据的特征进行归类。但在实际问题中,一组数据通常有多个影响因素,我们很难确定分类标准。通常要进行变量特征的提取,将其中权重较高的几个特征作为标准进行分类,这样处理能够减少误差。用于分类的算法有很多,如朴素贝叶斯、决策树、随机森林等。具体内容可以参考:https://blog.csdn.net/CSDN_224022/article/details/131174213?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172171190216800175774271%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172171190216800175774271&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-131174213-null-null.142^v100^pc_search_result_base5&utm_term=%E5%88%86%E7%B1%BB%E5%88%86%E6%9E%90&spm=1018.2226.3001.4187

3.可视化分析

模型可视化是十分关键的一步,我们能够清晰看到数据的分布,数据的走向,对后续的分析工作给予极大的帮助。这里笔者介绍几种Python提供的数据可视化包。

matplotlib:

import matplotlib.pyplot as plt
# 绘制简单的折线图
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y)
plt.title('Simple Line Chart')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()
# 绘制条形图
plt.bar(['A', 'B', 'C', 'D'], [5, 7, 3, 8])
plt.title('Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
# 绘制散点图
plt.scatter([1, 2, 3, 4], [10, 20, 30, 40])
plt.title('Scatter Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

seaborn:

import seaborn as sns
# 使用seaborn绘制条形图
data = {'Category': ['A', 'B', 'C', 'D'], 'Value': [5, 7, 3, 8]}
df = pd.DataFrame(data)
sns.barplot(x='Category', y='Value', data=df)
plt.title('Seaborn Bar Chart')
plt.show()
# 使用seaborn绘制箱型图
sns.boxplot(x='Category', y='Value', data=df)
plt.title('Box Plot')
plt.show()
# 使用seaborn绘制热力图
matrix_data = np.random.rand(10, 8)
sns.heatmap(matrix_data, annot=True, fmt=".2f", cmap="Blues")
plt.title('Heatmap')
plt.show()

plotnine:

plotnine数据可视化包比较特殊,它的基本语法与ggplot2类似,而ggplot2则是基于R语言设计,对于数据可视化具有统治地位。但plotnine与pandas的联系十分紧密,可以对pandas处理过的数据进行可视化。并且plotnine的优势在于能够同时绘制多个不同类别的图像在同一图层,大大减轻了可视化工作的负担。

import plotnine as p9
from plotnine.data import*
#创建p1图层
p1=(
    p9.ggplot(mpg,aes(x='wt',y='yt',color=''))#mpg为数据集,x为自变量映射,y为因变量映射,color为颜色映射
    +p9.geom_point()#绘制散点图层
    +p9.geom_smooth()#绘制平滑线图层
    +labs(x='',y='')#绘制标签图层
)
print(p1)#显示图像

以上几种可视化方法可以根据实际情况选择。如果有更高的可视化需求,笔者在这里介绍一些3D可视化的常用库:

import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

具体内容请参考:https://blog.csdn.net/Bxwfjdjdbdgj/article/details/137447163?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172171906316800186577344%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172171906316800186577344&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-137447163-null-null.142^v100^pc_search_result_base5&utm_term=Python3D%E5%8F%AF%E8%A7%86%E5%8C%96&spm=1018.2226.3001.4187

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值