【PY从0到1】 金融数据处理3

# tushare ID: 409200
# 【PY从0到1】 金融数据处理3

# 这节是金融时间序列分析处理的内容

# 导入库
import numpy as np
import pandas as pd
import tushare as ts
import datetime
from datetime import datetime
import matplotlib.pyplot as plt
import warnings; warnings.simplefilter('ignore')

# 1> 时间获取
# 获取当前时间
now_time = datetime.now()
now_time.year # 获取当前年份
now_time.month # 获取当前月份
now_time.day # 获取当前日


# 2> 格式转换
now_time2 = now_time.strftime('%Y-%m-%d') # 将时间按格式转换(年月日表示)
# 2021-02-17 上述方法不能转换Series
str_time = str(now_time2) # 转化为字符串
# '2021-02-17'

# 将str转化为datetime
#
date_time1 = datetime.strptime(str_time, '%Y-%m-%d')
# 2021-02-17 00:00:00

#
from dateutil.parser import parse
date_time2 = parse(str_time)
str_time2_1 = '01-08-2018'     
date_time2_2 = parse(str_time2_1, dayfirst = True) # dayfirst = True第一个是日

#
str_time3 = pd.Series(['2019/07/01',
                       '2019/07/02',
                       '2019-07-03',
                       '2019-07-04'])
date_time3 = pd.to_datetime(str_time3) # 常用


# 3> Period

#
time_period1 = pd.period_range('2020-01-01', 
                              periods = 6, 
                              freq='M')
# PeriodIndex(['2020-01', '2020-02', '2020-03', 
#              '2020-04', '2020-05', '2020-06'],
#             dtype='period[M]', freq='M')

time_period1_2 = time_period1 + 1 # 可以直接将月份+1

#
time_period2 = pd.period_range('1/1/2020', '12/31/2020', freq='M')


# 4> 应用
# 获取数据
# pro = ts.pro_api('')
data = pro.daily(ts_code='000001.SZ', 
               start_date='20201101', 
               end_date='20201201')

# 数据处理
data['date'] = data['trade_date']
del data['trade_date']
data.index = pd.to_datetime(data['date'])
data = data.sort_index(ascending=True) # 对索引重新排序
data_close_price = data['close']
data_close_price = data_close_price.to_frame() # 转化为Dataframe
# 注意data_close_price转换前是Series。有很多切片操作无法完成,所以这里需要转换一下。

# 数据切片
data_close_price['2020-11-04':'2020-11-06']
data_close_price.loc['2020-11-05']
data_close_price['2020-11']
data_close_price['2020-11':'2020-11-15']

# 数据移动
data_close_price['yesterday_close'] = data_close_price['close'].shift(1) 

# 计算收益率
data_close_price['per_earnings'] = data_close_price['close'] / data_close_price['yesterday_close'] - 1 

# 计算累计收益率
data_close_price['cum_earnings'] = (data_close_price['per_earnings'] + 1).cumprod()

# 计算某个月的日平均收益
a = data_close_price['per_earnings']['2020-11'].mean()
print(a)
# 0.00586442964369066

 

posted @ 2021-04-26 21:14  泥鳅不怕水  阅读(94)  评论(0)    收藏  举报