python之股票數據分析.


一、初識Pandas

Pandas 是基於 NumPy 的一個非常好用的庫,它有兩種自己獨有的基本數據結構Series (一維)和
DataFrame(二維),它們讓數據操作更簡單了。雖然Pandas有着兩種數據結構,但它依然是 Python 的一個庫,所以,Python
中有的數據類型在這里依然適用,也同樣還可以使用類自己定義數據類型。

在金融數據分析領域,Pandas更是起到了非常重要的作用,比如用於量化交易。Pandas
納入了大量庫和一些標准的數據模型,提供了高效地操作大型數據集所需的工具,對於億級的數據處理也如魚得水。

二、Pandas基本操作

1、Series的創建
Series的創建主要有三種方式:

1)通過一維數組創建Series
    import numpy as npimport pandas as pd#創建一維數組a = np.arange(10)
    print(a)
    s = pd.Series(a)
    print(s)
[/code]

輸出如下:

  

![](https://mmbiz.qpic.cn/mmbiz_png/DicahLbc6icicfuAQHXW75S9ib0EO0qrOUcmTgkGicsFDw2wcuicicnoaFtg2hgYiaEicQL6UJm5MMOW3TIzU0wmp7YoBVw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)  

#####  2)通過字典的方式創建Series

```code
    import numpy as npimport pandas as pd#創建字典d = {'a':1,'b':2,'c':3,'d':4,'e':5}
    print(d)
    
    s = pd.Series(d)
    print(s)
[/code]

輸出如下:

  

  

#####  3)通過DataFrame中的某一行或某一列創建Series

參考下面DataFrame第三種創建方式中的s = df3['one']。

###  2、DataFrame的創建

DataFrame的創建主要有三種方式:

#####  1)通過二維數組創建DataFrame

```code
    import numpy as npimport pandas as pd#創建二維數組a = np.array(np.arange(12)).reshape(3,4)
    print(a)
    
    df1 = pd.DataFrame(a)
    print(df1)
[/code]

輸出如下:

  

  

#####  2)通過字典的方式創建DataFrame

以下以兩種字典來創建數據框,一個是字典列表,一個是嵌套字典。

```code
    import numpy as npimport pandas as pd
    
    d1 = {'a':[1,2,3,4],'b':[5,6,7,8],'c':[9,10,11,12],'d':[14,14,15,16]}
    print(d1)
    
    df1 = pd.DataFrame(d1)
    print(df1)
    
    d2 = {'one':{'a':1,'b':2,'c':3,'d':4},'two':{'a':5,'b':6,'c':7,'d':8},'three':{'a':9,'b':10,'c':11,'d':12}}
    print(d2)
    
    df2 = pd.DataFrame(d2)
    print(df2)
[/code]

輸出如下:

  

  

#####  3)通過DataFrame的方式創建DataFrame

我們取出2)中的df2來創建df3

```code
    df2 = pd.DataFrame(d2)print(df2)
    
    df3 = df2[['one','two']]print(df3)
    
    s = df3['one']print(s)
[/code]

輸出如下:

  

  

####  三、處理股票數據

接下來,我們通過實例來學習Pandas在處理股票數據上的應用。  
我們使用pandas_datareader來獲取阿里巴巴的股票數據。

#####  1)導入以下庫:

```code
    import pandas as pdimport pandas_datareader.data as web#繪圖使用import matplotlib.pyplot as plt#獲取時間使用import datetime
[/code]

#####  2)設置股票名稱和時間參數

```code
    name = "BABA"start = datetime.datetime(2015,1,1)end = datetime.date.today()
[/code]

#####  3)獲取股票數據

```code
    prices = web.DataReader(name, "google", start, end)
[/code]

#####  4)查看prices的類型

```code
    print(type(prices))
[/code]

打印如下:

```code
    <class 'pandas.core.frame.DataFrame'>
[/code]

可以看到返回的數據類型就是DataFrame類型。

#####  5)查看股票的摘要信息

```code
    print(prices.describe()
[/code]

打印 如下:

```code
                 Open        High         Low       Close        Volumecount  791.000000  791.000000  792.000000  792.000000  7.920000e+02mean   106.632099  107.793186  105.355164  106.614520  1.610571e+07std     38.191772   38.539981   37.719848   38.156416  9.941683e+06min     57.300000   58.650000   57.200000   57.390000  2.457439e+06
    25%     79.855000   80.945000   79.157500   79.935000  1.003487e+07
    50%     91.000000   91.740000   89.925000   90.705000  1.350020e+07
    75%    119.315000  120.400000  118.462500  120.205000  1.879724e+07max    204.830000  206.200000  202.800000  205.220000  9.704593e+07
[/code]

再來打印最新的三條信息

```code
    print(prices.tail(3))
[/code]

```code
                  Open    High     Low   Close    VolumeDate                                                2018-02-21  189.37  193.17  188.46  188.82  22071585
    2018-02-22  190.20  190.74  187.77  188.75  12282843
    2018-02-23  190.18  193.40  189.95  193.29  16937275
[/code]

#####  6)繪圖

我們將阿里巴巴的股票數據按照開盤價繪圖。

```code
    plt.plot(prices.index, prices["Open"])plt.show()
[/code]

![](https://mmbiz.qpic.cn/mmbiz_png/DicahLbc6icicfuAQHXW75S9ib0EO0qrOUcmV8nosvvOH0oTI5Siaibm8fR6yXicfZHVXCdD45JpOB3zgKKLbsyQaibdGQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1)  

  

從圖中我們可以看到阿里巴巴的股票一路攀升,細心點發現每年的11月都有一個高點。

####  四、總結

Pandas是以NumPy和Matplotlib為基礎封裝的金融數據分析的庫,對於量化交易十分有用,通過可視化的效果能幫我們一定程度分析股市的走向。


![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM