美文网首页
R:数据可视化

R:数据可视化

作者: W杂货铺W | 来源:发表于2018-05-28 17:13 被阅读0次

    题目:

    近年随着女性在社会生活中的参与程度的提高,妇女组织、女选民、女议员和女政治领袖成为了政治活动中不可忽视的力量。在这一题目中,我们将通过女性在各国议会中的人员比重,侧面分析这一现象。请到 worldbank下载本题所使用的数据,由于部分数据缺失,建议在以下各题中均使用 2008 及以后年份的数据。


    1. 请统计数据中每一年份的所有国家\地区的平均女性议员比例,并根据这一统计结果绘制折线统计图(如数据页面中 line 视图),并描述你在这一折线图中能够得到什么样的结论。


    2. 请任选一个年份,在世界地图上使用颜色对各国女性议员比例进行编码(如数据页面中map 视图),并描述你在这一地图数据中能够得到怎样的结论。(提示:对于 d3 等常用库,都可以找到集成了地图读取与渲染的较好类库。如果找不到相应类库,可以尝试手动解析并渲染地图文件,例如 nature-earth。解答这一问时请综合考虑第三问的需求。)


    3. 在可视化中一个常见的技巧是使用图元(glyph)对可视化的目标数据进行隐喻。现实中,部分国家的议会内部经常采用下图所示的扇形结构。
    基于这一事实,我们可以设计如下图所示的图元,表示某一国家议会中的女性议员的比例。
    请在你第 2 问的可视化中使用这一图元,重新绘制这一地图,并讨论:你认为在这一图元中,表示男\女性议员的散点更适合左-右排布还是内-外排布?并简述理由。


    4. 以上我们分析了“女性议员比例”这一单一变量的全球分布,这里我们将讨论社会经济环境对女性政治参与度的影响。请搜集任意一项社会经济数据(例如人均 GDP ,第三产业数据 等),自由组织可视化视图分析这一数据与女性议员比例的相关性,并给出你的分析结论。


    Q1:

    代码

    library(ggplot2)
    library(maps)
    library(plyr)
    setwd("yourpath")
    ########## Q1 ##########
    
    dataByyr <- read.csv("seatbytyear.csv") # 08-17年世界平均女性议员比例数据
    ggplot() + geom_line(data = dataByyr, aes(x = yr, y = seat))+scale_x_continuous(breaks=dataByyr$yr) +theme_bw()+
      ylab("proportion %")+ggtitle("Proportion of seats held by women in national parliaments worldwide (%)")
    

    数据

    seatbyyear.csv

    结果

    Q1

    Q2

    代码

    ######### Q2 ##########
    
    world_map = map_data("world") 
    df <- read.csv("data17.csv") # 17年各地区女性议员比例数据和国土面积数据
    worldMapdf = merge(world_map, df, by="region",all.x=TRUE)
    worldMapdf <- worldMapdf[order(worldMapdf[,"order"]),]
    p1 <- ggplot() + geom_polygon(data = worldMapdf, aes(x=long, y=lat,group=group,fill=YR2017),col="white")+scale_fill_continuous(high = "#132B43", low = "#56B1F7",name="Proportion %")
    p1 + ggtitle("Proportion of seats held by women in national parliaments Map")
    

    数据

    head(data17.csv)

    结果

    Q2

    Q3

    代码

    ######## Q3 ###########
    
    dd <- ddply(world_map,.(region),summarize,long=mean(long),lat=mean(lat))
    dd <- merge(dd,df,by="region",all.x = TRUE)
    dds = na.omit(dd)
    dds <- subset(dds,Area>1500000) # 过滤面积小于1500000km.sq
    
    nrows <- 5 
    portion <- 0.4
    polar1 <- NULL
    ### 参考ggparliament包实现
    for(i in 1:nrow(dds)){
      ratio <- dds$YR2017[i]
      women <- round(ratio)
      men = 100 - round(ratio)
      seats1 <- c(women,men)
      party <- factor(c("W", "M"), levels = c("W", "M"))
      polar <- structure(list(azimuth = numeric(sum(seats1)),
                              radius = numeric(sum(seats1))),
                         class = "data.frame",
                         row.names = seq_len(sum(seats1)))
      nperrow <- c(20,20,20,20,20)
      ring <- rep(seq_len(nrows) + 3L, times = nperrow) 
      polar[["radius"]] <- head(ring, nrow(polar))
      # x position within ring
      pos <- unlist(lapply(nperrow, function(x) seq(0, portion, length.out = x)))
      polar[["azimuth"]] <- head(pos, nrow(polar))
      
      polar <- polar[order(polar$azimuth, polar$radius),]
      polar[["party"]] <- rep(levels(party), seats1)
      
      polar$lat <- dds$lat[i]
      polar$long <- dds$long[i]
      polar$region <- dds$region[i]
      
      polar$xx <- -cos(2*pi*polar$azimuth+0.1*pi)*polar$radius
      polar$yy <- sin(2*pi*polar$azimuth+0.1*pi)*polar$radius
      
      polar1 <- rbind(polar1,polar)
    }
    
    polar1$xxx <- polar1$xx + polar1$long
    polar1$yyy <- polar1$yy + polar1$lat
    
    p <- ggplot()  + geom_polygon(data=world_map,aes(x=long, y=lat,group=group), col = "white", fill = "black") + theme_bw()
    p1 <- p + geom_point(data = polar1,aes(x = xxx, y = yyy, colour = party),size=0.1) + scale_color_manual(values = c("W" = "purple", "M" = "grey"))  + theme(legend.position='none')
    p1 + geom_text(data=dds,aes(x=long,y=lat+2,label = paste0(YR2017,"%","\n",code)),size=1.5,col = "purple") + ggtitle("Proportion of seats held by women in national parliaments Map")
    

    结果

    Q3

    Q4

    代码

    ############### Q4 ##############
    
    df4 <- read.csv("gdpVSpar.csv") # 16年gdp和议会比例数据
    df4 <- merge(dd,df4,by="code",all.x = TRUE)
    df4 <- na.omit(df4)
    p <- ggplot() + geom_point(data = df4, aes(x=GDP2016,y=PAR2016))+geom_smooth(data = df4, aes(x=GDP2016,y=PAR2016),method = "lm")+ ylab("PAR 2016 %") + xlab("GDP US$") + scale_x_log10() + theme_bw()
    p+ ggtitle("Proportion of Women parliaments seats vs GDP in 2016")
    summary(lm(PAR2016~log(GDP2016),data = df4))
    

    数据

    head(gdpVSpar.csv)

    结果

    Q4

    相关文章

      网友评论

          本文标题:R:数据可视化

          本文链接:https://www.haomeiwen.com/subject/opbgjftx.html