Stata是统计学专业软件,可以很方便的对数据处理,但几乎只能按照整行整列进行,而且每次只能加载一个矩阵(dta文件),如果要用到多个矩阵数据进行操作或进行复杂的循环控制,就力不从心了。

而Matlab工业界广泛使用的数据分析处理工具,对矩阵支持良好,除了可以像c语言一样完成底层的操作之外,还包含很多函数库,囊括工控、信号处理、金融、人工智能各个行业。虽然没有Stata内置的统计学函数全面,但在底层操作方面具有明显优势。

因此,在一次帮助别人完成金融数据分析时,尝试使用Stata对数据进行预处理,Matlab完成运算之后再由Stata完成进一步的加标签等操作。

Stata完成数据预处理

Stata参考资料不多,主要参考了《应用Stata做统计分析》前两章基本操作部分,还有搜索。

待处理的数据为大盘行情与个股行情,从数据库下载到的数据为xls格式。使用

  1. import excel *.xls

可以加载excel文件,当然在加载之前最好改变workspace到所在目录。

数据中一列为“1991-01-01”格式的日期数据,可以使用

  1. generate dated=date(date1,YMD)

把日期同意换算成消逝日期,即相对于1960年元旦的天数。

而date、month、year等函数可以由消逝天数计算出当天的年月日。

导入的数据均为字符串类型,要把字符串转换为数字,要使用

  1. encode x gen(y)

为了完成把数据导入Matlab进行处理,可以新建一个xlsx(Office2007格式)文件,Stata中输入browse查看数据,将数据复制进入Excel,保存。而在Matlab中点击导入数据完成导入,导入之后别忘了重命名。可以导入多个文件。

如果多个dta文件具有相同的列结构,可以采用下列命令合并:

  1. use data1
  2. append use data2
  3. save data12

drop,replace,ls,rename命令也经常用到。

Matlab完成数据处理

Matlab中m文件编程可以完成很多操作,这次新学习到一个命令

  1. try
  2. ...
  3. catch
  4. ...
  5. end

这样如果对多个数据进行处理,单个数据由于不完整等原因出错时可以继续运行下去。

这次操作,用到了polyfit和polyval命令,分别是进行单变量多项式拟合和估计。

程序代码如下:

  1. %company is sorted, need to change to no-sort
  2. %ind=563 company=[681,17902,563] is wrong,stock price's date may out of
  3. %range
  4. load('jr.mat')
  5. [m,n]=size(company);
  6. acum_index=zeros(m,1);
  7. errcompany=zeros(1,3);%error for which can't find stock price
  8. errind=1;
  9. for ind=1:m
  10. arit=zeros(40,1);
  11. com_id=company(ind,1);%company code
  12. com_date=company(ind,2);%company board date
  13. index_date_ind=find(ind399108(:,1)==com_date,1);%pointer to index
  14. if isempty(index_date_ind)
  15. index_date_ind=find(ind399108(:,1)==com_date+1,1);
  16. if isempty(index_date_ind)
  17. index_date_ind=find(ind399108(:,1)==com_date+2,1);
  18. end
  19. end
  20. % index 40befor 40after
  21. index_befor=ind399108(index_date_ind-40:index_date_ind-1,2);
  22. index_after=ind399108(index_date_ind:index_date_ind+39,2);
  23. %calc stock increase
  24. stock_tmp=stock(find(stock(:,1)==com_id,1,'first'):find(stock(:,1)==com_id,1,'last'),:);
  25. stock_tmp_ind=find(stock_tmp(:,2)==com_date,1);
  26. if isempty(stock_tmp_ind)
  27. stock_tmp_ind=find(stock_tmp(:,2)==com_date+1,1);
  28. if isempty(stock_tmp_ind)
  29. stock_tmp_ind=find(stock_tmp(:,2)==com_date+2,1);
  30. end
  31. end
  32. if isempty(stock_tmp_ind)
  33. errcompany(errind,:)=company(ind,:);
  34. errind=errind+1;
  35. acum_index(ind)=inf;
  36. continue
  37. end
  38. try
  39. stock_index_befor=(stock_tmp(stock_tmp_ind-40:stock_tmp_ind-1,2)-stock_tmp(stock_tmp_ind-40-1:stock_tmp_ind-1-1,2))./stock_tmp(stock_tmp_ind-40-1:stock_tmp_ind-1-1,2);
  40. stock_index_after=(stock_tmp(stock_tmp_ind:stock_tmp_ind+39,2)-stock_tmp(stock_tmp_ind-1:stock_tmp_ind+39-1,2))./stock_tmp(stock_tmp_ind-1:stock_tmp_ind+39-1,2);
  41. catch
  42. display(company(ind,:));
  43. display(ind);
  44. acum_index(ind)=inf;
  45. continue;
  46. end
  47. %use index_befor stock_index_befor index_after stock_index_after to
  48. %calc
  49. p=polyfit(index_befor,stock_index_befor,1);
  50. arit=stock_index_after-polyval(p,index_after);
  51. acum_index(ind)=sum(arit);
  52. end
  53. outdata=[company,acum_index];

完成处理后,使用

  1. xlswrite('x.xls',x)

可以把数组x写入xls文件。

之后可以在Stata中把消逝天数转换为日期,给变量重命名,就完成了操作。

R语言

这次工作完成的非常吃力,主要是工具的原因,Stata无法很好的完成循环控制等底层操作,Matlab虽然可以完成所有操作但Matlab中的字符串和日期操作非我所长,R语言作为专业统计语言,完成这些数据处理和计算应该是十分方便的。很期待R的表现。

Stata和Matlab联合处理金融数据的更多相关文章

  1. 转 Visual C++6.0 与matlab联合编程(2)----Visual C++6.0 环境下编译和调试MEX文件

    我的最初想法是利用matlab的mex命令调用C++程序生成动态链接库的,但是测试程序(文中另附)通过了,自己的实际应用程序却没有过.还是把方法贴在这儿,以便自己以后进行整理. http://shij ...

  2. matlab中读取txt数据文件(txt文本文档)

    matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...

  3. Mybatis oracle多表联合查询分页数据重复的问题

    Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...

  4. python爬虫项目-爬取雪球网金融数据(关注、持续更新)

    (一)python金融数据爬虫项目 爬取目标:雪球网(起始url:https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_ ...

  5. 金融数据分析 - 利用 Tushare Pro 平台 获取金融数据

    Tushare金融大数据开放社区 免费提供各类金融数据和区块链数据 , 助力智能投资与创新型投资. 详见 https://tushare.pro/

  6. [转] 利用Matlab提取图片中曲线数据

    原文地址 网易博客 前一段时间看到一篇文章"利用Matlab提取图图片中的数据",觉得思路挺好,遂下载下来研究了一番,发现作者所编写的程序没有考虑原始图片非水 平放置的情况,而实际 ...

  7. R语言实现金融数据的时间序列分析及建模

    R语言实现金融数据的时间序列分析及建模 一 移动平均    移动平均能消除数据中的季节变动和不规则变动.若序列中存在周期变动,则通常以周期为移动平均项数.移动平均法可以通过数据显示出数据长期趋势的变动 ...

  8. Python 数据分析中金融数据的来源库和简单操作

    目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...

  9. 释放DT时代释放金融数据价值,驱动金融商业裂变

    摘要:客户微细分模型上线华为云ModelArts,看如何以AI科技挖掘金融数据价值. 当前信息化浪潮席卷全球,新一轮的科技革命和产业革命推动金融行业发展到全新阶段.人工智能2.0时代,智慧金融方兴未艾 ...

随机推荐

  1. nginx入门手册(一)

    1.nginx进程: nginx会启动多个进程: 一个主进程Master. 几个工作进程worker. 缓存加载器进程 缓存管理器进程 master主要工作: 1. 读取并验正配置信息: 2. 创建. ...

  2. 浅谈JS中的闭包

    浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...

  3. Python读取Yaml文件

    近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...

  4. Greatest common divisor(gcd)

    欧几里得算法求最大公约数 If A = 0 then GCD(A,B)=B, since the GCD(0,B)=B, and we can stop. If B = 0 then GCD(A,B) ...

  5. altium designer Summer09出现的问题解决方案

    在编译原理图时,引脚和连线旁边出现很多红线,提示 error:signal with no driver. 原理图没有加入到Project里. 第一次导入没问题,但是改了个元件的封装,在更新一下(De ...

  6. zoj2112

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 经典的动态区间第K大. 用树状数组套线段树. 对原数组建一个树 ...

  7. SVN 一次性提交多个目录中文件

    情况一:将项目中未加入版本控制的文件提交到版本库. 在使用WINDOW下的SVN客户端工具时,在提交一个项目的文件时,如果有未加入版本库的文件,这时可以先将未加入的文件选中,然后一起提交. 但在LIN ...

  8. mybatis学习笔记第一讲

    第一步:先配置mybatis配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE confi ...

  9. genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤

    genymotion+Oracle VM VirtualBox + eclipse + appium 脚本运行慢解决步骤 1.lenove 机器启动时按F1 进入bios 设置,设置cpu virtu ...

  10. [原创作品]web网页中的锚点

    因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...