PAY_DATA: 분리된 PS_DATA의 PANEL_ID를 활용하여 추출 (Pay_data_20, Pay_data_30, Pay_data_30 … Pay_data_60)
시각화 요약
연령대별로 주로 이용하는 인터넷 서비스
전 연령 OTT서비스 이용률 종합 1위 (워드클라우드)
연령대별 연간 소득 분포
연령대별 연평균 소비금액 (회당) 평균값에 영향을 줄 수 있는 비정상적인 값(ex. 자동차 구매) 제거를 위해 상/하위 10%값은 제외
연령대별로 주로 이용하는 카드사 이를 바탕으로 빈도가 높은 카드사의 연령대별 결제 카테고리를 시각화
연령대별 TV, 영화, 미디어 콘텐츠 장르 선호도 (추가적으로 오리지넡 콘텐츠 인사이트를 위해Netflix를 선택한 사람들의 TV장르 선호도를 파악)
필요한 라이브러리 및 데이터 load
# 필요한 라이브러리 로드library(dplyr)library(ggwordcloud)library(RColorBrewer)library(dplyr) library(ggplot2)library(tidyr)library(reshape2)library(ggpubr)#PS_data loadPS_data <-read.csv("C:/R/PS data.csv")#Pay_data load file_paths <-c("C:/R/pay_data1.csv", "C:/R/pay_data2.csv", "C:/R/pay_data3.csv")# 실제 공통된 열 이름으로 변경common_colnames <-c("PANEL_ID", "SMS_REGISTRATION_DATE", "SMS_REGISTRATION_TIME", "APPROVAL_PRICE", "APPROVAL_STORE", "APPROVAL_TYPE", "CARD_PAYMENT_TYPE","BRANDNAME_N", "CATE_LEVEL3", "COMPANY_NAME", "APPROVAL_METHOD", "APPROVAL_UNIT", "APPROVAL_REAL_PRICE", "NUM")# 각 파일을 읽고 열 이름을 맞춘 후 병합Pay_data_list <-lapply(file_paths, function(file) { df <-read.csv(file)# 공통 열 이름으로 변경colnames(df) <- common_colnamesreturn(df)})Pay_data <-do.call(rbind, Pay_data_list)# 2023으로 시작하는 SMS_REGISTRATION_DATE 값을 가진 행만 추출 -> 23년 결제 내역Pay_data <- Pay_data %>%filter(grepl("^2023", SMS_REGISTRATION_DATE))
20대 데이터 추출
# 2023년 기준 20대의 출생년도 범위를 계산start_year_20s_2023 <-2023-29# 20세에서 29세end_year_20s_2023 <-2023-20# 2023년 기준 20대에 해당하는 데이터를 필터링PS_20 <- PS_data %>%filter(X0002 >= start_year_20s_2023 & X0002 <= end_year_20s_2023)# <Pay_data># PS_30와와 패널 ID가 일치하는 행만 Pay_data에서 추출 -> 30대를 선별Pay_data_20 <-semi_join(Pay_data, PS_20, by ="PANEL_ID")
30대 데이터 추출
#<Ps_data># 2023년 기준 30대의 출생년도 범위를 계산start_year_30s_2023 <-2023-39# 30세에서 39세 end_year_30s_2023 <-2023-30# 2023년 기준 30대에 해당하는 데이터를 필터링PS_30 <-subset(PS_data, X0002 >= start_year_30s_2023 & X0002 <= end_year_30s_2023)# <Pay_data># PS_30와와 패널 ID가 일치하는 행만 Pay_data에서 추출 -> 30대를 선별Pay_data_30 <-semi_join(Pay_data, PS_30, by ="PANEL_ID")
40대 데이터 추출
# 2023년 기준 40대의 출생년도 범위를 계산start_year_40s_2023 <-2023-49# 40세에서 49세end_year_40s_2023 <-2023-40# 2023년 기준 40대에 해당하는 데이터를 필터링PS_40 <-subset(PS_data, X0002 >= start_year_40s_2023 & X0002 <= end_year_40s_2023)# PS_40와 패널 ID가 일치하는 행만 Pay_data에서 추출 -> 40대를 선별Pay_data_40 <-semi_join(Pay_data, PS_40, by ="PANEL_ID")
50대 데이터 추출
# 2023년 기준 50대의 출생년도 범위를 계산start_year_50s_2023 <-2023-59# 50세에서 59세end_year_50s_2023 <-2023-50# 2023년 기준 50대에 해당하는 데이터를 필터링PS_50 <-subset(PS_data, X0002 >= start_year_50s_2023 & X0002 <= end_year_50s_2023)# PS_50와 패널 ID가 일치하는 행만 Pay_data에서 추출 -> 50대를 선별Pay_data_50 <-semi_join(Pay_data, PS_50, by ="PANEL_ID")
60대 데이터 추출
# 2023년 기준 60대의 출생년도 범위를 계산start_year_60s_2023 <-2023-69# 60세에서 69세 end_year_60s_2023 <-2023-60# 2023년 기준 60대에 해당하는 데이터를 필터링PS_60 <-subset(PS_data, X0002 >= start_year_60s_2023 & X0002 <= end_year_60s_2023)# PS_60와 패널 ID가 일치하는 행만 Pay_data에서 추출 -> 60대를 선별Pay_data_60 <-semi_join(Pay_data, PS_60, by ="PANEL_ID")