Python机器学习与量化投资-3-2-汇率数据进行处理和可视化

yumo6664个月前 (05-16)技术文章70

主要对美元兑日元和美元兑欧元的汇率数据进行处理和可视化。首先导入必要的库和自定义模块,接着读取相应的汇率数据文件,提取收盘价数据并对美元兑日元的收盘价进行缩放,选取前 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!

相关文章

Python内置函数指南

在python中有些函数,很多时候不用import导入就可以直接使用呢,就是python内置函数起的作用。以下我们来说说这些,由于不同python版本可能有些不同,不断实践中优化的结果,自己实测为准...

Python 100个函数及代码!码住

Python内置函数是Python语言中直接可以使用的函数,不需要导入任何模块。它们提供了对基本操作的支持,如处理数据类型、执行数学运算、操作字符串等。以下是100个常见的Python函数的解释及代码...

零基础入门 Python 内置函数:从基础到进阶的实用指南

一、基础操作函数:编程世界的“瑞士军刀”1. 输入输出的核心:print()与input()print():最常用的输出函数,支持多参数拼接与格式控制:print("Hello, Python...

8-Python内置函数

Python 提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

避坑!Python函数设计避坑指南:90%新手不知道的高阶技巧

一、开发中的血泪教训场景:函数参数失控导致代码维护困难# 错误案例:参数混杂引发灾难 def process_order(item, price, discount=0.1, tax_rate=0...

Python 最常用的语句、函数有哪些?

1. #coding=utf-8① 代码中有中文字符,最好在代码前面加#coding=utf-8② pycharm不加可能不会报错,但是代码最终是会放到服务器上,放到服务器上的时候运行可能会报错。③...