python数据分析与机器学习实战_Python数据分析与机器学习实战(Numpy)

工具包使用、算法建模、实战项目

python常用库:numpy,pandas,matplotlib,scikit-learn,tensorflow

机器学习需要:算法、数据、程序、评估、应用

机器学习应用领域:计算机视觉、语音识别、自然语言处理、统计学习、数据挖掘、模式识别

机器学习的常规套路:数据收集与预处理→特征选择与模型构建→评估与预测

深度学习是机器学习中神经网络算法的延伸,只不过应用的比较广

案例资源:Github,Kaggle

jupyter notebook --generate-config

## The directory to use for notebooks and kernels.

c.NotebookApp.notebook_dir = 'D:\Python数据分析学习\jupyter代码文件'

进入d盘的方法:d:→cd:

jupyter notebook执行代码快捷键:shift+enter

查看文件路径print(os.path.abspath('.'))

numpy 矩阵数据处理,pandas 数据提特征 , matplotlib 数据可视化 ,seaborn 把matplotlib 中好多行代码组合在一起,可视化展示

Numpy

import numpy as np

import os

print(os.path.abspath('.'))

D:\Python数据分析学习\jupyter代码文件

array=np.array([1,2,3,4,5])

print(type(array))

array2=array+1

array2

array([2, 3, 4, 5, 6])

array2+array

array([ 3, 5, 7, 9, 11])

array2*array

array([ 2, 6, 12, 20, 30])

array[0]

1

array

array([1, 2, 3, 4, 5])

了解数据结构

array.shape

(5,)

np.array([[1,2,3],[4,5,6]])

array([[1, 2, 3],

[4, 5, 6]])

2-array结构

对于ndarray结构来说,里面所有的元素必须是同一类型的。如果不是的话,会自动向下进行转换

tang_list=[1,2,3,4,5.0]

tang_array=np.array(tang_list)

tang_array

array([1., 2., 3., 4., 5.])

ndarray基本属性操作

type(tang_array)

numpy.ndarray

元素类型

tang_array.dtype

dtype('float64')

array元素的字节数

tang_array.itemsize

8

tang_array.shape

(5,)

tang_array.size

5

np.shape(tang_array)

(5,)

维度

tang_array.ndim

1

tang_array

array([1., 2., 3., 4., 5.])

填充

tang_array.fill(0)

tang_array

array([0., 0., 0., 0., 0.])

索引与切片跟python都是一样的,还是从0开始

tang_list=[1,2,3,4,5]

tang_array=np.array(tang_list)

tang_array

array([1, 2, 3, 4, 5])

tang_array[1:3]

array([2, 3])

tang_array[-2]

4

tang_array[-2:]

array([4, 5])

矩阵格式(多维的形式)

tang_array=np.array([[1,2,3],[4,5,6],[7,8,9]])

tang_array

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

tang_array.shape

(3, 3)

tang_array.size

9

tang_array.ndim

2

tang_array[1,1]

5

tang_array[1,1]=10

tang_array

array([[ 1, 2, 3],

[ 4, 10, 6],

[ 7, 8, 9]])

tang_array[1]

array([ 4, 10, 6])

tang_array[:,1]

array([ 2, 10, 8])

tang_array[0,0:2]

array([1, 2])

tang_array2=tang_array

tang_array2

array([[ 1, 2, 3],

[ 4, 10, 6],

[ 7, 8, 9]])

tang_array2[1,1]=100

tang_array2

array([[ 1, 2, 3],

[ 4, 100, 6],

[ 7, 8, 9]])

等号赋值,改变2中元素,1中元素也变化;使用copy则新建存储空间

tang_array

array([[ 1, 2, 3],

[ 4, 100, 6],

[ 7, 8, 9]])

tang_array2=tang_array.copy()

tang_array2

array([[ 1, 2, 3],

[ 4, 100, 6],

[ 7, 8, 9]])

tang_array2[1,1]=10000

tang_array2

array([[ 1, 2, 3],

[ 4, 10000, 6],

[ 7, 8, 9]])

tang_array

array([[ 1, 2, 3],

[ 4, 100, 6],

[ 7, 8, 9]])

np.array(起始值,结束值,步长)

tang_array=np.arange(0,100,10)

tang_array

array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])

mask=np.array([0,0,0,0,0,0,1,1,1,1],dtype=bool)

mask

array([False, False, False, False, False, False, True, True, True,

True])

通过索引定位

tang_array[mask]

array([60, 70, 80, 90])

生成10个随机值

random_array=np.random.rand(10)

random_array

array([0.87760974, 0.36419272, 0.04580114, 0.44722691, 0.18272589,

0.33392239, 0.40377481, 0.15997066, 0.79774632, 0.47629771])

mask=random_array>0.5

mask

array([ True, False, False, False, False, False, False, False, True,

False])

tang_array[mask]

array([ 0, 80])

tang_array=np.array([10,20,30,40,50])

tang_array>30

array([False, False, False, True, True])

np.where(tang_array>30)

(array([3, 4], dtype=int64),)

tang_array[np.where(tang_array>30)]

array([40, 50])

tang_array=np.array([1,2,3,4,5],dtype=np.float32)

tang_array

array([1., 2., 3., 4., 5.], dtype=float32)

tang_array.dtype

dtype('float32')

占用字节总数

tang_array.nbytes

20

object类似于字符串类型

tang_array=np.array([1,10,3.5,'str'],dtype=np.object)

tang_array

array([1, 10, 3.5, 'str'], dtype=object)

tang_array=np.array([1,2,3,4,5])

tang_array

array([1, 2, 3, 4, 5])

改变数组元素类型

tang_array.astype(np.float32)

array([1., 2., 3., 4., 5.], dtype=float32)

数值计算

tang_array=np.array([[1,2,3],[4,5,6]])

tang_array

array([[1, 2, 3],

[4, 5, 6]])

元素求和

np.sum(tang_array)

21

指定要进行的操作沿着什么轴(维度,0为纵轴,1为横轴)

np.sum(tang_array,axis=0)

array([5, 7, 9])

tang_array.ndim

2

np.sum(tang_array,axis=1)

array([ 6, 15])

乘积操作

tang_array.prod(axis=1)

array([ 6, 120])

求最小值

tang_array.min()

1

tang_array.min(axis=0)

array([1, 2, 3])

求最大值

tang_array.max()

6

找到索引位置

tang_array.argmin()

0

tang_array.argmin(axis=0)

array([0, 0, 0], dtype=int64)

tang_array.argmin(axis=1)

array([0, 0], dtype=int64)

tang_array.argmax()

5

求平均值

tang_array.mean()

3.5

tang_array.mean(axis=0)

array([2.5, 3.5, 4.5])

标准差

tang_array.std()

1.707825127659933

tang_array.std(axis=1)

array([0.81649658, 0.81649658])

方差计算

tang_array.var()

2.9166666666666665

截断,选取数据值区间

tang_array.clip(2,4)

array([[2, 2, 3],

[4, 4, 4]])

tang_array=np.array([1.2,3.36,6.41])

四舍五入

tang_array.round()

array([1., 3., 6.])

保留小数位

tang_array.round(1)

array([1.2, 3.4, 6.4])

tang_array.round(decimals=1)

array([1.2, 3.4, 6.4])

排序操作

tang_array=np.array([[1.5,1.3,7.5],[5.6,7.8,1.2]])

tang_array

array([[1.5, 1.3, 7.5],

[5.6, 7.8, 1.2]])

np.sort(tang_array)

array([[1.3, 1.5, 7.5],

[1.2, 5.6, 7.8]])

np.sort(tang_array,axis=0)

array([[1.5, 1.3, 1.2],

[5.6, 7.8, 7.5]])

查看排序索引

np.argsort(tang_array)

array([[1, 0, 2],

[2, 0, 1]], dtype=int64)

生成矩阵

tang_array=np.linspace(0,10,10)

tang_array

array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444,

5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])

插入数据

values=np.array([2.5,6.5,9.5])

找到插入数据位置

np.searchsorted(tang_array,values)

array([3, 6, 9], dtype=int64)

tang_array=np.array([[1,0,6],[1,7,0],[2,3,1],[2,4,0]])

tang_array

array([[1, 0, 6],

[1, 7, 0],

[2, 3, 1],

[2, 4, 0]])

多条件排序[:,列值]

index=np.lexsort([-1*tang_array[:,0],tang_array[:,2]])

index

array([3, 1, 2, 0], dtype=int64)

数组形状操作

tang_array=np.arange(10)

tang_array

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

tang_array.shape

(10,)

规定数组行列数

tang_array.shape=2,5

tang_array

array([[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9]])

大小必须不能改变

tang_array.reshape(1,10)

array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

tang_array=np.arange(10)

tang_array.shape

(10,)

增加维度

tang_array=tang_array[np.newaxis,:]

tang_array.shape

(1, 10)

tang_array=np.arange(10)

tang_array.shape

(10,)

tang_array=tang_array[:,np.newaxis]

tang_array.shape

(10, 1)

tang_array=tang_array[:,np.newaxis,np.newaxis]

tang_array.shape

(10, 1, 1, 1)

压缩维度

tang_array=tang_array.squeeze()

tang_array.shape

(10,)

tang_array.shape=2,5

tang_array

array([[0, 1, 2, 3, 4],

[5, 6, 7, 8, 9]])

矩阵转置

tang_array.transpose()

array([[0, 5],

[1, 6],

[2, 7],

[3, 8],

[4, 9]])

tang_array.T

array([[0, 5],

[1, 6],

[2, 7],

[3, 8],

[4, 9]])

数组的连接

a=np.array([[123,456,678],[3214,456,134]])

a

array([[ 123, 456, 678],

[3214, 456, 134]])

b=np.array([[1235,3124,432],[43,13,134]])

b

array([[1235, 3124, 432],

[ 43, 13, 134]])

c=np.concatenate((a,b))

c

array([[ 123, 456, 678],

[3214, 456, 134],

[1235, 3124, 432],

[ 43, 13, 134]])

c=np.concatenate((a,b),axis=0)

c

array([[ 123, 456, 678],

[3214, 456, 134],

[1235, 3124, 432],

[ 43, 13, 134]])

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

c

array([[ 123, 456, 678, 1235, 3124, 432],

[3214, 456, 134, 43, 13, 134]])

c.shape

(2, 6)

竖向拼接

np.vstack((a,b))

array([[ 123, 456, 678],

[3214, 456, 134],

[1235, 3124, 432],

[ 43, 13, 134]])

横向拼接

np.hstack((a,b))

array([[ 123, 456, 678, 1235, 3124, 432],

[3214, 456, 134, 43, 13, 134]])

拉长操作

a.flatten()

array([ 123, 456, 678, 3214, 456, 134])

数组生成常用函数

np.array([1,2,3])

array([1, 2, 3])

np.arange(10)

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

按步长生成

np.arange(2,20,2)

array([ 2, 4, 6, 8, 10, 12, 14, 16, 18])

np.arange(2,20,2,dtype=np.float32)

array([ 2., 4., 6., 8., 10., 12., 14., 16., 18.], dtype=float32)

np.linspace(0,10,10)

array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444,

5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])

按对数生成,默认以10为底

np.logspace(0,1,5)

array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])

x=np.linspace(-10,10,5)

x

array([-10., -5., 0., 5., 10.])

y=np.linspace(-10,10,5)

y

array([-10., -5., 0., 5., 10.])

生成0,1矩阵

np.zeros(3)

array([0., 0., 0.])

np.zeros((3,3))

array([[0., 0., 0.],

[0., 0., 0.],

[0., 0., 0.]])

np.ones((3,3))

array([[1., 1., 1.],

[1., 1., 1.],

[1., 1., 1.]])

np.ones((3,3))*8

array([[8., 8., 8.],

[8., 8., 8.],

[8., 8., 8.]])

np.ones((3,3),dtype=np.float32)

array([[1., 1., 1.],

[1., 1., 1.],

[1., 1., 1.]], dtype=float32)

构建无值矩阵

a=np.empty(6)

a.shape

(6,)

a

array([0., 0., 0., 0., 0., 0.])

用1进行填充

a.fill(1)

a

array([1., 1., 1., 1., 1., 1.])

tang_array=np.array([1,2,3,4])

tang_array

array([1, 2, 3, 4])

按矩阵形状用0填充

np.zeros_like(tang_array)

array([0, 0, 0, 0])

np.ones_like(tang_array)

array([1, 1, 1, 1])

构建对角阵

np.identity(5)

array([[1., 0., 0., 0., 0.],

[0., 1., 0., 0., 0.],

[0., 0., 1., 0., 0.],

[0., 0., 0., 1., 0.],

[0., 0., 0., 0., 1.]])

运算

x=np.array([5,5])

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

乘法运算

np.multiply(x,y)

array([10, 10])

一维的时候为内积计算

np.dot(x,y)

20

二维的时候为矩阵运算

x.shape=2,1

y.shape=1,2

x

array([[5],

[5]])

y

array([[2, 2]])

np.dot(x,y)

array([[10, 10],

[10, 10]])

np.dot(y,x)

array([[20]])

判断元素是否相等

y=np.array([1,1,1,4])

x=np.array([1,1,1,2])

x==y

array([ True, True, True, False])

逻辑运算

np.logical_and(x,y)

array([ True, True, True, True])

np.logical_or(x,y)

array([ True, True, True, True])

np.logical_not(x,y)

array([0, 0, 0, 0])

随机模块

np.random.rand(3,2)

array([[0.99888972, 0.05892579],

[0.29106447, 0.16451932],

[0.47094717, 0.61179067]])

返回随机整数,左闭右开

np.random.randint(10,size=(5,4))

array([[7, 9, 2, 0],

[7, 9, 2, 7],

[1, 0, 8, 5],

[9, 2, 7, 5],

[7, 9, 3, 5]])

np.random.randint(0,10,3)

array([3, 9, 6])

np.random.rand()

0.17091626875348065

高斯分布,指定mu,sigma

mu,sigma=0,0.1

np.random.normal(mu,sigma,10)

array([ 0.00282573, 0.02437252, -0.17175236, 0.11735419, -0.07225676,

0.0523324 , -0.09490633, 0.13193924, -0.0226582 , -0.2720951 ])

精简小数位数

np.set_printoptions(precision=2)

mu,sigma=0,0.1

np.random.normal(mu,sigma,10)

array([-0.11, -0.1 , 0.07, -0.04, -0.03, -0.01, 0.02, 0.21, -0.1 ,

0.03])

洗牌

tang_array=np.arange(10)

tang_array

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.random.shuffle(tang_array)

tang_array

array([4, 2, 7, 8, 1, 9, 6, 0, 3, 5])

随机的种子(定位)

np.random.seed(100)

mu,sigma=0,0.1

np.random.normal(mu,sigma,10)

array([-0.17, 0.03, 0.12, -0.03, 0.1 , 0.05, 0.02, -0.11, -0.02,

0.03])

读写数据

魔法指令

%%writefile tang.txt

1 2 3 4 5 6

7 8 9 1 2 3

Writing tang.txt

data=[]

with open('tang.txt')as f:

for line in f.readlines():

fileds=line.split()

cur_data=[float(x) for x in fileds]

data.append(cur_data)

data=np.array(data)

data

array([[1., 2., 3., 4., 5., 6.],

[7., 8., 9., 1., 2., 3.]])

data=np.loadtxt('tang.txt')

data

array([[1., 2., 3., 4., 5., 6.],

[7., 8., 9., 1., 2., 3.]])

%%writefile tang2.txt

1,2,3,4,5,6

7,8,9,1,2,3

Writing tang2.txt

读取数据,指定分隔符

data=np.loadtxt('tang2.txt',delimiter=',')

data

array([[1., 2., 3., 4., 5., 6.],

[7., 8., 9., 1., 2., 3.]])

%%writefile tang2.txt

a,b,c,d,e,f

1,2,3,4,5,6

7,8,9,1,2,3

Overwriting tang2.txt

读取数据,去除第几行

data=np.loadtxt('tang2.txt',delimiter=',',skiprows=1)

data

array([[1., 2., 3., 4., 5., 6.],

[7., 8., 9., 1., 2., 3.]])

保存操作

tang_array=np.array([[1,2,3],[4,5,6]])

np.savetxt('tang.txt',tang_array)

指定保存方法

np.savetxt('tang1.txt',tang_array,fmt='%d')

np.savetxt('tang2.txt',tang_array,fmt='%d',delimiter='.')

np.savetxt('tang3.txt',tang_array,fmt='%d',delimiter=',')

***读写array结构

tang_array=np.array([[1,2,3],[4,5,6]])

np.save('tang_array.npy',tang_array)

tang=np.load('tang_array.npy')

tang

array([[1, 2, 3],

[4, 5, 6]])

tang_array2=np.arange(10)

tang_array2

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

保存并对数据进行压缩(不建议使用)

np.savez('tang.npz',a=tang_array,b=tang_array2)

data=np.load('tang.npz')

data.keys()

KeysView()

data['a']

array([[1, 2, 3],

[4, 5, 6]])

你可能感兴趣的:(python数据分析与机器学习实战_Python数据分析与机器学习实战(Numpy))