반응형
SMALL
1. 데이터 웨어하우스와 데이터 마트
1. 데이터 웨어하우스
1. 데이터 웨어하우스
- 정의
- 사용자의 의사 결정 지원을 위해 데이터를 분석 가능한 형태로 저장한 중앙 저장소로서, 정보(data)와 창고(warehouse)의 합성어이다.
- 데이터 웨어하우스는 기존 정보를 활용해 더 나은 정보를 제공하고, 데이터의 품질을 향상 시키며, 조직의 변화를 지원하고 비용과 자원 관리의 효율성을 향상 시키는 것이 목적이다.
- 특징
- 통합성: 다양한 데이터 원천으로부터 데이터를 모두 통합하여 관리
- 주제 지향성: 주제(ex, 고객 공급자, 상품 등)를 중심으로 구성되며, 따라서 최종 사용자가 이해하기 쉬운 형태를 가진다.
- 시계열성: 기존 운영 시스템은 최신 데이터를 유지하는데 반해, 데이터 웨어하우스는 시간에 따른 변경 이력 데이터를 보유한다.
- 비휘발성: 데이터 웨어하우스에 저장되는 데이터는 삭제 및 변경되지 않고, 일단 적재가 완료되면, 읽기 전용 형태의 스냅 샷 데이터로 존재한다.
2. 데이터 마트
- 정의
- 데이터 웨어하우스와 사용자 사이의 중간층에 위치한 것으로, 하나의 주제 또는 하나의 부서 중심의 데이터 웨어하우스라고 할 수 있다.
- 데이터 마트 내 대부분의 데이터는 데이터 웨어하우스로부터 복제되지만, 자체적으로 수집될 수도 있으며, 관계형 데이터 베이스나 다차원 데이터 베이스를 이용하여 구축한다.
- 데이터 마트를 만들 때 가장 중요한 데이터들은 데이터 웨어하우스로부터 받아오는 데이터로, 받아온 데이터를 처리 과정을 통해 분석에 적절하게 활용할 수 있는 자료로 변환해야한다.

2. 파생 변수와 요약 변수
1. 파생 변수
- 사용자(분석자)가 특정 조건을 만족하거나 특정 함수에 의해 값을 만들어 의미를 부여한 변수이다.
- 매우 주관적일 수 있으므로, 논리적 타당성을 갖추어 개발해야 한다.
- 세분화, 고객 행동 예측, 캠페인 반응 예측에 매우 잘 활용된다.
- 파생변수는 상황에 따라 특정 상황에만 유의미하지 않게 대표성을 나타나게 할 필요가 있다.
ex) 근무시간 구매자 수, 주 구매 매장 변수, 주 활동 지역 변수, 주 구매 상품 변동수, 구매 상품 다양성 변수, 선호하는 가격대 변수, 시즌 선호 고객 변수 등
2. 요약 변수
- 수집된 정보를 분석에 맞게 종합한 변수이다.
- 데이터마트에서 가장 기본적인 변수로 총 구매 금액, 금액, 횟수, 구매여부 등 데이터 분석을 위해 만들어지는 변수이다.
- 많은 모델을 고통으로 사용할 수 있어 재활용성이 높다.
- 합계, 횟수와 같이 간단한 구조이므로 자동화하여 상황에 맞게 또는 일반적인 자동화 프로그램으로 구축 가능하다.
ex) 기간별 구매 금액, 기간별 구매 횟수, 상품별 구매 금액, 상품별 구매 순서, 위클리 쇼퍼, 유통 채널별 구매 금액, 단어 빈도, 초기 행동 변수 등
3. R 패키지를 활용한 데이터 마트 개발
1. reshape
- reshape 패키지에는 melt()와 cast()라는 2개의 핵심 함수가 있다.(철을 녹이고 다시 틀에 넣어 모양을 만드는 과정에 비유하며, 녹이는 함수를 melt(), 모양을 만드는 함수를 cast()로 사용한다.)

2. sqldf
- sqldf는 R에서 sql의 명령어를 사용 가능하게 해주는 패키지이다.
- SAS에서 PROC SQL과 같은 역할을 하는 패키지이다.
- sql에서 사용하는 명령어: select * from [data frame]
- R에서 사용하는 명령어: sqldf(”select * from[data frame]”)
- sql에서 사용하는 명령어: select * from [data frame] numrows 10
- R에서 사용하는 명령어: sqldf(”select * from [data frame] limit 10”)
- sql에서 사용하는 명령어: select * from [data frame] where [col] like ‘char%’
- R에서 사용하는 명령어: sqldf(”select * from [data frame] where [col] like ‘char%’”)
3. plyr
- plyr 패키지의 함수들은 데이터를 분할(split)한 뒤 원하는 방향(행, 열, 행열 모두)으로 특정 함수를 적용하고(apply), 그 결과를 재조합(combine)하여 반환해준다.
- 여러 함수로 처리해야 할 데이터의 분할, 함수 적용, 재조합을 한번에 처리할 수 있기 때문에 매우 효율적이고 편리한 패키지이다.
- plyr 패키지의 함수 대부분은 ‘**ply’ 형태로 이루어져 있으며, 첫번째 글자는 입력 데이터의 형태를 의미하고 두 번째 글자는 출력 데이터의 형태를 의미한다. ‘*’자리에 들어갈 수 있는 글자와 의미는 아래와 같다.
- a: array(배열)
- l: list(리스트)
- d: data frame(데이터 프레임)
- _: 아무런 출력을 하지 않음(두번째 자리인 출력 데이터타입 형태로만 지정이 가능)
4. data.table
- data.table 패키지는 연산속도가 매우 빨라 크기가 큰 데이터를 처리하거나, 탐색하는데 유용하며, 그만큼 자주 사용되는 패키지이다.
- 특정 컬럼을 키 값으로 색인을 지정한 후 데이터를 처리한다.
- 데이터 테이블은 데이터 프레임과 동일하게 취급되므로 데이터 프레임에 적용할 수 있는 함수들을 데이터 테이블에 적용할 수도 있다.
- 데이터테이블[행,열,by=”그룹화 기준 변수”]
############################################################
# 예제용 공통 데이터 만들기
############################################################
# data.frame(): 여러 벡터를 모아서 표(데이터 프레임)를 만드는 함수
# as.Date(): 문자열을 날짜(Date) 타입으로 변환
sales <- data.frame(
고객ID = c(1,1,1,2,2,3,3,3,3),
상품 = c("A","B","A","A","C","B","B","C","A"),
채널 = c("온라인","오프라인","온라인","온라인","오프라인",
"온라인","오프라인","온라인","오프라인"),
구매금액 = c(10000, 15000, 8000, 20000, 5000, 12000, 7000, 9000, 3000),
구매일자 = as.Date(c("2025-01-01","2025-01-05","2025-01-10",
"2025-01-03","2025-01-20",
"2025-01-02","2025-01-15",
"2025-01-18","2025-01-25"))
)
sales
############################################################
# 1. reshape2: melt() / dcast()
############################################################
# install.packages("reshape2") # 처음 한 번만 설치
library(reshape2) # reshape2 패키지 로드
# melt():
# - 넓은(wide) 형식의 데이터를 길게(long) 풀어서
# - "ID 변수"와 "측정값 변수" 구조로 만드는 함수
sales_long <- melt(
sales,
id.vars = c("고객ID", "상품"), # 그룹을 나타내는 ID 컬럼들
measure.vars = "구매금액" # 녹여낼(측정값) 컬럼
)
sales_long
# dcast():
# - long 형태 데이터를 다시 wide 형태로 재구조화
# - 행~열 기준을 지정하고, 요약함수(fun.aggregate)를 사용해 집계
고객_상품_요약_reshape <- dcast(
sales_long,
고객ID ~ 상품, # 행: 고객ID, 열: 상품
fun.aggregate = sum, # 같은 조합 여러 행이면 합계
value.var = "value" # 집계할 값 컬럼 (melt에서 나온 value)
)
고객_상품_요약_reshape
############################################################
# 2. sqldf: R 데이터프레임에 SQL 문법 사용
############################################################
# install.packages("sqldf")
library(sqldf) # sqldf 패키지 로드
# sqldf():
# - 문자열로 작성한 SQL 쿼리를 R 데이터프레임에 실행
# - FROM 뒤에 오는 이름이 R 안의 데이터프레임 이름
# 예) 고객별 총 구매금액, 구매횟수
고객요약_sql <- sqldf("
SELECT 고객ID,
SUM(구매금액) AS 총구매금액, -- SUM(): 합계 함수
COUNT(*) AS 구매횟수 -- COUNT(): 행 개수
FROM sales
GROUP BY 고객ID -- 고객ID 기준 그룹화
")
고객요약_sql
# 예) 채널별 총 구매금액
채널요약_sql <- sqldf("
SELECT 채널,
SUM(구매금액) AS 채널별총구매금액
FROM sales
GROUP BY 채널
")
채널요약_sql
# 예) 조건 사용: WHERE로 필터링
고객1_온라인_sql <- sqldf("
SELECT *
FROM sales
WHERE 고객ID = 1
AND 채널 = '온라인'
")
고객1_온라인_sql
############################################################
# 3. plyr: ddply() — split / apply / combine
############################################################
# install.packages("plyr")
library(plyr) # plyr 패키지 로드
# ddply():
# - data frame(d)를 그룹 단위로 나눠(split)
# - 각 그룹에 함수를 적용(apply)한 후
# - 결과를 다시 data frame(d)으로 합쳐(combine) 줌
# - 첫 글자(d): 입력 타입, 두 번째 글자(d): 출력 타입
고객_채널_요약_plyr <- ddply(
sales,
.(고객ID, 채널), # 그룹 기준 컬럼들
summarise, # 그룹별 요약을 하겠다는 의미
총구매금액 = sum(구매금액), # 그룹 내 합계
구매횟수 = length(구매금액), # 그룹 내 행 개수
평균구매금액 = mean(구매금액) # 그룹 내 평균
)
고객_채널_요약_plyr
############################################################
# 4. data.table: 대용량 데이터 빠른 집계
############################################################
# install.packages("data.table")
library(data.table) # data.table 패키지 로드
# as.data.table():
# - data.frame을 data.table 객체로 변환
dt <- as.data.table(sales)
# dt[ i , j , by ] 문법:
# - i: 행 조건(필터)
# - j: 계산/선택할 표현식
# - by: 그룹화 기준
# .(): data.table에서 그룹 기준을 묶어주는 helper (list와 유사)
# .N: data.table에서 그룹 내 행(row) 개수를 나타내는 특수변수
# 1) 고객별 요약 (총금액, 횟수, 마지막 구매일)
고객요약_dt <- dt[
, .(
총구매금액 = sum(구매금액),
구매횟수 = .N, # 해당 그룹의 행 개수
마지막구매일자 = max(구매일자)
),
by = .(고객ID) # 고객ID로 그룹화
]
고객요약_dt
# 2) 고객 × 상품별 총 구매금액
고객_상품_요약_dt <- dt[
, .(총구매금액 = sum(구매금액)),
by = .(고객ID, 상품) # 고객ID, 상품 기준 그룹
]
고객_상품_요약_dt
# setkey():
# - 특정 컬럼을 인덱스(key)로 설정해서 빠른 조회 가능
setkey(dt, 고객ID)
# dt[.(1)]:
# - key로 설정된 컬럼(고객ID) 값이 1인 행들을 빠르게 조회
dt[.(1)]반응형
LIST
'데이터분석-ADSP > 3과목-데이터분석' 카테고리의 다른 글
| R프로그래밍 기초 (0) | 2025.11.25 |
|---|---|
| 데이터 분석 개요 (1) | 2025.11.04 |