Python机器学习与量化投资-3-2-汇率数据进行处理和可视化
主要对美元兑日元和美元兑欧元的汇率数据进行处理和可视化。首先导入必要的库和自定义模块,接着读取相应的汇率数据文件,提取收盘价数据并对美元兑日元的收盘价进行缩放,选取前 300 行数据并排序,最后使用自定义绘图函数绘制两者汇率对比的曲线图,同时在处理过程中打印各阶段数据的基本信息。
import sys;
# 将 "topqt/" 目录添加到 Python 的模块搜索路径,以便后续导入该目录下的模块
sys.path.append("topqt/")
#
import pandas as pd # 导入 pandas 库,用于数据处理和分析
#
import sklearn # 导入 sklearn 库,提供机器学习相关工具
from sklearn import datasets, linear_model # 从 sklearn 导入数据集和线性模型模块
from sklearn.linear_model import LinearRegression # 从线性模型模块导入线性回归类
from sklearn import metrics # 导入评估指标模块
from sklearn.model_selection import cross_val_predict # 导入交叉验证预测函数
from sklearn.model_selection import train_test_split # 导入数据集划分函数
#
import zsys # 导入自定义模块 zsys
import ztools as zt # 导入自定义模块 ztools 并别名为 zt
import ztools_str as zstr # 导入自定义模块 ztools_str 并别名为 zstr
import ztools_web as zweb # 导入自定义模块 ztools_web 并别名为 zweb
import ztools_data as zdat # 导入自定义模块 ztools_data 并别名为 zdat
import ztools_draw as zdr # 导入自定义模块 ztools_draw 并别名为 zdr
import ztools_ai as zai # 导入自定义模块 ztools_ai 并别名为 zai
import zpd_talib as zta # 导入自定义模块 zpd_talib 并别名为 zta
#1
# 定义美元兑日元汇率数据文件路径
fjpy='data/USDJPY2018.csv'
# 定义美元兑欧元汇率数据文件路径
feur='data/USDEUR2018.csv'
# 打印文件路径信息
print('\n1# f,',fjpy,feur)
# 使用 pandas 读取美元兑日元汇率数据文件,将第一列作为索引
jpy=pd.read_csv(fjpy,index_col=0)
# 使用 pandas 读取美元兑欧元汇率数据文件,将第一列作为索引
eur=pd.read_csv(feur,index_col=0)
# 调用自定义函数 prDF 打印美元兑日元数据的基本信息
zt.prDF('#1.1 @jpy',jpy)
#
# 调用自定义函数 prDF 打印美元兑欧元数据的基本信息
zt.prDF('#1.2 @eur',eur)
#--
#2
#2.1
# 打印提示信息
print('\n2# train')
# 创建一个空的 DataFrame
df2=pd.DataFrame()
# 将美元兑日元的收盘价添加到 df2 中
df2['jpy']=jpy['Close']
# 将美元兑欧元的收盘价添加到 df2 中
df2['eur']=eur['Close']
# 调用自定义函数 prDF 打印 df2 的基本信息
zt.prDF('#2.1 @df2',df2)
#
#2.2
# 将 df2 中美元兑日元的收盘价除以 100 进行缩放
df2['jpy']=df2['jpy']/100
# 调用自定义函数 prDF 打印缩放后 df2 的基本信息
zt.prDF('#2.2 @df2.x',df2)
#3
# 选取 df2 的前 300 行数据
df3=df2.head(300)
# 对 df3 按索引进行排序
df3=df3.sort_index()
#
# 调用自定义绘图函数 drm_line 绘制美元兑日元和美元兑欧元汇率对比曲线图
zdr.drm_line(df3,'USDJPY v USDEUR 汇率对比曲线图',xlst=['jpy','eur'])
#-----------------------
# 打印程序执行完成提示信息
print('\nok!')
# 定义函数 prDF,用于打印 DataFrame 的基本信息
def prDF(dss,df0,n=10,nfloat=2):
# 将 df0 中的数据保留 nfloat 位小数
df=df0.round(nfloat)
# 打印提示信息
print('\n',dss)
# 打印 df 的前 n 行数据
print(df.head(n))
# 如果 df 的行数大于 n
if len(df.index)>n:
print('')
# 打印 df 的后 n 行数据
print(df.tail(n))
#
# 打印 df 的总行数
print('\nlen-DF:',len(df.index))
# 定义函数 drm_line,用于绘制多条曲线图
def drm_line(df,hdr='多维数据图',xlst=['avg','high','low'],p0wid=3,wid=1,ftg='tmp/tmp_plotly.html'):
'''
根据输入数据 df,绘制多条曲线图。
输入参数:
df,输入数据集变量,数据必须包括 xlst 列表当中的数据字段。
xlst,需要绘制的数据字段名称。
wid,曲线宽度,默认为 2。
ftg,输出文件名,默认为:mp/tmp_plotly.html。
返回参数:
无
'''
# 创建一个空的 Data 对象
xdat = pygo.Data()
#
# 初始化计数器
xc=0
# 遍历 xlst 中的每个字段名
for xsgn in xlst:
# 如果是第一个字段
if xc==0:
# 调用 drm_lnsub 函数处理第一个字段的数据
rx=drm_lnsub(df,xsgn,p0wid)
else:
# 调用 drm_lnsub 函数处理其他字段的数据
rx=drm_lnsub(df,xsgn,wid)
#
# 计数器加 1
xc+=1
# 将处理后的数据添加到 xdat 中
xdat.extend([rx])
#
# 调用 drm_lay 函数生成布局信息
lay=drm_lay(df,hdr,m_dtick=20,m_tkAng=-20)
# 创建 Figure 对象
fig = pygo.Figure(data=xdat, layout=lay)
# 绘制图形并保存为文件,不显示链接
pyplt(fig,filename=ftg,show_link=False)
#-----------
runfile('D:/zwPython/zwrk/5_机器学习与量化/kb302_jp.py', wdir='D:/zwPython/zwrk/5_机器学习与量化')
Reloaded modules: zsys, ztools, ztools_str, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_draw, ztools_ai
1# f, data/USDJPY2018.csv data/USDEUR2018.csv
#1.1 @jpy
Open High Low Close
Date
2018-04-25 108.82 109.45 108.79 109.40
2018-04-24 108.72 109.20 108.54 108.82
2018-04-23 107.77 108.75 107.66 108.72
2018-04-20 107.40 107.86 107.38 107.65
2018-04-19 107.22 107.52 107.18 107.39
2018-04-18 107.02 107.38 107.01 107.23
2018-04-17 107.14 107.21 106.89 107.02
2018-04-16 107.50 107.60 107.04 107.14
2018-04-13 107.30 107.78 107.20 107.38
2018-04-12 106.80 107.43 106.70 107.31
Open High Low Close
Date
1971-01-15 358.40 358.40 358.40 358.40
1971-01-14 358.39 358.39 358.39 358.39
1971-01-13 358.46 358.46 358.46 358.46
1971-01-12 358.04 358.04 358.04 358.04
1971-01-11 357.97 357.97 357.97 357.97
1971-01-08 357.83 357.83 357.83 357.83
1971-01-07 357.87 357.87 357.87 357.87
1971-01-06 357.87 357.87 357.87 357.87
1971-01-05 357.81 357.81 357.81 357.81
1971-01-04 357.73 357.73 357.73 357.73
len-DF: 12095
#1.2 @eur
Open High Low Close
Date
2018-04-25 0.82 0.82 0.82 0.82
2018-04-24 0.82 0.82 0.82 0.82
2018-04-23 0.81 0.82 0.81 0.82
2018-04-20 0.81 0.82 0.81 0.81
2018-04-19 0.81 0.81 0.81 0.81
2018-04-18 0.81 0.81 0.81 0.81
2018-04-17 0.81 0.81 0.81 0.81
2018-04-16 0.81 0.81 0.81 0.81
2018-04-13 0.81 0.81 0.81 0.81
2018-04-12 0.81 0.81 0.81 0.81
Open High Low Close
Date
1971-01-15 1.87 1.87 1.87 1.87
1971-01-14 1.87 1.87 1.87 1.87
1971-01-13 1.87 1.87 1.87 1.87
1971-01-12 1.87 1.87 1.87 1.87
1971-01-11 1.87 1.87 1.87 1.87
1971-01-08 1.87 1.87 1.87 1.87
1971-01-07 1.87 1.87 1.87 1.87
1971-01-06 1.87 1.87 1.87 1.87
1971-01-05 1.87 1.87 1.87 1.87
1971-01-04 1.87 1.87 1.87 1.87
len-DF: 12093
2# train
#2.1 @df2
jpy eur
Date
2018-04-25 109.40 0.82
2018-04-24 108.82 0.82
2018-04-23 108.72 0.82
2018-04-20 107.65 0.81
2018-04-19 107.39 0.81
2018-04-18 107.23 0.81
2018-04-17 107.02 0.81
2018-04-16 107.14 0.81
2018-04-13 107.38 0.81
2018-04-12 107.31 0.81
jpy eur
Date
1971-01-15 358.40 1.87
1971-01-14 358.39 1.87
1971-01-13 358.46 1.87
1971-01-12 358.04 1.87
1971-01-11 357.97 1.87
1971-01-08 357.83 1.87
1971-01-07 357.87 1.87
1971-01-06 357.87 1.87
1971-01-05 357.81 1.87
1971-01-04 357.73 1.87
len-DF: 12095
#2.2 @df2.x
jpy eur
Date
2018-04-25 1.09 0.82
2018-04-24 1.09 0.82
2018-04-23 1.09 0.82
2018-04-20 1.08 0.81
2018-04-19 1.07 0.81
2018-04-18 1.07 0.81
2018-04-17 1.07 0.81
2018-04-16 1.07 0.81
2018-04-13 1.07 0.81
2018-04-12 1.07 0.81
jpy eur
Date
1971-01-15 3.58 1.87
1971-01-14 3.58 1.87
1971-01-13 3.58 1.87
1971-01-12 3.58 1.87
1971-01-11 3.58 1.87
1971-01-08 3.58 1.87
1971-01-07 3.58 1.87
1971-01-06 3.58 1.87
1971-01-05 3.58 1.87
1971-01-04 3.58 1.87
len-DF: 12095
d:\zwpython\py37\python-3.7.6.amd64\lib\site-packages\plotly\graph_objs\_deprecations.py:40: DeprecationWarning:
plotly.graph_objs.Data is deprecated.
Please replace it with a list or tuple of instances of the following types
- plotly.graph_objs.Scatter
- plotly.graph_objs.Bar
- plotly.graph_objs.Area
- plotly.graph_objs.Histogram
- etc.
d:\zwpython\py37\python-3.7.6.amd64\lib\site-packages\plotly\graph_objs\_deprecations.py:550: DeprecationWarning:
plotly.graph_objs.XAxis is deprecated.
Please replace it with one of the following more specific types
- plotly.graph_objs.layout.XAxis
- plotly.graph_objs.layout.scene.XAxis
ok!