小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python數(shù)據(jù)處理分析(1):日期型數(shù)據(jù)處理

 鷹兔牛熊眼 2019-01-24

摘要: Python數(shù)據(jù)處理分析中,日期型數(shù)據(jù)的處理是相對(duì)復(fù)雜且非常重要的一環(huán)。本文以調(diào)用Tushare包獲得股票的各種信息數(shù)據(jù)為案例,介紹日期數(shù)據(jù)的處理。

文章目錄:

1. 獲取數(shù)據(jù)2. 日期型數(shù)據(jù)處理2.1. 按日期切片篩選數(shù)據(jù)2.1.1. 按年度2.1.2. 按月度2.1.3. 按具體天2.2. to_period按日期顯示數(shù)據(jù)2.2.1. 按年度2.2.2. 按季度2.2.3. 按月度2.3. resample按日期統(tǒng)計(jì)數(shù)據(jù)2.3.1. 按年度2.3.2. 按季度2.3.3. 按月度2.4. 統(tǒng)計(jì)和顯示結(jié)合

之前的的一篇文章:10行代碼爬取全國(guó)所有A股/港股/新三板上市公司信息,用爬蟲實(shí)現(xiàn)了上市公司信息的抓取。但還有更簡(jiǎn)單的方法,就是調(diào)用Tushare包,可以很便捷地拿到干凈的各種股市數(shù)據(jù)。

強(qiáng)烈推薦一下這款由國(guó)內(nèi)團(tuán)隊(duì)開(kāi)發(fā)的包,Github上目前Star數(shù) 6000+。Tushare是一個(gè)開(kāi)源免費(fèi)、強(qiáng)大的python金融財(cái)經(jīng)數(shù)據(jù)接口包。調(diào)用該包返回的數(shù)據(jù)格式基本是Pandas DataFrame類型,非常便于后續(xù)處理分析。包的數(shù)據(jù)來(lái)源于新浪財(cái)經(jīng)、騰訊財(cái)經(jīng)、上交所和深交所,比較齊全,質(zhì)量也很可靠。

參考:
https:///document/2
https://github.com/waditu/Tushare

下面我們就來(lái)簡(jiǎn)單體檢一下這款包的便利,然后利用它返回的數(shù)據(jù)處理其中的日期型數(shù)據(jù)。

1. 獲取數(shù)據(jù)

接口使用前提:首先在官網(wǎng)注冊(cè)成功后獲得token,然后通過(guò)下面命令下載Tushare包,然后在程序中調(diào)用就可以使用了。

1 pip instasll tushare

可以獲得的信息接口非常多,包括:行情數(shù)據(jù)、基礎(chǔ)數(shù)據(jù)、財(cái)務(wù)數(shù)據(jù)板塊等。


下面就簡(jiǎn)單使用下部分接口。首先,獲取國(guó)內(nèi)股票列表數(shù)據(jù)。

1import tushare as ts
2ts.set_token('你的token')
3pro = ts.pro_api()
4data = pro.stock_basic(exchange_id='', is_hs='', fields='symbol,name,is_hs,list_date,list_status')
5print(data)
6# ''表示獲取全部

exchange_id表示股票代碼,可以獲取特定股票的基礎(chǔ)信息,為空則獲取全部;is_hs表示是否滬深港通,為空表示提取所有股市;fields表示想要提取的信息列表。

結(jié)果如下:

1        ts_code  symbol  name list_status  list_date is_hs
20     000001.SZ  000001  平安銀行           L   19910403     S
31     000002.SZ  000002   萬(wàn)科A           L   19910129     S
42     000004.SZ  000004  國(guó)農(nóng)科技           L   19910114     N
53     000005.SZ  000005  世紀(jì)星源           L   19901210     N
64     000006.SZ  000006  深振業(yè)A           L   19920427     S
75     000007.SZ  000007   全新好           L   19920413     N
86     000008.SZ  000008  神州高鐵           L   19920507     S
97     000009.SZ  000009  中國(guó)寶安           L   19910625     S
108     000010.SZ  000010  美麗生態(tài)           L   19951027     N
119     000011.SZ  000011  深物業(yè)A           L   19920330     S
1210    000012.SZ  000012   南玻A           L   19920228     S
13···
143532  603987.SH  603987   康德萊           L   20161121     N
153533  603988.SH  603988  中電電機(jī)           L   20141104     N
163534  603989.SH  603989  艾華集團(tuán)           L   20150515     H
173535  603990.SH  603990  麥迪科技           L   20161208     N
183536  603991.SH  603991  至正股份           L   20170308     N
193537  603993.SH  603993  洛陽(yáng)鉬業(yè)           L   20121009     H
203538  603996.SH  603996  中新科技           L   20151222     N
213539  603997.SH  603997  繼峰股份           L   20150302     H
223540  603998.SH  603998  方盛制藥           L   20141205     N
233541  603999.SH  603999  讀者傳媒           L   20151210     N

很輕松地就能獲得3542家上市公司的基本情況。下面就將這個(gè)數(shù)據(jù)作為日期型處理的基礎(chǔ)數(shù)據(jù)。

2. 日期型數(shù)據(jù)處理

查看一下數(shù)據(jù)結(jié)構(gòu):

1RangeIndex: 3542 entries, 0 to 3541
2Data columns (total 6 columns):
3ts_code        3542 non-null object
4symbol         3542 non-null object
5name           3542 non-null object
6list_status    3542 non-null object
7list_date      3542 non-null object
8is_hs          3542 non-null object
9dtypes: object(6)

所有列都是object字符型。這里想對(duì)日期做數(shù)據(jù)分析,比如可以統(tǒng)計(jì)一下歷年上市公司數(shù)量。需更改日期型數(shù)據(jù)字符型為日期型。

1data['list_date'] = pd.to_datetime(data['list_date'])

pd.to_datetime將'list_date'列格式改為datetime格式,再來(lái)看一下:

1RangeIndex: 3542 entries, 0 to 3541
2Data columns (total 6 columns):
3ts_code        3542 non-null object
4symbol         3542 non-null object
5name           3542 non-null object
6list_status    3542 non-null object
7list_date      3542 non-null datetime64[ns]
8is_hs          3542 non-null object
9dtypes: object(6)

2.1. 按日期切片篩選數(shù)據(jù)

有時(shí)候我們需要按年、季度、月、日這樣的日期格式來(lái)篩選提取相應(yīng)的數(shù)據(jù)。

2.1.1. 按年度

  • 獲取單一年份數(shù)據(jù),比如2017年

1data = data.set_index(data['list_date'])
2data = data['2017']
3print(data.head())
4# 結(jié)果
5              ts_code  symbol  name list_status  list_date is_hs
6list_date                                                       
72017-12-25  001965.SZ  001965  招商公路           L 2017-12-25     S
82017-03-24  002774.SZ  002774  快意電梯           L 2017-03-24     N
92017-01-12  002824.SZ  002824  和勝股份           L 2017-01-12     N
102017-01-06  002838.SZ  002838  道恩股份           L 2017-01-06     N
112017-01-24  002839.SZ  002839  張家港行           L 2017-01-24     S
  • 獲取多個(gè)年份,比如2015-2017

 1data = data['2015':'2017']
2print(data.head())
3# 結(jié)果
4              ts_code  symbol  name list_status  list_date is_hs
5list_date                                                       
62015-01-26  000166.SZ  000166  申萬(wàn)宏源           L 2015-01-26     S
72017-12-25  001965.SZ  001965  招商公路           L 2017-12-25     S
82015-12-30  001979.SZ  001979  招商蛇口           L 2015-12-30     S
92015-01-27  002734.SZ  002734  利民股份           L 2015-01-27     N
102015-01-22  002739.SZ  002739  萬(wàn)達(dá)電影           L 2015-01-22     S

2.1.2. 按月度

1data = data['2017-1']
2print(data.head())
3# 結(jié)果
4              ts_code  symbol  name list_status  list_date is_hs
5list_date                                                       
62017-01-12  002824.SZ  002824  和勝股份           L 2017-01-12     N
72017-01-06  002838.SZ  002838  道恩股份           L 2017-01-06     N
82017-01-24  002839.SZ  002839  張家港行           L 2017-01-24     S
92017-01-10  002840.SZ  002840  華統(tǒng)股份           L 2017-01-10     N
102017-01-19  002841.SZ  002841  視源股份           L 2017-01-19     S

2.1.3. 按具體天

1data = data['2017-1-12']
2print(data.head())
3# 結(jié)果
4              ts_code  symbol  name list_status  list_date is_hs
5list_date                                                       
62017-01-12  002824.SZ  002824  和勝股份           L 2017-01-12     N
72017-01-12  300584.SZ  300584  海辰藥業(yè)           L 2017-01-12     N
82017-01-12  603628.SH  603628  清源股份           L 2017-01-12     H
92017-01-12  603639.SH  603639   海利爾           L 2017-01-12     H

2.2. to_period按日期顯示數(shù)據(jù)

dataframe.to_period方法只是用于顯示數(shù)據(jù),但不會(huì)進(jìn)行統(tǒng)計(jì)。

2.2.1. 按年度

1data = data.to_period('A')  # 'A'默認(rèn)是從'A-DEC'開(kāi)始算,也可以根據(jù)情況設(shè)置為'A-JAN'
2print(data.head())
3# 結(jié)果
4             ts_code  symbol  name list_status  list_date is_hs
5list_date                                                      
61991       000001.SZ  000001  平安銀行           L 1991-04-03     S
71991       000002.SZ  000002   萬(wàn)科A           L 1991-01-29     S
81991       000004.SZ  000004  國(guó)農(nóng)科技           L 1991-01-14     N
91990       000005.SZ  000005  世紀(jì)星源           L 1990-12-10     N
101992       000006.SZ  000006  深振業(yè)A           L 1992-04-27     S

可以看到,相比上面篩選數(shù)據(jù)時(shí)是按原始的日期,這里利用to_period方法,設(shè)置參數(shù)為'A'后,可以直接顯示為年,這在后期可視化繪圖時(shí)非常有用。

2.2.2. 按季度

 1data = data.to_period('Q')   # 'Q'默認(rèn)是從'Q-DEC'開(kāi)始算,也可以根據(jù)情況設(shè)置為“Q-SEP”,“Q-FEB”等
2print(data.head())
3# 結(jié)果
4             ts_code  symbol  name list_status  list_date is_hs
5list_date                                                      
61991Q2     000001.SZ  000001  平安銀行           L 1991-04-03     S
71991Q1     000002.SZ  000002   萬(wàn)科A            L 1991-01-29     S
81991Q1     000004.SZ  000004  國(guó)農(nóng)科技           L 1991-01-14     N
91990Q4     000005.SZ  000005  世紀(jì)星源           L 1990-12-10     N
101992Q2     000006.SZ  000006  深振業(yè)A           L 1992-04-27     S

2.2.3. 按月度

1data = data.to_period('M')
2print(data.head())
3# 結(jié)果
4             ts_code  symbol  name list_status  list_date is_hs
5list_date                                                      
61991-04    000001.SZ  000001  平安銀行           L 1991-04-03     S
71991-01    000002.SZ  000002   萬(wàn)科A            L 1991-01-29     S
81991-01    000004.SZ  000004  國(guó)農(nóng)科技           L 1991-01-14     N
91990-12    000005.SZ  000005  世紀(jì)星源           L 1990-12-10     N
101992-04    000006.SZ  000006  深振業(yè)A           L 1992-04-27     S

2.3. resample按日期統(tǒng)計(jì)數(shù)據(jù)

按日期進(jìn)行統(tǒng)計(jì)數(shù)據(jù),可以利用resample方法。

2.3.1. 按年度

1data = data.resample('AS').count()['name']  # count對(duì)各年上市公司數(shù)量進(jìn)行計(jì)數(shù)
2print(data.head())
3# 結(jié)果
4list_date
51990-01-01      7
61991-01-01      4
71992-01-01     37
81993-01-01    106
91994-01-01     99

2.3.2. 按季度

1data = data.resample('Q').count()['name']  
2print(data.head())
3# 結(jié)果
4list_date
51990-12-31    7
61991-03-31    2
71991-06-30    2
81991-09-30    0
91991-12-31    0

2.3.3. 按月度

1data = data.resample('M').count()['name']  
2print(data.head())
3# 結(jié)果
4list_date
51990-12-31    7
61991-01-31    2
71991-02-28    0
81991-03-31    0
91991-04-30    1

2.4. 統(tǒng)計(jì)和顯示結(jié)合

利用前面的resample和to.period方法,可以按年、季度、月份匯總數(shù)據(jù)。

1# 匯總各年上市公司數(shù)量
2data = data.set_index(['list_date'])
3data = data.resample('AS').count()['ts_code']
4data = data.to_period('A')
5print(data.head())
6print(data.tail())

結(jié)果如下:

 1list_date
21990      7
31991      4
41992     37
51993    106
61994     99
7Freq: A-DEC, Name: name, dtype: int64
8list_date
92014    124
102015    223
112016    227
122017    438
132018     78
14Freq: A-DEC, Name: name, dtype: int64

基于上述數(shù)據(jù),可以利用matplotlib繪制出歷年上市公司數(shù)量的折線圖:

折線圖的具體繪制方法,見(jiàn)后續(xù)文章。

以上就是簡(jiǎn)單利用了Tushare的一個(gè)接口返回的數(shù)據(jù),介紹了日期型數(shù)據(jù)的轉(zhuǎn)換和處理。

本文完。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多