R语言 使用R进行数据分析

R语言 使用R进行数据分析

数据分析 是数据分析的一个子集,它是一个必须明确目标、收集相关数据、预处理数据、进行分析(理解数据、探索见解)、然后将其可视化的过程。最后一步可视化很重要,可以让人们了解公司正在发生什么。

数据分析中涉及的步骤

使用R进行数据分析

数据分析的过程将包括给定问题陈述的所有这些步骤。例子–分析正在迅速售罄的产品和零售店的常客的细节。

  • 界定问题陈述– 了解目标,以及需要做什么。在这种情况下,我们的问题陈述是–“产品基本售罄,以及经常光顾该商店的顾客名单”。
  • 收集数据 – 不是所有公司的数据都是必要的,根据问题了解相关数据。这里需要的列是产品ID、客户ID和访问日期。
  • 预处理– 在进行分析之前,清洗数据是必须的,把它放在一个结构化的格式中。
  1. 去除离群值(噪音数据)。
  2. 去除列中的空值或不相关的值。(将空值改为该列的平均值)。
  3. 如果有任何缺失的数据,要么忽略该元组,要么用该列的平均值来填补。

使用泰坦尼克号数据集的数据分析

你可以从这里下载泰坦尼克号数据集(它包含泰坦尼克号上真实乘客的数据)。将数据集保存在当前工作目录下,现在我们将开始分析(了解我们的数据)。

titanic=read.csv("train.csv")
head(titanic)

输出

  PassengerId Survived Pclass                                         Name    Sex
1         892        0      3                             Kelly, Mr. James   male
2         893        1      3             Wilkes, Mrs. James (Ellen Needs) female
3         894        0      2                    Myles, Mr. Thomas Francis   male
4         895        0      3                             Wirz, Mr. Albert   male
5         896        1      3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female
6         897        0      3                   Svensson, Mr. Johan Cervin   male
   Age SibSp Parch  Ticket    Fare Cabin Embarked
1 34.5     0     0  330911  7.8292              Q
2 47.0     1     0  363272  7.0000              S
3 62.0     0     0  240276  9.6875              Q
4 27.0     0     0  315154  8.6625              S
5 22.0     1     1 3101298 12.2875              S
6 14.0     0     0    7538  9.2250              S

我们的数据集包含所有的列,如乘客的姓名、年龄、性别和他们所乘坐的舱位,他们是否存活等。为了了解每一列的类别(数据类型),可以使用 sapply() 方法。

sapply(train, class)

输出

PassengerId    Survived      Pclass        Name         Sex         Age 
  "integer"   "integer"   "integer" "character" "character"   "numeric" 
      SibSp       Parch      Ticket        Fare       Cabin    Embarked 
  "integer"   "integer" "character"   "numeric" "character" "character" 

我们可以用 factor() 函数将 “survived “这个值分为 “dead “到0和 “live “到1。

trainSurvived=as.factor(trainSurvived)
trainSex=as.factor(trainSex)
sapply(train, class)

输出

PassengerId    Survived      Pclass        Name         Sex         Age 
  "integer"    "factor"   "integer" "character"    "factor"   "numeric" 
      SibSp       Parch      Ticket        Fare       Cabin    Embarked 
  "integer"   "integer" "character"   "numeric" "character" "character" 

我们使用所有列、它们的值和数据类型的摘要来分析数据,summary()可以用于这个目的。

summary(train)

输出

  PassengerId     Survived     Pclass          Name               Sex     
 Min.   : 892.0   0:266    Min.   :1.000   Length:418         female:152  
 1st Qu.: 996.2   1:152    1st Qu.:1.000   Class :character   male  :266  
 Median :1100.5            Median :3.000   Mode  :character               
 Mean   :1100.5            Mean   :2.266                                  
 3rd Qu.:1204.8            3rd Qu.:3.000                                  
 Max.   :1309.0            Max.   :3.000                                  

      Age            SibSp            Parch           Ticket         
 Min.   : 0.17   Min.   :0.0000   Min.   :0.0000   Length:418        
 1st Qu.:21.00   1st Qu.:0.0000   1st Qu.:0.0000   Class :character  
 Median :27.00   Median :0.0000   Median :0.0000   Mode  :character  
 Mean   :30.27   Mean   :0.4474   Mean   :0.3923                     
 3rd Qu.:39.00   3rd Qu.:1.0000   3rd Qu.:0.0000                     
 Max.   :76.00   Max.   :8.0000   Max.   :9.0000                     
 NA's   :86                                                          
      Fare            Cabin             Embarked        
 Min.   :  0.000   Length:418         Length:418        
 1st Qu.:  7.896   Class :character   Class :character  
 Median : 14.454   Mode  :character   Mode  :character  
 Mean   : 35.627                                        
 3rd Qu.: 31.500                                        
 Max.   :512.329                                        
 NA's   :1

从上述总结中,我们可以提取以下观察结果。

  • 乘客总数:891人
  • 存活下来的总人数。 342
  • 死亡的总人数:549人
  • 泰坦尼克号中的男性人数:577人
  • 泰坦尼克号上的女性人数:314人
  • 泰坦尼克号上所有人员的最大年龄:80岁
  • 年龄中位数:28

在分析之前,数据的预处理是很重要的,所以必须检查并删除空值。

sum(is.na(train))

输出

177
dropnull_train=train[rowSums(is.na(train))<=0,]
  • dropnull_train只包含631行,因为( 数据集中的总行数(808)-空值行数(177)=剩余行数(631) )
  • 现在我们将把幸存和死亡的人从631行中划分为一个单独的列表。
survivedlist=dropnull_train[dropnull_trainSurvived == 1,]
notsurvivedlist=dropnull_train[dropnull_trainSurvived == 0,]

现在我们可以用柱状图、直方图和饼状图来直观地显示死亡和幸存的男性和女性的数量。

mytable <- table(titanic$Survived)
lbls <- paste(names(mytable), "\n", mytable, sep="")
pie(mytable,
    labels = lbls,
    main="Pie Chart of Survived column data\n (with sample sizes)")

输出

使用R进行数据分析

从上面的饼图中,我们可以肯定地说,在目标/生存列中存在着数据不平衡的现象。

hist(survivedlist$Age,
     xlab="gender",
     ylab="frequency")

输出

使用R进行数据分析

现在让我们画一个柱状图,以直观地显示在泰坦尼克号上的男性和女性的数量。

barplot(table(notsurvivedlist$Sex),
        xlab="gender",
        ylab="frequency")

输出。

使用R进行数据分析

从上面的柱状图中,我们可以分析出有近350名男性和50名女性在泰坦尼克号中没有幸存下来。

temp<-density(table(titanic$Fare))
plot(temp, type="n",
     main="Fare charged from Passengers")
polygon(temp, col="lightgray",
        border="gray")

输出

使用R进行数据分析

在这里我们可以观察到,有一些乘客的收费非常高。因此,这些数值会影响我们的分析,因为它们是离群值。让我们用boxplot来确认他们的存在。

boxplot(titanic$Fare,
        main="Fare charged from passengers")

输出

使用R进行数据分析

当然,在这个数据集中有一些极端的离群值存在。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程