Unit 1 An Introduction to Analytics
最近开始了Edx上The Analytics Edge课程的学习,这个课程主要讲授有关R语言的内容,这里会总结一些重点操作,这一章主要介绍了一些基本操作。
课程地址:
https://www.edx.org/course/the-analytics-edge
Basic Calculations
来看几个基本运算
8*6
48
2^16
65536
Variables
先定义几个变量
SquareRoot2 = sqrt(2)
SquareRoot2
1.4142135623731
HoursYear <- 365*24
HoursYear
8760
ls()操作可以看到有哪些变量。
ls()
‘HoursYear’ ‘SquareRoot2’
rm可以删除变量。
rm(HoursYear)
Vectors
R中构建数组的方式是使用c(1,2)这样的形式,注意R中数组的索引从1开始
array = c(2,3,5,8,13)
array[1]
2
还有一种构建数组的方式是seq(0,100,2),类似于Python中的range(0,100,2),不同之处在于seq是包括首尾元素的。
Sequence = seq(0,100,2)
Data Frame
这里来看R中非常重要的数据结构:Data Frame,先构造一个Data Frame
Country = c("Brazil", "China", "India","Switzerland","USA")
LifeExpectancy = c(74,76,65,83,79)
CountryData = data.frame(Country, LifeExpectancy)
CountryData
Country | LifeExpectancy |
---|---|
Brazil | 74 |
China | 76 |
India | 65 |
Switzerland | 83 |
USA | 79 |
查看Data Frame中某一列的方式是使用$符号。
CountryData$Country
也可以利用Data Frame$a = b的形式增加一列。
CountryData$Population = c(199000,1390000,1240000,7997,318000)
CountryData
Data Frame还支持两个Data Frame的按行拼接的操作,利用rbind函数即可。
Country = c("Australia","Greece")
LifeExpectancy = c(82,81)
Population = c(23050,11125)
NewCountryData = data.frame(Country, LifeExpectancy, Population)
NewCountryData
利用rbind将CountryData,NewCountryData合并。
AllCountryData = rbind(CountryData, NewCountryData)
AllCountryData
Change Directory
我们来看如何改变目录以及显示自己所在的目录。
先看显示自己所在的目录。
getwd()
‘E:/The Analytics Edge’
再看如何改变目录。
setwd("E:\\The Analytics Edge\\Unit1 An Introduction to Analytics")
setwd操作非常重要,改变目录后就可以直接读取该目录下的文件了。
Loading csv files
可以利用read.csv读取csv文件,读取的数据存入Data Frame中
WHO = read.csv("WHO.csv")
利用str以及summary来看WHO中的基本信息。
str(WHO)
'data.frame': 194 obs. of 13 variables:
$ Country : Factor w/ 194 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Region : Factor w/ 6 levels "Africa","Americas",..: 3 4 1 4 1 2 2 4 6 4 ...
$ Population : int 29825 3162 38482 78 20821 89 41087 2969 23050 8464 ...
$ Under15 : num 47.4 21.3 27.4 15.2 47.6 ...
$ Over60 : num 3.82 14.93 7.17 22.86 3.84 ...
$ FertilityRate : num 5.4 1.75 2.83 NA 6.1 2.12 2.2 1.74 1.89 1.44 ...
$ LifeExpectancy : int 60 74 73 82 51 75 76 71 82 81 ...
$ ChildMortality : num 98.5 16.7 20 3.2 163.5 ...
$ CellularSubscribers : num 54.3 96.4 99 75.5 48.4 ...
$ LiteracyRate : num NA NA NA NA 70.1 99 97.8 99.6 NA NA ...
$ GNI : num 1140 8820 8310 NA 5230 ...
$ PrimarySchoolEnrollmentMale : num NA NA 98.2 78.4 93.1 91.1 NA NA 96.9 NA ...
$ PrimarySchoolEnrollmentFemale: num NA NA 96.4 79.4 78.2 84.5 NA NA 97.5 NA ...
summary(WHO)
Country Region Population
Afghanistan : 1 Africa :46 Min. : 1
Albania : 1 Americas :35 1st Qu.: 1696
Algeria : 1 Eastern Mediterranean:22 Median : 7790
Andorra : 1 Europe :53 Mean : 36360
Angola : 1 South-East Asia :11 3rd Qu.: 24535
Antigua and Barbuda: 1 Western Pacific :27 Max. :1390000
(Other) :188
Under15 Over60 FertilityRate LifeExpectancy
Min. :13.12 Min. : 0.81 Min. :1.260 Min. :47.00
1st Qu.:18.72 1st Qu.: 5.20 1st Qu.:1.835 1st Qu.:64.00
Median :28.65 Median : 8.53 Median :2.400 Median :72.50
Mean :28.73 Mean :11.16 Mean :2.941 Mean :70.01
3rd Qu.:37.75 3rd Qu.:16.69 3rd Qu.:3.905 3rd Qu.:76.00
Max. :49.99 Max. :31.92 Max. :7.580 Max. :83.00
NA's :11
ChildMortality CellularSubscribers LiteracyRate GNI
Min. : 2.200 Min. : 2.57 Min. :31.10 Min. : 340
1st Qu.: 8.425 1st Qu.: 63.57 1st Qu.:71.60 1st Qu.: 2335
Median : 18.600 Median : 97.75 Median :91.80 Median : 7870
Mean : 36.149 Mean : 93.64 Mean :83.71 Mean :13321
3rd Qu.: 55.975 3rd Qu.:120.81 3rd Qu.:97.85 3rd Qu.:17558
Max. :181.600 Max. :196.41 Max. :99.80 Max. :86440
NA's :10 NA's :91 NA's :32
PrimarySchoolEnrollmentMale PrimarySchoolEnrollmentFemale
Min. : 37.20 Min. : 32.50
1st Qu.: 87.70 1st Qu.: 87.30
Median : 94.70 Median : 95.10
Mean : 90.85 Mean : 89.63
3rd Qu.: 98.10 3rd Qu.: 97.90
Max. :100.00 Max. :100.00
NA's :93 NA's :93
Basic data analysis
利用sd(标准差),mean以及summary可以得到一些基本统计量。
mean(WHO$Under15)
28.7324226804124
sd(WHO$Under15)
10.5345733199238
summary(WHO$Under15)
Min. 1st Qu. Median Mean 3rd Qu. Max.
13.12 18.72 28.65 28.73 37.75 49.99
which.min, which.max函数可以得到最小值以及最大值对应的索引。
which.min(WHO$Under15)
WHO$Country[86]
86
Japan
which.max(WHO$Under15)
WHO$Country[124]
124
Niger
Subsetting
利用subset可以获取Data Frame中部分数据。
Outliers = subset(WHO, GNI > 10000 & FertilityRate > 2.5)
nrow(Outliers)
7
上述nrow函数计算Data Frame的行数。
还可以利用Data Frame[c(a, b, c)]的方式取部分数据。
Outliers[c("Country","GNI","FertilityRate")]
Plot
R中的作图函数非常方便,我们分别看下。
折线图:
plot(WHO$GNI, WHO$FertilityRate)
箱线图:
boxplot(WHO$LifeExpectancy ~ WHO$Region, xlab = "Country", ylab = "Life Expectancy", main = "Life Expectancy of Countries by Region")
xlab给横坐标的名字,ylab给出纵坐标的名字,main给出图像的名字。
直方图:
hist(WHO$CellularSubscribers)
Summary Tables
table函数可以对数据进行总结,非常方便。
table(AllCountryData$LifeExpectancy, AllCountryData$Country)
Brazil China India Switzerland USA Australia Greece
65 0 0 1 0 0 0 0
74 1 0 0 0 0 0 0
76 0 1 0 0 0 0 0
79 0 0 0 0 1 0 0
81 0 0 0 0 0 0 1
82 0 0 0 0 0 1 0
83 0 0 0 1 0 0 0
tapply函数会产生交叉表。
tapply(WHO$LiteracyRate, WHO$Region, min, na.rm=TRUE)
min的意思是使用的函数,可以换成mean,max等等,na.rm=TRUE表示删除缺失值。
Others
as.numeric函数可以把TRUE,FALSE转化为0,1
data = Outliers$GNI > 30
as.numeric(data)
sort函数可以排序
sort(table(Outliers$GNI))
11250 13740 14510 14550 24700 25620 27110
1 1 1 1 1 1 1
as.Date函数可以把数据转化为日期类型,这个函数出现在作业部分,使用方法如下。
Boeing$Date = as.Date(Boeing$Date, "%m/%d/%y")