《手牵手带你走进python世界》系列四

一、numpy

  • 什么是numpy,一个高性能的科学计算和数据分析基础包,和numpy,matplotlib并称数学三剑客

  • 开胃菜

    # 计算执行时间
    # 第一种普通程序猿执行方式
    def func(values):
      s_list = []
      for i in range(values):
        s_list.append(i**2)
    %timeit func(10000)
    
    # 第二种 数据分析师执行方式
    import numpy as np
    arr = np.arange(10000)
    %timeit arr*arr
    
    '''
    第一种用时  976 µs ± 30.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    第二种用时  5.86 µs ± 208 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    '''
    
  • numpy常用的方法

    • array 将列表转成数组

      import numpy as np
      t = np.array([1,2,3,4,5])
      print(t) # array([1,2,3,4,5])
      
    • arange('start','end','step') 相当于python的range()函数,顾头不顾尾

      import numpy as np
      t = np.arange(1.0,10,0.2)
      print(t)
      
    • linspace(start,end,step) 相当于python的range()函数,但是这个顾头又顾尾,并且是等份的。

      import numpy as np
      t = np.linspace(1,20,8)
      print(t)
      
    • zeros([行,列]) 生成一个以0为基准的多行多列数组

      import numpy as np
      t = np.zeros([3,4])
      print(t)
      
    • ones([行,列]) 生成一个以1为基准的多行多列数组

      import numpy as np
      t = np.ones([2,4])
      print(t)
      
  • numpy常用的属性

    • T 数组的转置,说的通俗一点就是行和列互换

      import numpy as np
      li1 = [
        [1,2,3],
        [4,5,6]
      ]
      a = np.array(li1)
      a.T
      
    • dtype 返回当前数据的类型

      import numpy as np
      arr = np.arange(10)
      arr.dtype
      
    • size 返回当前数组内部的元素的个数

      import numpy as np
      l1 = [[[1,2,3],
             [4,5,6]],
           [[7,8,9],
           [1,5,9]
           ]]
      arr1 = np.array(l1)
      arr1.size
      
    • ndim 返回当前数组维度

    import numpy as np
    l1 = [[[1,2,3],
           [4,5,6]],
         [[7,8,9],
         [1,5,9]
         ]]
    arr1 = np.array(l1)
    arr1.ndim
    
    • shape 返回数组维度大小

      l1 = [[[1,2,3,4],
             [4,5,6,5],
            [6,8,3,6]],
           [[7,8,9,7],
           [1,5,9,7],
            [4,6,8,4]
           ]]
      arr1 = np.array(l1)
      t = arr1.shape
      
      '''
      结果:(2,3,4)  最终三个参数代表的含义依次为:二维维度,三维维度,每个数组内数据大小
      '''
      

二、pandas

  • 当大家谈论到数据分析时,提及最多的语言就是Python和SQL,而Python之所以适合做数据分析,就是因为他有很多强大的第三方库来协助,pandas就是其中之一,它是基于Numpy构建的,正因pandas的出现,让Python语言也成为使用最广泛而且强大的数据分析环境之一。

  • 安装和使用

    • pip install pandas
    • import pandas as pd
  • 开胃菜

    • Series

      • 是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。在数据分析的过程中非常常用,对于Series,其实我们可以认为它是一个长度固定且有序的字典,因为它的索引和数据是按位置进行匹配的,像我们会使用字典的上下文,就肯定也会使用Series

        import pandas as pd
        t = pd.Series([1,2,3,4,5])
        print(t)
        
        '''
        结果:
        0    1
        1    2
        2    3
        3    4
        4    5
        dtype: int64
        '''
        
        # 设置索引
        t = pd.Series([1,2,3,4,5],index=['n1','n2','n3','n4','n5'])
        '''
        结果:
        n1    1
        n2    2
        n3    3
        n4    4
        n5    5
        dtype: int64
        '''
        
    • DataFrame

      • DataFrame是一个表格型的数据结构,相当于是一个二维数组,含有一组有序的列。他可以被看做是由Series组成的字典,并且共用一个索引。接下来就一起来见识见识DataFrame数组的厉害吧!!!

      • 生成一个行列

        import pandas as pd
        t = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        
        '''
        结果:
           one  two
        0  1    4
        1  2    3
        2  3    2
        3  4    1
        '''
        
      • 添加指定列名

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        pd.DataFrame(data,columns=['two','one'])
        '''
        结果:
            two   one
        0   4     1
        1   3     2
        2   2     3
        3   1     4
        '''
        
      • 获取index

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        data.index
        '''
        结果:
        RangeIndex(start=0, stop=4, step=1)
        '''
        
      • 获取columns

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        data.columns
        '''
        结果:
        Index(['one', 'two'], dtype='object')
        '''
        
      • T 转置

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        data.T
        '''
        结果:
            0 1 2 3
        one 1 2 3 4
        two 4 3 2 1
        '''
        
      • 获取values索引值

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        data.values
        '''
        结果:
        array([[1, 4],
               [2, 3],
               [3, 2],
               [4, 1]])
        '''
        
      • 获取快速统计 describe

        import numpy as np
        data = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
        data.describe
        '''
        结果:
        <bound method NDFrame.describe of    one  two
        0    1    4
        1    2    3
        2    3    2
        3    4    1>
        '''
        

三、matplotlib(绘图)

  • 数据可视化,数据可视化在量化分析当中是一个非常关键的辅助工具,往往我们需要通过可视化技术,对我们的数据进行更清晰的展示,这样也能帮助我们理解交易、理解数据。通过数据的可视化也可以更快速的发现量化投资中的一些问题,更有利于分析并解决它们。接下来我们主要使用的可视化工具包叫Matplotlib,它是一个强大的Python绘图和数据可视化的工具包。

  • 安装和使用

    • pip install matplotlib
    • import matplotlib.pyplot as plt
  • 绘图方法和显示图像

    • plt.plot() # 绘图函数
    • plt.show() # 显示图像
  • 开胃菜

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    
    np.random.seed(1000)
    y = np.random.standard_normal(20)  # 生成正态分布的随机数
    
    x = range(len(y))
    plt.plot(x,y)
    
  • 图样实例

    • 饼图

      import matplotlib.pyplot as plt
      plt.pie([10,20,30,40],labels=list('abcd'),autopct="%.2f%%",explode=[0.1,0,0,0]) # 饼图
      plt.axis("equal")
      plt.title('absd')
      plt.show()
      

    • 柱图

      import matplotlib.pyplot as plt
      plt.figure(figsize=(7,4))
      plt.hist(y,label=['1st','2nd'],bins=25)
      plt.grid(True)  # 网格设置
      plt.legend(loc=0)  # 图例标签位置设置
      plt.axis("tight")
      plt.xlabel('index')
      plt.ylabel('frequency')
      plt.title("test6")
      

    • 柱图

      # DataFrame数组图
      import matplotlib.pyplot as plt
      import pandas as pd
      df = pd.DataFrame({
          'Jan':pd.Series([1,2,3],index=['a','b','c']),
          'Fed':pd.Series([4,5,6],index=['b','a','c']),
          'Mar':pd.Series([7,8,9],index=['b','a','c']),
          'Apr':pd.Series([2,4,6],index=['b','a','c'])
      })
      
      df.plot.bar()  # 水平柱状图,将每一行中的值分组到并排的柱子中的一组
      df.plot.barh(stacked=True,alpha=0.5)  # 横向柱状图,将每一行的值堆积到一起
      


    • 折线图

      import matplotlib.pyplot as plt
      import numpy as np
      np.random.seed(1000)
      y = np.random.standard_normal(20) # 生成
      
      x = range(len(y))
      plt.plot(x,y)
      plt.title('yes')
      plt.xlabel('x--')
      plt.ylabel('y--')
      # plt.xlim(0,50)
      plt.xticks([1,2,3,4,5,6,7,8,9])
      
      

posted @ 2019-06-20 23:28  巫小诗  阅读(242)  评论(0编辑  收藏  举报