문제 소개숫자로 구성된 리스트 nums가 주어졌을 때, 리스트의 모든 숫자를 아래 규칙 중 하나에 해당하는 그룹으로 나눌 수 있는지 확인하는 프로그램을 만들어 보겠습니다.규칙 1: 연속된 두 개의 동일한 숫자 쌍 (a, a)규칙 2: 연속된 세 개의 동일한 숫자 (a, a, a)규칙 3: 연속된 세 개의 연속 숫자 (a, a+1, a+2)예를 들어 입력이 nums = [7, 7, 3, 4, 5]라면 결과는 True입니다. [7, 7]은 규칙 1의 쌍으로 묶을 수 있고, [3, 4, 5]는 규칙 3의 연속된 세 숫자로 묶을 수 있기
Selenium WebDriver를 사용하면 웹페이지 전체가 아닌 특정 요소(element)만 캡처하는 부분 스크린샷을 손쉽게 찍을 수 있습니다. 이 방법은 로고, 이미지, 버튼 등 특정 영역만 확인하고 싶을 때 특히 유용합니다.부분 스크린샷을 캡처하려면 먼저 id, name, classname, xpath 같은 로케이터(locator)를 활용해 스크린샷을 찍고자 하는 요소를 정확히 식별해야 합니다.그다음 해당 웹요소(webelement)에 screenshot() 메서드를 적용하고, 인자로 저장할 이미지 파일명과 확장자를 전달하면
Selenium WebDriver에서는 웹페이지가 완전히 로드될 때까지 기다려야 하는 상황이 자주 발생합니다. 이때 활용할 수 있는 것이 바로 동기화(Synchronization) 개념입니다. Selenium의 동기화는 암시적 대기(Implicit Wait)와 명시적 대기(Explicit Wait) 두 가지 방식으로 나뉘며, 페이지 로딩 여부를 확인하려면 명시적 대기를 사용하는 것이 가장 효과적입니다.명시적 대기(Explicit Wait)란?명시적 대기는 특정 요소가 예상한 상태(condition)에 도달할 때까지 지정된 시간만큼
Selenium WebDriver에서는 기본 타임아웃(default timeout)을 설정하여 페이지 로딩이나 요소 탐색에 소요되는 최대 대기 시간을 제어할 수 있습니다. 이를 통해 불필요하게 오래 기다리는 상황을 방지하고 테스트 스크립트의 안정성을 높일 수 있습니다.1. set_page_load_timeout()으로 페이지 로딩 타임아웃 설정set_page_load_timeout 메서드는 페이지 로딩에 대한 타임아웃을 지정하는 데 사용됩니다. 대기 시간을 초 단위로 파라미터로 전달하면 됩니다.문법driver.set_page_loa
Selenium 웹드라이버를 사용하면 웹 페이지의 요소와 그 안의 텍스트를 손쉽게 찾을 수 있습니다. 먼저 id, classname, css 등 다양한 로케이터(locator) 중 하나를 활용해 대상 요소를 식별해야 합니다. 그다음 text 메서드를 사용하면 해당 요소의 텍스트 내용을 가져올 수 있습니다.문법s = driver.find_element_by_css_selector(h4).text여기서 driver는 웹드라이버 객체입니다. find_element_by_css_selector 메서드는 CSS 로케이터 방식으로 요소를 식별
Docker용 Python 라이브러리 API를 사용하면 컨테이너, 이미지, 클러스터, 스웜(Swarm) 등 다양한 Docker 객체에 접근하고, 이를 자유롭게 조작하고 관리할 수 있습니다. Docker 명령어로 가능한 거의 모든 작업을 Python 코드로 처리할 수 있기 때문에, Django나 Flask처럼 Python으로 작성된 애플리케이션을 운영하면서 동일한 스크립트 안에서 Docker 컨테이너까지 함께 관리하고 싶을 때 특히 유용합니다.docker-py 패키지 설치Docker용 Python 라이브러리 API를 사용하려면 먼저
문제 상황 문자열을 여러 필드로 나누어야 하는데, 구분자가 문자열 전체에서 일관되지 않은 경우가 있습니다. 예를 들어 하이픈(-), 쉼표(,), 공백 등 다양한 구분자가 섞여 있는 문자열을 처리할 때 단순한 split() 메서드만으로는 해결하기 어렵습니다. 해결 방법 파이썬에서 여러 구분자를 기준으로 문자열을 분할하는 방법은 여러 가지가 있습니다. 가장 간단한 접근 방식은 split() 메서드를 사용하는 것이지만, 이 메서드는 단순한 경우만 처리하도록 설계되어 있습니다. re.split()은 복잡한 문자열 패턴을 다룰 때 일반 s
문제 상황시퀀스(sequence)에서 가장 자주 등장하는 항목을 식별해야 하는 경우가 자주 있습니다. 예를 들어 문서에서 가장 많이 쓰인 단어를 찾거나, 로그 데이터에서 빈도가 높은 이벤트를 분석할 때 이런 작업이 필요합니다.해결 방법collections 모듈의 Counter를 사용하면 시퀀스 내 항목의 개수를 아주 손쉽게 추적할 수 있습니다.Counter란 무엇인가?Counter는 각 키(key)에 대해 정수형 개수(count)를 저장하는 매핑(mapping) 객체입니다. 이미 존재하는 키를 업데이트하면 해당 키의 개수가 증가합니
이 글은 Python으로 데이터 집합에서 가장 큰 값이나 가장 작은 값을 찾고 싶은 개발자를 위해 준비했습니다. 단순히 하나의 값만 필요한 경우부터 여러 개의 상위·하위 항목이 필요한 경우, 그리고 DataFrame을 다룰 때까지 상황별로 사용할 수 있는 방법들을 예제와 함께 소개하고, 마지막에 어떤 방법이 가장 효율적인지 정리해 드리겠습니다. 방법 1 – 리스트 슬라이싱(Slice) 접근 만약 단순히 가장 작은 값 하나 또는 가장 큰 값 하나(N=1)만 찾고 있다면, min()과 max()를 사용하는 것이 가장 빠릅니다. 먼저 임
소개Pandas는 인덱스 위치(index position) 또는 인덱스 레이블(index label) 두 가지 방식으로 데이터의 하위 집합을 선택할 수 있는 이중 선택 기능을 제공합니다. 이번 글에서는 인덱스 레이블을 활용해 데이터의 하위 집합을 선택하는 방법을 자세히 살펴보겠습니다.먼저 짚고 넘어갈 점은, 파이썬의 딕셔너리(dictionary)와 리스트(list)라는 내장 데이터 구조 역시 각각 인덱스 레이블과 인덱스 위치를 통해 데이터에 접근한다는 사실입니다. 딕셔너리의 키는 문자열, 정수 또는 튜플이어야 하며, 리스트는 정수(
소개Pandas는 인덱스 위치(Index position) 또는 인덱스 레이블(Index label) 두 가지 방식으로 데이터의 부분 집합을 선택할 수 있는 강력한 기능을 제공합니다. 이 글에서는 그중에서도 사전식 슬라이싱(lexicographical slicing)을 활용해 데이터의 일부를 선택하는 방법을 소개합니다.데이터셋을 찾고 있다면 Kaggle(kaggle.com)에서 movies dataset을 검색해 보세요. 이 글에서는 Kaggle의 영화 데이터셋을 예제로 사용합니다.실습 방법먼저 예제에 필요한 컬럼만 골라서 영화 데
소개Pandas는 인덱스 위치(index position) 또는 인덱스 레이블(index label)을 사용해 데이터의 부분 집합을 선택할 수 있는 이중 선택 기능을 제공합니다. 이번 글에서는 그중에서도 사전식(lexicographical) 슬라이싱을 활용해 데이터의 부분 집합을 선택하는 방법을 소개합니다.인터넷에는 방대한 양의 데이터셋이 공개되어 있습니다. kaggle.com에서 movies dataset을 검색해 보세요. 이 글 역시 캐글(Kaggle)에서 제공하는 영화 데이터셋을 사용합니다.실습 방법1단계. 이 예제에 필요한
데이터 분석을 하다 보면 중복된 행을 무조건 삭제하기보다는 먼저 살펴보며 데이터를 깊이 이해해야 하는 경우가 종종 있습니다. 다행히 Pandas에는 중복 데이터를 손쉽게 다룰 수 있는 다양한 메서드가 마련되어 있습니다.이 글에서는 duplicated(), drop_duplicates(), unique(), nunique() 네 가지 핵심 메서드를 예제와 함께 자세히 알아보겠습니다..duplicated() 메서드duplicated() 메서드는 DataFrame에서 중복된 행을 추출할 때 사용합니다. 중복 값이 포함된 HR 데이터셋을
소개 데이터 엔지니어링 업무를 수행하다 보면, 데이터를 생성하여 분석가에게 전달하는 역할은 주로 데이터베이스 전문가나 데이터 스페셜리스트가 담당하기 때문에 행(Row)을 새로 만드는 일보다 파생 컬럼(Derived Column)을 생성하는 작업이 훨씬 많습니다. 하지만 모든 상황이 그렇지는 않습니다. 실제 데이터가 준비되기 전, 테스트나 프로토타이핑을 위해 샘플 행을 직접 생성해야 할 때가 종종 있습니다. 이번 글에서는 판다스 DataFrame에 새로운 행을 추가하는 다양한 방법과, 컬럼이 많은 복잡한 데이터셋에서 실수를 방지하기
문제 상황파이썬으로 여러 개의 파일을 하나의 ZIP 아카이브로 압축하고 싶습니다.개요ZIP 파일은 여러 개의 파일 내용을 압축하여 하나의 아카이브에 담을 수 있는 형식입니다. 파일을 압축하면 디스크 용량을 절약할 수 있으며, 인터넷을 통해 전송하거나 Control-M AFT, Connect:Direct, scp 등을 이용해 시스템 간에 파일을 주고받을 때 특히 유용합니다.파이썬 프로그램은 표준 라이브러리인 zipfile 모듈의 함수들을 사용하여 ZIP 파일을 손쉽게 생성할 수 있습니다.구현 방법1단계: 필요한 패키지 준비이 예제에서
소개 세상은 Excel이 지배한다고 해도 과언이 아닙니다. 데이터 엔지니어링 업무를 하다 보면 동료들이 중요한 의사결정 도구로 Excel을 얼마나 많이 활용하는지 놀라게 되는 경우가 많습니다. MS Office와 Excel 스프레드시트의 열렬한 팬은 아니지만, 대용량 Excel 파일을 효과적으로 다루는 실용적인 방법을 소개해 드리겠습니다. 일반적으로 대용량 CSV 파일을 처리할 때는 Pandas의 chunksize 옵션을 사용해 청크 단위로 나누어 처리할 수 있습니다. 하지만 안타깝게도 Excel 스프레드시트의 경우 Pandas가
문제 설명2차원 숫자 행렬이 주어졌을 때, 행렬 내에 있는 각각의 0 값을 찾아서 해당 요소가 위치한 행(row)과 열(column)에 속한 모든 값을 0으로 바꾸고, 최종 행렬을 반환하는 프로그램을 작성해 보겠습니다.예를 들어 입력 행렬에 0이 포함된 행이 있다면, 출력 결과에서 그 행 전체가 0으로 채워집니다. 마찬가지로 0이 포함된 열 역시 최종 행렬에서 해당 열 전체가 0이 됩니다.해결 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.행의 개수 n과 열의 개수 m을 구합니다.n x m 크기의 결과 행렬(res)을 생성하고
소개Python은 스레드(thread), 서브프로세스(subprocess), 제너레이터(generator) 등 다양한 방식으로 동시성 프로그래밍을 구현할 수 있습니다. 본격적으로 스레드를 구현하기 전에, 동시성이 정확히 무엇인지 먼저 이해해 보겠습니다.동시성(concurrency)이란 하나의 프로그램 내부에서 여러 개의 서로 다른 실행 경로를 열어두는 논리적 구조를 의미합니다. 여기에는 독립적인 I/O 스트림 처리, SQL 쿼리 실행 등이 포함되며, 각 작업이 마치 동시에 실행되면서도 서로 독립적으로 동작하는 것처럼 보이도록 만듭니
들어가며 파이썬의 리스트 컴프리헨션(list comprehension)을 활용하면 원본 리스트에 표현식을 적용해 새로운 리스트를 아주 간결하게 만들어낼 수 있습니다. 예를 들어, 리스트의 모든 요소에 5를 곱한 값을 담은 새 리스트를 만든다고 가정해 보겠습니다. 먼저 일반적인 for 루프로 구현하면 다음과 같습니다. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] multiply_by_5 = [] for x in a: multiply_by_5.append(x * 5) print(fOutput \n *** {
프로세스(Process)란 무엇인가?Windows, macOS 또는 Linux에서 프로그램을 작성하고 실행하면 운영체제는 하나의 프로세스를 생성합니다. 이 프로세스는 CPU, RAM, 디스크 공간과 같은 시스템 자원을 사용하며, 운영체제 커널 내부의 데이터 구조에도 접근합니다. 각 프로세스는 다른 프로세스로부터 격리되어 있기 때문에, 다른 프로세스가 무엇을 하고 있는지 확인하거나 간섭할 수 없습니다.참고: 이 글의 코드는 Linux 계열 시스템에서만 정상적으로 동작합니다. Windows에서 실행할 경우 예외(Exception)가 발