library('ggplot2')

prices <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\08-PCA\\data\\stock_prices.csv',stringsAsFactors = FALSE)

library('lubridate')

#把日期列转成日期对象

prices <- transform(prices, Date = ymd(Date))

#prices中的数据只有三列,日期,股票名,价格

library('reshape')

#转下格式,矩阵中,每一天是一行,一行中包含了所有股票当天的价格,Date~Stock,行方向是Date列,列方向是Stock列

date.stock.matrix <- cast(prices, Date ~ Stock, value = 'Close')

#以上矩阵有缺失数据,先去prices删除缺失数据,然后重新生成矩阵

prices <- subset(prices, Date != ymd('2002-02-01'))

prices <- subset(prices, Stock != 'DDR')

date.stock.matrix <- cast(prices, Date ~ Stock, value = 'Close')

#做出相关性矩阵

cor.matrix <- cor(date.stock.matrix[, 2:ncol(date.stock.matrix)])

#转成一个数值向量

correlations <- as.numeric(cor.matrix)

#画图

ggplot(data.frame(Correlation = correlations),aes(x = Correlation, fill = 1)) +geom_density() + theme(legend.position = 'none')

#从图上看出,大部分相关性是正数,因此适合使用PCA

pca <- princomp(date.stock.matrix[, 2:ncol(date.stock.matrix)])

#看下pca第一主成分的载荷,并画图

principal.component <- pca$loadings[, 1]

loadings <- as.numeric(principal.component)

ggplot(data.frame(Loading = loadings), aes(x = Loading, fill = 1)) + geom_density() + theme(legend.position = 'none')

#从图上看,几乎全是负数

#预测一下

market.index <- predict(pca)[, 1]

#加载道琼斯指数

dji.prices <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\08-PCA\\data\\DJI.csv', stringsAsFactors = FALSE)

#把日期列转化一下

dji.prices <- transform(dji.prices, Date = ymd(Date))

#只拿一个子集看一下

dji.prices <- subset(dji.prices, Date > ymd('2001-12-31'))

dji.prices <- subset(dji.prices, Date != ymd('2002-02-01'))

#道琼斯数据集中数据好多,只拿收盘价和日期来看一下

dji <- with(dji.prices, rev(Close))

dates <- with(dji.prices, rev(Date))

#弄个数据集,MarketIndex是预测的

comparison <- data.frame(Date = dates, MarketIndex = market.index,DJI = dji)

ggplot(comparison, aes(x = MarketIndex, y = DJI)) +  geom_point() +  geom_smooth(method = 'lm', se = FALSE)

#从图上看,预测值和DJI指数负相关

comparison <- transform(comparison, MarketIndex = -1 * MarketIndex)

ggplot(comparison, aes(x = MarketIndex, y = DJI)) +  geom_point() +  geom_smooth(method = 'lm', se = FALSE)

#comparison有三列,日期,预测值,道琼斯指数

alt.comparison <- melt(comparison, id.vars = 'Date')

#melt后alt.comparison有三列,日期,类别(预测/道琼斯),价格

names(alt.comparison) <- c('Date', 'Index', 'Price')

ggplot(alt.comparison,aes(x = Date, y = Price, group = Index, color = Index)) +  geom_point() +  geom_line()

#图上看,预测值太低了,没法比对

#用scale把两部分数值放在同一刻度下

comparison <- transform(comparison, MarketIndex = scale(MarketIndex))

comparison <- transform(comparison, DJI = scale(DJI))

#重新melt

alt.comparison <- melt(comparison, id.vars = 'Date')

names(alt.comparison) <- c('Date', 'Index', 'Price')

#重新画图

ggplot(alt.comparison, aes(x = Date, y = Price, group = Index, color = Index)) +  geom_point() +  geom_line()

Machine Learning for hackers读书笔记(八)PCA:构建股票市场指数的更多相关文章

  1. Machine Learning for hackers读书笔记(七)优化:密码破译

    #凯撒密码:将每一个字母替换为字母表中下一位字母,比如a变成b. english.letters <- c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ...

  2. Machine Learning for hackers读书笔记(六)正则化:文本回归

    data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks < ...

  3. Machine Learning for hackers读书笔记(三)分类:垃圾邮件过滤

    #定义函数,打开每一个文件,找到空行,将空行后的文本返回为一个字符串向量,该向量只有一个元素,就是空行之后的所有文本拼接之后的字符串 #很多邮件都包含了非ASCII字符,因此设为latin1就可以读取 ...

  4. Machine Learning for hackers读书笔记_一句很重要的话

    为了培养一个机器学习领域专家那样的直觉,最好的办法就是,对你遇到的每一个机器学习问题,把所有的算法试个遍,直到有一天,你凭直觉就知道某些算法行不通.

  5. Machine Learning for hackers读书笔记(十二)模型比较

    library('ggplot2')df <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\12-Model_C ...

  6. Machine Learning for hackers读书笔记(十)KNN:推荐系统

    #一,自己写KNN df<-read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\10-Recommendations\\ ...

  7. Machine Learning for hackers读书笔记(九)MDS:可视化地研究参议员相似性

    library('foreign') library('ggplot2') data.dir <- file.path('G:\\dataguru\\ML_for_Hackers\\ML_for ...

  8. Machine Learning for hackers读书笔记(五)回归模型:预测网页访问量

    线性回归函数 model<-lm(Weight~Height,data=?) coef(model):得到回归直线的截距 predict(model):预测 residuals(model):残 ...

  9. Machine Learning for hackers读书笔记(四)排序:智能收件箱

    #数据集来源http://spamassassin.apache.org/publiccorpus/ #加载数据 library(tm)library(ggplot2)data.path<-'F ...

随机推荐

  1. Hadoop的RPC框架介绍

    为什么会引入RPC: RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.当我们讨论HDFS的,通信可能发生在: Client-NameNode之间,其中NameNod ...

  2. JS数据类型的理解(猜测)

    Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...

  3. UglifyJS--javascript代码压缩使用指南{转}

    在线测试地址 http://lisperator.net/uglifyjs/下面都是基于linux系统的安装使用.UglifyJS是遵循了CommonJS规范写成的,可以在支持CommonJS模块系统 ...

  4. ASP 中调用函数关于Call使用注意的问题

    Function TestFun(Tstr) TStr = "Fun2" End Function Sub TestSub(TStr) Tstr = "Sub2" ...

  5. light oj 1068 - Investigation 数位DP

    思路:典型的数位DP!!! dp[i][j][k]:第i位,对mod取余为j,数字和对mod取余为k. 注意:由于32位数字和小于95,所以当k>=95时,结果肯定为0. 这样数组就可以开小点, ...

  6. 简易解说拉格朗日对偶(Lagrange duality)(转载)

    引言:尝试用最简单易懂的描述解释清楚机器学习中会用到的拉格朗日对偶性知识,非科班出身,如有数学专业博友,望多提意见! 1.原始问题 假设是定义在上的连续可微函数(为什么要求连续可微呢,后面再说,这里不 ...

  7. 李洪强iOS开发之下载

    // // //  LHQDownLoader.m //  A21 - 李洪强 - 下载 // //  Created by vic fan on 16/7/3. //  Copyright © 20 ...

  8. 欧拉工程第55题:Lychrel numbers

    package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...

  9. 【PSR规范专题(2)】PSR-1 基本代码规范

    转载自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-1-basic-coding-standard-cn.md 基本代码规范 本篇规范制定 ...

  10. Jlink更新新固件USB连接不上的问题

    采购新买了一个jlink,在调试过程中发现不能使用.拿到手后对jink上电以后,发现灯不亮,到网上查了一下估计是固件损坏的原因,经过一番摸索从新更新了固件,然后可以正常使用了,下面说一下步骤: 新版的 ...