目录

  • 机器学习:
  • 1.概念
  • 2.Built on NumPy, SciPy, and matplotlib、pandas
  • 3.机器学习不同场景下的区别
  • 1.常规
  • 2.大数据
  • 2.机器学习里面的常用术语 :
  • 1.数据集准备
  • 2.模型怎么来的?
  • 3.机器学习的种类:
  • 4.如何判断模型好不好?
  • 1.正确率、错误率
  • 2.精确率、召回率
  • 3.真正率、假正率:
  • 接下来就进入numpy的基本学习吧
  • 1.Numpy:
  • 1.官网
  • 1. what is numpy?
  • 2.multidimensional array object 【编程模型】
  • 2.体验:求多元一次方程
  • 3.python list vs numpy arr
  • 4.开始学习ndarry
  • 1.如何创建 ndarray
  • 创建一维数组:
  • 创建二维数组:
  • 2.转换数据类型:
  • 1.nparr =》 python
  • 2.nparr元素 int =》 float
  • 3.数据切片
  • 1.常规切片
  • 2.范围切片
  • 3.根据条件切片
  • 4.numpy轴向
  • 1.一维
  • 2.二维
  • 5.数组的计算
  • 1.常规计算
  • 2.nan计算
  • 6.reship和resize,转置,迭代器
  • 7.flatten、ravel、view
  • 8.数组拼接
  • 9.数组切分
  • 10.补充方法

机器学习:

1.概念

Simple and efficient tools for predictive data analysis
【预测数据分析结果】
用机器代替人做决策
数据集 =》 训练 =》 模型

2.Built on NumPy, SciPy, and matplotlib、pandas

3.机器学习不同场景下的区别

1.常规

python 单线程 =》 C语言 =》 性能还可以 【数据量不是很大】

2.大数据

spark =》 离线数据
sparksql =》
sparkmlib =》 机器学习
_ sparkcore
sparksql
sparkstreaming_
flink 也可以做

2.机器学习里面的常用术语 :

1.数据集准备

色泽= 绿色 、根=弯曲 、 敲声 = 浑浊  =》 熟的 
色泽= 黑色 、根=弯曲 、 敲声 = 沉闷  =》 生的 
色泽= 红色 、根=弯曲 、 敲声 = 清脆  =》 生的

数据集:这组数据 的集合 
样本:每一条数据
维度:西瓜的判断条件
标签【label】:结果的判断就是标签

2.模型怎么来的?

数据集 =》 训练 =》基于某个算法 =》 模型 【数学公式】

机器学习的模型作用:
	输入三个维度 =》 判断出结果

人少:
机器学习: 数据科学家 【基于数据 =》 分析 一些问题】
1.数学 =》 算法 knn、kmeans 、线性回归、逻辑
2.会写代码

3.机器学习的种类:

1.有监督学习:结果是label1的
1.分类
通过模型 判断结果 生的还是熟的
2.回归
通过模型 判断结果 (熟了0.9)
2.无监督学习
1.聚类 =》 sql group by
3.半监督学习
使用标记数据 + 未标记数据 进行训练
4.强化学习
阿尔法狗

4.如何判断模型好不好?

pyspark string 如何生成json pyspark numpy_数组

1.正确率、错误率

正确率:(tp+tn) / (tp+tn+fp+fn)
	错误率率:(fp+fn) / (tp+tn+fp+fn)

2.精确率、召回率

P 精确率:(tp) /(tp+fp) 
	R 召回率:(tp) /(tp+fn)

3.真正率、假正率:

真正率(TPR) = 灵敏度 = TP/(TP+FN)

假正率(FPR) = 1- 特异度 = FP/(FP+TN)
roc 和auc
Numpy pandas matplotlib
统计分析、假设、线性回归、逻辑回归、knn、朴素贝叶斯、aqi、时间序列
决策树、kmeans、分类模型评估

接下来就进入numpy的基本学习吧

1.Numpy:

1.官网

[https://numpy.org/](https://numpy.org/)

1. what is numpy?

The fundamental package for scientific computing with Python

2.multidimensional array object 【编程模型】

1.arrays and matrices [数组和矩阵]
	2.可以用来 数组操作、矩阵操作、线下代数、sort、random

2.体验:求多元一次方程

3x +y -2z = 5 
	x-y+4z = -2 
	2x +3z = 2.5
import numpy as np
if __name__ == '__main__':
    # 把等式系数 抽象成 向量组
    a = np.array([[3,1,-2],[1,-1,4],[2,0,3]])
    print(a)
    b = np.array([5,-2,2.5])
    print(b)

    print(np.linalg.solve(a, b))
    '''
    [[ 3  1 -2]
    [ 1 -1  4]
    [ 2  0  3]]
    [ 5.  -2.   2.5]
    [0.5 4.5 0.5]
    '''

3.python list vs numpy arr

python list
1.放不同数据类型的 元素
numpy arr :
1.元素类型 必须统一
建议使用 numpy arr 比python list 效率高 【 numpy arr 底层代码使用 c 实现的】

import numpy as np
if __name__ == '__main__':
    def py_add(n):
        a = list(range(n))
        b = list(range(n))

        c = []
        for i in range(n):
            a[i] = i*2;
            b[i] = i+3;
            c.append(a[i]+b[i])

    def np_add(n):
        a = np.arange(n) * 2
        b = np.arange(n) + 3
        c = a + b
        return c
    import time
    n = 1000000

    # 获取 py_add 执行花费时间
    start = time.time()
    py_add(n)
    stop = time.time()
    print(stop - start)

    # 获取 np_add 执行花费时间
    start1 = time.time()
    np_add(n)
    stop1 = time.time()
    print(stop1 - start1)
    '''
    0.35193848609924316
    0.0059833526611328125
    '''

4.开始学习ndarry

1.如何创建 ndarray

There are 6 general mechanisms for creating arrays:
1.Conversion from other Python structures (i.e. lists and tuples)
2.Intrinsic NumPy array creation functions (e.g. arange, ones, zeros, etc.)
3.Replicating, joining, or mutating existing arrays
4.Reading arrays from disk, either from standard or custom formats
5.Creating arrays from raw bytes through the use of strings or buffers
6.Use of special library functions (e.g., random)

import  numpy as np
if __name__ == '__main__':
    #1. Converting Python sequences to NumPy Arrays
    list = [1, 2, 3, 4]  #[1 2 3 4]
    np_array = np.array(list)
    print(np_array)

    #2.Intrinsic NumPy array creation functions
    r1 = range(0, 10, 2)
    print(r1)
    np_arange = np.arange(0, 10, 2)
    print(np_arange)
    np_linspace = np.linspace(0, 10, 5)
    print(np_linspace)

NumPy arrays:
1.ndarray n N维数组对象
2.【元素数据类型必须相同】

# 常规数组
    list = [[1,2,3],[4,5,6],[7,8,9]]
    print(list)
    # numpy数组
    np_array = np.array(list)
    print(np_array)

    print(type(np_array))
    print(np_array.ndim)
    print(np_array.shape)
    print(np_array.size)
    # 存储方式
    print(np_array.dtype)
    # 元素占用的字节大小
    print(np_array.itemsize)
     '''
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    <class 'numpy.ndarray'>
    2
    (3, 3)
    9
    int32
    4
    '''

创建一维数组:

1.数据类型转化
2.内置函数
import  numpy as np

if __name__ == '__main__':

    r1 = [0, 2, 4, 6, 8]
    arr1 = np.array([r1, r1])
    arr2 = [r1, r1]

    print(arr1)
    print(arr2)
    print("--"*20)
    print(type(arr1))
    print(type(arr2))

    # 2.修改值 r1 元素
    # 后续修改numpy原本数据,对他没影响
    # 如果是个对象,还是有影响的
    print("--"*20)
    print(r1)
    r1[1] = 100
    print(r1)
    print(arr1)
    print(arr2)
    '''
    [[0 2 4 6 8]
     [0 2 4 6 8]]
    [[0, 2, 4, 6, 8], [0, 2, 4, 6, 8]]
    ----------------------------------------
    <class 'numpy.ndarray'>
    <class 'list'>
    ----------------------------------------
    [0, 2, 4, 6, 8]
    [0, 100, 4, 6, 8]
    [[0 2 4 6 8]
     [0 2 4 6 8]]
    [[0, 100, 4, 6, 8], [0, 100, 4, 6, 8]]
    '''

创建二维数组:

1.数据类型转化
2.内置函数
#1 二维
    list2 = [[1, 2, 3], [4, 5, 6]]
    n2arr = np.array(list2)
    print(list2)
    print(n2arr)
    print(type(n2arr))

    #2.属性
    print(n2arr.ndim) # 数组的维度
    print(n2arr.shape) #数组的形状 =》 矩阵的 形状
    print(n2arr.size) #返回矩阵的元素 个数 = sharp[0] * sharp[1]
    print(n2arr.dtype) # 元素的类型

数组属性:
1.修改 sharp

import  numpy as np

if __name__ == '__main__':
    np_arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(np_arr)

    # sharp
    print(np_arr.shape)

    #1.修改 sharp
    '''
     size = sharp[0] * sharp[1]
    '''
    np_arr.shape = (3,2)
    print("--"*20)
    print(np_arr)
    print(np_arr.shape)

    # 2.修改 sharp
    np_arr2 = np.reshape(np_arr, (1, 6), order='C') # C按行
    np_arr3 = np.reshape(np_arr, (1, 6), order='F') # F按列
    np_arr4 = np.reshape(np_arr, (1, 6), order='A')
    print(np_arr2)
    print("--" * 20)
    print(np_arr)
    print("--" * 20)
    print(np_arr3)
    print("--" * 20)
    print(np_arr4)
    print("**" * 20)
    # 3.修改 sharp
    print(np_arr)
    print("**" * 20)
    np_arr5 = np_arr.reshape((1, 6))
    print(np_arr5)
    print("**" * 20)
    print(np_arr)
    print("**" * 20)

    # 4.修改 数组维度
    print(np_arr)
    print("**" * 20)

    #2 -》 3  6
    np3_arr = np.reshape(np_arr, (2, 3, 1))
    print(np3_arr)
    print("**" * 20)

    # 2 ->1
    np2_arr = np.reshape(np_arr, (1, 6))
    print(np2_arr)
    print(np2_arr.ndim)
    print("**" * 20)

    np1_arr = np.reshape(np_arr, (6,))
    print(np1_arr)
    print(np1_arr.ndim)
    '''
[5 6]]
----------------------------------------
[[1 3 5 2 4 6]]
----------------------------------------
[[1 2 3 4 5 6]]
****************************************
[[1 2]
 [3 4]
 [5 6]]
****************************************
[[1 2 3 4 5 6]]
****************************************
[[1 2]
 [3 4]
 [5 6]]
****************************************
[[1 2]
 [3 4]
 [5 6]]
****************************************
[[[1]
  [2]
  [3]]

 [[4]
  [5]
  [6]]]
****************************************
[[1 2 3 4 5 6]]
2
****************************************
[1 2 3 4 5 6]
1

    '''

2.转换数据类型:

1.nparr =》 python

#数据类型转化
np2_arr = np.arange(24).reshape(4, 6)
print(np2_arr)

list_py = np2_arr.tolist()
print(list_py)
    '''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]    '''

2.nparr元素 int =》 float

import  numpy as np

if __name__ == '__main__':
    np1_arr = np.array([1,2,3,4,5])
    # np arr 数据类型 转换
    print(np1_arr.dtype)
    print(np1_arr.itemsize)

    #调整元素的数据类型
    np1_arr1 = np.array([1, 2, 3, 4, 5],dtype=np.int64)
    print(np1_arr1.dtype)
    print(np1_arr1.itemsize)
    print(np1_arr1)

    #2.astype

    np1_arr2 = np1_arr1.astype(np.float)
    print(np1_arr2.dtype)
    print(np1_arr2.itemsize)
    print(np1_arr2)

    #3.np.int8
    np1_arr3 = np.int8(np1_arr2)
    print(np1_arr3)
'''
int32
4
int64
8
[1 2 3 4 5]
float64
8
[1. 2. 3. 4. 5.]
[1 2 3 4 5]
'''

3.数据切片

1.常规切片

import  numpy as np

if __name__ == '__main__':

    np1_arr = np.array(range(0, 20))
    print(np1_arr)

    print(np1_arr[0])
    print(np1_arr[0:2])
    print(np1_arr[1:])

    print(np1_arr[0:10:2])

    #语法结构 : start:stop:sep
'''
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
0
[0 1]
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
[0 2 4 6 8]
'''

2.范围切片

import  numpy as np

if __name__ == '__main__':
    np2arr = np.arange(24).reshape(4, 6)
    print(np2arr)

    #取值 np2arr[行,列]
    #取行
    print(np2arr[0,]) # 取第一行
    print(np2arr[1, :])

    #取列
    print(np2arr[:, 0]) #取第一列

    #取多行
    print(np2arr[[1, 2, 3],]) #
    # 取多列
    print(np2arr[1, [1, 2, 3]])
    #
    print(np2arr[1:3,1:4]) #取的是 矩阵的范围

    print(np2arr[[1,2,3], [1,2,3]])  #[ 7 14 21]  取多个值
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[0 1 2 3 4 5]
[ 6  7  8  9 10 11]
[ 0  6 12 18]
[[ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[7 8 9]
[[ 7  8  9]
 [13 14 15]]
[ 7 14 21]
'''

3.根据条件切片

import  numpy as np

if __name__ == '__main__':
    np2_arr = np.arange(24).reshape(4, 6)

    print(np2_arr)
    print("**"*20)

    #根据条件取值
    print(np2_arr[np2_arr < 10])
    np2_arr[np2_arr < 10] = 0
    print("**" * 20)
    print(np2_arr)

    #与 或 非
    print(np2_arr[(np2_arr > 2) & (np2_arr < 20)])
    print("**" * 20)
    print(np2_arr[(np2_arr > 2) | (np2_arr < 20)])
    print("**" * 20)
    print(np2_arr[~(np2_arr > 2)])

    # where
    score = np.array([[91, 92], [93, 94], [95, 96]])
    print("**" * 20)
    print(score)

    result = np.where(score > 95, "优秀", "良")

    print(result)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
****************************************
[0 1 2 3 4 5 6 7 8 9]
****************************************
[[ 0  0  0  0  0  0]
 [ 0  0  0  0 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[10 11 12 13 14 15 16 17 18 19]
****************************************
[ 0  0  0  0  0  0  0  0  0  0 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
****************************************
[0 0 0 0 0 0 0 0 0 0]
****************************************
[[91 92]
 [93 94]
 [95 96]]
[['良' '良']
 ['良' '良']
 ['良' '优秀']]

'''

4.numpy轴向

1.一维

pyspark string 如何生成json pyspark numpy_数组_02

import  numpy as np

if __name__ == '__main__':

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

    #利用轴进行计算
    print(np.sum(np2_arr))
    print(np.sum(np2_arr,axis=0))
    print(np.sum(np2_arr,axis=1))
'''
[[1 2 3]
 [4 5 6]]
21
[5 7 9]
[ 6 15]
'''

2.二维

pyspark string 如何生成json pyspark numpy_数组_03

import  numpy as np

if __name__ == '__main__':

    np3_arr = np.arange(27).reshape((3, 3, 3))
    print(np3_arr)

    print(np.sum(np3_arr))
    print("**"*20)

    print(np.sum(np3_arr,axis=0))
    print("**" * 20)

    print(np.sum(np3_arr,axis=1))
    print("**" * 20)

    print(np.sum(np3_arr, axis=2))
    print("**" * 20)
'''
[[[ 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]]]
351
****************************************
[[27 30 33]
 [36 39 42]
 [45 48 51]]
****************************************
[[ 9 12 15]
 [36 39 42]
 [63 66 69]]
****************************************
[[ 3 12 21]
 [30 39 48]
 [57 66 75]]
****************************************
'''

5.数组的计算

1.常规计算

import  numpy as np

if __name__ == '__main__':
    np2arr = np.arange(24).reshape(4, 6)
    print(np2arr)

    #1.数组与数的计算
    print("**"*10)
    print(np2arr + 10)

    # 2.形状相同的数组计算
    np2arr1 = np.arange(100,124).reshape(4, 6)
    print(np2arr1)
    print("**" * 10)
    # print(np2arr1 + np2arr)

    # 3.不同形状的数组计算【报错】
    # np2arr2 = np.arange(100, 124).reshape(3, 8)
    # print(np2arr2)
    # print("**" * 10)
    # print(np2arr2 + np2arr1)

    # 4.一维数组 与 多维数组 进行计算
    np2arr3 = np.arange(100, 124).reshape(3, 8)
    a = np.arange(8)
    print(np2arr3)
    print("**"*20)
    print(a)

    print(np2arr3 - a)

2.nan计算

import  numpy as np

if __name__ == '__main__':
    nu_ll = np.nan
    print(nu_ll)
    print(type(nu_ll))

    np2_arr = np.arange(24,dtype=float).reshape(4, 6)
    print(np2_arr)
    print("--"*20)
    np2_arr[3,4] = np.nan
    print(np2_arr)

    #nan 计算
    print("--" * 20)
    print(np.sum(np2_arr, axis=0))

    # nan api => etl
    print(np.isnan(np2_arr))

    np2_arr[np.isnan(np2_arr)] = 0
    print(np2_arr)

    # nan 计算
    print("--" * 20)
    print(np.sum(np2_arr, axis=0))

6.reship和resize,转置,迭代器

import  numpy as np
if __name__ == '__main__':

    #1.resharp
    np2_arr = np.arange(30).reshape(5, 6)
    print(np2_arr)

    #2.reszie
    resize = np.resize(np2_arr, (2, 5))
    print(resize)

    #3.转置
    np2_T = np2_arr.T
    print(np2_T)

    t1 = np2_T.transpose()
    print( t1)

    #4. 迭代器  => list  !!!
    iterator = t1.flat
    print(iterator)

    list = [item for item in iterator]
    print(list)

7.flatten、ravel、view

import  numpy as np
if __name__ == '__main__':
    np2_arr = np.array([[1,2,3],[4,5,6]])
    print(np2_arr)

    #5.flatten
    print(np2_arr.flatten(order='C'))
    np2_arr.flatten(order='C')[1] = 100
    print(np2_arr)

    #6.ravel 视图 view
    print(np2_arr.ravel()) #展平为一维数组
    np2_arr.ravel()[1] = 100
    print(np2_arr)
    # ravel会改变值,而flatten不会

8.数组拼接

import  numpy as np
if __name__ == '__main__':

    np2_arr = np.array([[1,2,3],[4,5,6]])
    print(np2_arr)
    #8.数组的拼接
    #行拼接
    print(np.vstack((np2_arr, np2_arr)))
    print(np.row_stack((np2_arr, np2_arr)))
    #
    # #列拼接
    print(np.hstack((np2_arr, np2_arr)))
    print(np.column_stack((np2_arr, np2_arr)))
    #
    # #深度拼接
    print(np.dstack((np2_arr, np2_arr)))

9.数组切分

#9.cur 切分
    data = np.arange(10).reshape(2, 5)
    print(data)
    #行切分
    print(np.vsplit(data, 2))
    print(np.split(data, 2,axis=0))

    #列切分
    print(np.hsplit(data, 5))
    print(np.split(data, 5, axis=1))

10.补充方法

import  numpy as np

if __name__ == '__main__':

    data = np.random.randint(1, 9, 20).reshape(4,5)
    print(data)

    #1. rand  [0,1)均匀分布
    d1 = np.random.rand(10)
    print(d1)

    #2 正态分布
    d2 = np.random.randn(100)
    print(d2)

    #3.choice 参数p是出现的概率
    d3 = np.array([1, 2, 3, 4])
    d4 = np.random.choice(d3, (4, 4), p=[0.1, 0, 0.6, 0.3])
    print(d4)

    #基本的函数
    print(np.sum(data))
    print(np.mean(data)) #求取均值4.45
    print(np.min(data))
    print(np.max(data))
    # 方差 标准差
    data2 = np.array([8,2, 3,4,7,6])
    print(data2.var())
    print(data2.std())

    print(np.var(data2)) #4.666666666666667
    print(np.std(data2)) #2.160246899469287

    #有偏估计
    # 无偏估计 【数量少】 ddof 1 是无偏估计
    print(np.var(data2,ddof=1)) #方差5.6
    print(np.std(data2,ddof=1)) #标准差2.3664319132398464

    #常见的数学函数
    print(np.e) # 2.718281828459045
    print(np.pi) # 3.141592653589793
    print(np.sqrt(data2))
    print(np.exp(data2)) #exp():返回e的幂次方,e是一个常数为2.71828
    print(np.abs(data2)) #[8 2 3 4 7 6]
    print(np.unique(data2)) #[2 3 4 6 7 8]
    print(np.mod(data2, 2)) # [0 0 1 0 1 0]

    # clip 边界裁剪
    print(data2) # [8 2 3 4 7 6]
    print(data2.clip(1, 2)) #[2 2 2 2 2 2]

    # 差分
    print(np.diff(data2)) #[-6  1  1  3 -1]

    #排序
    print(np.sort(data2)) #[2 3 4 6 7 8]

    print(np.argsort(data2)) #[1 2 3 5 4 0]
    print(np.argmin(data2)) # 1
    print(np.argmax(data2)) # 0