本文概述
- 介绍
- 1.设置一个皮尤账户
- 2.将数据加载到R中
- 3.使用整洁的工具进行探索性数据分析
- 4.使用推断包进行整洁的假设检验
- 总结
介绍 皮尤研究中心(Pew Research Center)是总部位于华盛顿特区的无党派事实坦克。自该中心于2004年成立以来, 它已经在多个领域进行了高质量的研究。中华人民共和国目前专注于九个领域:
- 美国政治与政策
- 新闻与媒体
- 互联网与技术
- 科学与社会
- 宗教与公共生活
- 西班牙裔趋势
- 全球态度与趋势
- 社会和人口趋势
- 研究方法论
在本教程中, 我们将介绍如何:
- 设置一个皮尤账户, 以便下载数据集
- 将数据加载到R中
- 使用整洁的工具进行探索性数据分析
- 使用推断包进行整洁的假设检验
1.设置一个皮尤账户 为了从Pew下载原始数据集, 必须注册一个Pew帐户。值得庆幸的是, 这非常简单。为此, 请导航至http://www.pewinternet.org/datasets。你将为新用户看到以下页面:
文章图片
继续并单击链接以注册一个帐户, 并提供必要的信息以注册Pew帐户。不用注册帐户, 让我们下载数据集并将其读入R!
2.将数据加载到R中 在本教程中, 我们将探索“ 互联网与技术” 部分的2018年1月3日至10日-核心趋势调查。下载数据集时, 将获得以下文件夹:
文章图片
该文件夹包含几种格式的调查数据。就本教程而言, 我们对.csv文件和包含有关调查问卷信息的word文档感兴趣。让我们将数据读入R:
#First, load the following packages (if you don't have them, use the install.packages() function)
library(tidyverse)
library(infer)
#Next, set your working directory to where your Pew data lives, and read it into R
setwd("~/<
Your File Path Here>
/January 3-10, 2018 - Core Trends Survey")
jan_core_trends_survey <
- read_csv("January 3-10, 2018 - Core Trends Survey - CSV.csv")
3.使用整洁的工具进行探索性数据分析 现在我们已经将数据读入R中, 让我们对其进行一些检查:
nrow(jan_core_trends_survey)
length(jan_core_trends_survey)
## [1] 2002
length(jan_core_trends_survey)
## [1] 70
该数据集由2002个观测值组成, 每个观测值都有70个变量。那是大量的变量。现在可能是时候查阅问卷调查表了, 以便更好地了解此调查中记录的数据类型。这是一次电话意见调查, 其中向受访者询问了有关其技术使用和技术观点的一系列问题。还询问了其他有关获取数据的问题, 例如年龄和受教育程度。在问卷中, 提供了与问题相对应的列的名称。例如, 对以下问题的答案:” 你是否至少偶尔使用互联网或电子邮件?” 存储在eminuse列中。让我们看看它是什么样的:
#what values are stored in the eminuse column?
unique(jan_core_trends_survey$eminuse)
## [1] 1 2 8
#first 10 values of age column
head(jan_core_trends_survey$age)
## [1] 33 76 99 60 55 58
好吧, 这个年龄看起来像我们期望的那样, 但是eminuse列中的值代表什么?
查看调查表, 我们发现有一个对应于值的键, 这些值代表它们所代表的答案:
- 1 =是
- 2 =否
- 8 =(VOL。)不知道
- 9 =(音量)拒绝
ggplot(jan_core_trends_survey, aes(age)) +
geom_histogram(bins = 20)
文章图片
数据集中的年龄分布似乎偏向左侧。考虑总人口中的年龄分布时, 这有意义吗?是!在给定的时间, 较高的人口比例是年轻人, 这与我们上面的直方图一致。
继续前进, 有一系列有趣的列标记为web1a-web1h(例如, web1a, web1b等), 代表受访者对以下问题的回答:” 请告诉我你是否在线使用过以下任何社交媒体网站或手机上。” 哪里:
- web1a = Twitter
- web1b = Instagram
- web1c = Facebook
- web1d = Snapchat
avg_user_ages <
- function(df, group, var) {
#this step is necessary for tidy evaluation
group <
- enquo(group)
var <
- enquo(var)
df %>
%
select(!!group, !!var) %>
%
## we are only looking for 1 (user), or 2 (non-user)
filter(!!group == 1 | !!group == 2) %>
%
group_by(!!group) %>
%
summarize(avg_age = mean(!!var))
}
你可能不熟悉此函数中的某些语法。这是因为dplyr函数使用整洁的评估。在这里可以找到有关阅读更多有关整洁评估工作原理的优秀文档。
使用此功能, 我们看到:
twitter_age <
- avg_user_ages(jan_core_trends_survey, web1a, age)twitter_age
## # A tibble: 2 x 2
##web1a avg_age
##<
int>
<
dbl>
## 1143.3
## 2253.7
instagram_age <
- avg_user_ages(jan_core_trends_survey, web1b, age)instagram_age
## # A tibble: 2 x 2
##web1b avg_age
##<
int>
<
dbl>
## 1140.9
## 2256.2
facebook_age <
- avg_user_ages(jan_core_trends_survey, web1c, age)facebook_age
## # A tibble: 2 x 2
##web1c avg_age
##<
int>
<
dbl>
## 1148.0
## 2258.3
snapchat_age <
- avg_user_ages(jan_core_trends_survey, web1d, age)snapchat_age
## # A tibble: 2 x 2
##web1d avg_age
##<
int>
<
dbl>
## 1135.7
## 2255.9
有趣!也许正如预期的那样, 所有四个平台的用户的平均年龄都大大低于非用户的年龄。对于Snapchat, 平均值相差20年!!
我们可以使用ggplot可视化年龄和Snapchat使用率之间的关系:
#making a dataframe of snapchat users
snap_df <
- jan_core_trends_survey %>
%
filter(web1d == 1 | web1d == 2)#converting the column to a factor, and renaming the factors
snap_df$web1d <
- as.factor(snap_df$web1d)
snap_df$web1d <
- plyr::revalue(snap_df$web1d, c("1"="user", "2"="non_user"))#taking a look at the new names
levels(snap_df$web1d)
## [1] "user""non_user"
#creating and showing a boxplot of ages between users and non-users
snap_age_plot <
- ggplot(snap_df, aes(x = web1d, y = age)) +
geom_boxplot() +
xlab("Snapchat Usage") +
ylab("Age")snap_age_plot
文章图片
4.使用推断包进行整洁的假设检验 哇, 看起来普通的Snapchat用户比普通的非用户年轻得多。如此巨大的均值差异是由于偶然导致的?让我们进行假设检验!安德鲁·布雷(Andrew Bray)创建了一个很棒的R包来进行整洁的统计推断, 称为推断, 我们之前已经加载了它。该程序包允许指定假设并通过一系列步骤进行测试:1)指定2)假设3)生成4)计算。实际上是这样的:
#first, we calculate and store the observed difference in mean in our dataset
obs_diff <
- snapchat_age$avg_age[2] - snapchat_age$avg_age[1]diff_age_mean <
- snap_df %>
%
#specify hypothesis as a formula y ~ x
specify(age ~ web1d) %>
%
#snapchat usage has no relationship with age
hypothesize(null = "independence") %>
%
#10, 000 permutations of these data
generate(reps = 10000, type = "permute") %>
%
#calculate the statistic of interest for the 10, 000 reps
calculate(stat = "diff in means", order = c("non_user", "user"))#take a look at the output
head(diff_age_mean)
## # A tibble: 6 x 2
##replicatestat
##<
int>
<
dbl>
## 11 -1.12
## 22 -1.53
## 33 -1.05
## 440.516
## 55 -1.11
## 660.332
#how many of the 10, 000 reps are MORE extreme than the observed value?
p <
- diff_age_mean %>
%
filter(stat >
obs_diff) %>
%
summarize(p = n() / 10000)p
## # A tibble: 1 x 1
##p
##<
dbl>
## 10
【利用R对皮尤研究数据进行整洁分析】看起来10, 000个均值差异的重复中有0个与观察到的一样极端。我们可以将其解释为意味着观察到的Snapchat使用率和年龄之间的关系确实是偶然的概率极低。但是, 针对年龄之间均值差为0的零假设进行检验并不能单独为我们提供大量信息。如果均值之差不为0, 那是什么?为了回答这个问题, 让我们使用infer构造均值差异的引导置信区间:
age_mean_conf <
- snap_df %>
%
#same formula as before
specify(age ~ web1d) %>
%
#notice that we are now taking the bootstrap rather than permutations
generate(reps = 10000, type = "bootstrap") %>
%
#Calculate difference in means of each bootstrap sample
calculate(stat = "diff in means", order = c("non_user", "user"))#Take a peak at the results of this code
head(age_mean_conf)
## # A tibble: 6 x 2
##replicatestat
##<
int>
<
dbl>
## 1120.6
## 2219.0
## 3319.6
## 4421.1
## 5520.0
## 6619.7
#Now calculate the 95$ confidence interval for the statistic
age_mean_conf %>
%
summarize(lower = quantile(stat, 0.025), upper = quantile(stat, 0.975))
## Response: age (integer)
## Explanatory: web1d (factor)
## # A tibble: 1 x 2
##lower upper
##<
dbl>
<
dbl>
## 118.422.1
我们可以这样解释, 我们有95%的信心Snapchat用户与非用户的平均年龄之间的差异在18.3至22.1岁之间。这是一个有趣的发现!
总结 让我们回顾一下我们所涵盖的内容。首先, 我们获得了有关Pew研究中心以及如何设置Pew帐户以下载其高质量数据的一些背景信息。接下来, 在下载数据之后, 我们看了如何将数据加载到R中并探索其结构。通过R中的数据并了解其基本结构, 我展示了一些简单的可视化如何帮助构建假设以使用数据进行测试。问题是:Snapchat用户和非用户的平均年龄有何不同?这个问题是使用infer包编码的。我们了解到, Snapchat用户的平均年龄比未使用该平台的用户低18.3至22.1岁!
这就是本教程的全部内容!我希望你喜欢从Pew研究中心浏览有关社交媒体使用情况的数据, 并鼓励你浏览更多有关其真棒数据并查看可以找到的内容。编码愉快!
如果你想了解有关R的更多信息, 请参加srcmini的Data.table Way课程R中的数据分析。
推荐阅读
- 在R中使用异常化检测异常
- Tidyverse足球得分分析
- Python安装程序(权威指南)
- 手机QQ空间直播怎样放音乐?手机QQ空间直播放音乐图文详细教程
- 微信整人图片的自制办法_微信
- 手机QQ空间直播怎样发弹幕?手机QQ空间直播发弹幕办法
- 微信添加超过500KB、图片太大的动态GIF表情的办法_微信
- 微信gif图片太大无法添加怎样办?_微信
- 不想起床微信表情包大全_微信