python本身的数据分析功能并不强,需要安装一些第三方扩展库来增强其相应的功能。
python数据分析与挖掘相关的扩展库;
扩展库 | 简介 |
---|---|
NumPy | 提供数组支持以及相应的高效的处理函数 |
SciPy | 提供矩阵支持以及矩阵相关的数值计算模块 |
Matplotlib | 强大的数据可视化工具、作图库 |
pandas | 强大、灵活的数据分析和探索工具 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 |
scikit-learn | 支持回归、分类、聚类等强大的机器学习库 |
Keras | 深度学习库,用于建立神经网络以及深度学习模型 |
Gensim | 用来做文本主题模型库,文本挖掘可能会用到 |
当然还有其他一些库,比如说涉及到图像处理可以使用pillow库,涉及视频处理可以使用OpenCV、高精度计算可以用GMPY2等。当然我们在处理问题的时候,可以在网上搜索相关资料。
如果使用Anaconda发行版,很多库都已经自带了,比如NumPy、SciPy、Matplotlib、pandas、scikit-learn。
当然如果使用其他编译器需要自行安装相关库文件。
使用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包含的功能又最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学和工程中常用的计算。
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.5
pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差
print(pi_2 * 2)
print(err)
输出结果:
[1.91963957 1.68501606]
3.1415926535897967
1.0002354500215915e-09
参考链接:
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 #因变量z
plt.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是python下最强大的数据分析和探索工具。pandas功能十分强大;
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 c
count 2.00000 2.00000 2.00000
mean 2.50000 3.50000 4.50000
std 2.12132 2.12132 2.12132
min 1.00000 2.00000 3.00000
25% 1.75000 2.75000 3.75000
50% 2.50000 3.50000 4.50000
75% 3.25000 4.25000 5.25000
max 4.00000 5.00000 6.00000
#读取文件,注意文件的存储路径不能带有中文,否则读取可能出错;
pd.read_excel('data.xls') #读取Excel文件,创建DataFrame;
pd.read_csv('data.csv', encoding='utf-8') #读取文本格式的数据,一般用encoding指定编码;
参考文档;
pandas着重于数据的读取、处理和探索,而StatsModels则更注重数据的统计建模分析,它使得python有了R语言的味道。StatsModels支持与pandas进行数据交互,因此,它与pandas结合成为了python下强大的数据挖掘组合。
from statsmodels.tsa.stattools import adfuller as ADF #导入ADF检验
import pandas as pd
import numpy as np
print(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是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)监督模型提供如下接口:
3)非监督模型提供如下接口:
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并非简单的神经网络库,而是一个基于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用来处理语言方面的任务,如文本相似度计算、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的词向量
参考资料: