library('foreign')

library('ggplot2')

data.dir <- file.path('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\09-MDS\\data\\roll_call')

data.files <- list.files(data.dir)

rollcall.data <- lapply(data.files,function(f) {  read.dta(file.path(data.dir, f), convert.factors = FALSE) })

#看一下数据情况,103行,647列

#每一行对应一个议员,包括个人信息及投票结果

dim(rollcall.data[[1]])

rollcall.simplified <- function(df)

{

#99的很少投票,干脆删掉

no.pres <- subset(df, state < 99)

#10列后才是投票数据

for(i in 10:ncol(no.pres))

{

#有10种投票类型,分为三组,赞成全放一起,反对全放一起,无效全放一起,>6的是无效,1~3是赞成,4~6是反对票

no.pres[,i] <- ifelse(no.pres[,i] > 6, 0, no.pres[,i])

no.pres[,i] <- ifelse(no.pres[,i] > 0 & no.pres[,i] < 4, 1, no.pres[,i])

no.pres[,i] <- ifelse(no.pres[,i] > 1, -1, no.pres[,i])

}

return(as.matrix(no.pres[,10:ncol(no.pres)]))

}

rollcall.simple <- lapply(rollcall.data, rollcall.simplified)

#来一个矩离矩阵

rollcall.dist <- lapply(rollcall.simple, function(m) dist(m %*% t(m)))

rollcall.mds <- lapply(rollcall.dist,function(d) as.data.frame((cmdscale(d, k = 2)) * -1))

congresses <- 101:111

for(i in 1:length(rollcall.mds))

{

names(rollcall.mds[[i]]) <- c("x", "y")

congress <- subset(rollcall.data[[i]], state < 99)

congress.names <- sapply(as.character(congress$name),function(n) strsplit(n, "[, ]")[[1]][1])

rollcall.mds[[i]] <- transform(rollcall.mds[[i]], name = congress.names,party = as.factor(congress$party),congress = congresses[i])

}

cong.110 <- rollcall.mds[[9]]

base.110 <- ggplot(cong.110, aes(x = x, y = y)) +  scale_size(range = c(2,2), guide = 'none') +  scale_alpha(guide = 'none') +  theme_bw() +

theme(axis.ticks = element_blank(),        axis.text.x = element_blank(),        axis.text.y = element_blank(),        panel.grid.major = element_blank()) +

ggtitle("Roll Call Vote MDS Clustering for 110th U.S. Senate") +  xlab("") +  ylab("") +  scale_shape(name = "Party", breaks = c("100", "200", "328"),

labels = c("Dem.", "Rep.", "Ind."), solid = FALSE) +  scale_color_manual(name = "Party", values = c("100" = "black","200" = "dimgray","328"="grey"),

breaks = c("100", "200", "328"), labels = c("Dem.", "Rep.", "Ind."))

print(base.110 + geom_point(aes(shape = party, alpha = 0.75,  size = 2)))

print(base.110 + geom_text(aes(color = party, alpha = 0.75,  label = cong.110$name, size = 2)))

all.mds <- do.call(rbind, rollcall.mds)

all.plot <- ggplot(all.mds, aes(x = x, y = y)) +

geom_point(aes(shape = party, alpha = 0.75, size = 2)) +

scale_size(range = c(2, 2), guide = 'none') +

scale_alpha(guide = 'none') +

theme_bw() +

theme(axis.ticks = element_blank(),

axis.text.x = element_blank(),

axis.text.y = element_blank(),

panel.grid.major = element_blank()) +

ggtitle("Roll Call Vote MDS Clustering for U.S. Senate (101st - 111th Congress)") +

xlab("") +

ylab("") +

scale_shape(name = "Party",

breaks = c("100", "200", "328"),

labels = c("Dem.", "Rep.", "Ind."),

solid = FALSE) +

facet_wrap(~ congress)

print(all.plot)

Machine Learning for hackers读书笔记(九)MDS:可视化地研究参议员相似性的更多相关文章

  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读书笔记(八)PCA:构建股票市场指数

    library('ggplot2') prices <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\08-PC ...

  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. HDOJ 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  2. Sqli-labs less 51

    Less-51 本关的sql语句为    $sql="SELECT * FROM users ORDER BY '$id'"; 我们此处要进行stacked injection,要 ...

  3. 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)

    Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...

  4. ZOJ 2588 Burning Bridges (tarjan求割边)

    题目链接 题意 : N个点M条边,允许有重边,让你求出割边的数目以及每条割边的编号(编号是输入顺序从1到M). 思路 :tarjan求割边,对于除重边以为中生成树的边(u,v),若满足dfn[u] & ...

  5. WCF分布式开发步步为赢(2)自定义托管宿主WCF解决方案开发配置过程详解

    上一节<WCF分布式框架基础概念>我们介绍了WCF服务的概念和通信框架模型,并给出了基于自定义托管服务的WCF程序的实现代码.考虑到WCF分布式开发项目中关于托管宿主服务配置和客户端添加引 ...

  6. JSON.stringify 函数 (JavaScript)

    在bsrck项目中,使用jQuery.Form.js的ajaxSubmit时,遇到有文件上传的form提交,在firefox和chrome浏览器中测试,报Bad Request的错误,经查代码后发现是 ...

  7. JDBC第一次学习

     JDBC(Java Data Base Connectivity,java数据库连接),由一些类和接口构成的API,它是J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.J ...

  8. 用C语言简单加密解密

    使用char表示的字符型数据,在本质上与我们前面介绍的整型数据并无太大的区别,只是char类型占用的内存字节数更小,能够表示的数据范围更小而已.在使用上,char被专门用来表示C语言的字符集中的各种字 ...

  9. iOS xcode设置

    Xcode build search paths c/c++ 头文件引用问题include <> 引用编译器的类库路径下的头文件include “” 引用工程目录的相对路径的头文件 inc ...

  10. SSIS ->> 通过Checkoints实现SSIS的包重启(Package Restartability Fullfilled By Checkoints)

    Checkpoints是实现SSIS包重载的基础.它的原理是把当前运行环境的配置.变量以及到了包运行到哪一步和哪一步失败这些信息写入到一个文件中.而且有一点很重要,Checkpoint只发生在Cont ...