본문 바로가기

파이썬

(10)
파이썬 - 매월 둘째주 목요일 구하기 (옵션만기일, 수능) 파이썬으로 매주 n번째의 x요일을 구해야 하는 경우가 있다. 한국거래소 옵션만기일은 매월 2번째주 목요일이다. 수능의 경우 11월 둘째주 목요일이다. 매월 옵션만기일 및 수능의 날짜를 구하는 방법은 아래와 같다. from datetime import datetime # 월요일은 is 0, 목용일은 is 3 # helper 함수 추가 def nth_weekday(the_date, nth_week, week_day): temp = the_date.replace(day=1) adj = (week_day - temp.weekday()) % 7 temp += timedelta(days=adj) temp += timedelta(weeks=nth_week-1) return temp # test = nth_weekda..
파이썬 - 오늘이 개장일일 때만 실행 금융/증권 관련 크롤링을 할 때는 오늘이 개장일인지 아닌지 판단해서, 개장일인 경우에만 함수를 실행해야 하는 경우가 있다. exchange_calendars 라는 라이브러리를 이용하면 아래와 같이 간단하게 코드를 작성할 수 있다. import exchange_calendars as ecals from datetime import datetime, timedelta def main(): XKRX = ecals.get_calendar("XKRX") # 한국 코드 if not (XKRX.is_session(datetime.now().strftime("%Y-%m-%d"))): return # 오늘 장이 아니면 종료하기 run_myjob() if __name__ == "__main__": main()
[파이썬] Code Refactoring 팁 : 예외 case를 앞에서 제시 파이썬에서 IF 문은 정말 자주 등장한다. IF 문 안에 If 문이 들어와서, 아래와 같이 들여쓰기 (indentation) 이 여러번 있는 경우도 많다. 아래는 if가 두번이나 있는 경우다. def myjob(): if (myfield == 'grid-insta'): i.click() time.sleep(3) print(len(driver.window_handles)) if len(driver.window_handles) != 1: driver.switch_to.window(driver.window_handles[-1]) time.sleep(4) IF 문이 많아서 들여쓰기가 많으면 내가 집중해야 하는 들여쓰기 단계가 어디인지 놓치기 쉽다. 그래서 이런 IF문에서 들여쓰기를 최소화할 수 있는 방법이 있는..
[파이썬 크롤링] 크롤링 코드 작성 시간을 두배로 단축시키는 2가지 팁 크롤링 할 때 가장 많은 시간이 소요되는 부분은 크롬 탭을 통해 url, xml http request를 분석하는 것이다. 크롬 탭을 열어서, 화면 새로고침을 하면서 현재 클라이언트가 어떻게 서버로 요청을 보내고 있는지 살펴보고, header 및 data 정보를 가져와서 코드를 작성하는 것이 꽤나 번거롭다. 아래 3가지 팁으로 이 과정을 매우 효율적으로 수행할 수 있다. 1) F5가 아니라 Reply XHR 활용 빠르게 F12로 개발자 도구에 들어가서, 크롤링하고자 하는 XHR를 확인하기 위해 F5(새로고침)을 연타할 필요가 더이상 없다. 이미 로딩이 되어 있는 XHR이 있으면, Reply XHR를 활용하기 2) CURL to Python requests Converter 이용하기 크롤링하고 하는 XHR..
[Pandas] CSV 파일 불러올 때 팁 [encoding, datetime, leading zeros etc.] 판다스로 전처리를 하게 되는 raw data가 CSV 파일 형태로 주어지는 경우가 가장 흔한 것 같다. CSV 파일을 데이터프레임으로 불러올 때 알아두면 유용한 코드들을 모아보았다. 1. CSV를 그냥 df로 가져오는 방법 import pandas as pd df = pd.read_csv ('file_name.csv') print(df) 2. CSV 불러올 때 index column 안불러오고 싶을 때 원래 CSV 파일에는 index column이 없는 경우가 많지만, 내가 pandas로 전처리한 결과값을 csv 파일로 저장해두고, 이를 나중에 불러 올 때는 index column이 갑자기 생겨서 이를 지우고 싶을 때가 있다. df = pd.read_csv('mydf.csv',index_col=0) #애..
[Pandas] 여러개의 데이터프레임을 효율적으로 합치는 방법 Pandas로 데이터 전처리를 하다보면 여러개의 데이터프레임을 합쳐야 하는 경우가 굉장히 많다. 그냥 빈 데이터프레임을 만든 후, append로 데이터프레임을 계속 키워나가도 되긴 하지만, 이 경우 속도 면에서 엄청난 답답함을 경험하게 된다. 주로 아래 구조로 합치는데, 소요시간 및 리소스 측면에서 매우 만족스럽다. # 1단계 : 내가 합칠 데이터프레임들을 담을 list 만들기 dfs = [] # 2단계 : for loop를 통해서 df를 하나씩 만들고, list 안에 담아두기 for i in range (0,100): small_df = myfunction(i) dfs.append(small_df) # 또는 for small_df in 'some_function_that_yields_dataframes..
[파이썬] Plotly-Dash를 이용한 동적 대시보드 프로젝트 개요 스터디 카페를 운영하는 지인이 있는데, 스터디 카페에 어떤 손님들이 방문하는지에 대해서 확인이 잘 안된다는 이야기를 들었다. 키오스크에서 고객 결제 데이터를 확인할 수 있지만, 아래와 같이 각 결제내역별로 하나의 행으로 이루어져 있어서, 고객별, 일자별, 월별로 정리해서 한눈에 매출 추이나 경향을 파악하기 힘들다. 데이터를 가공, 수집하여 대시보드에서 신속하게 원하는 정보를 선별해서 볼 수 있도록 프로젝트를 진행해 보았다. 주요 개발 프레임워크 : 파이썬, Flask, Pandas, Dash, Skeleton CSS, 주요 코드 from typing import DefaultDict import dash import dash_core_components as dcc from dash.dep..
[파이썬] 일본 종목토론방 살펴보기 (ft. 전력회사 이렉스) 일본의 민자 전력발전사 이렉스 (eREX, 동경증시 1부 상장, T9517)의 최근 주가 심상치 않다... 6.21 기준 주당 2,027엔이었는데, 2주만에 2,774엔으로 급등했다. 2주간 무려 36%나 올랐다. 도대체 왜 이렇게 올랐을까, 일본 사람들은 어떤 생각으로 이 종목에 투자하는지 궁금해졌다. 우리나라 상장사의 경우 네이버 종목토론방을 통해서 간략하게나마 투자자들의 심리를 엿볼 수 있는데, 일본에도 그런 커뮤니티가 있을까 궁금했다. 찾아보니 있었다. 약 1개의 글 단위로 하나의 쓰레드 (Thread)가 있고, 이번에 급등한 주의 6.5 ~ 7.1 기간동안의 글들이 모인 쓰레드가 있다. 사람들이 글을 올리면, 다른 사람들은 공감/비공감을 클릭할 수 있다. 약 1,000개의 글이 올라와 있는데, ..