Python数据分析工具
- Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。常用的数据挖掘相关扩展库有Numpy、Scipy、Matplotlib、Pandas、Scikit-Learn、Keras和Gensim等。如下图所示:
扩展库 | 简介 |
---|---|
Numpy | 提供数组支持,以及相应的高效的处理函数 |
Scipy | 提供矩阵支持,以及矩阵相关的数值模块 |
Matplotlib | 强大的数据可视化工具、做图库 |
Pandas | 强大、灵活的数据分析和探索工具 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 |
Scikit-Learn | 支持回归、分类、聚类等的强大的机器学习库 |
Keras | 深度学习库,用于建立神经网络以及深度学习模型 |
Gensim | 用来做文本主题模型的库,文本挖掘可能用到 |
1、Numpy
- Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但是当数据量较大时,列表的速度会非常慢。为此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。值得强调的是,Numpy内置函数处理数据的速度是C语言级别的,因此在编写程序的时候,应当尽量使用它们内置的函数,避免出现效率瓶颈的现象。Numpy常见操作如下:
# -*- coding:utf-8 -*
import numpy as np
# 创建数组
a = np.array([2,0,1,5])
print(a)
# 切片,输出数组前三个数字
print(a[:3])
# 输出 a 中的最小值
print(a.min())
# 将 a 的元素从小到大排序,此操作直接修改 a,因此这时候 a 为[0,1,2,5]
a.sort()
# 创建二维数组
b = np.array([1,2,3],[4,5,6])
# 输出数组的平方阵,即[[1,4,9],[16,25,36]]
print(b*b)
- 参考链接:https://numpy.org/
2、Scipy
- 如果说 Numpy 让 Python 有了 Matlab 的味道,那么 Scipy 就让 Python 真正成为了半个 Matlab 了。Scipy 提供了真正的矩阵,以及大量基于矩阵运算的对象与函数。
- Scipy 包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算,显然这些功能都是挖掘与建模必备的。
- Scipy 依赖与 Numpy,因此安装它之前要先安装 Numpy。下面举个例子,是 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]
# 输入初值[1,1]并求解
result = fsolve(f,[1,1])
# 输出结果,为array([1.91963957,1.68501606])
print(result)
# 数值积分
from scipy import integrate
# 定义被积函数
def g(x):
return (1 - x**2)**0.5
# 积分结果和误差
pi_2,err = integrate.quad(g,-1,1)
# 有微积分知识知道积分结果为圆周率pi的一半
print(pi_2 * 2)
- 参考链接:https://scipy.org/
3、Matplotlib
- 不论是数据挖掘还是数据建模,都免不了数据可视化问题。对于 Python 来说,Matplotlib 是最著名的绘图库,它主要用于二维绘图,当然它也可以进行简单的三维绘图。下面举个作图例子:
# -*- coding:utf-8 -*
import numpy as np
import matplotlib.pyplot as plt
# 设置作图的自变量x,因变量y、z
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 = '$\sin x+1$',color = 'red',linewidth = 2)
plt.plot(x,z,'b--',label = '$\cos x^2+1$')
# 设置x轴、y轴以及标题名称
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('A Simple Example')
# 显示y轴范围
plt.ylim(0,2.2)
# 显示图例
plt.legend()
plt.show()
- 如果使用的是中文标签,就会出现中文标签无法正常显示。这是由于 Matplotlib 的默认字体是英文字体所致,解决它的办法是在作图之前手动指定默认字体为中文字体,如黑体(SimHei):
plt.rcParams['font.sans-serif'] = ['SimHei']
- 另外,保存作图图像时,负号有可能显示不正常,可以通过以下代码解决:
plt.rcParams['axes.unicode_minus'] = False
4、Pandas
- Pandas 是 Python 下最强大的数据分析与探索工具。它包含高级的数据结构和精巧的工具,使得在 Python 中处理数据非常快速和简单。Pandas 功能非常强大,支持类似于 SQL 的数据增删查改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据等。
- Pandas 基本数据结构是 Series 和 DataFrame。Series 就是序列,类似一维数组;DataFrame 则是相当于一张二维的表格,类似二维数组,它的每一列都是一个 Series。为了定位 Series 中的元素,Pandas 提供了 Index 对象,每个 Series 都会带有一个对应的 Index,用来标记不同的元素,Index 的内容不一定是数字,也可以是字母、中文等,它类似 SQL 中的主键。
- 参考链接:http://pandas.pydata.org/pandas-docs/stable/
5、StatsModels
- Pandas 着眼于数据的读取、处理和探索,而 StatsModels 则更加注重数据的统计建模分析,它使得 Python 有了 R语言的味道,StatsModels 支持与 Pandas 进行数据交互,因此,它与 Pandas 结合,成为了 Python 下强大的数据挖掘组合。
- 参考链接:http://statsmodels.sourceforge.net/stable/index.html
6、Scikit-Learn
- Scikit-Learn 是 Python 下强大的机器学习工具包,它提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测和模型分析等。
- 所有模型提供的接口有:
model.fit() | 训练模型,对于监督模型来说是 fit(X,y),对于非监督模型是 fit(X) |
---|
- 监督模型提供的接口有:
model.predict(X_new) | 预测新样本 |
---|---|
model.predict_proda(X_new) | 预测概率,仅对某些模型有用(比如LR) |
model.score() | 得分越高,fit 越好 |
- 非监督模型提供的接口有:
model.transform() | 从数据中学到新的“基空间” |
---|---|
model.fit_transform() | 从数据中学到新的基并将这个数据按照这组“基”进行转换 |
7、Keras
- 虽然 Scikit-Learn 足够强大,但是它并没有包含一种强大的模型——人工神经网络。Keras 库是用来搭建神经网络。Keras 并非简单的神经网络库,而是一个基于 Theano 的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。由于它是基于 Theano 的,因此速度相当快。
8、Gensim
- Gensim 是用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等,这些领域的任务往往需要较多的背景知识。