R 中密度/直方图的数据可视化说明
Data Visualization Clarification in R for a density / histogram plot
我正在使用 Kaggle 的 Kickstarter Dataset,我想用 ggplot
创建有意义的可视化,关于如何显示有关认捐比率的项目数据(这是我添加的一个字段,这是通过将每个项目的美元承诺金额除以美元目标金额计算得出的。
要复制我在 R 中使用的数据集,请使用以下代码:
if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")
if(!require(ggplot2)) install.packages("ggplot2", repos = "http://cran.us.r-project.org")
if(!require(dplyr)) install.packages("dplyr", repos = "http://cran.us.r-project.org")
library(tidyverse)
library(ggplot2)
library(dplyr)
file_path <- "https://raw.githubusercontent.com/mganopolsky/kickstarter/master/data/ks-projects-201801.csv"
data <-read_csv(file_path)
ds <- data %>% dplyr::select(-`usd pledged`)
ds <- ds %>% mutate(time_int = as.numeric(deadline - as.Date(launched)) ,
launched = as.Date(launched),
pledged_ratio = round(usd_pledged_real / usd_goal_real, 2),
avg_backer_pldg = ifelse(backers == 0, 0, round(usd_pledged_real/backers) )) %>%
mutate(launched_month = as.factor(format(launched, "%m")),
launched_day_of_week = as.factor(format(launched, "%u") ),
currency = as.factor(currency),
launched_year = as.factor(format(launched, "%Y")))
ds <- ds %>% filter(launched >= "2009-04-21")
在这一点上,我想直观地了解我们可以跨项目看到什么样的 pledge_ratio。这个数据可以用下面的代码查看:
ds %>% filter(state=="successful" ) %>% group_by(pledged_ratio) %>% summarise( pledged_ratio_count = n()) %>%
arrange(desc(pledged_ratio))
这可以让您了解有多少项目属于特定比例 - 但是,这个数字并没有多大意义。某种分箱显示会更可取 - 例如,使用 geom_histogram()
,甚至 geom_density()
.
当我运行密度图时,结果是这样的:
ds %>% filter(state=="successful" ) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio)) + geom_density() +
ggtitle("Density Distribution of Pledge Ratios for Succeessful Projects") + xlab("Pledge Ratios")
一旦你盯着它看一会儿,这是有道理的,因为大多数项目获得资金的比例都在 100% 左右,或者比率为 1。但是,有些项目的资金比例要高得多,我想要一个可视化,以一种并非毫无意义的方式显示这一点。
我已经用直方图试过了:
ds %>% filter(state=="successful" ) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio)) + geom_histogram(bins = 20)
这产生了另一个有点无意义的直方图:
最后,使用 geom_point() 我得到了这个:
ds %>% filter(state=="successful" ) %>% group_by(pledged_ratio) %>% summarise( pledged_ratio_count = n()) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio, y=pledged_ratio_count)) + geom_point()
这可能是迄今为止最有洞察力的图表。 :
但是,我仍然相信必须有更好的方式来传达数据所传达的信息。任何建议将不胜感激。
经验 CDF 怎么样?
library(scales)
ds %>% filter(state=="successful") %>%
ggplot(aes(x=pledged_ratio)) +
stat_ecdf() +
scale_x_continuous(trans="pseudo_log", breaks = c(10, 100, 1000, 10000, 100000), labels=comma) +
scale_y_continuous(labels=percent) +
theme_bw() +
labs(x="Pledged Ratio", y="Percentage of Projects")
我正在使用 Kaggle 的 Kickstarter Dataset,我想用 ggplot
创建有意义的可视化,关于如何显示有关认捐比率的项目数据(这是我添加的一个字段,这是通过将每个项目的美元承诺金额除以美元目标金额计算得出的。
要复制我在 R 中使用的数据集,请使用以下代码:
if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")
if(!require(ggplot2)) install.packages("ggplot2", repos = "http://cran.us.r-project.org")
if(!require(dplyr)) install.packages("dplyr", repos = "http://cran.us.r-project.org")
library(tidyverse)
library(ggplot2)
library(dplyr)
file_path <- "https://raw.githubusercontent.com/mganopolsky/kickstarter/master/data/ks-projects-201801.csv"
data <-read_csv(file_path)
ds <- data %>% dplyr::select(-`usd pledged`)
ds <- ds %>% mutate(time_int = as.numeric(deadline - as.Date(launched)) ,
launched = as.Date(launched),
pledged_ratio = round(usd_pledged_real / usd_goal_real, 2),
avg_backer_pldg = ifelse(backers == 0, 0, round(usd_pledged_real/backers) )) %>%
mutate(launched_month = as.factor(format(launched, "%m")),
launched_day_of_week = as.factor(format(launched, "%u") ),
currency = as.factor(currency),
launched_year = as.factor(format(launched, "%Y")))
ds <- ds %>% filter(launched >= "2009-04-21")
在这一点上,我想直观地了解我们可以跨项目看到什么样的 pledge_ratio。这个数据可以用下面的代码查看:
ds %>% filter(state=="successful" ) %>% group_by(pledged_ratio) %>% summarise( pledged_ratio_count = n()) %>%
arrange(desc(pledged_ratio))
这可以让您了解有多少项目属于特定比例 - 但是,这个数字并没有多大意义。某种分箱显示会更可取 - 例如,使用 geom_histogram()
,甚至 geom_density()
.
当我运行密度图时,结果是这样的:
ds %>% filter(state=="successful" ) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio)) + geom_density() +
ggtitle("Density Distribution of Pledge Ratios for Succeessful Projects") + xlab("Pledge Ratios")
一旦你盯着它看一会儿,这是有道理的,因为大多数项目获得资金的比例都在 100% 左右,或者比率为 1。但是,有些项目的资金比例要高得多,我想要一个可视化,以一种并非毫无意义的方式显示这一点。
我已经用直方图试过了:
ds %>% filter(state=="successful" ) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio)) + geom_histogram(bins = 20)
这产生了另一个有点无意义的直方图:
最后,使用 geom_point() 我得到了这个:
ds %>% filter(state=="successful" ) %>% group_by(pledged_ratio) %>% summarise( pledged_ratio_count = n()) %>%
arrange(desc(pledged_ratio)) %>% ggplot(aes(pledged_ratio, y=pledged_ratio_count)) + geom_point()
这可能是迄今为止最有洞察力的图表。 :
但是,我仍然相信必须有更好的方式来传达数据所传达的信息。任何建议将不胜感激。
经验 CDF 怎么样?
library(scales)
ds %>% filter(state=="successful") %>%
ggplot(aes(x=pledged_ratio)) +
stat_ecdf() +
scale_x_continuous(trans="pseudo_log", breaks = c(10, 100, 1000, 10000, 100000), labels=comma) +
scale_y_continuous(labels=percent) +
theme_bw() +
labs(x="Pledged Ratio", y="Percentage of Projects")