운석 데이터로 필터, 집계와 조인 만들기
NASA Open Data Portal의 운석 자료를 정리한 예제 CSV를 사용합니다. 이름, 질량, 분류, 발견 연도와 좌표를 포함한 45,712행의 데이터입니다.
프로젝트 준비
- CSV를 확인한 뒤 프로젝트에
meteorite_landings데이터셋으로 업로드합니다. year와mass는 수치형,class와nametype은 문자열로 읽을 수 있도록 스키마를 확인합니다.- 프로젝트의
+ New > Code repository에서 Repository type을 Pipelines, Language를 Python으로 선택하고Initialize repository를 누릅니다. src/myproject/datasets/meteor_analysis.py에 변환을 작성합니다. 기본 examples.py는 참고할 수 있습니다.
예제의 /Example Project/Meteorites는 실제 프로젝트의 폴더로 바꿉니다. 필요한 라이브러리를 환경에 추가하고 API 최소 버전을 충족해야 합니다.
만들 출력
| 출력 | 계산 | 예제 CSV의 결과 행 수 |
|---|---|---|
| meteorite_landings_cleaned | nametype이 Valid이고 year가 1950 이상인 행을 남깁니다. 1950년을 포함합니다. | 43,665 |
| meteorite_stats | 원본 전체에서 class별 mass 평균을 계산합니다. | 466 |
| meteorite_enriched | 원본을 class 평균과 inner join하고 mass가 평균보다 큰 행을 남깁니다. greater_mass 열도 유지합니다. | 3,935 |
| meteorite_L6 | Enriched 결과에서 class가 L6인 행을 선택합니다. | 668 |
| meteorite_H5 | Enriched 결과에서 class가 H5인 행을 선택합니다. | 410 |
| meteorite_H4 | Enriched 결과에서 class가 H4인 행을 선택합니다. | 349 |
정리된 데이터 출력과 평균 비교는 별도의 계산 경로입니다. 위 구성의 평균과 enriched는 Valid 및 1950 필터를 적용하기 전의 원본 전체를 기준으로 합니다. 필터한 모집단의 평균이 필요하면 통계와 비교 양쪽의 입력을 같은 정리 데이터로 맞춰야 합니다.
엔진별 구현
Polars, Pandas, Spark에서 필터부터 class별 출력 생성까지 같은 흐름을 만들 수 있습니다. 하나의 출력 집합에는 엔진 구현 하나를 선택합니다. 같은 출력 경로를 여러 엔진의 변환에서 동시에 선언하지 않습니다.
SQL로 필터를 작성하는 경로는 DuckDB를 사용할 수 있습니다. 단일 노드와 Spark의 메모리 및 실행 비용은 엔진 비교를 따릅니다.
Commit과 빌드
변환을 저장하고 commit한 뒤 오른쪽 위 Build로 출력을 계산합니다. 기본 프로젝트는 datasets 패키지의 변환을 자동 등록합니다.
반복 생성할 class별 변환은 src/myproject/datasets/meteor_class.py에 둘 수 있습니다. 생성한 객체 목록을 모듈 수준의 TRANSFORMS 변수로 보관해야 자동 발견 경로에서 모두 찾을 수 있습니다. Pipeline 등록의 입출력 확정 조건도 적용됩니다.
기존 로컬 Python 저장소 가져오기
이미 로컬에 코드가 있다면 새 Foundry Python 저장소의 템플릿 파일을 병합하여 가져올 수 있습니다.
-
위 절차로 Foundry 저장소를 먼저 만듭니다.
-
Code Repositories의
Work locally에서 그 저장소의 실제 Git remote URL을 얻습니다. 이전 GitHub 저장소의 URL과 구분하며 계정 인증 정보가 들어갈 수 있으므로 공유하지 않습니다. -
로컬 Git에 이 URL을
foundry라는 원격으로 등록합니다. 기존 origin을 유지할 수도 있고 목적에 맞게 원격 설정을 변경할 수도 있습니다. 원격 설정을 바꾸는 작업 자체는 commit 이력을 지우지 않습니다. -
작업 트리의 기존 변경을 정리한 뒤 Foundry 기본 브랜치를 fetch하고 새 작업 브랜치에서 병합합니다. 기본 브랜치가 master이고 testbranch가 아직 없는 예는 다음과 같습니다.
git fetch foundry git switch -c testbranch git merge foundry/master -
두 저장소가 독립적으로 만들어져
refusing to merge unrelated histories가 발생한 경우에만 그 결합 의도를 확인한 뒤 다음 옵션을 사용합니다.git merge --allow-unrelated-histories foundry/master이 옵션은 공통 조상이 없는 두 이력을 병합하도록 허용합니다. 이전 Git 이력을 삭제하거나 초기화하는 명령이 아닙니다. 충돌은 실제 파일 내용을 검토하여 해결합니다.
-
Foundry의 필수 템플릿 파일과 기존 코드를 프로젝트 구조에 맞추고 검토한 변경을 stage 및 commit합니다.
-
git push -u foundry testbranch로 올린 뒤 Code Repositories에 브랜치가 나타나고 checks가 성공하는지 확인합니다.
Foundry의 기본 브랜치가 main이면 위 master 참조를 실제 이름으로 바꿉니다. 로컬 개발의 인증과 지원 도구는 해당 저장소의 환경 조건을 따릅니다.