用R语言分析《我是歌手》出场顺序与名次的关系

《我是歌手》吵吵闹闹地落幕了,总决赛这一季是我最关注的一季,很认真的从头看到尾。当然,这篇文章的主旨不在此,我们要看的如题《我是歌手》节目中,出场顺序和名词的关系。关系肯定是有的,节目里自己都说到了,出场顺序很重要,这里我想用R来尝试分析这其中的细节关系。

数据是三季我是歌手除去突围赛半决赛总决赛的其余场次歌手们的出场顺序和名次,以及得票率(部分场次没有具体的得票率记为NA),一共31场,31*7=217行数据。基本数据结构如下:

数据可以查看到基本内容如下:

[plain] view plaincopy

  1. singerData <-read.table("clipboard",header=T)
  2. head(singerData,n=5)

1. 出场顺序与名次的数量关系

先把所有三季数据按出场顺序及排名做一个简单的统计:

[plain] view plaincopy

  1. table(data.frame(order=singerData$order,rank=singerData$rank))

都是数字,看起来很无感,试试用气泡图来看这个结果呢?

[plain] view plaincopy

  1. order.rank <-data.frame(a=c(rep(1,7),rep(2,7),rep(3,7),rep(4,7),rep(5,7),rep(6,7),rep(7,7)),b=c(rep(1:7,7)))
  2. for(i in 1:7){
  3. for (j in 1:7) {
  4. order.rank$c[(i-1)*7+j] <-table(data.frame(order=singerData$order,rank=singerData$rank))[i,j]
  5. }
  6. }
  7. symbols(order.rank$a,order.rank$b,order.rank$c,inches=0.40,bg="lavender",xlab="Singers'Order",ylab="Singers' Rank")

这个图好像也没有太多的很直观的信息,但是大概能看出来数据比较集中在从点(1,7)到点(7,1)这条线的周边。

2. 每一出场顺序下的平均名次

这里把算出每个出场次序的平均名次算出后,用折线图展示出来。

[plain] view plaincopy

  1. order.avgRank <- data.frame(order=1:7)
  2. for(i in1:7){
  3. order.avgRank$avgRank[i] <-mean(singerData$rank[singerData$order==i])
  4. }
  5. plot(order.avgRank$order,order.avgRank$avgRank,type="l",xlab="Singer'Order",ylab="Average Rank")

这个图就能很明显的看出来歌手最终的名次与其出场顺序存在近似负相关的关系。看看每一季的结果是不是都类似呢?

[plain] view plaincopy

  1. season.order.avgRank<- data.frame(s1=numeric(0),s2=numeric(0),s3=numeric(0))
  2. for(i in1:3){
  3. for(j in 1:7){
  4. season.order.avgRank[j,i]<-mean(singerData$rank[singerData$season==i&singerData$order==j],na.rm=TRUE)
  5. }
  6. }
  7. season.order.avgRank
  8. matplot(season.order.avgRank,type="o",col=1:3,lty=1:3)
  9. legend(5.5,5.5,c("第一季","第二季","第三季"),col=1:3,lty=1:3)

三季我是歌手,出场次序跟名次的关系,第一季第二季其实不是很明显,第三季有一个很明显的近似负相关的关系。

换个方式,查看得票率和出场次序的关系。

[plain] view plaincopy

  1. season.order.avgRate <-data.frame(s1=numeric(0),s2=numeric(0),s3=numeric(0))
  2. for(i in 1:3){
  3. for(j in 1:7){
  4. season.order.avgRate[j,i]<-mean(singerData$percentage[singerData$season==i&singerData$order==j],na.rm=TRUE)
  5. }
  6. }
  7. season.order.avgRate
  8. matplot(season.order.avgRate,type="o",col=1:3,lty=1:3)
  9. legend(1,19,c("第一季","第二季","第三季"),col=1:3,lty=1:3)

其实不用看就可以想象,跟名次与出场顺序的关系类似,肯定是第三季的特征会比较明显。这说明什么?第三季的观众比较不理智?第三季的歌手水平比较接近,所以观众才会屈从最直接的感受?请自行想象猜测!

3. 线性回归方式尝试找出其中关系

在第一部分气泡图的基础上做。

[plain] view plaincopy

  1. symbols(order.rank$a,order.rank$b,order.rank$c,inches=0.40,bg="lavender",xlab="Singers'Order",ylab="Singers' Rank")
  2. model=lm(rank~order,data=singerData)
  3. abline(model,lty=1,col=2)
  4. summary(model)

得到的回归方程式:rank = 4.74194-0.18799*order

Residuals:残差,上面给出了残差的最大值、最小值、中位数、上四分位数、下四分位数,可以看出符合正态分布。

Coefficients:系数,Estimate是预测的系数上面是截距,下面是斜率。

Residual standarderror:标准残差

Multiple R-squared :R^2值

Adjusted R-squared:调整R^2值,跟R^2值一样都是在0-1的范围内,越接近1表明这个模型可参考价值越大,越接近0表示可参考价值越小。

F-statistic:F统计量

p-value:p值

从模型的统计量能够看出,这个方程参考价值很低,不是一个很显著的线性模型。

4. 歌手的平均得票率

这里是把歌手的平均得票率计算出来,求其平均得票率,可以看出哪个歌手的整体表现比较好。与主题无关,只是一个小的统计。结果可以看到,林志炫稳居榜首,所以?你自己领会就好!

[plain] view plaincopy

  1. singers <-unique(singerData$singer)
  2. avgRate <- numeric(0)
  3. for(i in 1:length(singers)){
  4. avgRate[i] <-mean(singerData$percentage[singerData$singer==singers[i]],na.rm=TRUE)
  5. }
  6. singersAvgRate <-data.frame(singers=singers,avgRate=avgRate)
  7. singersAvgRate <- singersAvgRate[order(-singersAvgRate[,2]),]
  8. fix(singersAvgRate)

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DT乱“码”

简单的考勤系统

连接数据库类 package com.lianrui.it; import java.sql.Connection; import java.sql.Driv...

3509
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

2996
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

952
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1863
来自专栏菩提树下的杨过

遍历文件夹所有文件(示例)

//要引用 using System.Collections.Specialized; public StringCollection GetAllFile...

2159
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2308
来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

1221
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2510
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

842
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20510

扫码关注云+社区