目录

  • 1 模块一  Python与机器学习概述
    • 1.1 Python与机器学习简介
    • 1.2 发展历程
    • 1.3 基本语法
    • 1.4 帮助
    • 1.5 应用
    • 1.6 示例源代码(食品识别小小专家系统)
    • 1.7 示例代码   蜡笔小新
    • 1.8 小结
    • 1.9 Python基础教程(教&学资料)
      • 1.9.1 安装Python
      • 1.9.2 第一个python程序
      • 1.9.3 Python基础
      • 1.9.4 函数
      • 1.9.5 高级特性
      • 1.9.6 函数式编程
      • 1.9.7 模块
      • 1.9.8 面向对象编程
      • 1.9.9 面向对象高级编程
      • 1.9.10 错误、调试和测试
      • 1.9.11 IO编程
      • 1.9.12 进程和线程
      • 1.9.13 正则表达式
      • 1.9.14 常用内建模块
      • 1.9.15 常用第三方模块
      • 1.9.16 图形界面
      • 1.9.17 网络编程
      • 1.9.18 电子邮件
      • 1.9.19 访问数据库
      • 1.9.20 Web开发
      • 1.9.21 异步IO
      • 1.9.22 使用MicroPython
      • 1.9.23 实战训练(day1~~day10)
        • 1.9.23.1 Day 1 - 搭建开发环境
        • 1.9.23.2 Day 2 - 编写Web App骨架
        • 1.9.23.3 Day 3 - 编写ORM
        • 1.9.23.4 Day 4 - 编写Model
        • 1.9.23.5 Day 5 - 编写Web框架
        • 1.9.23.6 Day 6 - 编写配置文件
        • 1.9.23.7 Day 7 - 编写MVC
        • 1.9.23.8 Day 8 - 构建前端
        • 1.9.23.9 Day 9 - 编写API
        • 1.9.23.10 Day 10 - 用户注册和登录
      • 1.9.24 Day 11 - 编写日志创建页
      • 1.9.25 Day 12 - 编写日志列表页
      • 1.9.26 Day 13 - 提升开发效率
      • 1.9.27 Day 14 - 完成Web App
      • 1.9.28 Day 15 - 部署Web App
      • 1.9.29 Day 16 - 编写移动App
    • 1.10 FAQ
    • 1.11 阶段总结
  • 2 PYthon程序示例
    • 2.1 程序示例(一)初识程序
    • 2.2 程序示例(二)查看今天是今年的第几天
    • 2.3 程序示例(三)if elif else语句
    • 2.4 程序示例(四)元组,列表, 堆栈,队列
    • 2.5 程序示例(五)学玩游戏《学色彩  神魔三龟玩变色》
    • 2.6 程序示例(六)函数
    • 2.7 程序示例(七)字符串
    • 2.8 程序示例(八)文件
    • 2.9 程序示例(九)排序
    • 2.10 程序示例-机器学习中英单词翻译小专家
    • 2.11 程序示例      画花朵  &  画佩奇
    • 2.12 程序示例   华夏时钟
    • 2.13 示例:  显示图片,响声
    • 2.14 播放声音视频文件mp3、wmv、wav、m4a等)
    • 2.15 Python WEB开发技术实战
  • 3 模块2 NumPy数值计算
    • 3.1 ndarray创建与索引
    • 3.2 ndarray的基础操作
    • 3.3 ufunc
    • 3.4 小结
    • 3.5 习题与实训
  • 4 模块3   pandas基础
    • 4.1 pandas常用类
    • 4.2 DataFrame基础操作
    • 4.3 其他数据类型操作
    • 4.4 小结
    • 4.5 习题与实训
    • 4.6 练习题
  • 5 模块4 pandas进阶
    • 5.1 数据读取与写出
    • 5.2 DataFrame进阶
    • 5.3 数据准备
    • 5.4 小结
    • 5.5 习题与实训
    • 5.6 练习习题及解答(参考)
  • 6 模块5 Matplotlib基础绘图
    • 6.1 Matplotlib绘图基础
    • 6.2 分析特征关系常用图形
    • 6.3 分析特征内部数据状态常用图形
    • 6.4 小结
    • 6.5 习题与实训
  • 7 模块6 机器学习库 scikit-learn
    • 7.1 数据准备
    • 7.2 降维
    • 7.3 分类
    • 7.4 回归
    • 7.5 聚类
    • 7.6 模型选择
    • 7.7 小结
    • 7.8 习题与实训
  • 8 模块7 餐饮企业综合分析
    • 8.1 (案例)餐饮企业分析需求
    • 8.2 数据准备
    • 8.3 使用K-means算法进行客户价值分析
    • 8.4 使用决策树算法实现餐饮客户流失预测
    • 8.5 小结
    • 8.6 习题与实训
  • 9 模块8  通信运营商客户流失分析与预测
    • 9.1 通信运营商客户流失分析需求
    • 9.2 数据准备
    • 9.3 特征工程
    • 9.4 使用多层感知器算法实现通信运营商 客户流失预测
    • 9.5 小结
    • 9.6 习题与实训
  • 10 学习参考资源
    • 10.1 机器学习的通俗讲解
    • 10.2 十大机器学习算法及其应用
    • 10.3 常用机器学习算法优缺点及其应用领域
    • 10.4 轻松学会 Python turtle 绘图
    • 10.5 Python 习题库
      • 10.5.1 习题1
    • 10.6 上机操作实训库
    • 10.7 面试准备题
    • 10.8 Python 程序扩展名 及发布程序时的选择
    • 10.9 计算机Python考试大纲
    • 10.10 Python  基础知识点梳理
    • 10.11 Python常用模块大全
    • 10.12 机器学习基本术语
    • 10.13 几个机器学习的成功案例
    • 10.14 60个机器学习算法应用场景实例
  • 11 章节测验(必测)
    • 11.1 测验一
    • 11.2 测验二
    • 11.3 测验三
    • 11.4 测验四
    • 11.5 测验五
    • 11.6 测验六
    • 11.7 测验七
    • 11.8 测验八
    • 11.9 测验九
    • 11.10 测验十
    • 11.11 编程专项测验
    • 11.12 填空题专项测验
    • 11.13 判断题专项测试
    • 11.14 简答题专项测试
    • 11.15 《机器学习技术》总复习
    • 11.16 书本--习题参考解答
  • 12 综合实训项目及展示
    • 12.1 项目(一)作品展示(1)
    • 12.2 项目(一)作品展示(2)
    • 12.3 团队项目实训(必作!)
习题与实训

      模块2   NumPy数值计算

一.实训目的与要求

1、要求学生掌握Numpy的数组创建及随机数生成;
2、要求学生掌握Numpy中用于统计分析的基本运算函数;
3、要求学生掌握Numpy矩阵创建方法;
4、要求学生掌握Numpy数组索引的方法。

二.实训内容

  • 任务1 创建数组并进行运算

  1. 需求说明
    Numpy数组在数值运算方面的效率优于Python提供的list,所以灵活掌握Numpy中数组的创建以及基础的运算是有必要的。
    2.实现思路及步骤
    (1)创建一个数值范围为0~1,间隔为0.01的数组。
    (2)创建100个服从正态分布的随机数。
    (3)对创建的两个数组进行四则运算。
    (4)对创建的随机数组进行简单的统计分析。



#参考代码

#代码test3-1

import numpy as np   #导入NumPy库

#创建一个数值范围为0~1,间隔为0.01的数组

arr1=np.arange(0,1,0.01)

print("使用arange函数创建的数组为:\n",arr1)

#练习实训题:创建一个数值范围为10~100,间隔为4.5的数组。输出此数组,并输出第5个元素。


#创建由100个服从正态分布的随机数构成的数组

#arr2=np.random.randn(10,10)

arr2=np.random.randn(100)

# 增加语句: arr2=abs(np.int8(100*arr2)),并观察输出结果

print('生成的随机数组为:\n',arr2)


#对创建的两个数组进行四则运算

arr3=arr1+arr2

print('arr1 + arr2:\n',arr3)

arr4=arr1-arr2

print('arrl-arr2:\n',arr4)

arr5=arr1*arr2

print('arrl*arr2:\n',arr5)

arr6=arr1/arr2

print('arrl/arr2:\n',arr6)

arr7=arr1**arr2

print('arrl**arr2:\n',arr6)

 

#对创建的数组进行简单的统计分析

arr2.sort()#对数据进行排序

print('排序后的随机数数组为:',arr2)

#去除重复值

print('去重后的正态分布随机数数组为:',np.unique(arr2))

print('正态分布随机数数组的总和为:',np.sum(arr2))  #计算数组总和

#计算所有元素的累计和

print('正态分随机数数组的累计和为:',np.cumsum(arr2))

print('正态分布随机数数组的均值为:',np.mean(arr2))  #计算数组均值

#计算数组标准差

print('正态分布随机数数组的标准差为:',np.std(arr2))

print('正态分布随机数数组的方差为:',np.var(arr2))  #计算数组方差

print('正态分布随机数数组的最小值为:',np.min(arr2))  #计算最小值

print('正态分布随机数数组的最大值为:',np.max(arr2))  #计算最大值


### 3.2 

# 代码 2-1

import numpy as np

print('  Hx 整数42转换为浮点数的结果为:', np.float64(42))

print('浮点数42.0转换为整数的结果为:', np.int8(42.0))

print('浮点数42转换为布尔型的结果为:', np.bool(42.0))

print('整数0转换为布尔型的结果为:', np.bool(0))

print('布尔型数据True转换为浮点数的结果为:', np.float(True))

print('布尔型数据False转换为整型的结果为:', np.int8(False))


# 代码 2-2

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

print('创建的一维ndarray为:', arr1)

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

print('创建的二维ndarray为:\n', arr2)


# 代码 2-3

print('ndarray arr2的维数为:', arr2.ndim)

print('ndarray arr2的形状为:', arr2.shape)

print('ndarray arr2的数据类型为:', arr2.dtype)

print('ndarray arr2的元素个数为:', arr2.size)

print('ndarray arr2每个元素的大小为:', arr2.itemsize)


# 代码 2-4

print('使用arange函数创建的ndarray为:\n', np.arange(0, 1, 0.1))


# 代码 2-5

print('使用linspace函数创建的ndarray为:\n', np.linspace(0, 1, 12))


# 代码 2-6

print('使用logspace函数创建的ndarray为:\n', np.logspace(0, 2, 20))

# 代码 2-7

print('使用zeros函数创建的ndarray为:\n', np.zeros((2, 3)))


# 代码 2-8

print('使用eye函数创建的ndarray为:\n ', np.eye(3))


# 代码 2-9

print('使用diag函数创建的ndarray为:\n', np.diag([1, 2, 3, 4]))


#   代码 2-10   

print('使用ones函数的ndarray为:\n', np.ones((2, 3)))


# 代码 2-11

print('random函数生成的随机数ndarray为:\n', np.random.random(100))


# 代码 2-12

print('rand函数生成的服从均匀分布的随机数ndarray为:\n', np.random.rand(4, 5))


# 代码 2-13

print('randint函数生成的指定上下限的随机整数ndarray为:\n',

      np.random.randint(low=2, high=10, size=[2, 5]))


# 代码 2-14

arr = np.arange(10)

print('使用元素位置索引结果为:', arr[5])

print('使用元素位置切片结果为:', arr[3:5])

print('省略单个位置切片结果为:', arr[:5])

print('使用元素反向位置切片结果为:', arr[:-1])

arr[2:4] = 100, 101  # 修改对应下标的值

print('修改后的ndarrayarr为:', arr)

print('元素位置等差索引结果为:', arr[1:-1:2])


# 步长为负数时,开始位置必须大于结束位置

print('元素位置负数步长等差索引结果为:', arr[5:1:-2])


# 代码 2-15

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

print('创建的二维ndarray arr为:\n', arr)

print('切片结果为:', arr[0, 3:5])   # 访问第0行中第3和第4列的元素

print('切片结果为:\n', arr[1:, 2:])  # 访问第1和第2行中第2列、第3列和第4列的元素

print('切片结果为:\n', arr[:, 2])  # 访问第3列所有的元素


# 代码 2-16

# 索引第1、3行中第2列的元素

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

print('使用布尔值ndarray索引结果为:', arr[mask, 2])


# 代码 2-17

arr = np.empty((8, 4))

for i in range(8):

    arr[i] = i

print('创建的二维ndarray arr为:\n', arr)

print('以特定顺序索引arr结果为:\n', arr[[4, 3, 0, 6]])

print('以特定逆序索引arr结果为:\n', arr[[-3, -5, -7]])


# 代码 2-18

arr = np.array([np.arange(i*4, i*4+4) for i in np.arange(6)])

print('创建的二维ndarray arr为:\n', arr)

# 返回一个ndarray最终的元素(1,0)、(5,3)、(4,1)、(2,2)

print('使用二维ndarray索引arr结果为:', arr[[1, 5, 4, 2], [0, 3, 1, 2]])


# 代码 2-19

# 利用ix函数将两个一维的整数ndarray转化为方形区域的索引器

print('使用ix成片索引arr结果为:\n', arr[np.ix_([1, 5, 4, 2], [0, 3, 1, 2])])


### 3.2 

# 代码 2-20

import numpy as np

arr = np.arange(12)  # 创建一维ndarray

print('创建的一维ndarray arr为:', arr)

arr1 = arr.reshape(3, 4)  # 设置ndarray的维度

print('改变形状后的ndarray arr1为:\n', arr1)

print('形状改变后ndarray arr1的维度为:', arr1.ndim)


# 代码 2-21

arr.resize(2, 6)

print('resize改变原ndarray形状,ndarray arr变为:\n', arr)


# 代码 2-22

arr.shape = (4, 3)

print('通过重新设置shape属性后,ndarray arr为:\n', arr)


# 代码 2-23

arr = np.arange(12).reshape(3, 4)

print('创建的二维ndarray arr为:\n', arr)

print('ndarray arr横向展平后为:', arr.ravel())


# 代码 2-24

print('ndarray arr使用flatten方法横向展平后为:', arr.flatten())

print('ndarray arr使用flatten方法纵向展平后为:', arr.flatten('F'))


# 代码 2-25

arr1 = np.arange(12).reshape(3, 4)

print('创建的ndarray arr1为:\n', arr1)

 arr2 = arr1*3

print('创建的ndarray arr2为:\n', arr2)

print('hstack横向组合ndarray arr1与arr2为:\n', np.hstack((arr1, arr2)))


# 代码 2-26

print('vstack纵向组合ndarray arr1与arr2为:\n', np.vstack((arr1, arr2)))


# 代码 2-27

print('concatenate横向组合arr1与arr2为:\n', np.concatenate((arr1, arr2), axis=1))

print('concatenate纵向组合arr1与arr2为:\n', np.concatenate((arr1, arr2), axis=0))


# 代码 2-28

print('dstack深度组合arr1与arr2为:\n', np.dstack((arr1, arr2)))

arr3 = []

for x, y in list(zip(arr1, arr2)):

    arr3.append(list(zip(x, y)))

arr3 = np.array(arr3)

print('zip函数实现深度合并的arr3与dstack实现的等价:\n',

arr3 == np.dstack((arr1, arr2)))


# 代码 2-29

arr = np.arange(16).reshape(4, 4)

print('创建的二维ndarray arr为:\n', arr)

print('hsplit横向分割arr为:\n', np.hsplit(arr, 2))


# 代码 2-30

print('hsplit纵向分割arr为:\n', np.vsplit(arr, 2))


# 代码 2-31

print('split横向分割arr为:\n', np.split(arr, 2, axis=1))

print('split纵向分割arr为:\n', np.split(arr, 2, axis=0))




# 代码 2-32

arr = np.arange(12).reshape(2, 2, 3)

print('创建的三维ndarray arr为:\n', arr)

print('dsplit深度分割arr为:\n', np.dsplit(arr, 3))


# 代码 2-33

np.random.seed(42)  # 设置随机种子

arr = np.random.randint(1, 10, size=12).reshape(4, 3)

print('创建的随机数ndarray arr为:\n', arr)

print('默认排序后ndarray arr为:\n', np.sort(arr))

print('展平排序的ndarray arr为:', np.sort(arr, axis=None))

print('横轴排序后ndarray arr为:\n', np.sort(arr, axis=1))

print('纵轴排序后ndarray arr为:\n', np.sort(arr, axis=0))




# 代码 2-34

print('横轴排序后arr的下标为:\n', np.argsort(arr, axis=1))

print('展平排序后arr的下标为:', np.argsort(arr, axis=None))


# 代码 2-35

arr = np.arange(6, 12).reshape(2, 3)

print('创建的ndarray arr为:\n', arr)

print('ndarray arr中最大元素的索引为:', np.argmax(arr))

print('ndarray arr中最小元素的索引为:', np.argmin(arr))

print('ndarray arr中各列最大元素的索引为:', np.argmax(arr, axis=0))

print('ndarray arr中各行最小元素的索引为:', np.argmin(arr, axis=1))


# 代码 2-36

arr = np.arange(12).reshape(4, 3)

print('创建的ndarray arr为:\n', arr)

print('where输出ndarray arr满足条件的下标为:\n', np.where(arr > 6))


# 代码 2-37

arr1 = np.arange(12).reshape(3, 4)

print('创建的ndarray arr1为:\n', arr1)

arr2 = np.arange(-12, 0).reshape(3, 4)

print('创建的ndarray arr2为:\n', arr2)

exp = arr1 > 5

print('arr1大于5的布尔ndarray为:\n', exp)

print('where函数搜索符合条件的arr1与arr2为:\n', np.where(exp, arr1, arr2))


# 代码 2-38

arr = np.arange(9).reshape(3,  3)

print('创建的ndarray arr为:\n', arr)

exp = (arr % 2) == 0

print('arr能被2整除的布尔ndarray为:\n', exp)

print('arr基于条件exp提取的元素为:\n', np.extract(exp, arr))


### 3.3 

# 代码 2-39

import numpy as np

arr1 = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]])

print('创建的ndarray arr为:\n', arr1)

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

print('创建的ndarray arr2为:', arr2)

print('arr1与arr2相加结果为:\n', arr1 + arr2)


# 代码 2-40

arr3 = np.arange(1, 5).reshape(4, 1)

print('创建的ndarray arr3为:\n', arr3)

print('arr1与arr3相加结果为:\n', arr1 + arr3)


# 代码 2-41

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

arr2 = np.array([4, 5, 6])

print('ndarray arr1,arr2相加结果为:', arr1+arr2)

print('ndarray arr1,arr2相减结果为:', arr1-arr2)

print('ndarray arr1,arr2相乘结果为:', arr1*arr2)

print('ndarray arr1,arr2相除结果为:', arr1/arr2)

print('ndarray arr1,arr2幂运算结果为:', arr1**arr2)


# 代码 2-42

arr = np.arange(-4, 5).reshape(3, 3)

print('创建的ndarray arr为:\n', arr)

print('ndarray arr各元素的相反数为:\n', np.negative(arr))

print('ndarray arr各元素的绝对值为:\n', np.absolute(arr))

print('ndarray arr各元素的符号为:\n', np.sign(arr))

print('ndarray arr各元素的平方根为:\n', np.sqrt(arr))

print('ndarray arr各元素的自然对数为:\n', np.log1p(arr))


# 代码 2-43

rad = np.array([0, np.pi*1/6, np.pi*1/4, np.pi*1*3, np.pi*1/2])

print('将弧度制ndarray rad转换为角度制后为:', np.rad2deg(rad))

print('ndarray rad各元素的正切为:\n ', np.tan(rad))

print('ndarray rad各元素的正弦为:\n ', np.sin(rad))

print('ndarray rad各元素的余弦为:\n ', np.cos(rad))

arr = np.array([0, 1/2, np.sqrt(2)/2, np.sqrt(3)/2, 1])

print('ndarray arr各元素的三角反正弦为:\n ', np.arcsin(arr))

print('通过直角边3,4求出的斜边为:\n', np.hypot(3, 4))


# 代码 2-44

arr1 = np.arange(-4, 5)

print('创建的ndarray arr1为:', arr1)

arr2 = np.arange(9)

print('创建的ndarray arr2为:', arr2)

print('ndarray arr1与arr2的交集为:', np.intersect1d(arr1, arr2))

print('ndarray arr1与arr2的并集为:', np.union1d(arr1, arr2))

print('ndarray arr1与arr2的差集为:', np.setdiff1d(arr1, arr2))

print('ndarray arr1与arr2的对称差集为:', np.setxor1d(arr1, arr2))


# 代码 2-45

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

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

print('ndarray x等于y的比较结果为:', arr1 == arr2, np.equal(arr1, arr2))

print('ndarray x不等于y的比较结果为:', arr1 != arr2, np.not_equal(arr1, arr2))

print('ndarray x小于y的比较结果为:', arr1 < arr2, np.less(arr1, arr2))

print('ndarray x大于y的比较结果为:', arr1 > arr2, np.greater(arr1, arr2))


# 代码 2-46

arr1 = [True, True, False, False, False]

print('创建的ndarray arr1为:', arr1)

arr2 = [True, False, True, False, True]

print('创建的ndarray arr2为:', arr2)

print('ndarray arr1与arr2的逻辑与运算结果为:', np.logical_and(arr1, arr2))

print('ndarray arr1与arr2的逻辑或运算结果为:', np.logical_or(arr1, arr2))

print('ndarray arr1的逻辑非运算结果为:', np.logical_not(arr1))

print('ndarray arr1与arr2的逻辑异或运算结果为:', np.logical_xor(arr1, arr2))


# 代码 2-47

arr = np.arange(20).reshape(4, 5)

print('创建的ndarray arr为:\n', arr)

print('ndarray arr各元素的和为:', np.sum(arr))

print('ndarray arr各行的极差为:', np.ptp(arr, axis=1))

print('ndarray arr各列的均值为:', np.mean(arr, axis=0))

print('ndarray arr的中位数为:', np.median(arr))

print('ndarray arr各行的上四分位数为:', np.percentile(arr, 75, axis=1))

print('ndarray arr各列的下四分位数为:', np.percentile(arr, 25, axis=0))

print('ndarray arr的标准差为:', np.std(arr))

print('ndarray arr的方差为:', np.var(arr))

print('ndarray arr的最小值为:', np.min(arr))

print('ndarray arr的最大值为:', np.max(arr))


# 代码 2-48

arr = np.arange(1, 11)

print('创建的ndarray arr为:', arr)

print('ndarray arr的元素累计和为:', np.cumsum(arr))

print('ndarray arr的元素累计积为:\n', np.cumprod(arr))


上机实训资源包