[Data] #1 yfinance로 삼성전자 주가 데이터 수집하기
·
Data
이번 포스트에서는 yfinance를 이용해서 주가 데이터를 직접 수집하는 방법을 다룹니다. 들어가며그동안 포트폴리오는 구글 스프레드시트로 관리해왔는데, 일부 종목은 가격 데이터가 누락되거나 업데이트가 늦어 전체 포트폴리오를 일관된 기준으로 관리하기 어렵다는 문제가 있었다. 이 문제를 해결하기 위해, 외부 도구에 의존하기보다는 주가 데이터를 직접 수집하고 관리하는 방식을 시도해보기로 했다. 이번 글에서는 "일단 가장 간단한 형태"로, 주가 데이터를 직접 수집하고 1/3/6/12개월 수익률을 계산하는 스크립트를 만들어본다. 주가 데이터 수집 방식 선택주가 데이터를 수집하는 방법은 다양하다. 가장 대표적인 방법은 증권사 API를 사용하는 것인데, 안정성과 정확성 면에서는 장점이 있다. 다만, 인증 절차, 초기..
[Data] Data Engineering Zoomcamp 2주차
·
Data
이번 주는 워크플로우 오케스트레이션의 기본 개념을 배우고, Kestra라는 툴을 활용해 간단한 워크플로우를 만들어보는 실습을 진행했다. 단순히 ETL 코드를 작성하기보다는, 데이터 파이프라인을 언제, 어떤 순서로, 어떻게 실행하고 관리해야 하는지를 고민해볼 수 있었던 한 주였다. 이번 주에 배운 것들Kestra를 사용한 데이터 파이프라인 오케스트레이션변수와 표현식을 사용한 동적 워크플로우 구성과거 데이터를 처리하는 Backfill 개념과 구현타임존을 고려한 스케쥴 설정Airflow는 이전에 사용해봤지만, Kestra는 이번에 처음 접해봤다. 파이썬뿐 아니라 다양한 언어를 지원하고, 코드를 많이 작성하지 않아도 No Code 기반 워크플로우를 구성할 수 있다는 점이 특히 인상적이었다. 간단한 예제 위주..
[Data] Data Engineering Zoomcamp 1주차
·
Data
Data Engineering Zoomcamp 1주차 회고 회사에서 데이터 엔지니어링 라이프사이클의 일부만 경험하다 보니, 전체 흐름을 한 번은 처음부터 끝까지 직접 다뤄보고 싶다는 생각이 들었다. Data Engineering Zoomcamp는 이 과정을 경험할 수 있는 좋은 기회라고 느껴 수강하게 되었다. 1주차에서는 Docker, SQL, Terraform을 다뤘다. 특히 Docker Compose 네트워킹이 헷갈렸다. pgAdmin에서 localhost로 PostgreSQL에 연결되지 않는 이유를 정리해보면서, 컨테이너 간 통신은 서비스 이름과 내부 포트를 사용해야 한다는 기본 개념을 확인했다. Terraform은 대략적으로만 알고 있었는데, 가장 신기했다. UI에서 하나씩 설정하던 작업을 코드..
[PS] LeetCode: 3Sum
·
카테고리 없음
오늘은 LeetCode의 3Sum 문제를 풀어보겠습니다. 1. 문제정수 배열 `nums`가 주어질 때, 합이 0이 되는 서로 다른 세 숫자의 조합을 모두 구하는 문제입니다.이때, 1) 같은 조합은 한번만 포함해야 하고, 2) 숫자의 순서는 중요하지 않습니다. 2. 예제Input: nums = [-1,0,1,2,-1,-4]Output: [[-1,-1,2],[-1,0,1]]Input: nums = [0,1,1]Output: [] 3. 접근 방법3.1. 무식하게 풀어보기가장 직관적인 방법은 배열에서 숫자 세 개를 뽑아서 만들 수 있는 모든 조합을 확인하는 것입니다.3중 반복문으로 모든 조합을 확인하고, 합이 0이면 결과에 추가하고, 동일한 조합은 정렬 후 set으로 사후 제거하는 방식입니다. 3.2. BUD ..
[PS] LeetCode: Two Sum II - Input Array Is Sorted
·
PS
오늘은 LeetCode의 Two Sum II - Input Array Is Sorted 문제를 풀어보겠습니다. 1. 문제오름차순으로 정렬된 `numbers`라는 정수 배열이 주어졌습니다. (인덱스 1부터 시작) 더해서 `target` 숫자가 되는 두 숫자를 찾아 인덱스를 반환해주세요. 답을 만족하는 케이스는 한 가지밖에 없고, 같은 원소를 두 번 사용하면 안됩니다. 2. 예제Input: numbers = [2,7,11,15], target = 9Output: [1,2]Input: numbers = [2, 3, 4], target = 6Output: [1,3] 3. 접근 방법3.1. 브루트 포스가장 단순한 방법은 배열에 있는 숫자 두 개로 만들 수 있는 모든 숫자 조합을 찾은 뒤, 이 숫자들이 조건을 만족..
[Spark] 데이터프레임과 실행 계획
·
Data/Spark
스파크의 데이터프레임과 실행 계획에 대해 정리한 글입니다. 1. 들어가며스파크의 동작 원리를 이해하기 위해 유튜브의 PySpark - Zero to Hero 시리즈와 여러 자료를 보면서 내용을 정리하고 있습니다. 이번 글에서는 스파크의 데이터프레임(DataFrame)과 실행 계획에 대해 다뤄보겠습니다. 내용 중 부정확하거나 애매한 부분이 있다면, 편하게 알려주세요! 2. 데이터프레임이란?데이터프레임은 스파크에서 데이터를 다룰 때 가장 많이 사용하는 구조적 API(Structured API)입니다. 여기서 "구조적"이라는 말은 데이터가 스키마, 즉, 컬럼 이름과 데이터 타입이 명시된 정형 데이터 형태로 표현된다는 뜻입니다. 데이터프레임은 행(row)과 열(column)로 구성된 표 형태의 데이터 구조로, ..
[PS] LeetCode: Remove Duplicates from Sorted Array
·
PS
오늘은 LeetCode의 Remove Duplicates from Sorted Array 문제를 풀어보겠습니다. 문제정렬된 `nums`라는 정수 배열이 주어졌습니다. 추가 메모리를 사용하지 않고(in-place), 배열을 직접 수정해서 중복된 값을 제거해야 합니다. 최종적으로 고유한 원소의 개수 `k`를 반환하세요. 예제Input: nums = [1, 1, 2]Output: 2, nums = [1, 2, _]Input: nums = [0,0,1,1,1,2,2,3,3,4]Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] 접근 방법이 문제의 핵심은 배열이 "정렬되어 있다"는 점입니다. 이 상황에서 같은 값들은 항상 서로 인접해 있기 때문에 이전 원소와만 비교해도 중복을 감지할 수 있습니..
[Data] DE #100일챌린지 - Day 0: 시작
·
Data
들어가며부트캠프를 수료한지 얼마되지 않아, 감사하게도 데이터 엔지니어로 일할 수 있는 기회를 얻게 되었습니다. 실무 환경에서 새로운 것을 배우며 성장하고 있지만, 시간이 지날수록 한 가지 생각이 커져갔습니다."데이터 엔지니어링, 더 알고, 더 잘하고 싶다." 그렇게 고민하던 중, 우연히 "#100일챌린지"라는 책을 읽게 되었습니다. 100일 동안 매일 AI와 함께 프로그래밍을 하며 성장한 과정을 기록한 책이었는데, 그 안에서 몇 가지 중요한 메시지를 얻었습니다.직접 만들어보고 부딪히는 경험은 실력 향상에 큰 도움이 된다.AI를 잘 활용하는 것이 중요하다.꾸준함도 재능이다.그래서 결심했습니다. 이 여운이 가시기 전에, 저도 한 번 매일 성장하는 경험을 해보기로요. 목표: "0에서 1까지 만들어보기"100일..