Search

04. ML Workflow - 데이터 수집

Created
2023/06/28 07:08
Tags
data science
machine learning
데이터 수집 : 정의한 데이터를 실제로 가져와서 Data Mart를 구축하는 작업.
분석 데이터 정의에 맞는 데이터를 직접 가져옵니다. (수집) → 직접 수집을 해야하는 경우라면, Web Crawling을 사용!
데이터가 Data Warehouse에 없는 경우라면, Data Engineer에게 요청을 합니다. (Data Warehouse란, data source로 부터 추출한 데이터에 전처리를 수행해서, 정해진 schema에 맞게 저장한 대용량 데이터베이스를 의미합니다)
어떤 데이터를 가져오느냐에 따라 분석 결과의 품질이 결정됩니다. → Data Quality
정의한 데이터는 실제 저장되어 있는 데이터와 1:1 매칭이 되지 않을 수 있습니다. → 데이터 정합성 평가
다양한 source에 있는 데이터를 가져와서 합쳐야할 수도 있습니다.
모든 작업이 끝나면 정의한 분석 도구에 맞게 포맷을 변경해줍니다.

데이터 마트 생성

이미 Data Warehouse에 정의가 되어있다면, SQL(이나 다른 BI 솔루션)을 사용해서 필요한 데이터를 가져옵니다.
여러 source들에 있다면 하면, 필요하다고 생각되는 데이터들을 일단 모두 가져옵니다.
이 데이터가 원하는 형태로 합쳐지는지 테스트하는 것을 “데이터 정합성 평가” 라고 합니다.
분석에 필요한 데이터가 어느 기간에 수집된 데이터인지, 어떤 기관에서 수집한 데이터인지, 정의한 특징을 모두 포함하고 있는지를 확인합니다. (sanity check)
Iris dataset으로 Data Mart를 만드려면?
만약에, DB에 데이터가 없다면 → 직접 수집. (나가서 채집, 웹에 있다면 크롤링, ...)
만약에, DB에 데이터가 있다면 → 앞에서 정의한 특징들이 포함되어 있는지 확인하고, 해당 데이터셋을 가져옵니다.

데이터 정합성 평가

데이터를 합칠 때 생기는 이슈들을 체크하는 과정.
아래 예시를 보고, 이 두 개의 테이블을 합친다면(JOIN operation) 어떤 것들을 체크해야할까요?
user_id, time column이 존재하는가 → O
row가 정의된 단위(unit)이 일치하는가 → X : time unit이 다르다! (yymmddhhmmss VS yymmddhh0000) → 초 단위를 시간(hour) 단위로 합쳐줍니다.

데이터 취합

정합성 평가를 통과했다면, 원하는 데이터를 합칩니다.
JOIN 연산의 결과가 처음 생각했던 것과 맞는지 체크합니다. (sanity check)

데이터 포맷 통일

취합한 결과가 table(in DBMS)인데, 분석할 때는 csv file이 필요한 경우에는 변경해줍니다.
분석 도구의 input type을 보고 결정합니다.

요약

분석에 사용할 데이터를 수집할 땐, DW를 확인하거나 직접 웹에서 수집하는 방법이 있다.
분석 정의에 맞는 Data Mart를 잘 정의해서 데이터를 가져와야 한다.
Data Mart에서 필요한 데이터를 가져온 뒤, 데이터 정합성 평가를 수행하여 분석에 사용할 데이터를 만든다.
뒤에서 수행할 feature engineering을 수행하기에 문제 없는 데이터를 만드는 것을 목표로 한다.

(Optional, Advanced) Hands-on

1.
이미 존재하는 Iris dataset을 종 별로 나눠서 table로 만들어보세요. 원래 어떤 형태였을지 고민해보세요. (pandas, SQL 무엇을 쓰셔도 상관없지만, Excel을 추천합니다!)
2.
나눈 table에 임의대로 새로운 column 2개(수집시간, 수명)를 추가해보세요. setosa는 수명은 Normal(10, 3)의 분포를 따르는 값으로, versicolor는 Normal(10, 1)을 따르는 값으로, virginica는 Normal(1, 0.3)을 따르는 값으로 생성하여 보세요. (단, 수집시간에 대해서는 자유롭게 아무 값이나 넣으셔도 됩니다. 예시일 뿐입니다)
3.
만들어진 데이터들을 다시 합친다고 했을 때, 수명 정보가 유의미한지 고민해보고 유의미하다고 판단되면 해당 데이터도 합쳐질 수 있게 해보세요.