数据分析 numpy

主要内容:

1 数据分析

  a 概念:  是把隐藏在一些看似杂乱无章的数据背后信息提炼出来,总结出所研究对象的内在规律.

  b 三剑客: Numpy  Pandas  Matplotlib

2 Numpy 是Python语言的一个扩展程序库, 支持大量的纬度数组与矩阵运算,此外也针对数组运算提供大量的数字函数库.

  a ndarray的概念:  ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。

  b  ndarray的创建:

    1) 使用np.array()创建: 最简单的方法是使用 numpy 提供的 array() 函数直接将 Python 数组转换为 ndarray 数组,array() 接受一切序列类型的对象,例如将一个列表转换成 ndarray 数组.

import numpy as np
#一维数组的创建
np.array([1,2,3,4,5])

# 二维数组的创建
np.array([[1,2,3], [3, 4, 5]])
np.array([[1, 2, 3], ['a', 4, 5]])

#注意: 1 numpy默认ndarray的所有元素的类型是相同的
#      2 如果传过来的列表包含不同的类型,则统一为
# 统一类型,优先级: str > float > int

    2) 使用matplotlib.pyplot获取一个numpy数组, 数据来源于同一张图片

import matplotlib.pyplot as plt
img_arr = plt.imread('1.jpg')
plt.imshow(img_arr)
img_arr.shape

    3) 使用np.ones方法创建  :np.ones(shape, dtype=None, order='C')

      np.ones(shape=(20, 30))

    4)  使用np.full方法创建:   np.full(shape, fill_value, dtype=None, order='C')

      np.full(shape=(5,6), fill_value=100)

    5)  使用np.linspace方法创建: np.linspace(start, stop, num=50, endpoint=True, retstep=False,dtype=None)等差数列

      np.linspace(1, 100, num=20)

    6)  使用np.arange方法创建: np.arange([start, ]stop, [step, ]dtype=None)

      np.arange(0,100, step=2)

    7) 使用np.random.randint(low, high=None, size=None, dtype='I')

np.random.seed(14)  #固定时间种子,产生的随机数就固定下来了
np.random.randint(0,100,size=(5,7))

    8)  使用np.random.randn(d0,d1,d2....dn) 标准正态分布

      arr = np.random.randn(4,4)

    9)  使用np.random.random(size=None) 生成0到1的随机数, 左闭右开

      np.random.random(size=(3, 4))

  c : ndarray属性

    1)  4个必记的参数:  ndim  维度;  shape  形状 ; size  总长度  ; dtype 元素类型

  d : ndarray基本操作

    1) 索引:  一维与列表完全一致,多维时同理

    2) 切片: 一维与列表完全一致,多维时同理

# 左边是行,右边是列
arr = np.random.randint(60,120,size=(6,4))
# 获取前两行的数据
    # arr[0:2]
# 获取二维数组的前2列
    # arr[:, 0:2]
# 获取前两行和前两列的数据
    # arr[0:2,0:2]
# 将数据反转   ::进行切片
# 将数组的行倒序
    # arr[::-1]
# 将数组的列倒序
    # arr[:, ::-1]
# 全部倒序
arr[::-1, ::-1]

   3) 变形 : 使用arr.reshape()函数, 注意参数是一个tuple!基本使用: 

      将一维数组转变为多维数组

arr2 = np.random.randint(20,30, size=(6,4))
arr2
# 转变为一维数组
arr12 = arr2.reshape(24)
arr12
# 转变成三维数组
arr32 = arr2.reshape(2,4,3)
arr32
# 自动计算行和列
arr4 = arr2.reshape(3,-1)
arr4
arr5 = arr2.reshape(-1,6)
arr5

      4) 级联   一维数组 二维数组  多维数组的级联, 实际操作中级联多为二维数组

      np.concatenate()  axis=0表示的是竖直方向  1水平方向

arr1 = np.random.randint(0,100, size=(3,4))

arr2 = np.random.randint(0,100, size=(3,4))

np.concatenate((arr1,arr2), axis=1)       水平方向

np.concatenate((arr1,arr2), axis=0)       竖直方向

   5)  切分: 与级联类似, 三个函数完成切分工作: np.split(arr,行/列,轴): 参数2是一个列表类型 np.vsplit np.hsplit

import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg')
plt.imshow(img_arr)

imgs = np.split(img_arr,[100,300],axis=0)
plt.imshow(imgs[1])

   6)  副本:  所有赋值操作不会为ndarray的任何元素创建副本, 对赋值后的对象的操作也会对原来的对象生效.

可使用copy创建副本.

arr = np.array([1,2,3,4,5])
a = arr
a[1] = 10
print(arr)

arr1 = arr.copy()
arr1[0] = 20

  e : ndarray的聚合操作

arr.sum()
arr.std()
arr.mean()

  f: 广播机制

    ndarray广播机制的三条规则:

      缺失维度的数组, 则维度补充为进行运算的数组的维度.缺失的数组元素使用已有元素进行补充.

      规则一:  为缺失的维度补1

      规则二: 缺失元素用已用值补充

      规则三: 缺失维度的数组只能有一行或者是一列

例一: m = np.ones((2,3)) a = np.arange(3) 求m + a
# 两行三列的矩阵1
m = np.ones((2,3))
# 一维数组0,1,2
a = np.arange(3)
m+a

a = np.arange(3).reshape(3,1)
b = np.arange(3)
a+b

习题3 : a = np.ones((4,1)) b = np.arange(4) 求a+b
a = np.ones((4,1))
b = np.arange(4)
a+b

  h : ndarray排序

# 1  快速排序np.sort()与ndarray.sort()都可以, 但有区别:
#         np.sort()不改变输入
#         ndarray.sort()本地处理, 不占用空间, 但改变输入.
arr = np.array([3,8,5,7,6])
arr

# 排序
np.sort(arr)

  部分排序

2 部分排序 np.partition(a,k) 有的时候我们不会对全部的数据感兴趣, 我们可能对最小的或者最大的一部分感兴趣. 当k为正时, 我们想得到最小的k个数 当k为负时, 我们想得到最大的k个数

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

  

猜你喜欢

转载自www.cnblogs.com/gyh412724/p/10313145.html