邬书豪,车联网数据挖掘工程师 ,R语言中文社区专栏作者。
微信ID:tsaiedu 知乎专栏:https://www.zhihu.com/people/wu-shu-hao-67/activities
往期回顾
星巴克,诞生于美国西雅图,靠咖啡豆起家,自1971年正式成立以来,从来不打广告,却在近20年时间里一跃成为巨型连锁咖啡集团,其飞速发展的传奇让全球瞩目。星巴克不仅将丑小鸭变成白天鹅的奇迹演绎得淋漓尽致,它背后还隐藏着动人的故事。额...有兴趣读者自己查去吧,我就不多占篇幅了!!!
在本文中,使用两个包绘制了两个地图,还使用plotly包绘制了互动条形图,使用ggplot绘制了静态条形图。
这些图主要探索了每个国家星巴克店铺的个数及其在国家的分布、每个城市中星巴克的个数,并且探索了各个中国城市星巴克的个数和各个美国城市星巴克的个数。
## 加载程序包
library(dplyr)
library(data.table)
library(countrycode)
library(plotly)
library(highcharter)
library(leaflet)
library(ggplot2)
## 读取数据+简单清洗
starbucks <- fread('../input/directory.csv', encoding = 'UTF-8', stringsAsFactors = T)
str(starbucks)
summary(starbucks)
names(starbucks)
colnames(starbucks) <- make.names(colnames(starbucks))
names(starbucks)
通过str和summary函数分别对数据集的结构和主要描述性统计量进行探索,发现了数据的变量名不规范。然后使用make.names函数对变量名进行规范,尽管我们的这篇文章并没有用到这些规范后的变量名,但是这里就是为了让大家去学到这个规范列名的小知识点。
## 统计各个各个国家中星巴克店铺的个数
sta_count <-
starbucks %>%
group_by(Country) %>%
summarise(Counts = n()) %>%
arrange(desc(Counts))
上述代码中,我们使用了管道函数对数据进行传递,优雅并减少内存的占用;
代码的解释大致就是统计starbucks数据集中Country列中每个特征值的个数,并且进行降序排列。
部分结果如下:
## 统计每个国家店铺数量的占比
percent <- round(sta_count$Counts / sum(sta_count$Counts) * 100, 2)
sta_count <- transform(sta_count, Percent = paste0(percent, '%'))
## 对变量重命名,并且重塑一列(国家的全称)
names(sta_count)[1] <- 'iso2'
sta_count$Country_name <-
countrycode_data[match(sta_count$iso2,
countrycode_data$iso2c), "country.name.en"]
上述在统计不同国家星巴克店铺个数占比的时候,使用了round函数去保留两位小数;使用paste0函数去拼接“%”;使用transform函数去重塑一列;
对于所有的国家名的缩写,考虑到大多数均不知道全程,所以使用match函数去匹配,然后返回countrycode_data数据中简称所对应的全称,从而使国家名称一目了然。这个也是一个不错的小知识点,里面不仅仅包括英文全称,还有中文等等,希望大家去多多尝试,然后在不同的情景下使用恰当的称呼。
## 使用条形图去展示星巴克店铺数前二十的国家
sta_count$iso2 <- factor(sta_count$iso2, levels = sta_count$iso2)
plot_ly(data = sta_count[1:20, ],
type = 'bar',
hoverinfo = 'text',
x = ~ iso2,
y = ~ Counts,
text = ~paste(iso2, " counts : ", Counts,
" percent: ", Percent))
上图为使用plotly包绘制的互动的条形图,鼠标放在条形图中就可以弹出详细的信息(这些信息可以自定义),我们此图中自定义去展示国家名、此国家中的星巴克店铺数量和此国家的星巴克店铺数量占总店铺的百分比。
从图中可看出,美国的星巴克店铺个数最多,其次就是中国、加拿大、日本......神奇的是日本这么小的国家,他的星巴克店铺数还是不少的,看来日本人挺喜欢星巴克的。
## 绘制世界地图去展示星巴克店铺数
data(worldgeojson, package = "highcharter")
highchart() %>%
hc_add_series_map(worldgeojson, sta_count, value = "Counts", joinBy = "iso2")
在次图中,光标放置的国家会显示出国家名和星巴克店铺的数量。下面的图例中表明了颜色越深表示店铺数越多。
这个图中大家能比较直接的看出星巴克店铺数在世界各国的一个概况,但是无法展示出各个国家中星巴克店铺的在每个国家的具体未知。下面我讲绘制第二幅世界地图去展示具体位置。
## 绘制世界地图展示星巴克店铺的位置
sta_us <- starbucks[starbucks$Country == 'US', ]
sta_cn <- starbucks[starbucks$Country == 'CN', ]
sta_ca <- starbucks[starbucks$Country == 'CA', ]
sta_jp <- starbucks[starbucks$Country == 'JP', ]
sta_gb <- starbucks[starbucks$Country == 'GB', ]
sta_ot <- starbucks[!starbucks$Country %in% c('US', 'CN', 'CA', 'JP', 'GB'), ]
leaflet() %>%
addTiles() %>%
addCircles(lat= sta_us$Latitude, lng = sta_us$Longitude,
color = "#E69F00", weight = 1) %>%
addCircles(lat= sta_cn$Latitude, lng = sta_cn$Longitude,
color = "#0072B2", weight = 1) %>%
addCircles(lat= sta_ca$Latitude, lng = sta_ca$Longitude,
color = "#009E73", weight = 1) %>%
addCircles(lat= sta_jp$Latitude, lng = sta_jp$Longitude,
color = "#F0E442", weight = 1) %>%
addCircles(lat= sta_gb$Latitude, lng = sta_gb$Longitude,
color = "#CC79A7", weight = 1) %>%
addCircles(lat= sta_ot$Latitude, lng = sta_ot$Longitude,
color = "red", weight = 1)
这幅世界地图中,我们分别用五种颜色去区分了美国、中国、加拿大、日本和英国五个国家的星巴克店铺的分布,然后使用红色去填充了其他国家的星巴克的具体位置。
从图中可以看出中国的星巴克店铺集中分布在了沿海城市,英国的星巴克店铺主要分布在了南部......
## 统计排名星巴克店铺个数最多的前20个城市
city_count <-
starbucks %>%
group_by(City) %>%
summarise(Counts = n()) %>%
arrange(desc(Counts))
ggplot(city_count[1:20, ],
aes(x = reorder(City, Counts), y = Counts, fill = City)) +
geom_bar(stat = 'identity') +
labs(x = 'City', y = 'Counts') +
theme_minimal() +
guides(fill = 'none') +
coord_flip()
统计了每个城市的星巴克的数量之后,我们使用ggplot函数绘制了包括前20名的城市条形图。发现上海的星巴克数量最多,比第二名高出了一倍。
## 统计中国的城市
cn_city_count <-
sta_cn %>%
group_by(City) %>%
summarise(Counts = n()) %>%
arrange(desc(Counts))
ggplot(cn_city_count[1:20, ],
aes(x = reorder(City, Counts), y = Counts, fill = City)) +
geom_bar(stat = 'identity') +
labs(x = '城市', y = '数量(个)') +
theme_minimal() +
guides(fill = 'none') +
coord_flip()
## 统计美国的城市
us_city_count <-
sta_us %>%
group_by(City) %>%
summarise(Counts = n()) %>%
arrange(desc(Counts))
ggplot(us_city_count[1:20, ],
aes(x = reorder(City, Counts), y = Counts, fill = City)) +
geom_bar(stat = 'identity') +
labs(x = 'City', y = 'Counts') +
theme_minimal() +
guides(fill = 'none') +
coord_flip()
## 统计英国的城市
gb_city_count <-
sta_gb %>%
group_by(City) %>%
summarise(Counts = n()) %>%
arrange(desc(Counts))
ggplot(gb_city_count[1:20, ],
aes(x = reorder(City, Counts), y = Counts, fill = City)) +
geom_bar(stat = 'identity') +
labs(x = 'City', y = 'Counts') +
theme_minimal() +
guides(fill = 'none') +
coord_flip()
通过上面对中国、美国和英国三个城市的星巴克数量的统计,大家也就更加直观的看到这三个国家中含有星巴克数量最多的前20个城市了,同时通过各自的*_city_count可以去查看各个城市的对应的星巴克店铺的数量。
到此结束了,本文主要是对星巴克店铺的数量和分布进行的探索,大家可以对其他的变量进行探索,去发现自己不知道的事情。
相关课程推荐
Kaggle十大案例精讲课程(连载中):
☟☟☟ 猛戳阅读原文,即刻加入课程。