SW개발/python 17

[python] selenium 활용한 웹페이지 PDF 파일로 저장하기

들어가며 여러 웹사이트를 돌아다니며 크롤링하다 보면 가끔은 내PC에 저장하고 싶은 정보들이 있을 수 있다. 나 같은 경우 필요성을 느낀 포인트가 한가지 있는데, 포털사이트에서 신문기사를 보면 너무 불필요하게 광고가 덕지덕지 있어 늘 불편했다. 인쇄버튼을 누르면 광고 없이 깔끔하게 볼 수 있잖아! 파이썬과 셀레니움에는 언제나 정답이 있다!! 웹페이지 PDF 파일로 저장하기 아래 예시로 사용할 웹페이지가 있다. 기사 시작하기 전부터 영상이 딸린 커다란 광고가 붙어 있다. URL : https://www.mk.co.kr/news/world/10584572 그리고 기사 헤드라인 아래쪽으로 보면 프린터 모양 '인쇄' 버튼이 있는데 이걸 눌러 보면 URL은 아래와 같다. URL : https://www.mk.co...

SW개발/python 2022.12.28

[pandas] 그룹별 누적합 집계하는 방법

안녕하세요, 오늘은 pandas 그룹별 누적합을 구하는 방법에 대해서 알아 보겠습니다. 1. 간단한 데이터로 이해하기 아래와 같이 날짜, 과일종류, 판매량 3개 컬럼으로 이뤄진 데이터프레임이 있습니다. 만약 판매량의 누적합을 구하고 싶다면, cumsum() 을 통해서 쉽게 구할 수 있죠. 하지만, 과일종류별 누적합, 일자별 누적합 등 그룹별로 누적합계를 구하려면 어떻게 해야 할까요?? 아래 두 결과 코드는 groupby 내 컬럼 순서만 다르다는 차이만 있으나, 결과는 완전히 서로 다릅니다. 1. 일자별 누적합 level=[0] 에 해당하는 값이 'Date' 이기 때문에 일자별 기준으로 판매량 그룹 누적합계를 구합니다. 2. 과일별 누적합 level=[0] 에 해당하는 값이 'Fruit' 이기 때문에 과일..

SW개발/python 2022.07.31

[python] pandas read_csv 데이터 읽을 때 날짜/시간 파싱 하기

안녕하세요, pandas read_csv 함수를 통해서 데이터를 읽을 때, 날짜/시간 데이터 파싱하는 간단한 방법을 소개합니다. read_csv 함수 내 파라미터를 세팅하는 것인데요. 아래와 같습니다. pd.read_csv('input.csv', parse_dates=['컬럼명']) 그럼 데이터를 직접 불러와 보겠습니다. 첫번째, 파라미터 없이 read_csv () 아무런 파라미터 세팅하지 않고 실행하면 'Date' 컬럼 타입은 Object가 된다. 두번째, 파라미터 세팅하여 read_csv() parse_dates 라는 파라미터에 파싱할 컬럼명을 넣어준다. 그럼 'Date' 컬럼 타입은 아래와 같이 datetime 으로 세팅 되어 불러와 진 것을 볼 수 있다.

SW개발/python 2022.06.01

[python] pandas rolling 과 shift rolling

안녕하세요, pandas 에 있는 rolling 함수에 대해서 간략하게 포스팅 남깁니다. pd.concat([df['volume'], df['volume'].rolling(window=5).mean(), df['volume'].shift(1), df['volume'].shift(1).rolling(window=5).mean()], axis=1) 첫번째 컬럼 : volume row data 두번째 컬럼 : rolling(window=5) 평균값 세번째 컬럼 : volume row data 의 shift(1) 네번째 컬럼 : volume row data 의 shift(1) 의 rolling(window=5) 평균값

SW개발/python 2021.11.22

[python] 딕셔너리 Dictionary 구조 활용

안녕하세요, 파이썬을 통해서 가계부를 만들고 있는데요. 가계부를 쓸 때, 기본적으로 수입/지출로 나뉘겠고, 지출에서는 고정지출, 변동지출 등 성격에 따라 세부적으로 분류될 수 있겠죠. 이런 트리구조(?)를 가지면서 빠르게 분석을 할 수 있게 파이썬 딕셔너리 Dictionary 자료구조를 통해서 해결해 보려고 합니다. 딕셔너리 "값"으로부터 "키" 값 찾기 두 가지 main_dict 와 sub_dict를 선언했어요. 예를 하나 들어보죠. 변동지출에 "생활"이라는 카테고리가 있고 그 안에 "마트", "편의점" 이렇게 두개가 있다고 해볼게요. 그리고 마트와 편의점 하위로 각각 카테고리들이 있다고 해볼게요. > 마트 >> 홈마트, 힐마트 > 편의점 >> 지에스편의점, 세븐일레븐 이런 구조에서 실제로 체크카드나 ..

SW개발/python 2021.11.17

[python] pandas pivot_table 데이터프레임을 다루는 방법

오랜만에 포스팅을 남기네요. 오늘은 간단하게 pandas 중에서 피벗(pivot_table)을 사용할 때, 유용하게 쓸 수 있는 기능을 소개하고 기록해보려고 합니다. 제가 요즘 퀀트투자를 공부하고 있는데요. 주식 관련 데이터를 수집하고 가공하는 일(?)을 많이 하고 있습니다. 그 중에서 해외ETF 데이터를 다루면서 마주친 부분과 해결방법에 대해서 소개해 드리겠습니다. 1. 데이터 소개 개발환경은 주피터노트북이며, 데이터프레임에 대해서 간략하게 소개해드리면 인베스팅닷컴을 통해 해외ETF(SPY, TLT) 데이터를 수집하였으며, 월말(EOM), 연말(EOY), 월초(IOM) 그리고 월별수익(%) 컬럼 등으로 추가하여 가공했습니다. 2. pivot_table 활용 위 데이터프레임에서 index 컬럼을 기준으로..

SW개발/python 2021.11.07

[python] slack bot 메시지 보내는 법

slack은 클라우드 기반 팀 커뮤니케이션과 협업을 위한 툴입니다. 오늘은 slack bot 을 하나 만들고 python을 활용해 간단한 메시지 보내는 법에 대해서 알아보려고 합니다. 1. slack 가입 및 워크스페이스 만들기 우선 회원가입부터 해야겠죠? 구글 계정이 있다면 연동해서 사용할 수 있습니다. 저도 새로운 워크스페이스를 생성해 볼게요. 회사 또는 팀 이름을 입력 -> 진행하는 프로젝트 -> 소통을 위한 대상자 추가하는 과정을 거치게 됩니다. 저는 MySpace 라는 이름으로 워크스페이스를 생성했습니다. 자, 이제 워크스페이스 생성은 마쳤고, 메시지 전송을 위한 단계로 넘어가 보죠. 2. slack api 이번에는 slack api 사이트로 이동합니다. 아래 보이는 화면에서 "Create an..

SW개발/python 2021.10.06

[python] PyQt5 그래프 그리기(feat. plotly, matplotlib)

PyQt5 환경에서 plotly 그래프 그리기 PyQt5는 python 으로 빠르게 GUI 프로그램을 만들 수 있게 도와줍니다. 특히 QtDesigner 를 사용해 직관적으로 콤보박스, 텍스트박스 등을 배치시킬 수도 있고, 코드로 직접 화면 구성을 할 수도 있죠. 최근에는 버전업이 되어 PyQt6가 나왔다고 하네요. 개발언어가 python이고 GUI 환경으로 프로토타입을 빠르게 만들어보고 싶다면 추천드립니다. 오늘은 PyQt5 환경에서 plotly 라이브러리로 그래프를 그리는 방법을 알아 볼게요. 1. 라이브러리 설치 PyQt5와 plotly 라이브러리는 당연히 설치되어 있어야 하고, 추가적으로 Plotly 그래프를 그리기 위해서 PyQtWebEngine 을 설치해줍니다. pip install PyQtW..

SW개발/python 2021.09.10

[python] 연도, 월별 손쉬운 for loop 생성 방법

데이터를 다루다보면 시계열 정보를 가공하고 처리해야할 경우가 많습니다. 예를들어 2021년 1월부터 12월까지 데이터를 수집하거나, 그 기간 동안만 데이터를 분석한다던지 여러가지 케이스가 있죠. 이번에는 이런 연도, 월별 등 손쉽게 for 문을 생성하는 방법을 공유하고자 합니다. 기존 방법 기존에는 무식하게(?) 하나의 리스트에 조회할 기간 정보를 넣었었죠. YYYYMM = ['202001','202002','202003','202004','202005','202006','202007'] for date in YYYYMM: print('조회결과: {}'.format(date)) 조회결과: 202001 조회결과: 202002 조회결과: 202003 조회결과: 202004 조회결과: 202005 조회결과: ..

SW개발/python 2021.07.29