2026.04.08(Wed)

오유찬·2026년 4월 10일

DE

목록 보기
4/16

dbt workflow
1. dbt init
2. profiles.yml 파일에서 설정 정의, 업데이트
3. 데이터 모델 정의 & 사용 (dbt run)
- 데이터 모델 : 데이터 웨어하우스에 저장된 원천 데이털르 변환한 결과
- dbt run : 원본 SQL 코드르 프로필(배포 대상)에 맞게 변환한 뒤, 변환 과정을 수행
4. 데이터 검증 & 테스트
5.

데이터를 어떤 형태로 저장하고 보여줄 것인가? 에 대한 전략

  1. View
    • 데이터 저장 X, 호출될 때마다 SQL 쿼리 실행
    • 저장 공간 차지 X
  2. Table
  3. Incremental
    • 추가된 데이터만 이어 붙임
  4. Ephemeral(임시)
    • DB에 어떤 것도 남기지 않는다.

Materialized View(구체화된 뷰)

  • 쿼리 결과 저장 → 속도는 Table처럼 빠름
  • 원본 데이터 변하면 백그라운드에서 자동으로 업데이트 시도

완전 무작위 누락(MCAR) : 결측 데이터와 다른 값 사이에 체계적인 관계가 없음

  • 데이터 입력 시 입력 오류
    무작위 결측(누락)(MAR) : 결측 데이터와 다른 관측된 값 사이에 체계적인 관계가 있음
  • 높은 기온에 대한 오존 데이터 결측
    비무작위 결측(MNAR) : 결측 데이터와 관측되지 않은 값 사이에 체계적인 관계가 있음
  • 높은 기온에 대한 온도 값 결측

process.extract(비교의 기준이 되는 문자열, 비교할 대상들이 담긴 리스트나 딕셔너리, limit=유사도가 높은 순서대로 몇 개의 결과 가져올지 결정)

페어 생성하기, 블로킹
recordlinkage,compare, exact

# import recordlinkage
import recordlinkage

# create indexing object
indexer = recordlinkage.Index()

# generate pairs blocked on state
indexer.block('state')
pairs = indexer.index(column_A, column_B)

# create a compare object
compare_cl = recordlinkage.Compare()

# find exact matches for pairs of column
compare_cl.exact('column', 'column', label='label_name')

# find similar matches for pairs of surname and address_1 using string similarity
compare_cl.string('surname', 'surname', threshold=0.85, label='label_name')

# find matches
potential_matches = compare_cl.compute(pairs, column_A, column_B)

recordlinkage

서로 다른 두 데이터셋에서 같은 대상을 가르키는 행들을 찾아내는 과정

ex) A 데이터셋의 A 식당과 B데이터셋의 B 식당이 같은 식당인가?
city, cuisine_type을 먼저 비교해.

Indexing(Block) : 비교할 범위를 제한
Compare(exact) : 완벽히 일치해야 하는 항목 → 같으면 True, 다르면 False
Compare(string): 오타가 있어도 비슷한 항목 → Threshold 이상 = 1
Compute: 최종 점수 계산

페어 생성 → 컬럼 간 비교 → 잠재적 매치 찾기 → 중복 탐색 → 두 데이터프레임 붙이기

Python으로 데이터 정제하기 Again → Record Linkage

  • Python에서 날짜와 시간 다루기
  • Python 정규표현식
  • Python에서 결측치 처리
profile
열심히 하면 재밌다

0개의 댓글