什麼是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) 最終三個參數表明的含義依次爲:二維維度,三維維度,每一個數組內數據大小 '''
當你們談論到數據分析時,說起最多的語言就是Python和SQL,而Python之因此適合作數據分析,就是由於他有不少強大的第三方庫來協助,pandas就是其中之一,它是基於Numpy構建的,正因pandas的出現,讓Python語言也成爲使用最普遍並且強大的數據分析環境之一。
安裝和使用
開胃菜
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
*,它是一個強大的Python繪圖和數據可視化的工具包。
安裝和使用
繪圖方法和顯示圖像
開胃菜
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])