Github: https://github.com/gabrielerichsonmrp/gehm_kickstarter
Kickstarter adalah sebuah online platform yang memberikan ruang pendanaan untuk proyek kreatif secara crowdfunding. Aspek yang paling penting tentang meluncurkan Project Campaign di Kickstarter yaitu jika project campaign gagal memenuhi tujuan pendanaan minimumnya, maka proyek terkait tidak akan menerima dana apa pun. Proyek yang ada di Kickstarter terdiri dari berbagai kategori antara lain Film & Video, Art, Photography, Fashion, Technology, Crafts, Music, Games, Publishing, Theater, Comics, Food, Design, Journalism dan Dance. Informasi lengkap tentang kickstarter bisa mengunjungi web https://www.kickstarter.com/ .
Tujuan dari proyek ini adalah untuk menganalisa dan memvisualisasikan data kickstarter untuk mendapatkan informasi penting yang berkaitan. Dataset untuk proyek ini diambil dari repositori webroboto.io. Mereka mengembangkan scrapper robot yang mengambil semua data proyek Kickstarter secara bulanan semenjak 2009. Ada kemungkinan data proyek tidak lengkap atau terjadi duplikasi dalam dataset karena perubahan dalam pendekatan pengumpulan data oleh webroboto.io. Hal ini disampaikan oleh pihak webroboto.io pada situs web https://webrobots.io/kickstarter-datasets/ . Dataset yang dianalisis merupakan data Project Campaign di Kickstarter mulai dari 2009-2019 dengan jumlah data raw sebanyak 211.076 observasi. Setiap proyek kicstarter memiliki status failed, successful, live, suspended atau canceled. Dalam analisis ini, saya hanya tertarik pada proyek kicktarter yang memiliki status successful atau failed, sehingga saya memutuskan untuk membuang data observasi dengan status lainnya.
Hasil download file .csv dari webroboto.io berupa zipfile, yang dimana setelah diekstrak akan mendapatkan 57 file .csv dengan total ukuran penyimpanan sebesar 1,05 GB. Seluruh data dari file .csv ini harus disatukan dahulu untuk mempermudah proses eksplorasi data. Setelah menyatukan data, saya cek kalau data kategori proyek disimpan didalam variabel category yang memiliki value berbentuk JSON values, sehingga perlu diekstrak dahulu untuk mengambil komponen variabel parent_name sebagai main_category dan name sebagai sub_category. Untuk melakukan tahapan proses tersebut, saya membuat fungsi MergeKSFiles dibawah ini. Pada RStudio, proses pembacaan data file dalam format .rds lebih cepat dibandingkan .csv dan ukuran penyimpanan datanya juga lebih kecil. Fungsi MergeKSFiles akan mengekspor hasil merge menjadi bentuk format file .rds.
# Fungsi ini hanya dapat digunakan untuk kumpulan data csv kickstarter yang di download dari webroboto.io.
# Estimasi running time 6-10 menit untuk 57 csv files dengan total 200.000 baris data.
# Hasil dari fungsi ini berbentuk file .rds.
# Silahkan dimodifikasi sesuai kebutuhan sebelum menggunakan.
MergeKSFiles <- function(){
# get dan set direktori
wd <- as.character(getwd())
setwd(paste(wd,"/data_download",sep = ""))
# menyimpan seluruh file *csv menjadi list
dir <- list.files(pattern = "*.csv")
myfiles <- lapply(dir,read_csv)
# merge seluruh data dan menyimpan dalam variabel ks_raw
ks_raw <- myfiles %>% bind_rows(.id = "filename")
# ekstrak data main_category dan sub_category DARI JSON Value
# jalankan library plyr sebelum menjalankan library dplyr
category_raw <- map(as.character(ks_raw$category),fromJSON)
category_raw <- plyr::ldply(category_raw, data.frame)
category_raw <- category_raw[,c("parent_name","name")]
colnames(category_raw) = c("main_category","sub_category")
ks_raw <- cbind(category_raw,ks_raw)
# Remove variabel yang tidak dibutuhkan
ks_raw <- ks_raw %>%
select(-c(blurb,friends,is_backing,is_starrable,is_starred,location,permissions,photo,source_url,spotlight,urls,profile, creator,currency_trailing_code,disable_communication,id,slug,staff_pick,state_changed_at,usd_type,currency_symbol,currency,current_currency,category))
# Seleksi data dibawah tahun 2020
ks_raw$launched_at = as.Date(as.POSIXlt.POSIXct(ks_raw$launched_at))
ks_raw$deadline = as.Date(as.POSIXlt.POSIXct(ks_raw$deadline))
ks_raw <- ks_raw[year(ks_raw$launched_at) <2020,]
ks_raw <- ks_raw[year(ks_raw$deadline) <2020,]
# Export RDS file dan simpan dengan nama kick_raw.rds
saveRDS(object=ks_raw, file=paste(paste(wd,"/data_input/",sep = ""),"ks_input.rds",sep=""))
}
# jalankan fungsi ini untuk merge dan ekstrak data category
# MergeKSFiles()Raw Data (Data hasil download)
Supaya project ini dapat dengan mudah diupload dan didownload pada github, maka raw data tidak saya upload ke github, namun bisa didownload dan diextract melalui link https://s3.amazonaws.com/weruns/forfun/Kickstarter/Kickstarter_2020-02-13T03_20_04_893Z.zip . Hasil extract download akan berbentuk kumpulan data .csv seperti berikut:
Setelah sukses mengekspor data raw menjadi .rds menggnukan fungsi MergeKSFiles(), total data yang didapat sebanyak 205,510 observasi dan 17 variabel dengan ukuran penyimpanan data sebesar 10.5 MB. Ukuran penyimpanan datanya sangat signifikan berkurang sehingga dapat mempercepat performance pengelolaan data.
#> Observations: 200,510
#> Variables: 17
#> $ main_category <fct> Film & Video, Art, Photography, Fashion, F...
#> $ sub_category <fct> Fantasy, Mixed Media, Photobooks, Apparel,...
#> $ filename <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1...
#> $ backers_count <dbl> 59, 36, 1, 859, 15, 3, 7493, 21, 69, 41, 0...
#> $ converted_pledged_amount <dbl> 3774, 1553, 10, 38159, 522, 34, 1428519, 4...
#> $ country <chr> "MX", "US", "US", "US", "US", "NL", "US", ...
#> $ country_displayable_name <chr> "Mexico", "the United States", "the United...
#> $ created_at <dbl> 1498253583, 1412750625, 1441724086, 147070...
#> $ deadline <date> 2017-09-09, 2014-11-14, 2015-10-08, 2016-...
#> $ fx_rate <dbl> 0.05360908, 1.00000000, 1.00000000, 1.0000...
#> $ goal <dbl> 65000, 15000, 1500, 25000, 500, 500, 10000...
#> $ launched_at <date> 2017-08-17, 2014-10-22, 2015-09-08, 2016-...
#> $ name <chr> "SAUNA", "Le Petit Matisse - Imagine . Cre...
#> $ pledged <dbl> 66500.00, 1553.00, 10.00, 38159.20, 522.99...
#> $ state <chr> "successful", "failed", "canceled", "succe...
#> $ static_usd_rate <dbl> 0.05629315, 1.00000000, 1.00000000, 1.0000...
#> $ usd_pledged <dbl> 3743.494475, 1553.000000, 10.000000, 38159...
Jika dilihat pada struktur data ks_input, variabel yang ada cukup banyak namun tidak semua variabel tersebut akan gunakan. Selain itu tipe data dari masing-masing variabel juga belum sesuai dengan kebutuhan, sehingga perlu perlu dilakukan Konversi data type dan menyeleksi variabel yang diunakan sesuai kebutuhan analisa kali ini saja. Oleh karena itu perlu dilakukan tahap berikut:
1. Validasi seluruh data type
2. Konversi format tanggal created_at, deadline, launched_at
3. Mendapatkan data total hari project campaign: total days = launched date - created at
4. Mendapatkan data goal project dalam satuan USD: usd goal = goal * static usd rate
6. Seleksi variabel yang dibutuhkan: project_name, main_category, sub_category, country_code, country_name, year_created, created_at, launched_at, deadline, total_days, usd_goal, backers_count, static_usd_rate, usd_pledged,state
7. Seleksi data degan status successful dan failed
8. Mengkonversi data project_name menjadi lower case (untuk validasi data unik)
# Konversi Data Type
ks_input$main_category = as.factor(ks_input$main_category)
ks_input$sub_category = as.factor(ks_input$sub_category)
ks_input$converted_pledged_amount = as.integer(ks_input$converted_pledged_amount)
ks_input$country_code = as.factor(countrycode::countrycode(ks_input$country,"iso2c","iso3c"))
ks_input$country_name = as.factor(ks_input$country_displayable_name)
ks_input$fx_rate = as.numeric(ks_input$fx_rate)
ks_input$goal = as.numeric(ks_input$goal)
ks_input$created_at = as.Date(as.POSIXlt.POSIXct(ks_input$created_at))
ks_input$total_days = as.integer(ks_input$deadline-ks_input$launched_at)
ks_input$project_name = as.character(ks_input$name)
ks_input$project_name = stringr::str_to_lower(ks_input$project_name)
ks_input$pledged = as.numeric(ks_input$pledged)
ks_input$state = as.factor(ks_input$state)
ks_input$static_usd_rate = as.numeric(ks_input$static_usd_rate)
ks_input$usd_goal = ks_input$goal*ks_input$static_usd_rate
ks_input$usd_pledged = as.numeric(ks_input$usd_pledged)
ks_input$main_category <- droplevels(ks_input$main_category)
ks_input$sub_category <- droplevels(ks_input$sub_category)
ks_input$country_code <- droplevels(ks_input$country_code)
ks_input$country_name <- droplevels(ks_input$country_name)
# seleksi project campaign dengan status successful atau failed
ks_input <- ks_input[ks_input$state %in% c('successful','failed'),]
ks_input$state <- droplevels(ks_input$state)
# seleski hanya variabel yang digunakan saja
ks_input <- ks_input[,c("project_name","main_category","sub_category","country_code","country_name","created_at","launched_at","deadline","total_days","usd_goal","backers_count","usd_pledged","state")]
glimpse(ks_input)#> Observations: 191,210
#> Variables: 13
#> $ project_name <chr> "sauna", "le petit matisse - imagine . create . share...
#> $ main_category <fct> Film & Video, Art, Fashion, Film & Video, Art, Techno...
#> $ sub_category <fct> Fantasy, Mixed Media, Apparel, Fantasy, Mixed Media, ...
#> $ country_code <fct> MEX, USA, USA, USA, NLD, USA, GBR, USA, GBR, USA, CAN...
#> $ country_name <fct> Mexico, the United States, the United States, the Uni...
#> $ created_at <date> 2017-06-24, 2014-10-08, 2016-08-09, 2016-05-30, 2018...
#> $ launched_at <date> 2017-08-17, 2014-10-22, 2016-10-18, 2016-05-30, 2018...
#> $ deadline <date> 2017-09-09, 2014-11-14, 2016-11-17, 2016-06-14, 2018...
#> $ total_days <int> 23, 23, 30, 15, 30, 60, 39, 30, 28, 30, 60, 34, 32, 3...
#> $ usd_goal <dbl> 3659.0547, 15000.0000, 25000.0000, 500.0000, 618.1608...
#> $ backers_count <dbl> 59, 36, 859, 15, 3, 7493, 21, 69, 41, 0, 164, 1, 182,...
#> $ usd_pledged <dbl> 3743.494475, 1553.000000, 38159.200000, 522.990000, 3...
#> $ state <fct> successful, failed, successful, successful, failed, s...
Setelah dilakukan konversi dan seleksi data, dataset yang dimiliki tersisa 191,210 observasi dan 13 variabel.
#> project_name main_category sub_category country_code country_name
#> 0 6950 0 0 0
#> created_at launched_at deadline total_days usd_goal
#> 0 0 0 0 0
#> backers_count usd_pledged state
#> 0 0 0
Jika dilihat data main_category memiliki 6950 Missing values. Mari mengexplore data yang memilki missing value.
Eksplorasi Missing Value
jika dicek pada data yang memiliki missing value, data sub_category seharusnya merupakan data main_category dan yang memiliki missing value seharusnya data sub_category. Berikut data main_category:
#> [1] "Film & Video" "Art" "Photography" "Fashion" "Technology"
#> [6] "Crafts" "Music" "Games" "Publishing" "Theater"
#> [11] "Comics" "Food" "Design" "Journalism" "Dance"
Maka solusinya yaitu subtitusi value main_category = sub_category dan sub_category = NAValue untuk data yang memiliki main_category=NA Values. Dengan begini, sub_category akan memiliki NA Values.
#Data unik dari sub_category yang memiliki missing value main_category
ks_input$main_category <- ifelse(is.na(ks_input$main_category),as.character(ks_input$sub_category), as.character(ks_input$main_category))
ks_input$sub_category <- ifelse(ks_input$main_category==ks_input$sub_category,NA, as.character(ks_input$sub_category))
ks_input$main_category <- as.factor(ks_input$main_category)
ks_input$sub_category <- as.factor(ks_input$sub_category)
# Missing Value
colSums(is.na(ks_input))#> project_name main_category sub_category country_code country_name
#> 0 0 6950 0 0
#> created_at launched_at deadline total_days usd_goal
#> 0 0 0 0 0
#> backers_count usd_pledged state
#> 0 0 0
#> [1] 191210 13
Setelah dilakukan subtitusi, variabel yang memilki missing values menjadi sub_category sebanyak 6950 observasi.
Berdasarkan jumlah diatas, total observasi yang dimiliki sebanyak 191,210 namun total data yang unik sebanyak 170,124. Hal ini membuktikan bahwa dataset ini memiliki data yang duplikat, sehingga data duplikat perlu dibuang.
#Remove data duplikat
ks_input <- unique(ks_input)
data.frame(cbind("Total Data Seluruhnya"=dim(ks_input)[1], "Total Data Unik"=dim(unique(ks_input))[1]))Setelah data duplikat dibuang, total data observasi yang dimiliki sebanyak 170,124.
Setelah melakukan proses cleansing data, total observasi atas dataset Kickstarter Campaign yang dimiliki sebanyak 170,124 dan 13 variabel. Namun, data yang tidak memiliki sub category sebanyak 6,950 atau 4,1%.
| Variabel | Deskripsi Informasi |
|---|---|
| project_name | Nama dari setiap project |
| main_category | Kategori Project |
| sub_category | Sub Kategori dari project |
| country_code | Kode Negara dimana project dibuat |
| country_name | Nama Negara dimana project dibuat |
| created_at | Tanggal Project Campaign dibuat pada masing-masing project |
| launched_at | Tanggal Project Campaign launch atau dimulai pada masing-masing project |
| deadline | Tanggal Project Campaign berakhir pada masing-masing project |
| total_days | Total hari campaign atau total hari setiap project berhak mendapatkan pendanaan |
| usd_goal | Target pendanaan minimun dalam satuan USD. |
| backers_count | Jumlah pemberi dana |
| usd_pledged | Total pendapatan pendanaan yang didapatkan selama campaign berlangsung dalam satuan USD |
| state | Status campaign. Status dikatakan sukses apabila total pendapatan pendanaan lebih >= target pendanaan minimum |
Setelah data diolah sesuai kebutuhan analisis ini, maka clean data saya export dan diimport kembali dengan nama ks_clean. Ukuran data ks_clean setelah diexport turun sangat signifikan menjadi 6,6 MB.
total.project <- data.frame(table(year(ks_clean$launched_at)))
ggplot(total.project,aes(x=Var1, y=Freq, fill=Freq))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=Freq, y=Freq+500), vjust = -0.5, size=3) +
labs(
title = "Total of Project Campaign (2009-2019)",
x="Year",
y="Total of Project Campaign"
)+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))Berdasarkan chart di atas, jumlah proyek di kickstarter selalu meningkat dari tahun 2009-2015, kemudian jumlah proyek menurun hingga tahun 2018 dan meningkat kembali ditahun 2019. Dari tahun 2009-2019, jumlah proyek di Kickstarter paling banyak pada tahun 2015 dengan jumlah 32,236 proyek. Lantas proyek kategori apa yang paling banyak? dan bagaimana pendanaannya?
ks_2015 <- ks_clean[year(ks_clean$launched_at)=="2015",]
project.popular.2015 <- data.frame(table(ks_2015$main_category))
colnames(project.popular.2015) <- c("main_category","freq")
project.popular.2015$main_category <- as.factor(project.popular.2015$main_category)
project.popular.2015$main_category <- reorder(project.popular.2015$main_category,project.popular.2015$freq)
ggplot(project.popular.2015,aes(x=main_category,y=freq,fill=freq))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=freq, y=freq+400), size=3) +
labs(
title="Most Project Campaign in 2015",
x = "Project Category",
y = "Total Project"
)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange")) -> p1
# Most Pledged 2015
most.pledged.2015 <- aggregate(usd_pledged~main_category,ks_2015,sum)
most.pledged.2015$main_category <- reorder(most.pledged.2015$main_category,most.pledged.2015$usd_pledged)
ggplot(most.pledged.2015, aes(x=main_category,y=usd_pledged/1000000,fill=usd_pledged))+
geom_bar(stat = "identity",show.legend = FALSE)+
geom_text(aes(label=paste0("$",round(usd_pledged/1000000,1)),y=round(usd_pledged/1000000,1)+10), size=3)+
labs(
title ="Most Pledged Project in 2015",
x = NULL,
y = "Amount Pledged (USD millions)"
)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))->p2
grid.arrange(p1, p2, ncol = 2)Pada tahun 2015, Jumlah Proyek Film & Video paling banyak didaftarkan untuk mengikuti project campaign di Kickstarter, namun total pendanaan proyek Technology paling besar. Proyek Technology mendapatkan total pendanaan USD 121 Juta sedangkan proyek Film & Video mendapatkan USD 51 juta.
total.pledged <- aggregate(ks_clean$usd_pledged~year(ks_clean$launched_at),data=ks_clean, sum)
colnames(total.pledged) <- c("year","total_pledged")
ggplot(total.pledged, aes(x=as.factor(year), y=total_pledged/1000000, fill=total_pledged))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=paste0("$",round(total_pledged/1000000,1)),y=round(total_pledged/1000000,1)+10), vjust=-0.5, size=3.5)+
labs(
title = "Total Pledged Amount (2009-2019)",
x="Year",
y="Total Pledged Amount (USD Millions)"
)+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))Total pendanaan di kickstarter selalu meningkat dari tahun 2009-2015, kemudian total pendanaan menurun hingga tahun 2018 dan meningkat kembali ditahun 2019. Jika dilihat dari polanya, peningkatan dan penurunan total pendanaan proyek di kicktarter sesuai dengan pola peningkatan dan penurunan jumlah proyek di kickstarter pada poin 4.1. Namun, yang aneh jumlah proyek di kickstarter paling banyak pada tahun 2015, tapi mengapa total pendanaan paling banyak terjadi pada tahun 2019?
ks_pledged <- ks_clean[year(ks_clean$launched_at) %in% c("2019","2015"),]
ks_pledged <- ks_pledged[ks_pledged$usd_pledged>0,]
ggplot(ks_pledged, aes(as.factor(year(launched_at)), log(usd_pledged), fill=as.factor(year(launched_at)))) +
geom_boxplot(show.legend = FALSE) +
labs(
title ="Log of Pledged Amount: 2015 vs 2019",
y = "Log(Pledged Amount)",
x = "Year"
)+
theme_minimal()+
theme(
axis.title=element_text(size=8,face="bold"),
axis.text.x=element_text(size=10,margin = margin(b=10)),
axis.text.y=element_text(size=10),
axis.text.y.left = element_text(margin = margin(l=10))
)+
mycolor_fill()+
coord_flip()->ks_pledged2
ks_pledged_color <- get_scale_color(get_pal(mycolorfill))
ggplot(ks_pledged, aes(backers_count,usd_pledged), group=as.factor(year(launched_at))) +
geom_point(aes(color=as.factor(year(launched_at)),size=usd_pledged), alpha=0.6, show.legend = FALSE)+
scale_y_continuous(name = "Amount Pledged (USD millions)",
labels = dollar
) +
labs(
title ="Pledged Amount: 2015 vs 2019",
y = "Amount Pledged",
x = "Total Backer",
color="Year",
size=NULL
)+
guides(size = FALSE)+
theme_minimal()+
theme(
axis.title=element_text(size=8,face="bold"),
axis.text.x=element_text(size=10,margin = margin(b=10)),
axis.text.y=element_text(size=10),
axis.text.y.left = element_text(margin = margin(l=10)),
legend.position = NULL
)+
ks_pledged_color()->ks_pledged1
grid.arrange(ks_pledged2,ks_pledged1, ncol = 2)Dapat dilihat pada boxplot bahwa rata-rata pendanaan di tahun 2019 lebih besar dari tahun 2015 dan nilai Q3 tahun 2019 lebih besar dari Q3 tahun 2015. Secara distribusi penyebarannya, terdapat beberapa proyek di tahun 2019 yang mendapatkan pendanaan jauh lebih tinggi dari pada pendanaan di tahun 2015. Hal ini menjelaskan mengapa total pendanaan di tahun 2019 lebih tinggi daripada tahun 2015.
project.popular <- data.frame(table(ks_clean$main_category))
colnames(project.popular) <- c("main_category","freq")
project.popular$main_category <- as.factor(project.popular$main_category)
project.popular$main_category <- reorder(project.popular$main_category,project.popular$freq)
ggplot(project.popular,aes(x=main_category,y=freq,fill=freq))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=freq, y=freq+1000), size=3) +
labs(
title="Most Popular Project by Category (2009-2019)",
x = "Project Category",
y = "Total Project"
)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))Seperti yang kita ketahui, pertumbuhan teknologi dari tahun 2009-2019 sangat pesat dan terasa diberbagai kalangan masyarakat. Namun, berdasarkan data kickstarter yaitu proyek yang paling banyak dari tahun 2009-2019 adalah Proyek Music dengan jumlah 25100 proyek, sedangkan proyek teknologi berada pada urutan ke 4(empat) dengan jumlah 18099 proyek. Berdasarkan data ini, saya berasumsi bahwa cukup banyak proyek teknologi yang tidak mencari pendanaan melalui kickstarter.
category.growth <- data.frame(table(ks_clean$main_category,year(ks_clean$launched_at)))
colnames(category.growth) <- c("main_category","year","freq")
ggplot(category.growth, aes(year, freq,group = main_category)) +
geom_line(aes(color=main_category),size=0.65)+
geom_point(aes(color=main_category))+
labs(
title ="Growth of Project Campaign by Category (2009-2019)",
x = "Year",
y = "total",
color = "Project Category"
)+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
mycolor_color()Jumlah sebagian besar proyek selalu meningkat dari tahun 2009-2015 dan memiliki puncak pertumbuhan pada tahun 2015. Namun berebeda dengan proyek Dance yang mengalami penurunan pertumbuhan pada 2015 bahkan hingga 2019. Hal ini mendukung analisa pada poin 4.1 yang dimana jumlah proyek pada tahun 2015 paling tinggi. Proyek Film & Video merajai tahun 2015 namun jumlahnya terus menurun hingga 2019 dan pada tahun 2019 dirajai oleh Proyek Games yang meningkat secara signifikan dari tahun 2018.
ggplot(category.growth, aes(year, freq,group = main_category)) +
geom_line(aes(color=main_category),size=0.65, show.legend = FALSE)+
geom_point(aes(color=main_category), show.legend = FALSE)+
labs(
title ="Growth of Project Campaign by Category (2009-2019)",
x = "Year",
y = "total",
color = "Project Category"
)+
facet_wrap(~main_category, scales = "free_y", ncol = 3)+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10), angle=90),
axis.text.y.left = element_text(margin = margin(l=10))
) +
mycolor_color()Berdasarkan detail dari chart pertumbuhan jumlah proyek di kickstarter, meskipun jumlah proyek Comics bukan yang paling tinggi, tapi hanya jumlah proyek Comics yang terus mengalami peningkatan dari tahun 2009-2019. Kemudian peningkatan jumlah proyek tertinggi di tahun 2019 dipegang oleh proyek Games dan Design.
most.pledged <- aggregate(usd_pledged~main_category,ks_clean,sum)
most.pledged$main_category <- reorder(most.pledged$main_category,most.pledged$usd_pledged)
ggplot(most.pledged, aes(x=main_category,y=usd_pledged/1000000,fill=usd_pledged))+
geom_bar(stat = "identity",show.legend = FALSE)+
geom_text(aes(label=paste0("$",round(usd_pledged/1000000,1)),y=round(usd_pledged/1000000,1)+30), size=3)+
labs(
title ="Most Pledged Project by Category (2009-2019)",
x = "Project Category",
y = "Amount Pledged (USD millions)"
)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))Berdasarkan data total pendanaan dari tahun 2009-2019, Proyek Teknologi mendapatkan total pendanaan paling tinggi dan proyek Dance mendapatkan total pendanaan paling rendah. Jika dilihat, selisih total pendanaan proyek teknologi sangat jauh dari proyek di kategori lainnya. Hal ini menandakan bahwa perkembangan proyek teknologi sangat didukung oleh pemberi dana yang ada di kickstarter.
pledged.growth <- aggregate(usd_pledged~main_category+year(launched_at),ks_clean,sum)
colnames(pledged.growth) <- c("main_category","year","usd_pledged")
pledged.growth$year <- as.factor(pledged.growth$year)
pledged.growth$main_category <- reorder(pledged.growth$main_category,pledged.growth$usd_pledged)
ggplot(pledged.growth, aes(year, usd_pledged/1000000, group = main_category)) +
geom_line(aes(color=main_category),size=0.65)+
geom_point(aes(color=main_category))+
scale_y_continuous(labels=dollar_format(prefix="$")) +
labs(
title ="Growth of Pledged Amount by Project Category (2009-2019)",
x = "Year",
y = "Amount Pledged (USD Millions)",
color = "Project Category"
)+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10), angle = 90),
axis.text.y.left = element_text(margin = margin(l=10)),
panel.spacing = unit(1, "lines")
) +
mycolor_color()Sesuai analisa pada poin 4.4, peningkatan jumlah proyek tertinggi ditahun 2019 dipegang oleh proyek Games dan Design. Hal tersebut linier dengan peningkatan jumlah pendanaan seperti yang terlihat pada chart di atas. Peningkatan jumlah pendanaan paling tinggi ditahun 2019 juga dipegang oleh proyek Games dan Design yang dimana total pendanaanya meningkat 500% dari tahun 2018. Bahkan, total pendanaan paling tinggi ditahun 2019 dipegang oleh proyek Games dan design, kemudian pada peringkat ke-3 disusul oleh proyek teknologi.
ggplot(pledged.growth, aes(year, usd_pledged/1000000, group = main_category)) +
geom_line(aes(color=main_category),size=0.65, show.legend = FALSE)+
geom_point(aes(color=main_category),show.legend = FALSE)+
scale_y_continuous(labels=dollar_format(prefix="$")) +
labs(
title ="Growth of Pledged Amount by Project Category (2009-2019)",
x = "Year",
y = "Amount Pledged (USD Millions)",
color = "Project Category"
)+
facet_wrap(~main_category, scales = "free_y", ncol = 3)+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10), angle = 90),
axis.text.y.left = element_text(margin = margin(l=10)),
panel.spacing = unit(1, "lines")
) +
mycolor_color()Berdasarkan detail dari chart pertumbuhan total pendanaan di kickstarter, meskipun total pendanaan Comics bukan yang paling tinggi, tapi hanya proyek Comics yang terus mengalami peningkatan pendanaan dari tahun 2009-2019, hal ini linier dengan jumlah proyek Comics yang terus meningkat.
Suatu Project Campaign di Kickstarter dikatakan sukses apabila jumlah pendanaan (Pledged) yang didapatkan mencapai atau lebih dari jumlah pendanaan minimum (Goal) yang ditentukan ketika project campaign launch, dan apabila sebaliknya maka Project Campaign dikatakan gagal. lantas bagaimana distribusi pendanaan dan goal yang hendak dicapai?
usd.amounts <- gather(data=ks_clean, key=type, value=amount, usd_pledged, usd_goal, factor_key=T)
ggplot(usd.amounts, aes(log(amount+1), fill=type)) +
geom_histogram(alpha=0.5, position="identity",binwidth = 1) +
ggtitle("Distribution of log(USD Pledged Amount) vs. log(USD Goal Amount)") +
xlab("log(USD Pledged Amount)") +
ylab("Frequency") +
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10)),
legend.position = "bottom"
) +
mycolor_fill()Goal yang diharapkan tampaknya terdistribusi secara normal, sedangkan pendanaan yang diberikan (usd_pledged) tidak berdistribusi secara normal. Memang distribusi pendanaan yang diberikan lumayan berpusat disisi, tengah namun frekuensinya lebih rendah dari distribusi goal. Kemudian distribusi pendanaan bagian kiri cukup tinggi, hal ini mewakili proyek-proyek yang menerima pendanaan sedikit atau tidak mendapatkan pendanaan sama sekali. Berdasarkan grafik distribusi diatas, dapat dikatakan sebagian besar proyek tidak berhasil mendapatkan pendanaan yang diharapkan sesuai goal-nya. Jika begitu, bagaimana tingkat kesuksesan Project Campaign di Kickstarter?
state.ratio <- table(year(ks_clean$launched_at), ks_clean$state)
state.ratio <- cbind(state.ratio,aggregate(Freq~Var1,state.ratio,sum)[2])
colnames(state.ratio) <- c("year","state","freq","total_freq")
state.ratio$pct <- state.ratio$freq/state.ratio$total_freq
ggplot(state.ratio, aes(x=year,y=pct,fill=state), group=state)+
geom_bar(stat="identity") +
labs(
title = "Ratio of Successfull vs Failed (2009-2019)",
x= "Year",
y= "Ratio"
)+
scale_y_continuous(labels=scales::percent) +
geom_text(aes(label=paste0(round(pct*100,1),"%")),
position=position_stack(vjust=0.5),
colour="white", size=3)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=10,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10)),
legend.position = "right",
legend.margin=margin(t = 0,l=0,r=0, unit='pt')
) +
mycolor_fill() -> p_ratio
ggplot(total.project,aes(x=Var1, y=Freq, fill=Freq))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=Freq, y=Freq+2000), size=3) +
labs(
title = "Total Project (2009-2019)",
x="Year",
y="Total of Project Campaign"
)+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=10,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))+
coord_flip() -> p_total
library(cowplot)
#grid.arrange(p_ratio,p_total, ncol = 2,rel_widths = c(1/5, 1/5))
plot_grid(p_ratio, p_total, align = "h", ncol = 2, rel_widths = c(0.6, 0.4))Dari tahun 2009-2015, jumlah proyek di kickstrater selalu meningkat, namun tingkat kesusksesan proyek cenderung naik turun. Tingkat kesuksesan proyek dari tahun 2009-2013 cenderung naik turun tapi selalu diatas 75%, namun tingkat kesuksesan menurun drastis pada tahun 2014 dan terus menurun hingga tahun 2015.
Tahun 2015 merupakan tahun yang unik di Kickstarter. Jumlah proyek paling tinggi dan tingkat kesuksesan paling rendah terjadi ditahun 2015. Tingkat kesuksesan project campaign yang launch ditahun 2015 hanya sebesar 44% dari 32,236 proyek. Saya berasumsi Kickstarter melakukan koreksi dan perbaikan mulai tahun 2015. Asumsi ini saya ambil karena tingkat kesuksesan Project Campaign di Kickstarter terus meningkat hingga tahun 2019 dengan rata-rata peningkatan setiap tahun dari 2015-2019 sebesar 6.5%. Tingkat kesuksesan ditahun 2019 sebesar 70.1% dari 24,191 proyek.
ggcorr(ks_clean, label = T, hjust=0.7, size=3, palette = "RdGy", legend.size = 3)+
labs(
title ="Correlation Matrix"
)+
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5, margin = margin(b=-25,unit="pt")),
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10))
) Matriks korelasi diatas menunjukan bahwa faktor yang paling mempengaruhi jumlah pendanaan proyek adalah jumlah kontributor pemberi dana. Mari kita buktikan apakah pertumbuhan jumlah kontributor dan jumlah pendanaan setiap tahun linear?
ks_backer <- aggregate(backers_count~year(ks_clean$launched_at),ks_clean,sum)
colnames(ks_backer) <- c("year","backers")
ggplot(ks_backer, aes(x=as.factor(year),y=backers,fill=backers))+
geom_bar(stat = "identity",show.legend = FALSE)+
geom_text(aes(label=comma(backers),y=backers+370000), size=3)+
labs(
title ="Total Backers (2009-2019)",
x = "Year",
y = "Total Backer"
)+
scale_y_continuous(labels = comma)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9,face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left =element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))->backer1
ggplot(total.pledged, aes(x=as.factor(year), y=total_pledged/1000000, fill=total_pledged))+
geom_bar(stat = "identity", position = "dodge",width = 0.9, show.legend = FALSE)+
geom_text(aes(label=paste0("$",round(total_pledged/1000000,1)),y=round(total_pledged/1000000,1)+25), size=3)+
labs(
title = "Total Pledged Amount (2009-2019)",
x= NULL,
y="Total Pledged Amount (USD Millions)"
)+
coord_flip()+
theme_minimal()+
theme(
axis.title=element_text(size=9, face="bold"),
axis.text.x=element_text(size=9,margin = margin(b=10)),
axis.text.y.left = element_text(margin = margin(l=10))
) +
scale_fill_gradient(low=mycolor_hex("light_blue"), high=mycolor_hex("light_orange"))->pledged1
grid.arrange(backer1, pledged1,ncol=2)Berdasarkan perbandingan antara grafik diatas, pola naik turun dari jumlah pemberi dana dan total pendanaan proyek dari tahun 2009-2019 selalu sama setiap tahunnya. Dengan begitu dapat disimpulkan bahwa, jika jumlah pemberi dana meningkat maka total pendanaan proyek di kickstarter juga akan meningkat.
Dari tahun 2009-2019, pola dari jumlah proyek dan jumlah pendanaan yang mengikuti Project Campaign di Kickstarter relatif naik-turun. Tahun 2015 merupakan tahun dimana jumlah proyek di kickstarter paling banyak sekaligus tahun dimana tingkat kesuksesan proyek terendah. Sebuah proyek dikatakan sukses apabila jumlah dana yang didapatkan mencapai atau lebih dari goal yang ditentukan. Sesuai analisa diatas, jumlah dana yang didapatkan dari sebuah proyek sangat tergantung dari jumlah kontributor yang memberikan dana. Sehingga saran yang dapat diberikan jika hendak mengikuti project campaign di Kickstarter yaitu:
1. Terus update terkait proyek apa yang sedang tren dan relevan.
2. Membuat target goal yang realistis.
3. Melakukan pemasaran melalui media-media yang bisa menjangkau banyak calon kontributor.
4. Bangun komunikasi dan berikan feedback ke calon kontributor maupun platform Kickstarter.