工具包使用、算法建模、实战项目
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]])