Machine Learning for hackers读书笔记(一)使用R语言

时间:2022-01-08 01:29:42

#使用数据:UFO数据

#读入数据,该文件以制表符分隔,因此使用read.delim,参数sep设置分隔符为\t

#所有的read函数都把string读成factor类型,这个类型用于表示分类变量,因此将stringsAsFactors设置为False

#header=F表示文件中并没有表头

#na.string='',表示把空元素设置为R中的特殊值NA,即将所有空元素读成NA

ufo<-read.delim('ufo_awesome.tsv',sep='\t',stringsAsFactors=F,header=F,na.string='')

#head(data):查看数据前6行

#tail(data):查看数据后6行

head(ufo)

Machine Learning for hackers读书笔记(一)使用R语言

Machine Learning for hackers读书笔记(一)使用R语言
Machine Learning for hackers读书笔记(一)使用R语言

#添加表头

names(ufo) <- c("DateOccurred", "DateReported","Location", "ShortDescription","Duration","LongDescription")

#由上图看出日期格式为YYYYMMDD,将其转换为R语言中的日期格式

ufo$DateOccurred<-as.Date(ufo$DateOccurred,format='%Y%M%D')

#错误于strptime(x, format, tz = "GMT") : 输入字符串太长,原因是有些日期字符串大于8个字符,因此需要进行处理

#用以下代码查看日期长度不为8的

#nchar函数表示得出字符串长度

head(ufo[which(nchar(ufo$DateOccurred)!=8|nchar(ufo$DateReported)!=8),1])

Machine Learning for hackers读书笔记(一)使用R语言

Machine Learning for hackers读书笔记(一)使用R语言

good.rows <- ifelse(nchar(ufo$DateOccurred) != 8 | nchar(ufo$DateReported) != 8,FALSE,TRUE)

length(which(!good.rows))

#结果有731条记录(中文书是371条,应该是写错了)的日期不是8个字符,可以直接从数据集中删去

ufo <- ufo[good.rows, ]

#接着将所有日期字符串转为R语言中的日期型

ufo$DateOccurred <- as.Date(ufo$DateOccurred, format = "%Y%m%d")

ufo$DateReported <- as.Date(ufo$DateReported, format = "%Y%m%d")

#接下来要清理目击地点数据,原有数据是City,State,将其拆分为两列

#定义一个函数,如果格式不正确返回NA,NA,如果正确返回city state列表

#gsub函数用于替换

get.location <- function(l)
{
split.location <- tryCatch(strsplit(l, ",")[[1]],
error = function(e) return(c(NA, NA)))
clean.location <- gsub("^ ","",split.location)
if (length(clean.location) > 2)
{
return(c(NA,NA))
}
else
{
return(clean.location)
}
}

#接着用lapply函数对ufo的Location每一个记录都采用get.location函数进行处理,结果保存到city.state

city.state <- lapply(ufo$Location, get.location)

Machine Learning for hackers读书笔记(一)使用R语言

#要把城市和州信息作为不同的两列加入数据框中,需要将LIST转为Matrix

#do.call函数表示对city.state的每一条记录都按行合并转换为matrix

location.matrix <- do.call(rbind, city.state)

Machine Learning for hackers读书笔记(一)使用R语言

#用transform函数为ufo添加了两个列

ufo <- transform(ufo,USCity = location.matrix[, 1],USState = location.matrix[, 2],stringsAsFactors = FALSE)

#state.abb是美国州的大写,将不是美国州名的全部转为NA

ufo$USState <- state.abb[match(ufo$USState, state.abb)]

#只保留美国州名的地点的记录,将记录存入ufo.us

ufo.us <- subset(ufo, !is.na(USState))

#观察一下目击时间,从1400年到2010年

summary(ufo.us$DateOccurred)

#画一下直方图看看目击时间分布

quick.hist <- ggplot(ufo.us, aes(x = DateOccurred)) +geom_histogram() + scale_x_date(breaks = "50 years")

print(quick.hist)

#如下图,发现大部分都发生在1960-2010年,我们只关注1990-2010数据

Machine Learning for hackers读书笔记(一)使用R语言

#只取1990年后的数据

ufo.us <- subset(ufo.us, DateOccurred >= as.Date("1990-01-01"))

#再画一次直方图

Machine Learning for hackers读书笔记(一)使用R语言

#我们的目的是发现目击事件的周期性规律,应该按一定周期进行聚合,比如按月聚合,因此需要统计每州每年月的UFO目击次数

#以下代码给ufo.us增加一个新的列是YearMonth,其中提取出目击时间的年和月,strftime是将字符串转成日期型

ufo.us$YearMonth <- strftime(ufo.us$DateOccurred, format = "%Y-%m")

#使用ddply函数,对ufo.us,按USState和YearMonth进行聚合

sightings.counts <- ddply(ufo.us, .(USState,YearMonth), nrow)

Machine Learning for hackers读书笔记(一)使用R语言

#没有1990年2月和4月,因此需要把目击次数为0的月份也加进去

#先建一个包括所有月份的时间序列数据到date.range

date.range <- seq.Date(from = as.Date(min(ufo.us$DateOccurred)),to = as.Date(max(ufo.us$DateOccurred)),by = "month")

#然后转为年-月的格式到date.strings

date.strings <- strftime(date.range, "%Y-%m")

#接着需要建一个包含所有年月和州的数据框

states.dates <- lapply(state.abb, function(s) cbind(s, date.strings))

states.dates <- data.frame(do.call(rbind, states.dates),stringsAsFactors = FALSE)

Machine Learning for hackers读书笔记(一)使用R语言

#合并数据all = TRUE表示没匹配的也要包含进来并且设为NA

all.sightings <- merge(states.dates,sightings.counts,by.x = c("s", "date.strings"),by.y = c("USState", "YearMonth"),all = TRUE)

Machine Learning for hackers读书笔记(一)使用R语言

names(all.sightings) <- c("State", "YearMonth", "Sightings")

#将为NA的全部设为0

all.sightings$Sightings[is.na(all.sightings$Sightings)] <- 0

#将date.strings转为日期型

all.sightings$YearMonth <- as.Date(rep(date.range, length(state.abb)))

#将州名转换为分类变量

all.sightings$State <- as.factor(all.sightings$State)

#画图,geom_line表示曲线图,facet_wrap表示按State分类变量,每个因子画一个图,因为有50个州,规定10行5列.

#theme_bw表示用白色背景和黑色网格线画图

state.plot <- ggplot(all.sightings, aes(x = YearMonth,y = Sightings)) +
geom_line(aes(color = "darkblue")) +
facet_wrap(~State, nrow = 10, ncol = 5) +
theme_bw() +
scale_color_manual(values = c("darkblue" = "darkblue"), guide = "none") +
scale_x_date(breaks = "5 years") +
xlab("Years") +
ylab("Number of Sightings") +
ggtitle("Number of UFO sightings by Month-Year and U.S. State (1990-2010)")

Machine Learning for hackers读书笔记(一)使用R语言

Machine Learning for hackers读书笔记(一)使用R语言的更多相关文章

  1. Machine Learning for hackers读书笔记&lpar;七&rpar;优化:密码破译

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

  2. Machine Learning for hackers读书笔记&lpar;六&rpar;正则化:文本回归

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

  3. Machine Learning for hackers读书笔记&lpar;三&rpar;分类:垃圾邮件过滤

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

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

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

  5. Machine Learning for hackers读书笔记&lpar;十二&rpar;模型比较

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

  6. Machine Learning for hackers读书笔记&lpar;十&rpar;KNN:推荐系统

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

  7. Machine Learning for hackers读书笔记&lpar;九&rpar;MDS:可视化地研究参*相似性

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

  8. Machine Learning for hackers读书笔记&lpar;八&rpar;PCA:构建股票市场指数

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

  9. Machine Learning for hackers读书笔记&lpar;五&rpar;回归模型:预测网页访问量

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

随机推荐

  1. React-Native需要css和布局-20160902

    import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, } from 'reac ...

  2. C&num; 数字带逗号(千分位符、金钱千分位字符)

    首先要明确带了逗号之后  数字就变成字符串了 ,不再是数字了. 昨天做项目的时候需要格式化数字变成带逗号的,本来打算自己写个方法的,后来时间太紧了,就打算从网上查个,查来查去都是要对字符串的位进行操作 ...

  3. 从零开始设计SOA框架(三):请求参数的加密方式

    第二章中说明请求参数有哪些,主要是公共参数和业务参数,服务端需要对参数进行效验,已验证请求参数的合法性 参数效验前先解释下以下参数: 1.参数键值对:包括公共参数.业务参数      1.公共参数:按 ...

  4. mongoDB中的连接池(转载)

    一.mongoDB中的连接池 刚上手MongoDB,在做应用时,受以前使用关系型数据库的影响,会考虑数据库连接池的问题! 关系型数据库中,我们做连接池无非就是事先建立好N个连接(connection) ...

  5. ThinkPHP第二十天&lpar;getField用法、常用管理员表结构、树形结构前小图标CSS&rpar;

    1.getField($fields,$sepa=null) A:当$fields为1个字段,$sepa=null的时候,返回一个符合条件的记录的字段. B:如果要取得所有符合条件记录字段,需要$se ...

  6. Xamarin之 环境错误集锦

    错误信息:   connection of the layout renderer failed.this may be caused by a misconfiguration of java .p ...

  7. ios开发之滑动长图截全屏应用

    最近做项目遇到要求截取图片长度超出手机屏幕,即可滑动的长图截屏,这里简单说一下解决思路,下面附带Demo下载地址. ,当我们要截全屏时,将滑动视图的frame以及偏移量记录下来,然后将滑动视图偏移量设 ...

  8. 简述jpg、gif、png-8、png-24的区别,分别使用场景

    gif.jpg.png格式的图片在网站制作中的区别 Gif 格式特点: 1.透明性:gif是一种布尔透明类型,即它可以使全透明,也可是全不透明,但是它并没有半透明的(alpha透明). 2.动画:gi ...

  9. 深入理解ES6之—符号与符号属性

    在js已有的基本类型(字符串,数值,布尔型,null和undefined)之外,es6引入了一种新的基本类型:==符号(Symbol)==.符号起初被设计用于创建对象私有成员. 符号没有字面量形式,你 ...

  10. android查看源码的时候看不了

    原因:未关联android中jar包源码 解决方案:导入sdk---->>resource---->>api 这样就可以在代码中查看源码了.