DATA EDA 및 전처리

TEAM1

전체적 EDA 과정 및 전처리

  • 사용한 데이터: PS_DATA, PAY_DATA

  • 해당 프로젝트에서는 모두 23년을 기준으로 데이터를 추출하여 사용

  • 연령대별로(20~60대) 데이터 분리

  • PS_DATA: (PS_20, PS_30, PS_40 … PS_60)

  • 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 load
PS_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_colnames
  return(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")

연령대별 이용 인터넷 서비스

연령대별로 주로 이용하는 인터넷 서비스를 확인

OTT 서비스 이용률 종합 1위

전 연령대 통합 최다 이용 OTT 서비스 시각화

연령대별 연간소득 분포 (1인 가구 기준)

연령대별 연평균 소비금액 (회당)

<상/하위 값 10% 제거>

최빈 사용 카드 (연령대별 상위 5개)

연령대별로 가장 많이 사용하는 카드사 시각화

신한카드 이용자 결제 카테고리

신한카드 이용자들의 연령대별 상위 5개의 결제 카테고리 분포 시각화

연령대별 TV 장르 선호도

연령대별 영화 장르 선호도

연령대별 미디어 동영상 콘텐츠 선호도

Netflix 사용자의 TV 장르 선호도(1)

통합

Netflix 사용자의 TV 장르 선호도(2)

연령대별