python数据挖掘相关扩展库

扩展库 简介
Numpy

提供数组支持,以及相应的高效处理函数。

Scipy、Matplotlib、Pandas等库都依赖于它。

Scipy

提供矩阵支持,以及矩阵相关的数值计算模块\

包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 数据可视化工具,作图库
Pandas

数据分析和探索工具

支持类似于SQL的数据增删改查,带有丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据等。

StatsModels

统计建模和计量经济学,包括描述统计、统计模型估计和推断

StatsModels依赖于Pandas,同时还依赖于patsy(一个描述统计的库)。

Scikit-Learn

支持回归、分类、聚类等机器学习库

Scikit-Learn依赖于Numpy、Scipy和Matplotlib。

Keras 基于Theano的深度学习库,用于建立神经网络以及深度学习模型
Gensim

用来做文本主题模型的库,文本挖掘

处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等

1、Scipy

(1)求解非线性方程组

#求解非线性方程组2x1-x2^2=1,x1^2-x2=2

from scipy.optimize import fsolve #导入求解方程组的函数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)

(2)数值积分

求解:\int_{-1}^{1}\sqrt{1-x_{ }^{2}}

#数值积分

from scipy import integrate #导入积分函数

def g(x): #定义被积函数
    return (1-x**2)**0.5

pi_2,err = integrate.quad(g,-1,1) #得到积分结果和误差

2、Matplotlib

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,1000) #指定的间隔内返回均匀间隔的数字
y = np.sin(x) + 1
z = np.cos(x**2) +1

plt.figure(figsize=(8,4)) #设置图像的大小
plt.plot(x,y,label='sinx+1',color="red",linewidth=2) #linewidth线宽
plt.plot(x,z,'b--',label='cosx^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() #显示作图结果

输出结果为:

如果图中有中文,无法正常显示。这是由于Matplotlib的默认字体是英文字体,解决方法如下:在作图前指定默认字体为中文字体。

plt.rcParams['font.sans-serif'] = ['SimHei'] #SimHei为黑体

保存图像时,负号可能显示不正常,解决方法:

plt.rcParams['axes.unicode_minus'] = False

3、Pandas

默认的Pandas不能读写Excel文件,需要安装xlrd(读)和xlwt(写)库才能支持Excel的读写。

pip install xlrd

pip install xlwt

(1)创建Series、DataFrame

import pandas as pd

s = pd.Series([1,2,3],index=['a','b','c']) #创建一个序列
d = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c']) #创建一个表

d2 = pd.DataFrame(s) #用已有的序列创建表

d.head() #预览前5行数据
d.describe() #数据基本统计量

(2)读取文件

#注意文件的路径不能带有中文,否则读取可能出错

pd.read_excel('data.xls') #读取Excel文件,创建DataFrame

pd.read_csv('data.csv',encoding='utf-8') #读取文本文档的数据,一般用encoding指定编码

4、StatsModels

#ADF单位根检验——时间序列平稳检验

from statsmodels.tsa.stattools import adfuller as ADF

import numpy as np
ADF(np.random.rand(100))

结果为:

(1)ADF结果同时小于1%、5%、10%,说明非常好地拒绝该假设(ADF检验的原假设是存在单位根,即时间序列非平稳);

(2)p值非常接近0,拒绝原假设。

5、Scikit-Learn

创建一个简单的线性回归模型:

from sklearn.linear_model import LinearRegression #sklearn是Scikit-Learn的简写

model = LinearRegression() #建立线性回归模型
print(model)
模型(model)用法 介绍 适用对象
model.fit()

训练模型

对于监督模型是fit(X,y)

对于非监督模型是fit(X)

所有模型
model.predict(X_new) 预测新样本 监督模型
model.predict_proba(X_new)

预测概率

仅对某些模型有用(比如LR)

监督模型
model.score() 得分越高,fit越好

监督模型

model.transform() 从数据中学到新的“基空间” 非监督模型
model.fit_transform() 从数据中学到新的基,并将这个数据按照这组“基”进行转换 非监督模型

Scikit-Learn本身提供了一些实例数据,常见的有安德森鸢尾花数据集、手写图像数据集等。

from sklearn import datasets #导入数据集

iris = datasets.load_iris() #加载鸢尾花数据集
print(iris.data.shape) #查看数据集大小

输出结果为:

(150, 4)
from sklearn import svm 

clf = svm.LinearSVC() #建立线性SVM分类器
clf.fit(iris.data,iris.target) #用数据训练模型
clf.predict([[5,3.6,1.3,0.25]]) #训练好模型后,输入新的数据进行预测分类

clf.coef_ #查看模型的参数

输出结果为:

array([0]) #分类为0
array([[ 0.18423955,  0.45122985, -0.8079406 , -0.45071071],
       [ 0.05191802, -0.89434397,  0.40513593, -0.93780078],
       [-0.85072861, -0.98666791,  1.38094616,  1.86533399]]) #模型的参数

6、Keras

搭建一个多层感知器(MLP):

from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD

model = Sequential() #模型初始化
model.add(Dense(input_dim=12,output_dim=64)) #添加输入层(20节点)、第一隐藏层(64节点)的连接
model.add(Activation('tanh')) #第一隐藏层用tanh作为激活函数
model.add(Dropout(0.5)) #使用Dropout防止过拟合

model.add(Dense(input_dim=64,output_dim=64)) #添加第一隐藏层(64节点)、第二隐藏层(64节点)的连接
model.add(Activation('tanh')) #第二隐藏层用tanh作为激活函数
model.add(Dropout(0.5))

model.add(Dense(input_dim=64,output_dim=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) #使用训练集训练模型,x_train,y_train用训练集替换
score = model.evaluate(x_test,y_test,batch_size=16) #测试模型,x_test,y_test用测试集替换

Keras用model.predict()方法给出概率;model.predict_classes()方法给出分类结果。

7、Gensim

Gensim使用Word2Vec:

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的词向量

猜你喜欢

转载自blog.csdn.net/zjlamp/article/details/81942712