Project Details

Through this project, I have tried to analyze song rankings for billboard top 100 in the year 2000.
Points that I have tried to answer through this project:
1. Top 5 Songs in 2000
2. Top 5 #1 Songs
3. Top 5 Artists in 2000

Dataset Description

Song rankings for billboard top 100 in the year 2000

Usage

billboard

Format

A dataset with variables:

  1. artist
    • Artist name
  2. track
    • Song name
  3. date.enter
    • Date the song entered the top 100
  4. wk1 – wk76
    • Rank of the song in each week after it entered

Loading Required Packages for Analysis

library(tidyr)
## Warning: package 'tidyr' was built under R version 3.6.3
library(ggplot2)

Basic Information

head(billboard)
## # A tibble: 6 x 79
##   artist track date.entered   wk1   wk2   wk3   wk4   wk5   wk6   wk7   wk8
##   <chr>  <chr> <date>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2 Pac  Baby~ 2000-02-26      87    82    72    77    87    94    99    NA
## 2 2Ge+h~ The ~ 2000-09-02      91    87    92    NA    NA    NA    NA    NA
## 3 3 Doo~ Kryp~ 2000-04-08      81    70    68    67    66    57    54    53
## 4 3 Doo~ Loser 2000-10-21      76    76    72    69    67    65    55    59
## 5 504 B~ Wobb~ 2000-04-15      57    34    25    17    17    31    36    49
## 6 98^0   Give~ 2000-08-19      51    39    34    26    26    19     2     2
## # ... with 68 more variables: wk9 <dbl>, wk10 <dbl>, wk11 <dbl>, wk12 <dbl>,
## #   wk13 <dbl>, wk14 <dbl>, wk15 <dbl>, wk16 <dbl>, wk17 <dbl>, wk18 <dbl>,
## #   wk19 <dbl>, wk20 <dbl>, wk21 <dbl>, wk22 <dbl>, wk23 <dbl>, wk24 <dbl>,
## #   wk25 <dbl>, wk26 <dbl>, wk27 <dbl>, wk28 <dbl>, wk29 <dbl>, wk30 <dbl>,
## #   wk31 <dbl>, wk32 <dbl>, wk33 <dbl>, wk34 <dbl>, wk35 <dbl>, wk36 <dbl>,
## #   wk37 <dbl>, wk38 <dbl>, wk39 <dbl>, wk40 <dbl>, wk41 <dbl>, wk42 <dbl>,
## #   wk43 <dbl>, wk44 <dbl>, wk45 <dbl>, wk46 <dbl>, wk47 <dbl>, wk48 <dbl>,
## #   wk49 <dbl>, wk50 <dbl>, wk51 <dbl>, wk52 <dbl>, wk53 <dbl>, wk54 <dbl>,
## #   wk55 <dbl>, wk56 <dbl>, wk57 <dbl>, wk58 <dbl>, wk59 <dbl>, wk60 <dbl>,
## #   wk61 <dbl>, wk62 <dbl>, wk63 <dbl>, wk64 <dbl>, wk65 <dbl>, wk66 <lgl>,
## #   wk67 <lgl>, wk68 <lgl>, wk69 <lgl>, wk70 <lgl>, wk71 <lgl>, wk72 <lgl>,
## #   wk73 <lgl>, wk74 <lgl>, wk75 <lgl>, wk76 <lgl>
nrow(billboard)
## [1] 317
ncol(billboard)
## [1] 79

Subsetting Useful Information

dat<-billboard[,-3]
View(dat)

Declaring New Variables

i<-integer()
j<-integer()
week<-numeric()
week1<-numeric()
data<-data.frame()

Calculating No. of Weeks a song was in Top 100

for(i in 1:317)
  {
    week[i]<-0
    for(j in 3:78)
    {
      if(billboard[i,j]>0 && is.na(billboard[i,j])==F)
      {
        week[i]=week[i]+1
      }
    }
  }
week-1  
##   [1]  7  3 53 20 18 20  5 20 32 20 11 21 22 24 20  5 29  3 20 32 20 20 31 20 24
##  [26] 15 20 20 21 15  9  3 15 17 20 29 15  9 23 12 20 37 20  3  3 20 19  6  8 11
##  [51] 10  7 20 15  7 11 20 17 12  6 19 20 57 47 13  5 17 21 20 11 18 20 20  3 28
##  [76] 32 32 14  6 28 10 20 15 20 20 20 13 28 14  2 20 21 15 19 10  4  1 20  5 16
## [101] 21 17 12 20 21  1  7  1 20 19 15 12 20 27 20 11  7 12 20 20  8 53 14 14  4
## [126] 13 19 11 28  9 20 12 18 20 17 17 20 20 17 15 20 24 24  8 20  9 15 21 19 44
## [151] 17 15 20 32  6 24 15 20 12  5 20  9 10  5  4  2  3 20  5  8 20 11  9 10  7
## [176] 13 11 18 17 55 20 20 17 14  7 19 22 12 18 20  9 24  5 18 18 20  1 20 13 20
## [201] 20 21 20 14  8 13 20 20 10  6 20  9 23 22 20 30 17 20 23 25 26 16 34 21 27
## [226]  5 13  9  9  4 20 20  6 27 32  8  4 20 20  5  5 14 20 20 19 22 20 20 25 20
## [251] 26 20 26 20 33  2 20  9  5 15 16  6 20 26 28 20 26  4 26 24 24 20 11 20  3
## [276] 12 26 13 17 20 20 20  7  6  5 12 22 20 20 11 20 27 11  4 22  2 16  7 19 20
## [301] 41 21 12  9 11 20  6 20 19 18 15 10  8  6 14  2 39
which.max(week-1)
## [1] 63
data<-data.frame(Artist=dat$artist,Song=dat$track,No_of_Weeks=week-1)
View(data)
print("Artist & Song with most weeks in Top 100: ")
## [1] "Artist & Song with most weeks in Top 100: "
data[which.max(data$No_of_Weeks),]
##    Artist   Song No_of_Weeks
## 63  Creed Higher          57

Calculating No. of Weeks a song occupied #1

for(i in 1:317)
{
  week1[i]<-0
  for(j in 3:78)
  {
    if(billboard[i,j]==1 && is.na(billboard[i,j])==F)
    {
      week1[i]=week1[i]+1
    }
  }
}
week1  
##   [1]  0  0  0  0  0  0  0  0  1  0  0  4  0  2  0  0  0  0  0  0  0  0  0  0  0
##  [26]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
##  [51]  0  0  1  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0 11
##  [76]  0  3  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## [101]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## [126]  0  0  0  0  0  0  0  0  3  0  0  0  0  0  0  0  0  3  0  0  0  0  0  0  0
## [151]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## [176]  0  0  0  0  2  0  0  0  0  0  0  0  0  0  0  0  4  0  0  0  0  0  0  0  0
## [201]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  0  0  0  0  0
## [226]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## [251]  0  0 10  0  4  0  0  0  0  0  0  0  0  2  0  0  0  0  0  0  0  0  0  0  0
## [276]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
## [301]  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1
data<-data.frame(Artist=dat$artist,Song=dat$track,No_of_Weeks=week-1,No_1_Week=week1)
View(data)
print("Artist & Song with most weeks occupying #1: ")
## [1] "Artist & Song with most weeks occupying #1: "
data[which.max(data$No_1_Week),]
##             Artist                    Song No_of_Weeks No_1_Week
## 75 Destiny's Child Independent Women Pa...          28        11

Calculating No.of Weeks occupied by artists

dat_art<-aggregate(x=data$No_of_Weeks,by=list(data$Artist),FUN=sum)
print("Artist with most weeks in Top 100: ")
## [1] "Artist with most weeks in Top 100: "
dat_art[which.max(dat_art$x),]
##    Group.1   x
## 49   Creed 104

Plotting Charts

dat1<-head(data[order(data$No_of_Weeks,decreasing=T),],n=5)
dat1
##           Artist                Song No_of_Weeks No_1_Week
## 63         Creed              Higher          57         0
## 180     Lonestar              Amazed          55         2
## 3   3 Doors Down          Kryptonite          53         0
## 122  Hill, Faith             Breathe          53         0
## 64         Creed With Arms Wide Open          47         1
dat2<-head(data[order(data$No_1_Week,decreasing=T),],n=5)
dat2
##                  Artist                    Song No_of_Weeks No_1_Week
## 75      Destiny's Child Independent Women Pa...          28        11
## 253             Santana            Maria, Maria          26        10
## 12  Aguilera, Christina Come On Over Baby (A...          21         4
## 192             Madonna                   Music          24         4
## 255       Savage Garden      I Knew I Loved You          33         4
dat3<-head(dat_art[order(dat_art$x,decreasing=T),],n=5)
colnames(dat3)<-c("Artist","Weeks")
dat3  
##              Artist Weeks
## 49            Creed   104
## 130        Lonestar    95
## 55  Destiny's Child    92
## 157          N'Sync    74
## 187           Sisqo    74
  ggplot(data=dat1,aes(x=Song,y=No_of_Weeks,fill=Artist))+
  geom_bar(stat="identity")+
  geom_text(aes(label=No_of_Weeks), vjust=-0.2, size=3.5)+
  xlab("Top 5 Songs in 2001")+ylab("No. of Weeks in Top100")

  ggplot(data=dat2,aes(x=Song,y=No_1_Week,fill=Artist))+
  geom_bar(stat="identity")+
  geom_text(aes(label=No_1_Week), vjust=-0.2, size=3.5)+
  xlab("Top 5 Songs in 2001")+ylab("No. of Weeks at #1")

  ggplot(data=dat3,aes(x=Artist,y=Weeks,fill=Artist))+
  geom_bar(stat="identity")+
  geom_text(aes(label=Weeks), vjust=-0.2, size=3.5)+
  xlab("Top 5 Artists in 2001")+ylab("No. of Weeks in Top100")

Summary

Clearly from above it is clear that Higher by Creed occupied the most weeks(57) in Top 100, Independent Women Part I by Destiny’s Child spent the most weeks(11) at #1, and Creed dominated the billboard charts by stacking most weeks(104) in Top 100 through their various songs.

Sources

The dataset used in this project is available as a part of ‘tidyr’ library.