【Python数据挖掘】第三篇--Numpy 和 可视化

一、Numpy

数组是一系列同类型数据的集合,可以被非零整数进行索引,可以通过列表进行数组的初始化,数组也可以通过索引进行切片。

Numpy提供了几乎全部的科学计算方式。

# numpy 导入方式:
import numpy as np

①、创建数组:

1.简单一二维数组

np.array( [1,2,3,4] )                 #  一维数组
np.array( ['1',5,True] )              #  数组内容为字符型
np.array( [True,True] )               #  布尔型数组

np.array( [[1,2,3,4] , [5,6,7,8]] )   #  二维数组    

2.范围函数生成 一维数组:

np.arange([start,] stop[, step,], dtype=None)

np.arange(1,10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

3.均分函数生成 一维数组:(等差数列)

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start : 初始值
stop : 末尾值
num : 生成的样本数 , 必须为非负数
endpoint : 默认True  , 数组最后一个元素为 stop项

# 数组step计算:
当 endpoint = True 时, step =  (end - start) / (num - 1)
当 endpoint = False 时, step =  (end - start) / num 

np.linspace(1,10,num=5,endpoint=False)
# array([ 1. ,  2.8,  4.6,  6.4,  8.2])

4.创建元素为1 的数组

np.ones(4)          #  一维数组  array([ 1.,  1.,  1.,  1.])
np.ones([4,5])      #  二维数组  4行5列

5.创建元素为0 的数组

np.zeros(4)          #  一维数组   array([ 0.,  0.,  0.,  0.])
np.zeros([4,5])      #  二维数组   4行5列

6.创建一定形状的数组

numpy.empty(shape, dtype=float, order='C')

np.empty([2,3])            # 创建2行3列数组

7.创建方阵型,行列相等,对角元素为1,其余元素为0

np.eye(4)                       #  4行4列 ,  元素为0 , 对角线元素为1
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

8.创建与某数组大小相同的数组,元素为0

arr1 = np.eye(4)              #  4行4列
arr2 = np.empty_like(arr1)    #  4行4列

9.Series转换Array

np.array(series)

②、Numpy下的random类创建 随机数组

1.创建符合 [0:1) 均匀分布 的数组

np.random.rand(d0, d1, ..., dn)

np.random.rand(4,5)          # 4行5列数组  

2.创建符合 标准正态分布 的数组

np.random.randn(d0, d1, ..., dn)

np.random.randn(4,5)         # 4行5列数组

3.创建 随机整数 的数组 , (不包含)

np.random.randint(low, high=None, size=None, dtype='l')

np.random.randint(5, size=(2, 4))           # 生成0到4之间的 2 x 4数组
array([[4, 0, 2, 1],
       [3, 2, 2, 0]])

4.创建 随机整数 的数组 , (包含)

np.random.random_integers(low, high=None, size=None)

np.random.random_integers(5, size=(2, 4))   # 生成1到5之间的 2 x 4数组
array([[3, 3, 4, 3],
       [3, 4, 1, 5]])

5.创建 [0.0,1.0) 随机浮点数

np.random.random(size=None)
np.random.random_sample(size=None)
np.random.ranf(size=None)
np.random.sample(size=None)

np.random.random( (5,) )
np.random.random_sample( (4,5) )           # 4行5列 浮点数数组

6.从给定的1-D数组 生成随机样本

np.random.choice(a, size=None, replace=True, p=None)
p:1-D array-like,可选 ( 设置概率 )与a中的每个条目相关联的概率。如果没有给出样本,则假设在a中的所有条目均匀分布。

np.random.choice(5, 3)                  #  从np.arange(5)生成大小为3的均匀随机样本:
np.random.choice(5, 3, replace=False)   #  从np.arange(5)生成大小为3的均匀随机样本,没有重复:

aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])

7.返回随机字节

np.random.bytes(length)

np.random.bytes(10)
# b'u\x1e\xd6\x8d\xf5]\xab6\xed\x0c'

③、重要属性

np.shape     # 查看数组的维度  如:  (4,)  一个数字代表1维 , (5,6) 代表二维,5行6列数组  , .....
np.size      # 查看数组元素总个数
np.ndim      # 查看数组维度数
len(array)   # 查看数组行数

④、重要方法

1. 给定条件判断元素

numpy.where(condition[, x, y])                #  根据条件,从x或y返回元素。

np.where(arr1 > 0 , True , False )
array([[False,  True,  True, False],
       [ True, False, False, False],
       [ True,  True,  True, False]], dtype=bool)

2.查找数组唯一元素

np.unique(ar, return_index=False, return_inverse=False, return_counts=False)[source]
return_counts = True   # 返回出现次数
np.unique([1, 1, 2, 2, 3, 3]) # array([1, 2, 3]) a = np.array([[1, 1], [2, 3]]) np.unique(a) # array([1, 2, 3])

3.两个数组连接 

np.concatenate((a1, a2, ...), axis=0)     # 沿现有轴连接数组序列。

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])

np.concatenate((a, b.T), axis=1)

⑤、索引与切片

⑥、数组计算

1.加法

a = np.array([1,2,3])
b = np.array([-1,2,-4])

np.add(x1, x2[, out]) = <ufunc 'add'>

np.add(a,b)              #  等效于 a + b
# array([ 0,  4, -1])

2.减法

np.subtract(x1, x2[, out]) = <ufunc 'subtract'>

np.subtract(a,b)       # a - b

3.乘法

np.multiply(x1, x2[, out]) = <ufunc 'multiply'>

np.multiply(a,b)       # a * b

4.除法

np.divide(x1, x2[, out]) = <ufunc 'divide'>

np.divide(a,b)         # a / b

5.点积 (相乘后把元素相加)  

两矩阵的点积 需要 左边矩阵列 与 右边矩阵行 数目相等

np.dot(a, b, out=None)

np.dot(a,b)
np.dot(a,b.T)

6.广播

两矩阵相加 , 类型shape不一样时 , 自动广播计算 ,作用在每一行每个元素

arr1 = np.random.randint(1,10,size=(3,4))
array([[3, 3, 4, 1],
       [8, 4, 8, 2],
       [6, 4, 4, 9]])

arr2 = np.array([2,2,2,2])
array([2, 2, 2, 2])

arr1 + arr2
array([[ 5,  5,  6,  3],
       [10,  6, 10,  4],
       [ 8,  6,  6, 11]])

# 方式二 : 
arr1 + 6           # 每个元素都加6

7.求和

np.sum(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globals._NoValue>)
# 给定轴上的数组元素的总和。

np.sum([0.5, 1.5])
#  2.0
np.sum([[0, 1], [0, 5]], axis=0)
#  array([0, 6])
np.sum([[0, 1], [0, 5]], axis=1)
#  array([1, 5])

8.求平均

np.mean(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globals._NoValue>)
# 沿指定轴计算算术平均值。

a = np.array([[1, 2], [3, 4]])
np.mean(a)
#  2.5
np.mean(a, axis=0)
#  array([ 2.,  3.])

9.求平方根

np.sqrt(x[, out]) = <ufunc 'sqrt'>
# 按元素方式返回数组的正平方根。

np.sqrt([1,4,9])
# array([ 1.,  2.,  3.])

10.求指数

np.exp(x[, out]) = <ufunc 'exp'>
# 计算输入数组中所有元素的指数。

11.求绝对值

np.absolute(x[, out]) = <ufunc 'absolute'>
# 逐个计算绝对值。

x = np.array([-1.2, 1.2])
np.absolute(x)
# array([ 1.2,  1.2])

12.求自然对数

np.log(x[, out]) = <ufunc 'log'>
# 自然对数,逐元素。

⑦、线性代数计算

1.数组转置

arr1 = np.random.randint(0,10,size=(4,4))
np.transpose(arr1)            # arr1.T

2.矩阵的逆

a = np.array([[1,2],[4,7]])
np.linalg.inv(a)

array([[-7.,  2.],
       [ 4., -1.]])

3.沿数组的对角线返回总和

a = np.array([[1,2],[4,7],[5,2]])
np.trace(a)
# 8

4.正方形数组的特征值和右特征向量

w, v = np.linalg.eig(np.array([ [1, -1], [1, 1] ]))
w; v
array([ 1. + 1.j,  1. - 1.j])
array([[ 0.70710678+0.j        ,  0.70710678+0.j        ],
       [ 0.00000000-0.70710678j,  0.00000000+0.70710678j]])
二、可视化

①、matplotlib 导入方式:                       👉官方文档

import matplotlib.pyplot as plt

②、条形图

plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

y = np.array([10,20,30,50])
x = np.arange(len(y))
plt.bar(x,y,color='r')                  # 垂直方向
plt.show()

plt.barh(x,y,color='r')                # 水平方向
plt.show()

③、多图形排列

y = np.random.randint(10,100,size=(4,4))
x = np.arange(4)

plt.bar(x,y[0],color='r',width=0.25)
plt.bar(x+0.25,y[1],color='b',width=0.25)
plt.bar(x+0.5,y[2],color='g',width=0.25)

plt.show()

④、图形堆叠

plt.bar(x,y[0],color='r')
plt.bar(x,y[1],color='y',bottom=y[0])
plt.bar(x,y[2],color='g',bottom=y[0] + y[1])

⑤、散点图

data = np.random.rand(1024,2)
plt.scatter(data[:,0],data[:,1])
plt.show()

⑥、直方图

x = np.random.rand(1000)
plt.hist(x,bins=50)             # 显示50条
plt.show()

⑦、箱形图

x = np.random.randn(100,5)
plt.boxplot(x)
plt.show()

 

注意:

numpy数组计算中*和dot是有很大区别的

1.numpy乘法运算中"*"是数组元素逐个计算具体代码如下


 

2.numpy乘法运算中dot是按照矩阵乘法的规则来运算的具体实现代码如下:

 

posted @ 2017-07-10 22:14  5_FireFly  阅读(1856)  评论(0编辑  收藏  举报
web
counter