《手牽手帶你走進python世界》系列四

1、numpy

  • 什麼是numpy,一個高性能的科學計算和數據分析基礎包,和numpy,matplotlib並稱數學三劍客python

  • 開胃菜數組

    # 計算執行時間
    # 第一種普通程序猿執行方式
    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 將列表轉成數組app

      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()函數,顧頭不顧尾dom

      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爲基準的多行多列數組oop

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

    • T 數組的轉置,說的通俗一點就是行和列互換spa

      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)  最終三個參數表明的含義依次爲:二維維度,三維維度,每一個數組內數據大小
      '''

2、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>
        '''

3、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])

相關文章
相關標籤/搜索