Python数据分析 三剑客篇(一)NumPyPython数据分析(一)Numpy

Python数据分析(一)Numpy

NumPy,Pandas和 Matplotlib “工欲善其事,必先利其器。” Numpy ,pandas 和 Matplotlib 被称为Python数据分析的三剑客模块。首先我们来讲讲安装问题,推荐直接傻瓜式安装Anaconda,里面封装了大量的第三方库,其中就包括了我们的三剑客模块。推荐到清华大学开源镜像站下载。

  • NumPy是一个科学计算库,提供了矩阵运算的功能,一般用它提供一个 Ndarray 对象 。(注:python文件名不要模块名重复,不然创建数组对象时会出现问题:比如说文件名为 numpy.py 这时文件名和numpy冲突 报错:AttributeError: module ‘numpy’ has no attribute ‘array’)

1.定向生成数组对象

    import numpy as np  #创建多维数组对象  arr1=np.array([1,2,3,4,5]) 
  > arr2=np.array([[1,2,3,4,5],[6,7,8,9,0]]) #打印维度 print(arr2.shape)
  > print(arr1.shape) #输出结果如下:(2, 5) (5,) 多维数组维度(行,列)
   
   
   
    #打印数组的数据类型  
    print(arr1.dtype)  
    print(arr2.dtype)  
    #输出:int64 int64
   
    #打印数组元素的个数
    print(arr2.size)
    #输出:10
   
    #格式转换
    arr2.shape=5,2
    arr1.shape=5,1
    print(arr2.shape)
    print(arr1.shape)
    #输出:(5, 2) (5, 1)

2.自动生成数组

    #使用arange函数创建一定范围内的等差一维数组
  arr4=np.arange(1,2,0.1)
  print(arr4)
  #输出:[1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9]
   
   
  #使用linspace函数通过指定开始值,终值和元素个数创建一维数组
  arr3=np.linspace(0,1,15)
  print(arr3)
  '''输出:[0.         0.07142857 0.14285714 0.21428571 0.28571429 0.35714286
    0.42857143 0.5       0.57142857 0.64285714 0.71428571 0.78571429
    0.85714286 0.92857143 1.       ]'''
   
  #使用logspace函数生成等比数列
  arr5=np.logspace(0,10,5)
  print(arr5)
  '''输出:[1.00000000e+00 3.16227766e+02 1.00000000e+05 3.16227766e+07
    1.00000000e+10]'''
   
  #使用zeros函数生成0向量
  print(np.zeros((3,4)))
  '''输出:
  [[0. 0. 0. 0.]
    [0. 0. 0. 0.]
    [0. 0. 0. 0.]]'''
   
  #使用ones函数生成全是1的数组
  print(np.ones((2,3)))
  '''out:
  [[1. 1. 1.]
    [1. 1. 1.]]'''
   
  #使用eye函数创建主对角线上全是1的数组
  print(print(np.eye(4)))
  '''out:
  [[1. 0. 0. 0.]
    [0. 1. 0. 0.]
    [0. 0. 1. 0.]
    [0. 0. 0. 1.]]'''
   
  #使用diag函数指定主对角线值,list形式传值
  print(np.diag([1,2,3,4,5]))
  '''out:
  [[1 0 0 0 0]
    [0 2 0 0 0]
    [0 0 3 0 0]
    [0 0 0 4 0]
    [0 0 0 0 5]]'''

3.随机生成数组

    import numpy as np
  #ramdom函数随机生成数组,reshape函数规定其为25行4列
  print(np.random.random(100).reshape(25,4))
  ''' 部分输出:
  [[0.41779031 0.31529555 0.17766244 0.72547036]
    [0.95439412 0.80383632 0.41866361 0.17071668]
    ......
    [0.06610952 0.87488625 0.85913323 0.13361665]
    [0.64676173 0.31024695 0.04490706 0.23985548]]
   
  ‘''
   
  #服从均匀分布
  print(np.random.rand(5,5))
  '''输出:
  [[0.42083652 0.98716543 0.9742623 0.9402266 0.70753504]
    [0.60180081 0.77633264 0.08107967 0.80593841 0.65563986]
    [0.93934732 0.79088117 0.42302721 0.58801814 0.09153276]
    [0.42432187 0.48180108 0.08489092 0.0856836 0.60130952]
    [0.25887204 0.09300781 0.71942068 0.86411773 0.35567047]]
   
  '''
   
  #服从正态分布
  print(np.random.randn(5,5))
  '''输出:
  [[ 1.27285675 1.45503025 0.27600984 -0.32931654 -0.78800697]
    [-0.4268439 -2.16412776 -0.18753525 0.05182456 -2.13253747]
    [-2.12798807 0.77489968 -0.09857475 0.7274294 -0.01992541]
    [-0.96002384 0.38462981 0.60109209 1.27692944 -0.14912962]
    [ 0.17716558 -1.31903088 -0.33830463 -0.0716197   1.71571588]]
  '''
   
  #给定区间生成随机数
  print(np.random.randint(1,10,size=[3,3]))
  '''输出:
  [[7 1 4]
    [8 3 5]
    [5 3 1]]
  '''

4.索引和切片 一维数组:

    import numpy as np
  arr0=np.arange(10)#[0 1 2 3 4 5 6 7 8 9]
   
  print(arr0[2])#打印第三个数
   
  print(arr0[2:6])#切片包括arr0[2]但是不包括arr0[6]
   
  print(arr0[:4])#表示从arr0[0]开始,到指定arr0[3]
   
  print(arr0[-1])#表示最后一个元素
   
  #判断运输算
  equal_to_one=(arr0==1)#返回布尔值[False True False False False False False False False False]
  print(arr0[equal_to_one])#[1]
   
  #取判断运算(&和 |)
  equal_to_one_and_two=(arr0==1)&(arr0==2)
  print(arr0[equal_to_one_and_two])#[] 不存在一个数,既等于1又等于2
  equal_to_one_or_two=(arr0==1)|(arr0==2)
  print(arr0[equal_to_one_or_two])#[1 2]

n维数组

    arra=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
  '''[[ 1 2 3 4]
    [ 5 6 7 8]
    [ 9 10 11 12]]
  '''
  print(arra[:,3])#取第4列元素
  print(arra[0,1:3])#取第0行,第1和第2列元素
  print(arra[1:,1:])#取第1,2行,1,2,3列元素
   
  print(arra.ravel())#展平数组,默认横向[ 1 2 3 4 5 6 7 8 9 10 11 12]
  print(arra.flatten())#横向展平数组[ 1 2 3 4 5 6 7 8 9 10 11 12]
  print(arra.flatten('F'))#纵向展平数组[ 1 5 9 2 6 10 3 7 11 4 8 12]
   
  arra2=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,4)
  print(np.hstack((arra,arra2)))
  '''
  [[ 1 2 3 4 1 2 3 4]
    [ 5 6 7 8 5 6 7 8]
    [ 9 10 11 12 9 10 11 12]]
  '''
  print(np.vstack((arra,arra2)))
  '''
  [[ 1 2 3 4]
    [ 5 6 7 8]
    [ 9 10 11 12]
    [ 1 2 3 4]
    [ 5 6 7 8]
    [ 9 10 11 12]]
  '''
  print(np.hsplit(arra2,2))
  '''
  [array([[ 1, 2],
          [ 5, 6],
          [ 9, 10]]), array([[ 3, 4],
          [ 7, 8],
          [11, 12]])]
          '''
  print(np.vsplit(arra2,3))
  '''[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]'''

5.赋值 *

    import numpy as np
  a=np.arange(12)
  b=a
  b.shape=3,4
  print(a.shape)
  print(id(a))
  print(id(b))
  输出
  (3, 4)
  4557363120
  4557363120

‘=’赋值开辟同一块储存单元,通俗来说就是名字不一样,但就是一个东西 ‘view()函数’开辟不同的储存单元,但是数据共同 ‘copy()函数’仅用于初始化,完全不同的两个东西

6.操作文件(不打算整理后面pandas详细介绍)

7.排序 大致介绍 1.a.sort() 对元素排序 直接进行排序,默认为升序 括号中可以传参数,axis=1表示横向排序,axis=0表示纵向排序

  1. a.argsort() 对下标排序 操作基本一致 8.常用统计函数 在这里插入图片描述

 

posted on 2021-07-01 20:45  BabyGo000  阅读(368)  评论(0)    收藏  举报