목록분류 전체보기 (107)
imhamburger 님의 블로그
pdm은 이전글에서도 설명한대로 의존성 관리도구이며 pyenv처럼 가상환경 기능을 제공한다.여러가지 모듈을 pdm 가상환경에 설치하여 다양한 기능을 테스트해 볼 수 있다. 당연히 의존성 관리 도구이기 때문에 설치한 모듈을 관리할 수 있다. 관리할 수 있다는건 생성, 삭제, 수정이 용이하다는 것이다. pdm 가상환경을 구축하는 건 매우 간단하다. pdm을 실행하고자 하는 경로로 이동하여 아래 코드를 차례대로 입력하면 된다.pdm init #pdm 실행source .venv/bin/activate #pdm 가상환경 실행 만약 가상환경이 실행이 되지 않는다면 venv가 없기때문이다. 아래 코드로 따라서 별도로 설치하고 다시 실행하면 된다.pdm venv create #venv 생성 여기 드는 의문! 그냥 가상..
파라미터값에 default를 둘 수 있으며, 보통 많이 사용하는 파라미터값을 default로 설정한다.def gen_path(filename, path='/data/csv', home='~/my/airflow'): print(f"{home}{path}/{filename}") >>> gen_path('file') #입력값>> ~/my/airflow/data/csv/file #출력값위 코드에서 'path'와 'home'을 default값으로 각각 경로를 설정하였다.그럼 입력할 때 이미 default 값이 설정되어 있기때문에 출력값은 입력값과 default값이 합쳐져 나온다. 만약 default값이 앞으로 온다면?에러가 날 것이다. default 파라미터값은 앞에 올 수 없다.def add..
지난주에 에어플로우 Operator에서 csv파일을 만드는 것까지 진행하였다. (지난글 바로가기)이번주엔 csv파일로 만든 것을 sql을 이용해 데이터베이스에 저장하고 판다스를 이용해 parquet 파일형태로 다시 저장해보는 것을 하였다. 약간 과정이 복잡하기는한데... 차근차근 알아보자. 4. task_create_tbl(table)task_create_tbl = BashOperator( task_id="create.table", bash_command=""" SQL={{var.value.SQL_PATH}}/create_db_table.sql MYSQL_PWD='{{var.val..
partition_cols 을 이용하면 데이터 용량을 줄일 수 있다.partition_cols은 일반적으로 데이터프레임을 저장할 때 특정 열(Column)을 기준으로 데이터를 분할하는 데 사용되는 인수이다. partition_cols은 보통 Parquet 또는 ORC 파일 형식 저장에서 사용되며, 데이터를 여러 파일 또는 폴더로 나눠서 저장한다.이렇게하면, 방대한 데이터가 있을 때 더 관리하기 쉬워지고 데이터를 빠르게 찾아 로드할 수 있다. 게다가 큰 장점은 용량이 적다는 것! 아래는 실제로 partition_cols을 사용하여 저장한 데이터와 그렇지 않은 데이터의 용량 크기 차이를 보여준다. Partition_cols을 사용하는 방법은 간단하다.{데이터테이블명}.to_parquet('{저장할 파일경로}..
내가 만들고자 했던 것은,dtcmdcnt날짜명령어개수3개의 컬럼으로 이루어진 데이터 테이블을 판다스로 parquet 파일을 만들어 저장하고 터미널에서 cmd 를 입력하면 cmd에 해당하는 cnt 즉 개수가 출력되는 기능을 만들고자 했다. 여기서 cmd를 인자로 받아 cnt가 출력되게 만들어야 한다. 따라서 sys를 이용해 다음과 같은 파이썬 코드를 작성하였다.import pandas as pdimport sysa = sys.argv[1]def cnt(): df = pd.read_parquet("~/tmp/history.parquet") fdf = df[df['cmd'].str.contains(a)] cnt = fdf['cnt'].sum() print(cnt)인자값을 0이 아닌 1을 ..
판다스(Pandas)를 사용하기 위해 주피터노트북을 사용하였다. pyenv로 가상환경을 만들고 그 안에 주피터노트북을 설치하였다. 1. 주피터노트북을 실행하고 pandas를 import한다.import pandas as pd 2. csv파일로 된 데이터를 불러오기 위해 다음과 같이 입력한다.df = pd.read_csv('{파일경로}', on_bad_lines='skip')on_bad_lines='skip'을 추가한 이유는 내가 가지고있는 csv파일 안에 형식이 안맞는 데이터들이 좀 있어서 스킵하고 사용하였다. 인코딩 에러메세지가 떴다. 해결방법은 아래 코드처럼 encoding = "latin"을 넣어주면 된다.df = pd.read_csv('~/data/csv/240717/csv.csv', on_bad..
시작하기 전에.. 터미널에 아래와 같이 입력하면 비밀번호 입력없이 Mysql에 접속할 수 있다.MYSQL_PWD='{비밀번호 입력}' mysql -u root mysql로 csv파일로 불러올 때, 여러 에러메세지들이 발생하였다. 차근차근 해결해보자! 에러메세지 1 - 백슬러시ERROR 1261 (01000) at line 1: Row 13 doesn't contain data for all columns 해당 에러는 백슬러시 \ 때문에 발생하는 문제로 데이터에 \가 포함되어 있기 때문이다. 이를 무시하게끔 만드려면 FIELDS TERMINATED BY 옆에 혹은 아래에 ESCAPED BY '' 코드를 추가하면 된다.ESCAPED BY '' 에러메세지 2 - 인코딩해당 에러는 인코딩문제로 나타나는 ..
맥 터미널에서 아래와 같은 코드를 사용했는데, cut: stdin: Illegal byte sequence 에러가 났었다.cat ~/data/test.txt | cut -d' ' -f1 이 에러는 터미널에서 UTF-8이 아닌 다른 종류의 인코딩된 데이터를 처리하려고 할 때 발생한다. *UTF-8(Unicode Transformation Format - 8-bit)은 유니코드 문자 인코딩의 한 방식으로 UTF-8은 전 세계 모든 문자를 표현할 수 있도록 설계된 가변 길이 문자 인코딩 방식이다. 이를 해결하기 위해서는 터미널 창에 아래 코드를 입력하면 된다.export LC_ALL=C 매번 같은 에러가 난다면, 영구적으로 설정할 수도 있다. ~/.zshrc 에 위에 코드를 추가하면 된다. 그럼 매번 터미널에..
1. 특정 파일 내용을 여러 파일에 복사하기특정 파일 안에 있는 내용을 복사하여 여러 파일 안에 복사하고 싶었다. 하나씩 해도되지만 그건 너무 비효율적이라 생각했다.아래 history.log 중 바이트가 0인 파일들은 빈 파일이다. 빈 파일 안에 다른 채워져있는 파일 하나를 골라 넣어보고자 한다. 아래 코드를 사용하면 된다.cat {채워져있는 파일명} | tee {빈파일명1} {빈파일명2} {빈파일명3}cat은 '내용을 보겠다.'라는 명령어이고,tee는 표준 입력에서 읽은 내용을 표준 출력에도 사용하면서 파일에 저장하는 두가지를 동시에 사용하는 명령어이다. 이 말이 살짝 이해가 안가는데 예시로 살펴보자! 1-1. 표준 출력을 이용한 사용 echo {출력내용} | tee {파일이름} 위의 코드를 터미널에..
저번주에는 내가 가지고 있는 데이터들을 sql로 불러와 데이터베이스, 데이터 테이블을 생성하여 행렬로 이루어진 테이블에 넣는 것을 배웠었다. 이번주는 에어플로우를 다루는 방법을 중점적으로 배웠다. 에어플로우가 뭔지는 이전글에 작성하였으니 참고! 에어플로우에 대해 다시 간단하게 말하자면 데이터 파이프라인을 관리하는 플랫폼이다. 핵심 요소는 dag, operator, task 이렇게 3가지이며 이를 다루기 위해서는 파이썬을 사용해야 한다. dag 를 데이터 파이프라인이라고 생각하면 쉽다. dag가 10개면 10개의 데이터 파이프라인을 가지고 있는 것이다. dag을 사용하는 방법은 공식문서에 자세히 적혀있다. 기본적으로 dag파일은 ~/airflow/dags 폴더 안에 {DAG명}.py 파일을 만들어 파일..