python 数据挖掘(1) -- 函数编程的优势和常见工具

函数编程

函数编程主要是解决 python 语言效率低下的问题,尤其是python的循环。常见的函数有 map,reduce,filter

# python列表解析函数虽然简洁,但是本身是使用python的循环,所以效率无法比拟 c/c++
a = [1,2,3,4]
a = [i+1 for i in a]

# 使用 map 函数编程替代,性能可以媲美 c/c++
a = map(lambda x:x+1,a)

# reduce 函数 
a = reduce(lambda x,y:x+y,a)

# filter 函数 a = [i for i in a if i >2]
a = filter(lambda x:x>2,a)

分析工具介绍

(1).numpy

python 本身没有数组的功能,list 只是列表,首先,效率低下。numpy 提供了真正的数组功能,以及对数据进行快速处理的函数。值得提出的是,其内置函数处理数据的速度是 c 语言级别的

import numpy as np
a = np.array([1,2,3,4])
b = np.array([2,3,4,5])
# 输出平方数组
''' 注意是数组,只是对应元素相乘,不是矩阵乘法'''
print a*b
输出 [2,6,12,20]

(2).scipy

numpy 只是提供了数组的功能,但是 scipy 提供了真正的矩阵功能。包含的功能有最优化,线性函数,积分,插值,拟合,特殊函数,快速傅里叶变换等。以下示例提供求解函数和积分

# 求解方程组的函数
from scipy.optimize import fsolve

'''
求解非线性方程组 2x1-x2^2-1=0,x1^2-x2-2=0
'''
def f(x):
    x1 = x[0]
    x2 = x[1]
    return [2*x1-x2**2-1,x1**2-x2-2]

# 解方程组,输入初始值 [1,1]
result = fsolve(f,[1,1])
print result # 输出结果,是一个数组 [x1 x2]

# 求积分
from scipy import integrate
# 定义被积函数 g,为一个圆
def g(x):
    return (1-x**2)**0.5

# 返回积分结果和误差,积分区间 [-1,1],由圆的面积知道,结果是 pi/2
pi_2,err = integrate.quad(g,-1,1)
print pi_2

(3).matplotlib

matplotlib 就是一个画图工具

#-*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# 有可能负号显示不正常,因此加上
plt.rcParams['axes.unicode_minus'] = False
# 作图的变量自变量
x = np.linspace(0,10,1000)
# y = sin(x) +1
y = np.sin(x)+1
z = np.cos(x**2) +1

# 设置图像大小
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$')
# x 轴名称
plt.xlabel('Time(s)')
# y 轴名称
plt.ylabel("Vlot")
# 设置标题
plt.title("A Simple Example")
# 设置 y 轴范围
plt.ylim(0,2.2)
# 显示图例
plt.legend()
# 显示作图结果
plt.show()

(4).pandas

pandas 构建在 numpy 之上,是python 下最强大的数据分析和探索工具,它包含高级的数据结构和精巧的技巧,最初作为金融数据分析工具而被开发。支持类似于sql 的增删改查,支持时间序列分析功能,支持处理缺失数据等等。

基本的数据结构是 Series 和 DataFrame 。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)

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

# 读取文件
pd.read_excel('data.xls')
pd.read_csv('data.csv',encoding = 'utf-8')

(5).statsmodels

statsmodels 注重的是数据的统计模型分析,通常与 pandas 组合,称为数据挖掘强大的组合。

# 用 statsmodels 进行 ADF 平稳性分析
# 导入 ADF 检测
from statsmodels.tsa.stattools import adfuller as ADF

(6).sklearn

关于这个模块,我在 NLP 专栏中有一篇介绍的更清楚,它是强大的机器学习工具包

(7).keras

keras 主要就是为了构建人工神经网络,但我觉得 TensorFlow 更佳灵活,keras 比 TensorFlow更容易让人上手吧。搭建一个多层感知器示例如下

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

'''
相对于 TensorFlow,keras 似乎不用我们去定义每一层,用法更简单的多
'''
# 模型初始化
model = Sequential()
# 添加输入层 20 节点,第一层隐藏层 64 节点
model.add(Dense(20,64))
# 定义第一隐藏层的激活函数为 tanh
model.add(Activation('tanh'))
# 添加 dropout
model.add(Dropout(0.5))

# 添加第一层隐藏层 64 节点、第二层隐藏层 64 节点的连接
model.add(Dense(64,64))
# 后面含义同上,只不过用在第二层隐藏层
model.add(Activation('tanh'))
model.add(Dropout(0.5))

# 添加输出层
model.add(Dense(64,1))
model.add(Activation('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)

keras 甚至可以搭建深度学习网络,只不过关于深度学习还有更好的选择,比如前面介绍的python 深度学习以及TensorFlow,不过它的使用相对于 TensorFlow来说,简直不要太简单。

(8).gensim

这个就不用说了,在 NLP 专栏,我已经打过很多交道了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值