数学建模及大数据竞赛中,通常会接触到数据分析及数据挖掘过程,比如国赛中的C题、美赛中的C题、钉钉杯大数据竞赛,Python必然是数据分析首选编程语言,之所以能够成为首选语言,是有其独特的优势的。因为他有很多这个领域相关的库可以用,而且很好用,比如Numpy、SciPy、Matploglib、Pandas、ScikitLearn、Keras、Gensim等,今天数乐君就带小伙伴一起来了解这些库的基本介绍及使用形式。
python本身的数据分析功能并不强,需要安装一些第三方扩展库来增强其相应的功能。
python数据分析与挖掘相关的扩展库;
当然还有其他一些库,比如说涉及到图像处理可以使用pillow库,涉及视频处理可以使用OpenCV、高精度计算可以用GMPY2等。当然我们在处理问题的时候,可以在网上搜索相关资料。如果使用Anaconda发行版,很多库都已经自带了,比如NumPy、SciPy、Matplotlib、pandas、scikit-learn。当然如果使用其他编译器需要自行安装相关库文件。
NumPy
python并没有提供数组功能,虽然列表可以完成基本的数组功能,当数据量大时,使用列表的速度就会很慢;
NumPy提供了真正的数组功能以及对数据进行快速处理的函数;
NumPy是很多高级库的依赖库;
使用NumPy操作数组
import numpy as np
a = np.array([2, 0, 1, 5]) #创建数组
print(a)
print(a[:3])
print(a.min())a.sort()print(a)b = np.array(([[1,2,3], [4,5,6]]))print(b*b)
输出结果:
[2 0 1 5]
[2 0 1]
0
[0 1 2 5][[ 1 4 9][16 25 36]]
Scipy
SciPy包含的功能又最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学和工程中常用的计算。
from scipy.optimize import fsolve #导入求解方程组的函数
def f(x):
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 - 1, x1**2 - x2 - 2]result = fsolve(f, [1, 1])print(result)from scipy import integrate #导入积分函数def g(x): #定义积分函数return (1 - x**2)**0.5pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差print(pi_2 * 2)print(err)
输出结果:
[1.91963957 1.68501606]
保佑他们事事顺利,好运连连。
Matplotlib
Matplotlib是最著名的绘图库,主要用于二维绘图,当然也可进行简单的三维绘图。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000) #作图的自变量
y = np.sin(x) + 1 #因变量y
z = np.cos(x**2) + 1 #因变量zplt.figure(figsize=(8,4)) #设置图像大小plt.plot(x, y, label = '$\sin x+1$', color = 'red', linewidth = 2) #作图,设置标签、线条颜色、线条大小plt.plot(x, z, 'b--', label = '$\cos x^2+1$') #作图,设置标签、线条类型plt.xlabel('Time(s) ') #x轴名称plt.ylabel('Volt') #y轴名称plt.title('A Simple Example')plt.ylim(0,2.2)# y轴范围plt.legend()#显示图例plt.show()
中文字体需要手动指定默认字体为中文字体。
pandas
pandas是python下最强大的数据分析和探索工具。pandas功能十分强大;
支持类似SQL的数据增、删、查、改,并且带有丰富的数据处理函数;
支持时间序列分析功能;支持灵活处理确实数据等;pandas的基本数据结构是Series(序列)和DataFrame(表格)。
import numpy as np
import pandas as pd
s = pd.Series([1, 2, 3], index=list('abc'))
d = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
d2 = pd.DataFrame(s)print(d.head())print(d.describe())
输出结果:
a b c
0 1 2 3
1 4 5 6
a b ccount 2.00000 2.00000 2.00000mean 2.50000 3.50000 4.50000std 2.12132 2.12132 2.12132min 1.00000 2.00000 3.0000025% 1.75000 2.75000 3.7500050% 2.50000 3.50000 4.5000075% 3.25000 4.25000 5.25000max 4.00000 5.00000 6.00000
#读取文件,注意文件的存储路径不能带有中文,否则读取可能出错;pd.read_excel('data.xls')
#读取Excel文件,创建DataFrame;pd.read_csv('data.csv', encoding='utf-8')
#读取文本格式的数据,一般用encoding指定编码;
StatsModels
pandas着重于数据的读取、处理和探索,而StatsModels则更注重数据的统计建模分析,它使得python有了R语言的味道。StatsModels支持与pandas进行数据交互,因此,它与pandas结合成为了python下强大的数据挖掘组合。
from statsmodels.tsa.stattools import adfuller as ADF #导入ADF检验import pandas as pdimport numpy as npprint(ADF(np.random.rand(100))) #返回的结果又ADF值、p值等
输出:(-8.103123291388002, 1.2838791095546032e-12, 1, 98, {'1%': -3.4989097606014496, '5%': -2.891516256916761, '10%': -2.5827604414827157}, 30.91636795599902)
它们可以给予该星座的人,
一些积极向上的力量,
保佑他们事事顺利,好运连连。
scikit-learn
这是一个和机器学习相关的库。scikit-learn是python下强大的机器学习工具包,提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测、模型分析等。
scikit-learn依赖于NumPy、SciPy和Matplotlib。
from sklearn.linear_model import LinearRegression #导入线性回归模型model = LinearRegression() #建立线性回归模型print(model)
1)所有模型提供的接口有:对于训练模型来说是model.fit(),对于监督模型来说是fit(X,y),对于非监督模型是fit(X).2)监督模型提供如下接口: model.predict(X_new):预测新样本; model.predict_proba(X_new):预测概率,仅对某些模型有用(比如LR); model.score():得分越高,fit越好;3)非监督模型提供如下接口: model.transform(): 从数据中学到新的基空间; model.fit_transform():从数据中学到新的基并将这个数据按照这组基进行转换;scikit-learn本身提供了一些实例数据供我们上手学习,比较常见的有安德森鸢尾花卉数据集、手写图形数据集等。
from sklearn import datasets # 导入数据集 iris = datasets.load_iris() # 加载数据集print(iris.data.shape)from sklearn import svm #导入SVM模型clf = svm.LinearSVC() #建立SVM分类器clf.fit(iris.data, iris.target) #用数据训练模型clf.predict([[5.0, 3.6, 1.3, 0.25]]) #输入训练好的模型之后,输入新的数据进行预测print(clf.coef_) #查看训练好的模型的参数
输出结果:(150, 4)[[ 0.18423149 0.45122757 -0.8079383 -0.45071932] [ 0.05554602 -0.9001544 0.40811885 -0.96012405] [-0.85077276 -0.98663003 1.3810384 1.86530666]]
Keras
人工智能神经网络是功能相当强大但是原理又相当简单的模型,在语言处理、图像识别等领域都有重要的作用。Keras库可以用来搭建神经网络。事实上,Keras并非简单的神经网络库,而是一个基于Theano的强大的深度学习库,利用它不仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。要使用 Keras,需要安装 TensorFlow 包。
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential()#模型初始化
model.add(Dense(20,64))#添加输入层(20节点)、第一隐藏层(64节点)的连接model.add(Activation('tanh'))#第一隐藏层用tanh作为激活函数model.add(Dropout(0.5))#使用Dropout防止过拟合model.add(Dense(64, 64))#添加第一隐藏层(64节点)、第二隐藏层(64节点)的连接model.add(Activation('tanh'))model.add(Dropout(0.5))model.add(Dense(64,1))#添加第二隐藏层(64节点)、输出层(1节点)的连接model.add(Activation('sigmoid'))#输出层使用sigmoid作为激活函数sgd = SGD(lr=0.1, decay=1e-6,momentum=0.9,nesterov=True)#定义求解算法model.compile(loss='mean_squraed_error', optimizer=sgd)#编译生成模型,损失函数为平均误差平方和model.fit(X_train, y_train, nb_epoch=20,batch_size=16)#训练模型score = model.evaluate(X_test, y_test, batch_size=16)#测试模型
Gensim
Gensim用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等,这些领域的任务往往需要比较多的背景知识。
import gensim, logging
logging.basicConfig(format='%(asctime)s: %(levelname)s : %(message)s', level=logging.INFO)
#logging用来输出训练日志
#分好词的句子,每个句子以词列表的形式输入
sentences=[['first', 'sentence'],['secend','sentence']]#用以上句子训练向量模型model = gensim.models.Word2Vec(sentences, min_count=1)print(model['sentence'])#输出单词sentence的词向量
文章来源:部分内容来源于csdn茨球是只猫,首发于数模乐园,未经允许,禁止转载
如何快速学习提升数据分析和数据挖掘能力?小伙伴们以赛代练来参加第二届钉钉杯大数据挑战赛
【阿里巴巴钉钉举办+国家级含金量+综测加分+获奖率50%+大厂offer敲门砖】
赛题方向为数据分析和数据挖掘,论文撰写要求较低,题目来自国内大数据资深专家、有数学建模基础同学更容易参赛。
或复制链接:http://www.nmmcm.org.cn/match_detail/27
进群领取历年真题及优秀论文
↓详情加入2023数模国赛备战群,并领取国赛最新学习资料↓
• END •
微信又双叒改版了,没有星标模友们就会经常收不到我们的推送
小伙伴们可以简单动动小手,给数乐君加个星标,这样就不会走散啦~
点击上方【数模乐园】- 右上角找到【…】
立刻设置我为 星标/置顶
每天都有不一样的数模资讯分享!
热门跟贴