星期一, 七月 23, 2012

来玩一玩全球500强排行榜数据

金融时报在7月20日公布了全球500强排行榜根据这个数据尝试回答下面的一些问题。

1. 哪个行业的上榜公司最多?
看得出来,银行、石油、制药是前三强。


2. 哪个国家的上榜公司最多?
美国公司占据了大部分,日本和英国则位居其后。

3. 哪个行业最赚钱?
根据各行业公司的净利润中位数进行排序,地产、采矿、石油这三个行业公司利润不错。

4. 公司的排名变化如何?

根据2011年和2012年的排位之差,计算各公司的排名变化,对于2011年未上榜公司假设为501名。大致上正态分布,在退步前十名中有知名的Nokia、Sony、Philips。

5. 哪个行业的排名进步最大?
取其行业公司排名变化的中位数,旅游、地产、烟草公司排名有进步。

5. 中国的上榜公司排名总体变化如何?


和上面的一样,取各国公司排名变化的中位数,看得出中国上榜公司的排名略有下降。东南亚新兴市场的公司有很大进步。

需要说明的是FT只提供了排名的PDF文档,如果各位数据爱好者要折腾的话需要先将其转为Excel格式,或者下载我已经整理好的CSV文档

R代码如下:
mydata <- read.csv('d:\\ft500.csv',T,stringsAsFactors = F)
data  <- transform(mydata,
          Country = factor(Country),
          Sector = factor(Sector),
          value = as.numeric(gsub(',','',value)),
          netincome = as.numeric(gsub(',','',netincome)),
          employees = as.numeric(gsub(',','',employees)),
          totalasset = as.numeric(gsub(',','',totalasset)),
          turnover = as.numeric(gsub(',','',turnover)),
           price = as.numeric(gsub(',','',price)))
library(ggplot2)
# 哪个行业的上榜公司最多
data$Sector <- with(data,reorder(Sector,Sector,function(x) length(x)))
p <- ggplot(data=data)
p + geom_bar(aes(x=Sector,y=..count..),fill='deepskyblue') + coord_flip()
# 哪个国家的上榜公司最多?
data$Country <- with(data,reorder(Country,Country,function(x) length(x)))
p + geom_bar(aes(x=Country,y=..count..),fill='deepskyblue') + coord_flip()
 
# 哪个行业最赚钱
isna <- is.na(data$employees) |is.na(data$netincome) 
data2 <- data[!isna,]
data2$Sector <- with(data2,reorder(Sector,netincome,median))
p2 <- ggplot(data=data2,aes(x=Sector,y=netincome))
p2 + stat_summary(fun.y=median,geom='bar',fill='deepskyblue') + coord_flip()
 
# 排名变化情况
data$X2011[is.na(data$X2011)] <- 501
data$change <- with(data,X2011-X2012)
p + geom_histogram(aes(x=change,y=..density..),
                   fill='deepskyblue',color='white')
# 进步前十名
data[order(data$change,decreasing=T),][1:10,]
# 退步前十名
data[order(data$change,decreasing=F),][1:10,]
 
# 行业的进退
data$Sector <- with(data,reorder(Sector,change,median))
p3 <- ggplot(data=data,aes(x=Sector,y=change))
p3 + stat_summary(fun.y=median,geom='bar',fill='deepskyblue') + coord_flip()
 
# 国家的进退
data$Country <- with(data,reorder(Country,change,median))
p4 <- ggplot(data=data,aes(x=Country,y=change))
p4 + stat_summary(fun.y=median,geom='bar',fill='deepskyblue') + coord_flip()
 
# 各变量之间的相关性
library(corrgram)
data3 <- data[,c(6:13,15)]
corrgram(order = T, data3, lower.panel = panel.shade, upper.panel = panel.pie)

7 条评论:

  1. 太牛b了,我平时工作闲暇之余最喜欢来您这逛了!

    回复删除
  2. 能解释一些 函数吗?
    对于我有点难

    回复删除
    回复
    1. 这里主要是两类函数,一个是order排序,另一些是ggplot绘图函数,可以参见本博客之前的贴子,如果不明白的具体问题,也可以给我发电邮。

      删除
  3. function(x) length(x) 这个没有看懂。为什么要用with函数?

    回复删除
    回复
    1. with是为了可以取到数据框中的变量。

      删除