조형준DATA PORTFOLIO
CASE 03 / 회사 업무 / 업무 개선

교통카드 데이터 전처리 코드

지역별 입력 차이를 처리하는 공통 실행 구조

핵심 요약

도시별 입력 차이를 분리하고, 기존 계산 결과를 유지했습니다.

원주 7일 · 산출물 49개 비교 · 최종 결과 대조

내 역할R→Python 전환, 입력 표준화, 실행 설정 분리, 기존 결과 대조

도구Python · pandas · argparse · Excel

기록2026.07.13–14 개편·검증 기록

작업 배경 · 도시마다 다른 파일명과 항목 때문에 반복 수정이 필요했던 교통카드 분석 코드를 R에서 Python으로 전환했습니다.

확인된 개편·검증 기록: 2026.07.13–14 / 검증에 사용한 원주 자료 기간: 2023.10.16–22

웹 작업 기록 QR 코드

웹 작업 기록QR 또는 제목 링크로 상세 내용 열기

업무 결과

작성한 자료와 확인한 결과

지역별로 계산 코드를 복제하는 대신 입력 차이를 설정으로 다루도록 개선했습니다.

원주 7일 자료의 기존 산출물 49개를 단계별 기준으로 대조하고 최종 혼잡도 결과의 일치를 검증했습니다.

교통카드 데이터 전처리 · 비교 실험

쓰기 쉬운 구조로 바꾸고,
같은 결과가 나오는지 확인했습니다.

R 보관본과 현재 Python을 비교합니다. 코드 구조의 변화, 계산 정확성, 실행 성능, 실제 업무 효과를 각각 확인합니다.

바꾸려던 것은 반복 수정이 필요한 업무 구조입니다

A · R 보관본

도시마다 파일명·컬럼명·경로가 달라 계산 코드 안의 입력 처리 부분을 수정해야 했습니다.

B · 현재 Python

지역별 입력 설정과 공통 계산을 분리했습니다. 필수 파일 누락·지역 불일치·모호한 파일 선택은 계산 전에 중단합니다.

목표는 분석자가 바꿀 위치를 분명하게 하고 같은 계산을 재사용하는 것입니다. 수작업 시간 절감률은 실제 업무 기록으로 별도 검증해야 합니다.

OFFLINE COMPARISON · MEASURED

R 보관본과 현재 Python을 같은 입력으로 실행했습니다

각 2회 실행 완료출력 8개 기준 일치실제 업무 A/B는 미실행

원주 2023.10.16 하루의 하차 결측보정을 대상으로, 7일 이력을 사용했습니다. 입력 읽기부터 계산·CSV 저장까지 측정하고, 각 실행 후 산출물의 열 순서·행 수·전체 값을 기존 기준과 대조했습니다.

실행시간 중앙값 · 짧을수록 빠름

R 보관본

최대 RSS 중앙값 8.59 GiB

지역별 경로·변수와 계산이 하나의 스크립트에 있습니다. 원본 계산은 유지하고 실행 경로·대상 날짜만 조정했습니다.

현재 Python

최대 RSS 중앙값 2.00 GiB

입력 설정과 공통 계산을 분리했습니다. 파일·지역·선택의 모호함을 실행 전에 검증하는 구조입니다.

판단 · 정확성은 유지, 속도 개선은 확인되지 않음

이번 측정에서 Python 실행시간은 R의 2.65배였습니다. 전환의 가치는 입력 설정과 공통 계산을 분리한 사용·수정 구조에 있습니다. 처리 속도 개선이나 담당자의 수작업 시간 절감이 입증된 것은 아닙니다.

실행별 측정 결과

실행 순서구현실행시간(초)최대 RSS(GiB)출력 2개 / 기준 대조
1R 보관본161.628.59전체 값 일치
2현재 Python429.562.00전체 값 일치
3현재 Python430.912.00전체 값 일치
4R 보관본162.788.59전체 값 일치
원본 출처·측정 조건·비교 범위

비교에는 보관된 원주시 결측보정 R 코드를 사용했습니다. 원본 해시를 고정했으며, 최초 작성 버전인지는 별도 이력으로 확인하지 않았습니다.

기준 파일: 원주시 결측보정 코드.R · SHA-256 015956b32b6b048d9e1b4b7f8df0c70fa9128b1789047e416336b5a4978d01c8

같은 컨테이너 이미지, 실행별 2 CPU·24 GiB 한도, 외부 통신 차단, 원본 읽기 전용. R → Python → Python → R 순서로 각 2회 실행했습니다. 각 실행 제한은 900초이며 이전 단일 준비 실행은 이 통계에 합치지 않았습니다.

각 2회, 한 날짜, 공유 호스트, OS 파일 캐시 초기화 없음. 모집단 추론·유의확률·인과효과 추정 없음. 결측보정 두 단계만 비교했으며 시간보정·최종 혼잡도 생성 전체의 실행시간은 아닙니다. 값 비교는 기존 기준대로 NA·빈칸·숫자 .0·공백을 정규화하며 중복 행을 보존합니다.

측정값·검증 결과 JSON

전환 전체의 정확성은 어떻게 확인했나

49개2026.07 · 7일·3단계 산출물 비교
14 / 142026.09 · 보존 결측보정 CSV 재대조
8 / 8이번 반복 실행 산출물 대조

49개는 이전 전환 검증, 14개는 보존 파일 재대조, 8개는 이번 하루치 4회 실행의 산출물입니다. 서로 다른 검증 범위이므로 합산한 성과로 제시하지 않습니다.

보존 CSV 14개 · 날짜별 검증 기록
대상 날짜단계R 행 수Python 행 수전체 셀 비교
2023-10-16step126,61626,616일치
2023-10-16step226,52126,521일치
2023-10-17step127,80827,808일치
2023-10-17step227,72027,720일치
2023-10-18step126,08126,081일치
2023-10-18step225,97125,971일치
2023-10-19step125,51225,512일치
2023-10-19step225,42325,423일치
2023-10-20step127,23127,231일치
2023-10-20step227,14927,149일치
2023-10-21step115,95515,955일치
2023-10-21step215,93815,938일치
2023-10-22step112,70812,708일치
2023-10-22step212,68312,683일치

재대조일 2026-09-21. 기존 기준대로 NA·빈칸·숫자 표기·공백을 정규화하고 열 순서와 전체 셀·중복 행 수를 대조했습니다.

기존 49개 비교에서 중간표 7행 차이는 어떻게 다뤘나

R 시간보정 중간표에는 날짜별 중복 식별값이 1건씩 있었습니다. 중복 기록과 재생성 번호를 구분해 업무 컬럼을 비교했고 최종 혼잡도 결과는 일치했습니다. 이번 실행은 결측보정 단계이며 이 시간보정 중복 처리를 적용하지 않습니다.

NEXT QUESTION · EXPERIMENT DESIGN

업무 A/B에서는 수작업 시간이 줄었는지 묻습니다

가설: Python 기반 방식이 최종 검수 오류를 늘리지 않으면서 작업당 수작업 시간을 줄인다.

설계 요소정의
비교 대상A: 기존 R 업무 방식 / B: 입력 설정·검증을 추가한 Python 업무 방식
배정지역·규모·난도·담당자를 고려한 실제 작업 묶음의 무작위 배정
주 지표작업당 수작업 시간(분)
함께 확인전체 완료 시간·재작업 횟수·최종 검수 오류
실행 전 확정사전 시험으로 표본 수·기간·종료·제외 기준 확정

실행 대기 · 배정 0건 / 담당자 측정 기록 0건

위 R/Python 오프라인 결과는 이 설계의 사전 기술 검증입니다. 사람의 업무 효과·유의확률·수작업 시간 절감률로 환산하지 않습니다.

업무 실험 설계 전문 · 전체 검증 요약 JSON

CODE & VALIDATION

코드 구성과 검증 방식

지역별 파일·항목 설정과 공통 계산 로직을 분리했습니다. 같은 의미의 항목명을 맞추고 필수 파일 누락·지역 불일치·모호한 파일 선택은 계산 전에 중단합니다. 수정할 위치와 실패 원인이 구분되는 구조입니다.

입력 처리와 계산의 경계

지역별 설정 읽기
→ 필수 파일·지역·파일 선택의 모호함 검사
→ 원본 항목명을 공통 항목명으로 대응
→ 공통 계산 실행
→ 기존 산출물과 단계별 기준으로 대조

구현 구조를 요약한 의사코드입니다. 회사 원본 코드나 실행 가능한 전체 프로그램이 아닙니다.

WORK LOG

작업 타임라인

해당 기간의 기록을 작업 순서로 정리했습니다. 검증 데이터는 2023.10.16–22 원주 자료입니다.

상세 작업 기록 · 4단계 펼치기
01

입력 조사

지역마다 달랐던 파일·항목 정리

동일한 의미의 항목이 노선명칭·노선명, 정류장순번·정류장순서처럼 다른 이름으로 들어왔습니다. 알려진 입력 차이를 지역 설정과 항목 대응표로 분리했습니다.

확인한 결과지역별 코드를 복제하기보다 입력을 공통 형식으로 맞추는 구조를 구성했습니다.

02

실행 구조 개편

Python 공통 계산과 입력 검사 연결

지역명과 입력 폴더를 받아 기존 하차 위치·시간 보정과 혼잡도 계산을 실행하도록 했습니다. 필수 파일 누락·지역 불일치·중복 후보를 실행 전에 검사했습니다.

지역·폴더 지정파일·항목 확인같은 계산 실행이전 결과 대조지역별 저장

확인한 결과입력이 모호할 때 임의의 파일로 결과를 만들지 않고 원인을 확인한 뒤 다시 실행하도록 했습니다.

03

결과 대조 중

중간표 차이의 원인부터 분리

R 중간표의 7행 차이가 원본의 중복 식별값에서 비롯됐음을 확인하고, 처리 과정에서 새로 부여되는 일련번호는 비교에서 제외했습니다.

확인한 결과원주 7일 자료의 산출물 49개(결측보정 14개·시간보정 21개·혼잡도 14개)를 단계별 기준에 맞춰 대조하고 최종 혼잡도 결과의 일치를 확인했습니다.

04

2026.07.13–14 기록

새 지역 적용 절차 정리

일부 체인 자료는 열 순서를 전제로 처리하므로 새 지역의 항목·예외 조건을 먼저 확인하도록 했습니다. 표본 실행과 결과 대조를 거쳐 적용하는 순서를 남겼습니다.

확인한 결과최종 결과는 재사용 가능한 실행 구조와 검증 절차입니다. 모든 도시의 새로운 형식을 자동 지원한다는 의미는 아닙니다.

분석 범위

알려진 입력 형식의 반복 수정 범위를 설정으로 좁혔습니다. 새 형식은 표본 검증이 필요하며, 작업시간 절감률은 측정하지 않았습니다.

세부 구현·검산·평가 조건 읽기

항목 이름을 맞추고 기존 계산 결과와 비교

지역별 파일 경로와 예외 조건을 실행 설정으로 분리해 계산 코드를 복제하지 않고 사용할 수 있도록 했습니다. 알려진 컬럼 명칭을 변환하고 숫자 자료형을 맞췄으며, 입력이 모호할 때 임의의 파일을 선택하지 않도록 처리했습니다.

원주 검증에서는 중간 R 마스터의 중복과 재생성 식별키를 비교 기준에 맞춘 뒤 업무 컬럼을 대조했습니다. 최종 산출물은 동일함을 확인했지만, 모든 중간 파일의 원시 행이 처음부터 같았다는 의미는 아닙니다.

연속 이동을 연결한 일부 체인 자료는 정해진 열 순서를 전제로 처리합니다. 새 지역은 항목 순서와 예외 조건, 표본 결과를 확인한 뒤 적용해야 합니다.

알려진 입력 형식을 정리한 구조입니다. 새로운 형식은 항목 순서와 예외 조건을 먼저 확인해야 하며 회사 계산 코드는 공개하지 않습니다.

실행 전 확인 예시

필수 파일이 없으면 누락된 역할을 표시하고 중단합니다. 선택 지역과 파일의 지역이 다르면 불일치를 표시하며, 같은 역할의 파일 후보가 여러 개라 모호하면 사용자가 정리한 뒤 다시 실행하도록 합니다.

용어와 집계 단위
용어이 자료에서의 의미
항목명·공통 계산컬럼명은 표의 열 이름입니다. 같은 뜻의 명칭을 맞추고 지역 설정을 바꿔 같은 계산을 실행하도록 구성했습니다.
모호한 파일 선택필수 자료의 같은 역할을 하는 파일이 여러 개면 어느 파일을 쓸지 임의로 결정하지 않습니다. 자료 안의 중복 행을 제거하는 것과 다른 검사입니다.