DATA EDA 및 전처리

TEAM1

전체적 EDA 과정 및 전처리

  • 사용한 데이터: PS_DATA, PAY_DATA

  • 데이터는 모두 23년을 기준으로 사용

  • 연령대별 인터넷 서비스 이용 분포 시각화

  • 연령대별 (20대 ~ 60대) 미디어 콘텐츠 선호도, OTT 선호도 시각화

  • 연령대별 (20대 ~ 60대) 카드사, 결제 카테고리, 연간 소득 분포(1인가구 기준), 연간 평균 소비 금액 시각화

필요한 라이브러리 및 데이터 load

library(dplyr) 
library(ggplot2)

#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")

20대 인터넷 서비스 이용 분포

20대 영화

20대 영화 장르 선호 분포도를 확인 (상위 5개)

20대 TV

20대 TV 장르 선호 분포도를 확인 (상위 5개)

20대 라디오

20대 라디오 장르 선호 분포도를 확인 (상위 5개)

20대 미디어 동영상 콘텐츠

20대 미디어 동영상 콘텐츠 선호 분포 확인 (상위 5개)

20대 OTT 서비스

30대 OTT서비스 선호 분포 확인 (상위 5개)

20대 카드사

20대 주 이용 카드사 분포 확인 (상위 5개)

20대 결제 카테고리

20대 결제 카테고리 분포 확인 (상위 5개)

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

20대 연간 소득 분포 확인 (1인 가구 기준)

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")

30대 인터넷 서비스 이용 분포

30대 영화

30대 영화 장르 선호 분포도를 확인 (상위 5개)

30대 TV

30대 TV 장르 선호 분포도를 확인 (상위 5개)

30대 라디오

30대 라디오 장르 선호 분포도를 확인 (상위 5개)

30대 미디어 동영상 콘텐츠

30대 미디어 동영상 콘텐츠 선호 분포 확인 (상위 5개)

30대 OTT 서비스

30대 OTT서비스 선호 분포 확인 (상위 5개)

30대 카드사

30대 주 이용 카드사 분포 확인 (상위 5개)

30대 결제 카테고리

30대 결제 카테고리 분포 확인 (상위 5개)

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

30대 연간 소득 분포 확인 (1인 가구 기준)

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")

40대 인터넷 서비스 이용 분포

40대 영화

40대 영화 장르 선호 분포도 확인 (상위5개)

40대 TV

40대 TV 장르 선호 분포도 확인 (상위 5개)

40대 라디오

40대 라디오 장르 선호 분포도 확인 (상위 5개)

40대 미디어 동영상 콘텐츠

40대 미디어 동영상 콘텐츠 선호 분포 확인 (상위 5개)

40대 OTT 서비스

40대 OTT 서비스 선호 분포 확인 (상위 5개)

40대 카드사

40대 주 이용 카드사 분포 확인 (상위 5개)

40대 결제 카테고리

40대 결제 카테고리 분포 확인 (상위 5개)

40대 연간 소득분포

40대 연간 소득 분포 확인 (1인 가구 기준)

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")

50대 인터넷 서비스 이용 분포

50대 영화

50대 영화 장르 선호 분포도 확인 (상위 5개)

50대 TV

50대 TV 장르 선호 분포도 확인 (상위 5개)

50대 라디오

50대 라디오 장르 선호 분포도 확인 (상위 5개)

50대 미디어 동영상 콘텐츠

50대 미디어 동영상 콘텐츠 선호 분포 확인 (상위 5개)

50대 OTT 서비스

50대 OTT 서비스 선호 분포 확인 (상위 5개)

50대 카드사

50대 주 이용 카드사 분포 확인 (상위 5개)

50대 결제 카테고리

50대 결제 카테고리 분포 확인 (상위 5개)

50대 연간 소득분포

50대 연간 소득 분포 확인 (1인 가구 기준)

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")

60대 인터넷 서비스 이용 분포

60대 영화

60대 영화 장르 선호 분포도를 확인 (상위 5개)

60대 TV

60대 TV 장르 선호 분포도 확인 (상위 5개)

60대 라디오

60대 라디오 장르 선호 분포도 확인 (상위 5개)

60대 미디어 동영상 콘텐츠

60대 미디어 동영상 콘텐츠 선호 분포 확인 (상위 5개)

60대 OTT 서비스

60대 OTT 서비스 선호 분포 확인 (상위 5개)

60대 카드사

60대 주 이용 카드사 분포 확인 (상위 5개)

60대 결제 카테고리

60대 결제 카테고리 분포 확인 (상위 5개)

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

60대 결제 카테고리 분포 확인 (상위 5개)

23년 기준 연평균 연령대별 소비금액

<상/하위 값 10% 제거>