目录

  • 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 团队项目实训(必作!)
ndarray创建与索引




Python数据分析-Numpy数值计算

Numpy介绍:

NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。

NumPy提供了两种基本对象:ndarray 和 ufunc。其余的对象都是以这两种对象为基础(如矩阵)。

NumPy的主要功能:
  1)ndarray,一个多维数组结构,高效且节省空间
  2)无需循环对整组数据进行快速运算的数学函数
  3)读写磁盘数据的工具以及用于操作内存映射文件的工具
  4)线性代数、随机数生成和傅里叶变换功能
  5)用于集成C、C++等代码的工具

pyhton里面安装、引入方式:
  安装方法(在 命令行方式执行):pip install numpy
  引用方式:import numpy as np

## numpy示例py01

import numpy as np

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

for i in a:

     print(i,end=',')

print()

##输出结果: 0,1,2,3,4,5,6,7,8,9,

b=list(range(10))

print(b)

##输出结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

import sys

sys.getsizeof(b)

print(sys.getsizeof(b)) 

a=np.array(range(10))

sys.getsizeof(a)

print(a)

print(sys.getsizeof(a)) 

##可以看出,原生的列表占用内存更大,

##而ndarray类型占用的小是因为numpy内部使用c++实现的复制代码

# 示例

import sys

a = [1, 2]

b = [a, a]  # 即 [[1, 2], [1, 2]]

print(a)

print(b)

# a、b 都只有两个元素,所以直接占用的大小相等

print(sys.getsizeof(a)) # 结果:80   或 36

print(sys.getsizeof(b)) # 结果:80   或 36



## numpy示例py02

#计算购物车里的商品的总和,有单价和商品数量

import random

#单价

prize=[round(random.uniform(10.0,20.0),2) for i in range(10)]

#随机产生示例数据 【10.0,20.0】的单价prize:16.56, 19.02, 12.33, 13.62, 14.85, 18.77, 15.65, 17.68, 13.01, 11.61]

#数量

num=[round(random.uniform(1,10)) for i in range(10)]

 

#随机产生示例数据 【1,10】的数量num: [4, 9, 4, 3, 6, 1, 6, 9, 9, 2]

#两个列表里的商品和数量是对应的,现在求和

#传统的方式,写个循环

def ceshi(a,b):

    sum=0

    for i,j in zip(prize,num):

        sum+=i*j    

        return sum


print('购物车里的商品的金额总和:',ceshi(prize,num))

#输出结果 购物车里的商品的金额总和 828.8000000000001

  

import timeit

# %timeit ceshi(prize,num)

'''2.1 µs ± 193 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

  大概用时2-3微秒

'''

import numpy as np

# 使用ndarray计算

#先转换成ndarray

prize_np=np.array(prize)

'''prize_np

array([ 16.56,  19.02,  12.33,  13.62,  14.85,  18.77,  15.65,  17.68,13.01,  11.61])

'''

num_np=np.array(num)

### num_np   array([4, 9, 4, 3, 6, 1, 6, 9, 9, 2])

#点乘

np.dot(prize_np,num_np)

#输出结果  828.80000000000007

#看时间上的消耗

# %timeit np.dot(prize_np,num_np)

#1.07 µs ± 20 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

# 如果数据量大的话,ndarray在时间上的优势会更明显

#上边的写法还有很多

print(sum(prize_np*num_np))

#array([  66.24,  171.18,   49.32,   40.86,   89.1 ,   18.77,   93.9 ,

#        159.12,  117.09,   23.22])

#相乘,就是对应位置上的数据做乘法 

#再进行求和操作

print(prize_np*2)

# array([ 33.12,  38.04,  24.66,  27.24,  29.7 ,  37.54,  31.3 ,  35.36,26.02,  23.22])

print(prize_np+100)

# array([ 116.56,  119.02,  112.33,  113.62,  114.85,  118.77,  115.65,117.68,  113.01,  111.61])

print(prize_np/2)

#array([ 8.28 ,  9.51 ,  6.165,  6.81 ,  7.425,  9.385,  7.825,  8.84 ,6.505,  5.805])

print(prize_np**2)

#array([ 274.2336,  361.7604,  152.0289,  185.5044,  220.5225,  352.3129,244.9225,  312.5824,  169.2601,  134.7921])

#取商

print(prize_np//2)

# array([ 8.,  9.,  6.,  6.,  7.,  9.,  7.,  8.,  6.,  5.])

#取实际的除法元算结果

print(prize_np/2)

#array([ 8.28 ,  9.51 ,  6.165,  6.81 ,  7.425,  9.385,  7.825,  8.84 ,6.505,  5.805])

print(prize_np**prize_np)

# array([  1.54041985e+20,   2.14083871e+24,   2.82862082e+13,2.80215533e+15,   2.51268378e+17,   7.99695030e+23,4.94480820e+18,   1.13628263e+22,   3.13868425e+14,2.30516529e+12])

#ndarray 数组里的类型必须一致,一般大多数时候存储的是科学计算类型(整数和小数),字符串放里边其实也不快,不如用列表


## numpy示例py03

import numpy as np

import random

prize=[round(random.uniform(10.0,20.0),2) for i in range(10)]

prize_np=np.array(prize)

#查看数据类型

print('数据类型',prize_np.dtype)

##     输出 float64   看出这是一个64位(4字节)的浮点类型

a=np.arange(100)

'''a


array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])

'''

print('数据类型',a.dtype)


#   输出 int32 

#说明该类型是32位的int类型


# 获取长度

print('数组长度',a.size)

#输出 100

#取数组的纬度,返回的是元组,多维数组就可以看到效果

print('数组的纬度',a.shape)

#(100,)

b=np.array([[5,4,23],[1,6,23]])

print('数组:\n',b)

#b  array([[5,  4, 23],[1,  6, 23]])

print('数组的纬度',b.shape)

# (2, 3)  两行三列

# 返回维度值

print('a 的维度值',a.ndim)

# 1

print('b 的维度值',b.ndim)

# 2

#  数组的转置(倒置),将行变列,列变行

print('数组的转置(倒置)\n',b.T)

# array([[ 5,  1],[ 4,  6],[23, 23]])


## numpy示例py04

import numpy as np

import random

## 转换数据类型,nbarray本身只能存储一种数据类型,压迫转换的,需要astype

# 将b里的数转换为小数

b=([[ 3,  4, 23],[ 1,  6, 23]])

b=np.array(b)

b[0][0]=3.2

print(b.dtype)

print(b)

#array([[ 3,  4, 23],[ 1,  6, 23]])

# 转换之后,会自动取为整数,不是我们要的效果

#通过修改数据类型

b.dtype="float32"

print(b.dtype)

# dtype('float32')

print(b) 

# array([[  4.20389539e-45,   5.60519386e-45,   3.22298647e-44],[  1.40129846e-45,   8.40779079e-45,   3.22298647e-44]], dtype=float32)

# 虽然类型修改成功,但是值发生了变化,因为在计算机里存储的二进制形式整数和小数是不一样的,这么暴力的转换是不行的

b.dtype='int32'

print(b)

#array([[ 3,  4, 23],[ 1,  6, 23]])

# 用astype,记住这里是有返回值的,并没有改变原有的数据

c=b.astype("float32")

print(c)

# array([[  3.,   4.,  23.],[  1.,   6.,  23.]], dtype=float32)

c[0][0]=3.2

print(c)

# array([[  3.20000005,   4.        ,  23.        ],

#   [  1.        ,   6.        ,  23.        ]], dtype=float32)

# 可以看出转换成功(3.20000005,这里是32位的精度的问题,如果改为float64,精度就非常高,就没有0000005)

c=b.astype("float64")

print(c)

#array([[  3.,   4.,  23.],[  1.,   6.,  23.]])

c[0][0]=3.2

print(c)

#array([[  3.2,   4. ,  23. ],[  1. ,   6. ,  23. ]])

#将列表转换为数组,可选择显式指定dtype

# 列表类型转ndarray

a=list(range(10))

a=np.array(a,dtype="float")

#会自动匹配float32或者64位

print(a)

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

print( a.dtype )

#  dtype('float64')