Make로 데이터 작업 자동화
6498 단어 make
만들기란 무엇입니까?
대부분의 빌드 시스템은 무언가를 빌드하기 위한 것입니다. Java, C 등으로 코드를 컴파일합니다. Make도 그렇게 해야 하며 대부분의 자습서와 StackOverflow 질문에는 C 코드를 빌드하는 방법에 대한 예제가 포함되어 있습니다.
그러나 기본적으로 Make는 매우 간단합니다. 다음 내용으로 내 폴더에
Makefile
라는 텍스트 파일을 만듭니다.clean_data.csv: raw_data.csv data_cleaner.py
python data_cleaner.py
그런 다음 쉘에서
make
라고 말하고 Make는 clean_data.csv
에서 raw_data.csv
를 생성합니다.즉, 지정해야 합니다.
target: source
recipe
Make가 레시피를 실행합니다.
이 정보는 어쨌든 내 문서에 대해 기록하고 싶은 것입니다. 내 스크립트에는 무엇이 필요하며 무엇을 생성합니까? Makefile에 넣을 수도 있습니다.
이렇게 하면 일련의 데이터 작업을 연결할 수 있습니다.
visualization.pdf: clean_data.csv visualize.py
python visualize.py
clean_data.csv: raw_data.csv data_cleaner.py
python data_cleaner.py
쉘에
make
를 입력하면 원시 데이터에서 바로 다시 생성된 내 visualization.pdf
를 얻습니다.Order matters here. Typing
make
without any arguments recreates the first target found in the file calledMakefile
. I can also typemake clean_data.csv
if I want to recreate a specific target.
필요한 작업만 수행
내 그래프의 색상이 마음에 들지 않아 편집하기로 결정했다고 가정합니다
visualize.py
. 그러나 데이터 정리에는 많은 시간이 걸립니다! clean_data.csv
가 이미 최신 상태인 경우(raw_data.csv
및 data_cleaner.py
의 타임스탬프 기준) Make는 해당 단계를 건너뛰고 시각화 레시피만 다시 실행합니다.모든 것을 다시 실행할 필요는 없습니다. 게으른 것이 좋습니다. 당신이 글을 쓰고 싶은 또 하나의 이유.
변수 및 함수
처음 몇 개의 간단한 Makefile의 힘을 느끼자마자 더 많은 것을 갈망하게 될 것입니다. 할 수 있습니까? 할 수 있습니까? 대답은 '예'입니다. 할 수 있지만 StackOverflow에서 많은 검색이 필요합니다.
내가 정기적으로 사용하는 기능 중 하나는 자동 변수입니다. 깔끔한 Python 스크립트에 파일 이름을 하드 코딩하고 싶지 않은 경우(이유는 곧 알 수 있음) 대상 및 소스 이름을 변수로 전달할 수 있습니다.
clean_data.csv: raw_data.csv data_cleaner.py
python data_cleaner.py < $< > $@
이것은
raw_data.csv
(변수$<
는 첫 번째 소스 파일을 참조함)를 data_cleaner.py
의 STDIN에 전달하고 STDOUT의 출력을 clean_data.csv
에 저장합니다(변수$@
는 대상을 나타냄).왜 이러한 기호입니까? 저에게 묻지 마세요. 그들은 예쁘지 않지만 일을 끝냅니다.
다음과 같은 functions도 사용할 수 있습니다.
clean_data.csv: input/complicated-path/raw_data.csv data_cleaner.py
python data_cleaner.py $(basename $(notdir $@))
그리고 더 많은.
병렬 실행
그리고 이제 가장 중요한 부분입니다. Make는 내 작업을 병렬로 실행할 수 있습니다. 잘 갖춰진 AWS 서버에서 기꺼이 시작
make -j60
하여 60개의 스레드에서 작업을 수행합니다. Make는 작업 스케줄러 역할을 합니다. 무엇이 무엇에 의존하는지 알고 있기 때문에 경합 상태에 빠지지 않을 것입니다.
- Knock, knock.
- Race condition.
- Who's there?
위와 같이 레시피의 선형 체인이 있는 경우 병렬 실행은 도움이 되지 않습니다. 하지만 종속성 그래프를 병렬 분기로 분할할 수 있으면 올바른 순서로 실행됩니다.
따라서 내 데이터가 둘(또는 그 이상)로 분할된다고 가정합니다. 다음 코드는 데이터 정리 레시피의 병렬 실행을 허용합니다.
visualization.pdf: merged_data.csv visualize.py
python visualize.py
merged_data.csv: clean_data_1.csv clean_data_2.csv merge_data.py
python merge_data.py
clean_data_%.csv: raw_data_%.csv data_cleaner.py
python data_cleaner.py < $< > $@
패턴 매칭 문자
%
를 사용하여 clean_data_1.csv
및 clean_data_2.csv
를 모두 매칭했습니다.j
, make -j2
옵션을 사용하여 make를 호출하면 데이터를 정리하는 두 개의 프로세스가 시작됩니다. 둘 다 완료되면 병합 데이터 레시피가 실행된 다음 시각화가 실행됩니다. (단일 스레드가 됩니다.)저는 정기적으로 병렬 실행을 사용하여 Monte Carlo 시뮬레이션을 수행하거나 부트스트랩 샘플을 그립니다. 병렬 작업이 500개이고 프로세서가 40개뿐인 경우에도
make -j40
는 이러한 작업을 참을성 있게 처리할 것입니다. 그리고 다른 사람이 주말 동안 Matlab을 실행하게 하기 위해 내 작업을 중단하면(그들이 왜 그럴까요?) 월요일에 작업을 460개만 남기고 다시 시작할 수 있습니다.Simple real-world Makefile 변수 및 for 루프 포함.
Not-so simple Makefile 변수, for 루프, 함수 및 패턴 일치 포함.
아직도 Make가 싫으신 분들은?
$< $@
그들.원래 게시됨
만들 러브레터. 메이크는 올해 43살이고 여전히 내... | by Miklós 코렌 | 데이터 아키텍트 | 중간
Miklós Koren ・ 2019년 4월 9일 ・ 중간
Reference
이 문제에 관하여(Make로 데이터 작업 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/korenmiklos/automate-your-data-work-with-make-5eha텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)