본문 바로가기

Skillset52

[Redshift] DBeaver에서 프로시저 만들기 오늘은 Redshift에서 프로시저를 만드는 쿼리문에 대해 소개한다. 프로시저(procedure)란, DB에서 일어나는 일련의 작업을 정리한 절차를 쿼리로 작성하여 관계형 데이터베이스(RDBS) 시스템에 정리한 것을 이야기한다. 그래서 '프로시저를 돌린다' 라는 것은 프로시저를 call 하여 어떤 동작을 일괄적으로 처리하는 것을 의미한다. 굉장히 편리한 기능! 나는 AWS Redshift를 사용하고 있어 이에 따른 프로시저문을 쓰는데, postgresql에도 동일하게 적용되니 참고하자. 또한 DB를 다루는 툴로는 DBeaver를 사용하고 있다. DBeaver에서 프로시저를 만들 때의 절차는 다음과 같다. 1. script에 프로시저문을 입력한 후, 전체선택 (ctrl+A) → alt+X 눌러 프로시저문 .. 2024. 2. 29.
[Python Crawling] 크롤링 웹사이트 밑으로 내리기 - window height, scrollheight 저번 포스팅에서는 네이버 쇼핑 페이지에서 '샤인머스캣'을 검색한 후, 해당 페이지에 있는 판매자 정보를 크롤링해보았다. 하지만 저번에 했던 방법에서 보완할 부분이 있었는데, 그것은 바로 전체 페이지에 나온 상품이 전부 크롤링되지 않는다는 점이었다. 위 이미지는 내가 크롤링하려고 하는 화면이다. 자세히 보면, 검색 결과를 "40개씩 보기"로 필터링을 해 두었기에 한 화면에 상품이 40개씩 나오지만 저번 포스팅에서 만든 코드를 돌려 보면 5개의 상품만이 뽑혔다. 2024. 2. 29.
[Python Crawling] 네이버 쇼핑 검색결과 크롤링하기 (3) - 네이버 API 활용하기 저번 포스팅까지는 네이버 쇼핑 검색결과를 Selenium, Beautifulsoup 라는 파이썬 패키지를 활용하여 크롤링하였다. 이렇게 크롤링한 결과도 꽤 괜찮았지만, 여기엔 3가지 문제가 있었다. 첫번째, 중간에 안 긁어지는 부분이 있다. ➡️ 검색결과 로딩이 느려 안 긁어와지는 부분은, 페이지를 맨 끝까지 내리는 방법으로(관련 포스팅) 해결하였다. 그러나 이 외에도 검색결과를 많이 수집하는 경우(검색 결과 페이지를 5페이지 이상) 중간에 안 긁히는 부분이 발견되었다. 두번째, 이미지를 긁어오기 어렵다. 마지막으로, 많은 양을 크롤링하는 경우 시간이 많이 걸린다. 그래서 이번 장에서는 네이버 개발자센터에서 제공하는 네이버 API를 활용하는 방법을 포스팅한다. 앞서 이야기한 3가지 방법을 이 방법으론 전.. 2024. 2. 29.
[Airflow] DAG에 스케줄 거는 방법 (DAG schedule_interval Setting) 데이터 엔지니어링에서 자동화 배치를 만들기 위해 Airflow를 자주 사용한다. 하나의 배치를 DAG이라 하는데, 배치를 만들면 당연히 자동적으로 수행하게 만들어야 한다. 이번 포스팅에선 dag을 자동적으로 실행하기 위해 스케쥴을 거는 방법을 살펴보자. 보통 DAG에 스케쥴을 거는 데에는 다음의 코드를 사용한다. 어떤 의미인지 하나씩 알아보자. with DAG(dag_id=DAG_ID, default_args=args, start_date=datetime(2021, 1, 1, 0, 0, 0), schedule_interval="0 0 * * *", catchup=False ) as dag: start_date: DAG의 시작 지점 execution_date: 해당 Task가 실행하고자 하는 Time wi.. 2024. 1. 8.
[Python Crawling] 네이버 쇼핑 검색결과 크롤링하기 (2) - Selenium, BeautifulSoup 저번 포스팅에서는 Python selenium, beautifulsoup를 활용하여 네이버 쇼핑에서 '샤인머스캣'을 검색한 결과 중 제목을 뽑아오는 데에 성공했다. 이번 포스팅에서는 판매자, 가격, 등록일, 상품 URL 정보를 뽑아보자! 이번에 사용하는 방법도 아까 전에 사용한 방법과 크게 다르지 않다. 크롬 개발자모드로 들어가 html을 보면서 beautifulsoup(bs) 를 활용해 값을 하나씩 쏙쏙 뽑아오면 된다. 먼저 전체 상품 40개(1페이지에 있는 상품이 40개이므로)에 대한 정보를 담은 'goods_list'를 만든다. 이는 이전 포스팅에서도 나왔지만 전체상품 정보가 있는 html 클래스 이름이 li.basicList_item__0T9JD 이므로 사용해주었다. soup = Beautiful.. 2022. 11. 22.
[Python Crawling] 네이버 쇼핑 검색결과 크롤링하기 (1) - Selenium, BeautifulSoup 최근 파이썬으로 크롤링할 일이 생겼는데, 여러 방법을 동원하며 얻은 새로운 정보들이 있어서 이를 정리할 겸, 공유 목적으로 포스팅해보고자 한다 :) 내가 크롤링한 페이지는 네이버 쇼핑 검색 결과 페이지인데, 얻고자 한 결과물은 다음과 같은 엑셀 파일이었다. 네이버 쇼핑 페이지에 '샤인머스캣'을 치고, "리뷰 많은순"으로 정렬해서 나온 값을 뽑았다. 내가 원하는 정보는 이런 값들이었다. 상품명 판매처에서 올린 이미지 판매처 판매처 판매가 상품 URL 그리고 다음과 같은 시행착오를 거쳤다. 먼저 파이썬 Selenium, BeautifulSoup를 활용하여 자동화된 크롬 창을 띄워놓고 긁어오는 방식을 사용 장점: 가장 간단하고 많이 알려진 방식 단점: 정보가 중간에 안 긁어지는 케이스가 있다. (그 이유는 포.. 2022. 11. 21.
파이썬에서 SQL parameter 설정하기 (Python SQL formatter) 저번 포스팅에서는 파이썬 상에서 AWS Redshift를 연결하여, 직접 Jupyter Notebook 상에서 쿼리를 날리는 방법에 대해 알아보았습니다. (이전 포스팅 바로가기) 그런데 궁금증이 생깁니다. 파이썬에서 쿼리를 날릴 땐 쿼리문에 반드시 따옴표 3개를 써서 주석 처리를 해야 하는데, 그럼 파이썬 상에선 이것이 주석으로 인식됩니다. 하지만 쿼리상에서 어떤 조건을 input으로 즉, 파라미터(parameter)로 넣고자 할 때는 어떻게 해야 할까요? 결론부터 말하자면 format 메서드를 사용해주면 됩니다. 앞의 포스팅에서는 다음의 쿼리를 실행했습니다. 예를 들어, 저는 주간 매출 랭킹 10위 안에 드는 인기 상품만 뽑아보고자 합니다. 상품 테이블은 product에, 매출정보 테이블은 sale_t.. 2022. 9. 20.
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법 안녕하세요, Everly입니다. 데이터 분석 업무를 하다 보면 쿼리 결과를 파이썬에 불러와서 사용하는 경우가 많이 생기는데요. SQL 상에서 쿼리를 날려 결과를 csv 형태로 뽑아 다시 파이썬에서 불러오는 것보다, 처음부터 파이썬에서 쿼리를 날릴 수 있다면 훨씬 수월하겠죠? 오늘은 그 방법에 대해 포스팅합니다. How to connect python and Redshift 먼저 파이썬 상에서 AWS Redshift와 연결하기 위해 아나콘다 프롬프트에 다음을 입력해 설치해줍니다. pip install redshift_connector 다음으로는 Jupyter Notebook을 열어 AWS 계정 정보를 인증해주면 되는데요, 이를 위해선 여러분의 계정의 host, database, user, password .. 2022. 9. 19.
[MySQL] 문자열에서 0 제거하기 (REPLACE) 오늘 알아볼 함수는 REPLACE이다. REPLACE(문자열, 'A', 'B') 위와 같은 형태로 사용하며, 반드시 '문자'에 대해서만 쓸 수 있다. 문자열 내의 'A'가 있다면 'B'로 바꿔준다. 예를 들어 'APP'에 대해 바꿔준다면 'BPP'로 바뀌는 식이다. 그럼 이를 응용해서, 어떤 문자를 없애주는 것도 가능하다. 'A'를 ''(공백)으로 바꿔주면 'APP' → 'PP'가 된다. 직접 문제를 풀어보며 적용해보자. Q. 사만다는 [EMPLOYEES] 테이블에 있는 직원들의 월평균 임금(Salary)을 계산하려고 한다. (문제 바로가기) Q. 그런데 그녀의 키보드에서 숫자 0 key가 고장나버려서, Salary에 있는 0 값이 모두 사라져버렸다. 예를 들어 누군가의 월급이 550890이었다면, 55.. 2022. 8. 12.
SQL로 깔끔한 문장 출력하기 (CONCAT 활용) SQL을 사용하다 보면 보통은 숫자값을 집계하는 경우가 많은데, SQL의 좋은 점은 문자를 활용해서 깔끔한 형태의 문장을 만들 수도 있다는 점이다. 문제를 바로 풀어보자. (문제 바로가기) 오늘 활용할 테이블 'OCCUPATIONS'이다. 이 테이블의 경우 사람의 이름과, 그 사람의 직업이 적힌 간단한 데이터셋이다. 이 테이블을 활용해 다음과 같은 문장을 만들어보고자 한다. 첫 번째로는 사람 이름 옆에 그 사람의 직업의 이니셜을 괄호로 붙여 출력하고 싶다. 예를 들어, 이름은 'Everly' 이고, 직업은 'Data Scientist'라면 "Everly(D)" 로 출력한다. (단, 순서는 이름 알파벳순으로 한다.) 두 번째로는 각 직업에 해당하는 사람 수가 몇 명인지 세어 문장 형태로 출력하고 싶다. 예.. 2022. 8. 10.