서울 공유자전거 따릉이가 나온지 8년 정도 되어가는데, 이미 가입할 사람은 다 가입했다고 생각하여 과연 신규 가입자가 더 있을까 하는 궁금증에 알아보게 되었습니다. 어떤 달에 가입이 많았는지, 성별 간 가입자의 차이, 연령대 별 가입자의 차이 r 코딩을 통해 분석했습니다.
library(readr)
## Warning: 패키지 'readr'는 R 버전 4.3.2에서 작성되었습니다
library(dplyr)
##
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
## Warning: 패키지 'ggplot2'는 R 버전 4.3.2에서 작성되었습니다
file_path <- "C:/Users/home/Desktop/서울특별시 공공자전거 신규가입자 정보(월별)_23.1-6.csv"
bycycle <- read_csv(file_path, locale = locale(encoding="CP949"))
## Rows: 96 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): 사용자코드, 연령대코드, 성별
## dbl (1): 가입일시
## num (1): 가입 수
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
bycycle
## # A tibble: 96 × 5
## 가입일시 사용자코드 연령대코드 성별 `가입 수`
## <dbl> <chr> <chr> <chr> <dbl>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
bycycle <- rename(bycycle, player="가입 수", sex="성별", age="연령대코드", date="가입일시", usercode="사용자코드", agecode="연령대코드")
bycycle
## # A tibble: 96 × 5
## date usercode agecode sex player
## <dbl> <chr> <chr> <chr> <dbl>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
bycycle$player <- as.integer(gsub(",", "", bycycle$player))
bycycle
## # A tibble: 96 × 5
## date usercode agecode sex player
## <dbl> <chr> <chr> <chr> <int>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
monthly_signup <- bycycle %>%
group_by(date) %>%
summarise(total_player = sum(player))
bycycle
## # A tibble: 96 × 5
## date usercode agecode sex player
## <dbl> <chr> <chr> <chr> <int>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
monthly_signup
## # A tibble: 6 × 2
## date total_player
## <dbl> <int>
## 1 202301 12942
## 2 202302 27969
## 3 202303 62456
## 4 202304 72028
## 5 202305 74856
## 6 202306 65473
most_signups <- monthly_signup[which.max(monthly_signup$total_player), ]
most_signups
## # A tibble: 1 × 2
## date total_player
## <dbl> <int>
## 1 202305 74856
print(most_signups)
## # A tibble: 1 × 2
## date total_player
## <dbl> <int>
## 1 202305 74856
ggplot(monthly_signup, aes(x = date, y = total_player, fill = date)) +
geom_bar(stat = "identity") +
theme_minimal() +
labs(title = "월별 가입자 수",
x = "가입일시",
y = "총 가입자 수")
You can also embed plots, for example:
bysex_signup <- bycycle %>%
group_by(sex) %>%
summarise(total_player = sum(player))
bycycle
## # A tibble: 96 × 5
## date usercode agecode sex player
## <dbl> <chr> <chr> <chr> <int>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
bysex_signup
## # A tibble: 2 × 2
## sex total_player
## <chr> <int>
## 1 F 147277
## 2 M 168447
most_signups <- bysex_signup[which.max(monthly_signup$total_player), ]
most_signups
## # A tibble: 1 × 2
## sex total_player
## <chr> <int>
## 1 <NA> NA
print(most_signups)
## # A tibble: 1 × 2
## sex total_player
## <chr> <int>
## 1 <NA> NA
ggplot(bysex_signup, aes(x = sex, y = total_player, fill = sex)) +
geom_bar(stat = "identity") +
theme_minimal() +
labs(title = "성별간 가입자 수",
x = "성별",
y = "총 가입자 수")
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
aged_signup <- bycycle %>%
group_by(agecode) %>%
summarise(total_player = sum(player))
bycycle
## # A tibble: 96 × 5
## date usercode agecode sex player
## <dbl> <chr> <chr> <chr> <int>
## 1 202301 회원-내국인 ~10대 F 1096
## 2 202301 회원-내국인 20대 F 2006
## 3 202301 회원-내국인 30대 F 961
## 4 202301 회원-내국인 40대 F 794
## 5 202301 회원-내국인 50대 F 479
## 6 202301 회원-내국인 60대 F 133
## 7 202301 회원-내국인 70대이상 F 20
## 8 202301 회원-내국인 기타 F 3
## 9 202301 회원-내국인 ~10대 M 1286
## 10 202301 회원-내국인 20대 M 2177
## # ℹ 86 more rows
aged_signup
## # A tibble: 8 × 2
## agecode total_player
## <chr> <int>
## 1 20대 120085
## 2 30대 66875
## 3 40대 45778
## 4 50대 26640
## 5 60대 8643
## 6 70대이상 1495
## 7 ~10대 45741
## 8 기타 467
most_signups <- aged_signup[which.max(aged_signup$total_player), ]
most_signups
## # A tibble: 1 × 2
## agecode total_player
## <chr> <int>
## 1 20대 120085
print(most_signups)
## # A tibble: 1 × 2
## agecode total_player
## <chr> <int>
## 1 20대 120085
ggplot(aged_signup, aes(x = agecode, y = total_player, fill = agecode)) +
geom_bar(stat = "identity") +
theme_minimal() +
labs(title = "연령대별 가입자 수",
x = "연령대",
y = "총 가입자 수")
첫 번째로 월에 따른 가입자 분석 결과를 보면, 5월이 가장 많고 그 다음으로는 4월, 6월, 3월, 2월, 1월 순이었습니다. 이는 계절에 영향을 받은 것으로 해석할 수 있습니다. 1월 2월에는 날씨가 추워 가입자 수가 적었고, 이후 날씨가 점점 따뜻해짐에 따라 가입자 수가 폭발적으로 증가한 것이 근거입니다.
두 번째로 성별 간 가입자 분석 결과를 보면, 남성이 여성보다 더 많은 신규 가입을 했습니다. 이는 여성과 남성의 의복 차이를 통해 설명할 수 있습니다. 서울에서 출퇴근 시간에 따릉이 이용률이 가장 높은데, 여성복이 남성복에 비해 자전거를 타는데 있어 불편할 수 있습니다. 이로 인해 자전거 이용이 제한되어 가입자 수가 적은 걸로 해석할 수 있습니다.
세 번째로 연령대 별 가입자 분석 결과를 보면, 20대가 가장 많았고 이후에는 30대, 40대, 10대, 50대, 60대, 70대, 기타 순입니다. 이는 20대가 대학교나 직장으로 이동할 때 교통수단으로 자전거를 많이 사용하기 때문입니다. 20대는 학생이거나 사회초년생인 경우가 대부분이기 때문에 상대적으로 비용이 적게 드는 교통수단을 선호합니다. 따릉이는 월 1~2천원 정도 밖에 안하기 때문에 그들에게 안성맞춤 교통수단인 것입니다.