2020-05-13 常用的数据分析与挖掘工具

常用的数据分析与挖掘工具

  • R语言是由奥克兰大学统计系的Robert和Ross共同开发的,并在1993年首次亮相。其具备灵活的数据操作、高效的向量化运算、优秀的数据可视化等优点,受到用户的广泛欢迎。
    它是一款优秀的数据挖掘工具,用户可以借助强大的第三方扩展包,实现各种数据挖掘算法的落地。

  • Pyhton是由荷兰人Guido van Rossum于1989年发明的,并在1991年首次公开发行。它是一款简单易学的编程类工具,同时,其编写的代码具有简洁性、易读性和易维护性等优点,也受到广大用户的青睐。
    借助于pandas、statsmodels、scipy等模块用于数据处理和统计分析;matplotlib、seaborn、bokeh等模块实现数据的可视化功能;sklearn、PyML、keras、tensorflow等模块实现数据挖掘、深度学习等操作。

  • Weka由新西兰怀卡托大学计算机系Ian Written博士于1992年末发起开发,并在1996年公开发布Weka 2.1版本。它是一款公开的数据挖掘平台,包含数据预处理、数据可视化等功能,以及各种常用的回归、分类、聚类、关联规则等算法。
    对于不擅长编程的用户,可以通过Weka的图形化界面完成数据分析或挖掘的工作内容。

  • SAS是由美国北卡罗来纳州大学开发的统计分析软件,当时主要是为了解决生物统计方面的数据分析。在1976年成立SAS软件研究所,经过多年的完善和发展,最终在国际上被誉为统计分析的标准软件,进而受到各个领域的广泛应用。

  • SPSS是世界上最早的统计分析软件,最初由斯坦福大学的三个研究生在1968年研发成功,并成立SPSS公司,而且在1975年成立了SPSS芝加哥总部。用户通过SPSS的界面实现数据的统计分析和建模、数据可视化及报表输出,简单的操作受到了众多用户的喜爱。
    除此之外,SPSS还有一款Modeler工具,其充分体现了数据挖掘的各个流程,例如数据的导入、清洗、探索性分析、模型选择、模型评估和结果输出,用户可基于界面化的操作完成数据挖掘的各个环节。

学习numpy记录

数组的创建与操作

二维数组的创建

(base) Cheng-MacBook-Pro:~ chelsea$ conda deactivate
Cheng-MacBook-Pro:~ chelsea$ cd /Users/chelsea/pandas-tutorial-master
Cheng-MacBook-Pro:pandas-tutorial-master chelsea$ source venv/bin/activate
(venv) Cheng-MacBook-Pro:pandas-tutorial-master chelsea$ ipython
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/IPython/core/interactiveshell.py:935: UserWarning: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
  warn("Attempting to work in a virtualenv. If you encounter problems, please "
Python 3.8.1 (v3.8.1:1b293b6006, Dec 18 2019, 14:08:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np

In [2]: arr1 = np.array([[1,3,5,7],])

In [3]: arr1 = np.array([[1,3,5,7],[2,4,6,8],[11,13,15,17],[12,14,16,18],[100,10
   ...: 1,102,103]])

In [4]: arr1
Out[4]:
array([[  1,   3,   5,   7],
       [  2,   4,   6,   8],
       [ 11,  13,  15,  17],
       [ 12,  14,  16,  18],
       [100, 101, 102, 103]])

In [5]: arr2 = np.array(((8.5,6,4.1,2,0.7),(1.5,3,5.4,7.3,9),
   ...:                  (3.2,3,3.8,3,3),(11.2,13.4,15.6,17.8,19)))
   ...:

In [6]: arr2
Out[6]:
array([[ 8.5,  6. ,  4.1,  2. ,  0.7],
       [ 1.5,  3. ,  5.4,  7.3,  9. ],
       [ 3.2,  3. ,  3.8,  3. ,  3. ],
       [11.2, 13.4, 15.6, 17.8, 19. ]])

数组元素的返回

1)在一维数组中,列表的所有索引方法都可以使用在数组中,而且还可以将任意位置的索引组装为列表,用作对应元素的获取;

2)在二维数组中,位置索引必须写成[rows,cols]的形式,方括号的前半部分用于锁定二维数组的行索引,后半部分用于锁定数组的列索引;

3)如果需要获取二维数组的所有行或列元素,那么,对应的行索引或列索引需要用英文状态的冒号表示;

In [7]: arr1 = np.array([3,10,8,7,34,11,28,72])
   ...:

In [8]: arr1
Out[8]: array([ 3, 10,  8,  7, 34, 11, 28, 72])

In [9]: arr1[[2,3,5,7]]
Out[9]: array([ 8,  7, 11, 72])

In [10]: arr2[1,2]
Out[10]: 5.4

In [11]: arr2[2,:]
Out[11]: array([3.2, 3. , 3.8, 3. , 3. ])

In [12]: arr2[:,1]
Out[12]: array([ 6. ,  3. ,  3. , 13.4])

In [13]: arr2[1:4,1:5]
Out[13]:
array([[ 3. ,  5.4,  7.3,  9. ],
       [ 3. ,  3.8,  3. ,  3. ],
       [13.4, 15.6, 17.8, 19. ]])

数组的常用属性

  • ndim:返回数组的维数(返回1,表示1维数组;返回2,表示二维数组)

  • shape:返回数组的行列数(返回结果为元组结构)

  • dtype:返回数组元素的数据类型

  • size:返回数组元素的个数

  • reshape:用于转换数组的形状,如原本3×4的数组转换成6×2的数组

  • resize:与reshape功能类似,区别在于reshape无法原地修改数组的形状,而resize可以

  • ravel:将多维数组转换为一维数组的方法

  • flatten:与ravel功能类似

In [16]: arr3 = np.array([[1,5,7],[3,6,1],[2,4,8],[5,8,9],[1,5,9],[8,5,2]])
    ...:

In [17]: arr3
Out[17]:
array([[1, 5, 7],
       [3, 6, 1],
       [2, 4, 8],
       [5, 8, 9],
       [1, 5, 9],
       [8, 5, 2]])

In [18]: arr3.shape
Out[18]: (6, 3)

In [19]: arr3.reshape(2,9)
Out[19]:
array([[1, 5, 7, 3, 6, 1, 2, 4, 8],
       [5, 8, 9, 1, 5, 9, 8, 5, 2]])

In [20]: arr3.shape
Out[20]: (6, 3)

In [21]: arr3.resize(2,9)

In [22]: arr3.shape
Out[22]: (2, 9)

数组降维

In [24]: arr4
Out[24]:
array([[  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300]])

In [25]: arr4.ravel()
Out[25]: array([  1,  10, 100,   2,  20, 200,   3,  30, 300])

In [26]: arr4.flatten()
Out[26]: array([  1,  10, 100,   2,  20, 200,   3,  30, 300])

In [27]: arr4.reshape(-1)
Out[27]: array([  1,  10, 100,   2,  20, 200,   3,  30, 300])

In [28]: arr4.ravel(order = 'F')
Out[28]: array([  1,   2,   3,  10,  20,  30, 100, 200, 300])

In [29]: arr4.flatten(order = 'F')
Out[29]: array([  1,   2,   3,  10,  20,  30, 100, 200, 300])

In [30]: arr4.reshape(-1, order = 'F')
Out[30]: array([  1,   2,   3,  10,  20,  30, 100, 200, 300])

数组的堆叠

  • row_stack:用于垂直方向(纵向)的数组堆叠
  • colum_stack:用于水平方向(横向)的数组合并
  • vstack:其功能与row_stack函数一致
  • hstack:其功能与colum_stack函数一致
In [31]: arr5 = np.array([1,2,3])
    ...:

In [32]: arr5
Out[32]: array([1, 2, 3])

In [33]: np.vstack([arr4,arr5])
Out[33]:
array([[  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300],
       [  1,   2,   3]])

In [34]: np.row_stack([arr4,arr5])
Out[34]:
array([[  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300],
       [  1,   2,   3]])

In [35]: arr6 = np.array([[5],[15],[25]])

In [36]: arr6
Out[36]:
array([[ 5],
       [15],
       [25]])

In [37]: np.hstack([arr4,arr6])
Out[37]:
array([[  1,  10, 100,   5],
       [  2,  20, 200,  15],
       [  3,  30, 300,  25]])

In [38]: np.column_stack([arr4,arr6])
Out[38]:
array([[  1,  10, 100,   5],
       [  2,  20, 200,  15],
       [  3,  30, 300,  25]])

数学运算符

运算符 含义 运算符 含义
+ 数组对应元素的加和 - 数组对应元素的差
* 数组对应元素的乘积 / 数组对应元素的商
% 数组对应元素商的余数 // 数组对应元素商的整除数
** 数组对应元素的幂指数

比较运算符

符号 函数 含义
> np.greater(arr1,arr2) 判断arr1的元素是否大于arr2的元素
>= np.greater_equal(arr1,arr2) 判断arr1的元素是否大于等于arr2的元素
< np.less(arr1,arr2) 判断arr1的元素是否小于arr2的元素
<= np.less_equal(arr1,arr2) 判断arr1的元素是否小于等于arr2的元素
== np.equal(arr1,arr2) 判断arr1的元素是否等于arr2的元素
!= np.not_equal(arr1,arr2) 判断arr1的元素是否不等于arr2的元素

常用的数学函数

函数 函数说明
np.pi 常数p
np.e 常数e
np.fabs(arr) 计算各元素的浮点型绝对值
np.ceil(arr) 对各元素向上取整
np.floor(arr) 对各元素向下取整
np.round(arr) 对各元素四舍五入
np.fmod(arr1,arr2) 计算arr1/arr2的余数
函数 函数说明
np.modf(arr) 返回数组元素的小数部分和整数部分
np.sqrt(arr) 计算各元素的算术平方根
np.square(arr) 计算各元素的平方值
np.exp(arr) 计算以e为底的指数
np.power(arr, α) 计算各元素的指数
np.log2(arr) 计算以2为底各元素的对数
np.log10(arr) 计算以10为底各元素的对数
np.log(arr) 计算以e为底各元素的对数

常用的统计函数

函数 函数说明
np.min(arr,axis) 按照轴的方向计算最小值
np.max(arr,axis) 按照轴的方向计算最大值
np.mean(arr,axis) 按照轴的方向计算平均值
np.median(arr,axis) 按照轴的方向计算中位数
np.sum(arr,axis) 按照轴的方向计算和
np.std(arr,axis) 按照轴的方向计算标准差
np.var(arr,axis) 按照轴的方向计算方差
函数 函数说明
np.cumsum(arr,axis) 按照轴的方向计算累计和
np.cumprod(arr,axis) 按照轴的方向计算累计乘积
np.argmin(arr,axis) 按照轴的方向返回最小值所在的位置
np.argmax(arr,axis) 按照轴的方向返回最大值所在的位置
np.corrcoef(arr) 计算皮尔逊相关系数
np.cov(arr) 计算协方差矩阵

注意:axis=0时,计算数组各列的统计值;
axis=1时,计算数组各行的统计值

In [39]: arr4
Out[39]:
array([[  1,  10, 100],
       [  2,  20, 200],
       [  3,  30, 300]])

In [40]: np.sum(arr4,axis = 0)
Out[40]: array([  6,  60, 600])

In [41]: np.sum(arr4,axis = 1)
Out[41]: array([111, 222, 333])

常用的线代函数(了解)

函数 说明 函数 说明
np.zeros 生成零矩阵 np.ones 生成所有元素为1的矩阵
np.eye 生成单位矩阵 np.transpose 矩阵转置
np.dot 计算两个数组的点积 np.inner 计算两个数组的内积
np.diag 矩阵主对角线与一维数组间的转换 np.trace 矩阵主对角线元素的和
np.linalg.det 计算矩阵行列式 np.linalg.eig 计算矩阵特征根与特征向量
np.linalg.eigvals 计算方阵特征根 np.linalg.inv 计算方阵的逆
np.linalg.pinv 计算方阵的Moore-Penrose伪逆 np.linalg.solve 计算Ax=b的线性方程组的解
np.linalg.lstsq 计算Ax=b的最小二乘解 np.linalg.qr 计算QR分解
np.linalg.svd 计算奇异值分解 np.linalg.norm 计算向量或矩阵的范数
In [43]: arr16
Out[43]:
array([[1, 2, 5],
       [3, 6, 8],
       [4, 7, 9]])

In [44]: print('计算3×3方阵的特征根和特征向量:\n',arr16)
计算3×3方阵的特征根和特征向量:
 [[1 2 5]
 [3 6 8]
 [4 7 9]]

In [45]: print('求解结果为:\n',np.linalg.eig(arr16))
求解结果为:
 (array([16.75112093, -1.12317544,  0.37205451]), array([[-0.30758888, -0.90292521,  0.76324346],
       [-0.62178217, -0.09138877, -0.62723398],
       [-0.72026108,  0.41996923,  0.15503853]]))

In [46]: A = np.array([[3,2,1],[2,3,1],[1,2,3]])
    ...: b = np.array([39,34,26])
    ...: X = np.linalg.solve(A,b)
    ...: print('三元一次方程组的解:\n',X)
三元一次方程组的解:
 [9.25 4.25 2.75]

常用的随机分布函数(了解)

函数 说明
seed(n) 设置随机种子
beta(a, b, size=None) 生成贝塔分布随机数
chisquare(df, size=None) 生成卡方分布随机数
choice(a, size=None, replace=True, p=None) 从a中有放回地随机挑选指定数量的样本
exponential(scale=1.0, size=None) 生成指数分布随机数
f(dfnum, dfden, size=None) 生成F分布随机数
gamma(shape, scale=1.0, size=None) 生成伽马分布随机数
geometric(p, size=None) 生成几何分布随机数
hypergeometric(ngood, nbad, nsample, size=None) 生成超几何分布随机数
laplace(loc=0.0, scale=1.0, size=None) 生成拉普拉斯分布随机数
logistic(loc=0.0, scale=1.0, size=None) 生成Logistic分布随机数
lognormal(mean=0.0, sigma=1.0, size=None) 生成对数正态分布随机数
函数 说明
negative_binomial****(n, p, size=None) 生成负二项分布随机数
multinomial(n, pvals, size=None) 生成多项分布随机数
multivariate_normal(mean, cov[, size]) 生成多元正态分布随机数
normal(loc=0.0, scale=1.0, size=None) 生成正态分布随机数
pareto(a, size=None) 生成帕累托分布随机数
poisson(lam=1.0, size=None) 生成泊松分布随机数
rand(d0, d1, ..., dn) 生成n维的均匀分布随机数
randn(d0, d1, ..., dn) 生成n维的标准正态分布随机数
randint(low, high=None, size=None, dtype='l') 生成指定范围的随机整数
random_sample(size=None) 生成[0,1)的随机数
standard_t(df, size=None) 生成标准的t分布随机数
uniform(low=0.0, high=1.0, size=None) 生成指定范围的均匀分布随机数
wald(mean, scale, size=None) 生成Wald分布随机数
weibull(a, size=None) 生成Weibull分布随机数
# 导入第三方模块
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 生成各种正态分布随机数
np.random.seed(1234)
rn1 = np.random.normal(loc = 0, scale = 1, size = 1000)
rn2 = np.random.normal(loc = 0, scale = 2, size = 1000)
rn3 = np.random.normal(loc = 2, scale = 3, size = 1000)
rn4 = np.random.normal(loc = 5, scale = 3, size = 1000)

# 绘图
plt.style.use('ggplot')
sns.distplot(rn1, hist = False, kde = False, fit = stats.norm, 
             fit_kws = {'color':'black','label':'u=0,s=1','linestyle':'-'})
# 续上一页的代码
sns.distplot(rn2, hist = False, kde = False, fit = stats.norm, 
             fit_kws = {'color':'red','label':'u=0,s=2','linestyle':'--'})
sns.distplot(rn3, hist = False, kde = False, fit = stats.norm, 
             fit_kws = {'color':'blue','label':'u=2,s=3','linestyle':':'})
sns.distplot(rn4, hist = False, kde = False, fit = stats.norm, 
             fit_kws = {'color':'purple','label':'u=5,s=3','linestyle':'-.'})

# 呈现图例
plt.legend()
# 呈现图形
plt.show()
image-20200513232648643.png
In [53]: # 生成各种指数分布随机数
    ...: np.random.seed(1234)
    ...: re1 = np.random.exponential(scale = 0.5, size = 1000)
    ...: re2 = np.random.exponential(scale = 1, size = 1000)
    ...: re3 = np.random.exponential(scale = 1.5, size = 1000)
    ...: # 绘图
    ...: sns.distplot(re1, hist = False, kde = False, fit = stats.expon,
    ...:              fit_kws = {'color':'black','label':'lambda=0.5','linestyle
    ...: ':'-'})
    ...: sns.distplot(re2, hist = False, kde = False, fit = stats.expon,
    ...:              fit_kws = {'color':'red','label':'lambda=1','linestyle':'-
    ...: -'})
    ...: sns.distplot(re3, hist = False, kde = False, fit = stats.expon,
    ...:              fit_kws = {'color':'blue','label':'lambda=1.5','linestyle'
    ...: :':'})
    ...: # 呈现图例
    ...: plt.legend()
    ...: # 呈现图形
    ...: plt.show()
    ...:
image-20200513232755608.png

你可能感兴趣的:(2020-05-13 常用的数据分析与挖掘工具)