Rust把传统的行情csv文件转成kbar,会是一种什么样的体验?虽然现在早已在Julia回测框架完成,但Rust是如何,总想试一试。

一、速度

说明一下:CSV文件结构:
表头:“日期 开盘 最高 最低 收盘 成交量 成交金额 未平仓合约”
是一个IC1505的数据,大约有5670行。这就是今天的试验数据,比较小。

extern crate stopwatch;
extern crate csv;
extern crate serde;
extern crate chrono; //=>date and time
extern crate encoding;
use stopwatch::Stopwatch;
use std::thread;
use std::io;
use std::time::{Duration, Instant};
use std::collections::HashMap;
use std::io::prelude::*;
use std::fs::File;
use std::io::BufReader;
use chrono::prelude::*;
mod module;
use module::strategy_base::*;
use module::strategy_data::*;
use encoding::{Encoding, DecoderTrap};
use chrono::{DateTime, UTC};
use encoding::all::GB18030;
use serde::{Deserialize, Serializer, Deserializer};
fn main() {let sw = Stopwatch::start_new();let path = "C:\\Users\\Desktop\\IC1505.csv";let chars = module::strategy_data::get_GB2_string(path);let mut rdr = csv::Reader::from_string(chars).has_headers(true);let mut flag = 1i32;let mut vecbar: Vec<kbar> = Vec::new();for row in rdr.decode() {let (_, code, strdate, open, high, low, close, volume, amount, oi):
(
String,                                                                 String,                                                                            f64,                                                                             f64,                                                                            f64,                                                                             f64,                                                                             f64,                                                                             f64,                                                                             f64) = row.unwrap();flag = flag + 1i32;let date = Local.datetime_from_str(&strdate, "%Y-%m-%d %H:%M").unwrap();//代码    日期  开盘  最高  最低  收盘  成交量 成交金额    未平仓合约let tempbar = module::strategy_base::kbar::new(code,
date,
open,                                                       high,                                                       low,                                                       close,                                                       close,                                                       volume,                                                       amount,                                                       oi,                                                       0.0);vecbar.push(tempbar);}println!("kbar len {}", vecbar.len());println!(" It took {0:.8} ms", sw.elapsed_ms());thread::sleep_ms(500000);
}

其中,kbar是一个这样结构的struct:

pub struct kbar {pub Code: String,pub DateTime: DateTime<Local>,pub Close: f64,pub Open: f64,pub High: f64,pub Low: f64,pub PreClose: f64,pub OpenInterest: f64,pub Volume: f64,pub Amount: f64,pub Ratio: f64,
}
impl kbar {pub fn new(code: String,dt: DateTime<Local>,close: f64,open: f64,high: f64,low: f64,preclose: f64,oi: f64,volume: f64,amount: f64,ratio: f64)-> kbar {kbar {Code: code,DateTime: dt,Close: close,Open: open,High: high,Low: low,PreClose: preclose,OpenInterest: oi,Volume: volume,Amount: amount,Ratio: ratio,}}
}

速度呢?这是相关测试:csv =>vec!

把5670行的数据不断复制,放大,进行测试,得到相应的运行速度数据:

CSV数据约5670 行, 速度 => 20ms.
CSV数据约51030 行, 速度 => 139ms.
CSV数据约51030*2 行, 速度 => 284ms.
CSV数据约51030*4 行, 速度 => 603ms.
CSV数据约51030*8 行, 速度 => 1183ms.
CSV数据约51030*16 行, 速度 => 2386ms.

可以看到,接近82万行的CSV文件,全部处理完,大约2.4秒左右。

和Julia的比较:同样82万行的CSV文件(注:在去掉第一行的中文表头的情况下),只是readcsv阶段,暂不考虑转成kbar,Julia的速度约为1.5秒左右(三次测试) 。 可见Julia的确牛B.

tic()
path ="C:\\Users\\Desktop\\IC1505.csv";
data =readdlm(path,skipstart=1)
row,col =size(data);
toc() # 1.5秒

当然,如果Rust程序中去掉相应的转换部分,上面的花时预计在1.2秒左右。也就是说,Rust和Julia在一个量级上。

二、激情

CSV库本来有decode()直接解构成struct的,但是我的kbar的DateTime的结构 是DateTime,不是String,我暂时还没有找到直接转换的方式(虽然编译没有问题,但一运行就出错)。只能先转换成String后,再转成kbar了。所以,代码有一点冗余。

这就是未了的激情,不是一个句号。

Rust: 从csv文件转成kbar的尝试:速度,还有Julia和激情相关推荐

  1. python文件写入字典格式输出_Python把对应格式的csv文件转换成字典类型存储脚本的方法...

    该脚本是为了结合之前的编写的脚本,来实现数据的比对模块,实现数据的自动化!由于数据格式是定死的,该代码只做参考,有什么问题可以私信我! CSV的数据格式截图如下: readDataToDic.py源代 ...

  2. Java如何把一个CSV文件拆分成指定个CSV文件【带源码,完美运行带截图】

    文章目录 一.前言 二.实现 1. 首先进行CSV文件读取,并且把文件组成list,把list拆分 2. 拆分的具体代码如下: 3. 导出到新CSV文件代码如下: 4.测试 5. 结果 一.前言 前段 ...

  3. Python把对应格式的csv文件转换成字典类型存储脚本的方法_python_脚本之家

    该脚本是为了结合之前的编写的脚本,来实现数据的比对模块,实现数据的自动化!由于数据格式是定死的,该代码只做参考,有什么问题可以私信我! CSV的数据格式截图如下: readDataToDic.py源代 ...

  4. 怎么将多个CSV文件合并成一个CSV文件

    最近要批量将几百个CSV文件合成一个文件,最开始是一个个复制粘贴的,进度太慢了,后面发现用一个小办法可以几秒钟将几百个CSV文件合并成一个文件,分享给大家. 第一步:将需要合并的csv文件夹全部放在D ...

  5. csv文件转换成xlsx文件方法

    背景: 在实际工作中,我们经常会面对大批量的数据进行处理,其中将csv文件文件转换成xlsx文件就是其中的一项,废话少说,上家伙: 一般方法: 将csv文件另存为xlsx文件: 但实际中03版本(.x ...

  6. JAVA:将CSV文件转换成JSON

    需求 将从数据库导出的csv文件以指定对应的key转换成json. 思路 使用openCSV读取csv文件. 给定一个String数组,保存json的keys. 遍历csv的每行数组,遍历keys和一 ...

  7. python把.CSV文件转换成.JSON格式文件并格式化储存

    先来看看.JSON对象的一些操作方法: 我们这次用到的主要就是json.dumps 再来看看我们将要转换的.CSV文件的样子: 可以看出,是一张再普通不过的表了,话不多说,直接上代码: import ...

  8. xls/csv文件转换成dbf文件

    帮一个中科院小学妹写的一个小脚本,主要是利用python中的pandas,xlrd,dbfpy包将excel中的xls/csv文件中转化成dbf文件 一.安装相关包 pip install xlrd ...

  9. python将csv文件转换为列表_如何将csv文件数据转换成列表?

    仍未解决的部分 我正在尝试转换csv文件中存储的数据'存储.txt'以使我可以更有效地使用它很容易.就像目前,我的文件存储中的项目如下:Leroy,55349234,ok@gmail.com Sati ...

  10. MAC将多个csv文件合并成一个

    1.将多个csv文件放入到一个文件目录下,并创建一个空的csv文件 2.使用终端进入csv所在的文件目录下 cd XX/XX/XX 3.合并多个文件到一个文件 无序合并命令:cat *.csv> ...

最新文章

  1. python链接安卓 跳一跳
  2. hdu3177 贪心
  3. [渝粤教育] 西南科技大学 电器设备及维修 在线考试复习资料
  4. Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)
  5. 春节快到了,来写个烟花动效吧
  6. android给数组添加新元素_「数组赋值」什么是数组、如何创建数组、数组赋值、数组增加一个新元素 - seo实验室...
  7. maven的pom.xml文件
  8. cdh maven仓库地址
  9. 商场超市数据备份方案
  10. A non well formed numeric value encountered
  11. 2021水利规范工程建设项目施工监理规范工程量清单计价施工安全(共161份,931M)
  12. 必须指定计算机名称,指定网络名不再可用处理方法,指定网络
  13. 快速将有文件的FAT32格式的U盘转NTFS格式(Windows)
  14. 呵呵,一个bug你改了两天?难吗?
  15. Topic 8. 临床预测模型-Lasso回归
  16. 新手想开一个传奇该如何操作?开一个传奇必须掌握哪些知识要点
  17. 强弩之末,刘强东草根创业恐难迎圆满结局?
  18. 云仓系统或者一件代发系统
  19. Java 成员变量中有数组的情况处理
  20. 台积电谈2nm的实现方式

热门文章

  1. C/C++中怎样获取日期和时间
  2. 十五天精通WCF——第四天 你一定要明白的通信单元Message
  3. linux里终端安转视频播放器的操作及显示
  4. 男人想要成功--必须明白的22个道理
  5. 《ASP.NET技术详解与应用实例》配套源代码下载
  6. Redis集群环境搭建
  7. CodeForces 518E Arthur and Questions(贪心 + 思维)题解
  8. 洛谷OJ P2356 弹珠游戏 维护前缀和
  9. android中listview的item滑动删除效果(已解决listview点击问题)
  10. oracle开机自启动、监听自启动设置