분류 전체보기 1188

[Airflow] BranchDayOfWeekOperator - 실행 요일에 따른 분기

BranchDayOfWeekOperator 2023.01.03 - [Airflow] ShortCircuitOperator - 조건부 Task 실행에서 간단히 소개한 작업을 분기하는 오퍼레이터 중 하나이다. 실행한 날짜의 요일과 지정한 요일의 일치 여부에 따라 실행할 Task를 결정한다. import BranchDayOfWeekOperator는 아래와 같이 import 하여 사용할 수 있다. from airflow.operators.weekday import BranchDayOfWeekOperator from airflow.utils.weekday import WeekDay WeekDay 모듈은 요일 지정 시 사용한다. Task 정의 BranchDayOfWeekOperator로 Task를 정의할 때는 조건..

Apache Airflow 2023.01.04

[Airflow] ShortCircuitOperator - 조건부 Task 실행

조건부 실행 조건에 따라 Airflow Task를 실행하거나 실행하지 않고 싶다. 또는 조건에 따라 실행할 Airflow Task를 결정하고 싶다. 이런 경우를 위해 Airflow에서는 다음과 같은 조건부 논리 구현 방법을 제공하거나 분기를 나눌 수 있는 방법을 제공한다. BranchPythonOperator : 조건에 따라 반환한 task_id에 해당하는 Task 실행 ShortCircuitOperator : 조건이 만족하는 경우에만 다음 Task 실행 BranchSQLOperator : SQL 쿼리 결과의 True/False 여부로 실행할 Task 분기 BranchDayOfWeekOperator : 현재 요일이 지정된 week_day 매개변수와 동일한지에 따라 실행할 Task 분기 BranchDate..

Apache Airflow 2023.01.03

[Python] Pandas - DataFrame column 추가

개요 pandas DataFrame에 column 추가하는 방법을 정리한다. 일반적인 방법 Dictionary와 비슷하게 대괄호에 column 이름을 지정하여 값을 초기화한다. 추가되는 열은 가장 오른쪽에 위치한다. df1 = pd.DataFrame({ '고객번호': [1001, 1002, 1003, 1004, 1005, 1006, 1007], '이름': ['둘리', '도우너', '또치', '길동', '희동', '마이콜', '영희'] }, columns=['고객번호', '이름']) df1 df1['금액'] = 0 df1 # 실행 결과 고객번호이름 01001둘리 11002도우너 21003또치 31004길동 41005희동 51006마이콜 61007영희 고객번호이름금액 01001둘리0 11002도우너0 210..

[Python] Pandas - 피봇테이블과 그룹분석 3

pivot_table groupby와 비슷하게 그룹분석을 하되 pivot table을 반환한다. pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, margins_name='All') data: 분석할 데이터프레임 (메서드일 때는 필요하지 않음) values: 데이터프레임에서 분석할 열 index: 행 인덱스로 들어갈 키 열 또는 키 열의 리스트 columns: 열 인덱스로 들어갈 키 열 또는 키 열의 리스트 aggfunc: 분석 메서드 fill_value: NaN 대체 값 margins: 모든 데이터를 분석한 결과를 오른쪽과 아래에 붙일지 여부 margins_name:..

[Python] Pandas - 피봇테이블과 그룹분석 2

그룹분석 키가 지정하는 조건에 맞는 데이터가 하나 이상으로 데이터 그룹을 이루는 경우, 그룹분석을 사용해 그룹의 특성을 확인해야 한다. 그룹의 특성은 미리 지정한 연산을 이용해 계산한 그룹의 대푯값으로 한다. Pandas에서는 다음과 같은 방식으로 그룹분석을 수행한다. 1. 분석할 시리즈나 데이터 프레임에 groupby 함수를 실행하여 그룹화를 한다. 2. 그룹화한 데이터에 그룹연산을 수행한다. groupby 데이터를 그룹 별로 분류하는 함수로 열 또는 열의 리스트, 행 인덱스를 매개변수로 전달한다. groupby 함수는 그룹 데이터를 나타내는 GroupBy 클래스 객체를 반환한다. GroupBy 객체는 그룹변로 연산할 수 있는 그룹연산 함수를 제공한다. 그룹연산 함수 자주 사용하는 그룹연산 함수는 다음..

[Python] Pandas - 피봇테이블과 그룹분석 1

Pivot Table 데이터 컬럼 중 두 개 컬럼을 각각 행 인덱스, 열 인덱스로 사용하여 데이터를 조회한 것이다. Pandas에서는 pivot 함수에 행 인덱스로 사용할 열, 열 인덱스로 사용할 열, 데이터로 사용할 열을 전달하여 pivot table을 생성할 수 있다. Pandas는 지정한 두 열을 행 인덱스와 열 인덱스로 바꾼 후 각 칸마다 행 인덱스와 열 인덱스가 일치하는 각각의 데이터를 찾아 채운다. 만약 데이터가 없으면 NaN 값을 채운다. pivot 함수 사용 예로 들어 아래와 같은 도시의 연도별 인구 데이터가 있다고 하자. data = { "도시": ["서울", "서울", "서울", "부산", "부산", "부산", "인천", "인천"], "연도": ["2015", "2010", "2005"..

[Linux] 여러 프로세스 한 번에 종료하기

개요 그간 여러 프로세스를 종료할 때 ps -ef | grep 명령으로 찾은 후 한 땀 한 땀 pid를 입력해 종료를 했었다. ps -ef | grep kill -9 하지만 정리해야 할 프로세스가 몇십 개, 몇백 개가 넘어가니 그렇게 처리할 수가 없어졌다. 한 번에 여러 프로세스를 정리할 수는 없을까? 명령어 몇 가지 명령어를 조합하여 사용하면 검색한 문자열을 포함하는 프로세스를 한 번에 정리할 수 있다. ps -ef | grep | awk '{print $2}' | xargs kill -15 예시 예로 들어 아래와 같은 Airflow 관련 서비스를 한 번에 정리해보도록 하자. ps -ef | grep airflow ps -ef 명령 결과에서 프로세스의 pid는 두 번째 열에 해당한다. 각 행에서 두 번..

Linux 2022.12.29

[Python] 시간 연산 (한 달 전 구하기)

개요2022.10.24 - [Python] 날짜/시간 연산 (어제 날짜 구하기)에서 datetime.timedelta를 이용하면 시간 연산이 가능한 것을 알아보았다. 하지만 timedelta는 매개변수로 days, seconds, microseconds, milliseconds, minutes, hours, weeks와 같은 고정적인 단위를 받기 때문에 한 달 전, 1년 전 시각을 구하기에는 적절하지 않다. 그렇다면 기준일로부터 세 달 후는 어떻게 구할 수 있을까?  dateutil 설치datetime 모듈에 대한 익스텐션 중 하나이 dateutil 모듈이 필요하다. 기본으로 제공되는 모듈이 아니기 때문에 별도로 설치를 해야 한다.pip install python-dateutil    dateuitl.r..

Python 2022.12.28

[Python] Pandas - 데이터프레임 합성 2

개요 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1에 이어서 두 개 이상의 DataFrame을 합치는 병합 및 연결 방법을 정리한다. 데이터 연결(concat) 기준 열을 사용하지 않고 데이터를 단순히 연결한다. 기본적으로 위/아래로 데이터 행을 연결하며, 인덱스 값 중복이 발생할 수 있다. Series 연결 s1 = pd.Series([0, 1], index=['A', 'B']) s2 = pd.Series([2, 3, 4], index=['A', 'B', 'C']) s1 s2 pd.concat([s1, s2]) # 실행 결과 A 0 B 1 dtype: int64 A 2 B 3 C 4 dtype: int64 A 0 B 1 A 2 B 3 C 4 dtype: int64 연결할 ..

[boto3] S3 내 지정한 경로 내의 하위 경로 조회

개요 aws cli로 s3 ls를 했을 때, 지정한 prefix에 존재하는 subprefix 정보를 boto3을 통해 얻고 싶다. 방법을 정리한다. client.list_objects_v2 버킷에 존재하는 객체의 일부 또는 전체(최대 1000개)를 반환한다. 조회할 버킷의 이름(Bucket), 조회할 prefix를 지정해야 한다. response = client.list_objects( Bucket='string', Delimiter='string', EncodingType='url', Marker='string', MaxKeys=123, Prefix='string', RequestPayer='requester', ExpectedBucketOwner='string' ) response 예시 { 'IsTr..

Python 2022.12.26