其他
干货收藏!一文看懂8个常用Python库从安装到应用
导读:Python本身的数据分析功能并不强,需要安装一些第三方扩展库来增强其相应的功能。本文将对NumPy、SciPy、Matplotlib、pandas、StatsModels、scikit-learn、Keras、Gensim等库的安装和使用进行简单的介绍。
NumPy:提供数组支持以及相应的高效的处理函数 SciPy:提供矩阵支持以及矩阵相关的数值计算模块 Matplotlib:强大的数据可视化工具、作图库 pandas:强大、灵活的数据分析和探索工具 StatsModels:统计建模和计量经济学,包括描述统计、统计模型估计和推断 scikit-learn:支持回归、分类、聚类等强大的机器学习库 Keras:深度学习库,用于建立神经网络以及深度学习模型 Gensim:用来做文本主题模型的库,文本挖掘可能会用到
pip install numpy
python setup.py install
sudo apt-get install python-numpy
代码清单2-27 使用NumPy操作数组
# -*- coding: utf-8 -*
import numpy as np # 一般以np作为NumPy库的别名
a = np.array([2, 0, 1, 5]) # 创建数组
print(a) # 输出数组
print(a[:3]) # 引用前三个数字(切片)
print(a.min()) # 输出a的最小值
a.sort() # 将a的元素从小到大排序,此操作直接修改a,因此这时候a为[0, 1, 2, 5]
b= np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组
print(b*b) # 输出数组的平方阵,即[[1, 4, 9], [16, 25, 36]]
sudo apt-get install python-scipy
代码清单2-28 使用SciPy求解非线性方程组和数值积分
# -*- coding: utf-8 -*
# 求解非线性方程组2x1-x2^2=1,x1^2-x2=2
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]) # 输入初值[1, 1]并求解
print(result) # 输出结果,为array([ 1.91963957, 1.68501606])
# 数值积分
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) # 由微积分知识知道积分结果为圆周率pi的一半
sudo apt-get install python-matplotlib
代码清单2-29 Matplotlib作图示例
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt # 导入Matplotlib
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() # 显示作图结果
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
pip install xlrd # 为Python添加读取Excel的功能
pip install xlwt # 为Python添加写入Excel的功能
代码清单2-30 pandas中的常用操作
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd # 通常用pd作为pandas的别名。
s = pd.Series([1,2,3], index=['a', 'b', 'c']) # 创建一个序列s
# 创建一个表
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])
d2 = pd.DataFrame(s) # 也可以用已有的序列来创建数据框
d.head() # 预览前5行数据
d.describe() # 数据基本统计量
# 读取文件,注意文件的存储路径不能带有中文,否则读取可能出错。
pd.read_excel('data.xls') # 读取Excel文件,创建DataFrame。
pd.read_csv('data.csv', encoding='utf-8') # 读取文本格式的数据,一般用encoding指定编码。
代码清单2-31 使用StatsModels进行ADF平稳性检验
# -*- coding: utf-8 -*-
from statsmodels.tsa.stattools import adfuller as ADF # 导入ADF检验
import numpy as np
ADF(np.random.rand(100)) # 返回的结果有ADF值、p值等
代码清单2-32 使用scikit-learn创建机器学习模型
# -*- coding: utf-8 -*-
from sklearn.linear_model import LinearRegression # 导入线性回归模型
model = LinearRegression() # 建立线性回归模型
print(model)
model.predict(X_new):预测新样本。 model.predict_proba(X_new):预测概率,仅对某些模型有用(比如LR)。 model.score():得分越高,fit越好。
model.transform():从数据中学到新的“基空间”。 model.fit_transform():从数据中学到新的基并将这个数据按照这组“基”进行转换。
代码清单2-33 导入iris数据集并训练SVM模型
# -*- coding: utf-8 -*-
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]]) # 训练好模型之后,输入新的数据进行预测
clf.coef_ # 查看训练好模型的参数
代码清单2-34 搭建一个MLP(多层感知器)
# -*- coding: utf-8 -*-
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')) # 第二隐藏层用tanh作为激活函数
model.add(Dropout(0.5)) # 使用Dropout防止过拟合
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_squared_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) # 测试模型
代码清单2-35 Gensim使用Word2Vec的简单示例
# -*- coding: utf-8 -*-
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level= logging.INFO)
# logging是用来输出训练日志
# 分好词的句子,每个句子以词列表的形式输入
sentences = [['first', 'sentence'], ['second', 'sentence']]
# 用以上句子训练词向量模型
model = gensim.models.Word2Vec(sentences, min_count=1)
print(model['sentence']) # 输出单词sentence的词向量。
关于作者:张良均,资深大数据挖掘与分析专家、模式识别专家、AI技术专家。有10余年大数据挖掘与分析经验,擅长Python、R、Hadoop、Matlab等技术实现的数据挖掘与分析,对机器学习等AI技术驱动的数据分析也有深入研究。
本文摘编自《Python数据分析与挖掘实战》(第2版),经出版方授权发布。
点击上图了解及购买转载请联系微信:DoctorData
更多精彩👇