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

yumo6662个月前 (05-16)技术文章37

主要对美元兑日元和美元兑欧元的汇率数据进行处理和可视化。首先导入必要的库和自定义模块,接着读取相应的汇率数据文件,提取收盘价数据并对美元兑日元的收盘价进行缩放,选取前 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中常用函数整理,涵盖内置函数、标准库及常用操作,按类别分类并附带示例说明:一、基础内置函数print()输出内容到控制台。pythonprint("Hello, World!...

Python语言的12个基础知识点小结

python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序、去重、字典排序、字典、列表、字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进...

python基础函数

Python 函数是代码复用的核心工具,掌握基础函数的使用是编程的关键。以下是 Python 函数的系统总结,包含 内置函数 和 自定义函数 的详细用法,以及实际应用场景。一、Python 内置函数(...

Python第十节—常用的内置函数

Pyhton中有一些内置的常用函数,如果每个函数都需要大家定义,那么会很浪费时间,所有今天给大家讲一些Python中的一些内置函数,先讲一讲常用的数学函数取绝对值abs()取长度len()取最大值ma...

深入剖析Python基本函数:从基础到进阶的完整指南

引言Python作为一门简洁高效的编程语言,其函数系统是支撑代码模块化的核心机制。掌握Python函数的使用方法不仅能提升代码的可读性和复用性,还能帮助开发者理解面向对象编程和函数式编程的精髓。本文将...

Python内置函数指南

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