python | itertools.product()를 사용해 곱집합 구하기(데카르트 곱)
·
TIL/python
집합에서 곱집합 또는 데카르트 곱은 각 집합의 원소를 성분으로 하는 튜플들의 집합을 말한다. 쉽게 말해, 두 집합 A = {1, 2}, B = {3, 4}가 있을 때 A의 원소와 B의 원소를 곱해 나올 수 있는 모든 경우의 수를 담고 있는 집합 {3, 4, 6, 8}이다. 경우의 수는 사칙연산으로 쉽게 구할 수 있지만, 집합을 구하기 위해서는 itertools 라이브러리의 product를 사용한다. 순열과 조합을 구하는 permutations, combinations과 사용법은 동일하다. product(A, B)로 A, B에 iterable한 객체를 전달하면 A와 B의 원소들을 가지고 만들 수 있는 모든 경우의 수를 보여준다. 다음은 숫자 리스트와 문자열로 product를 사용한 예이다. 의도한 바대로 ..
python | for 또는 *를 사용해 2차원 리스트 생성 시 주의할 부분(얕은 복사 개념)
·
TIL/python
평소와 똑같이 백준 문제를 풀고 있던 중 리스트를 만들다가 이상한 점을 발견했다. 리스트 안에 빈 리스트를 3개를 만들기 위해 다음과 같이 코드를 작성했다. A = [[] for _ in range(3)] B = [[]] * 3 A, B를 출력해 보면 [ [ ], [ ], [ ] ] 이런 형태의 2차원 리스트가 만들어지는 것을 볼 수 있다. 똑같아 보이지만 A, B는 차이가 있다. 이 차이는 값을 추가하거나 변경할 때 볼 수 있다. 다음과 같이 각 리스트의 0번 인덱스, 즉 0번 리스트에 1을 추가할 것이다. A[0].append(1) B[0].append(1) 위 코드로 우리가 의도하는 결과는 [ [1], [ ], [ ] ]이다. 하지만 실제로 A와 B를 출력해 보면 두 결과는 다른 것을 볼 수 있다...
카카오맵 리뷰 크롤링 하기 with Selenium, BeautifulSoup
·
TIL/python
공모전 준비를 위해 작성했던 크롤링 코드를 정리하는 글입니다. 크롤링 과정을 간단히 작성하면 다음과 같다. 크롬 웹드라이버에서 '전주 한옥숙소' 검색 검색 결과에서 상세정보 탭으로 이 상세정보에서 리뷰 추출 먼저 webdrvier-manager를 설치한다. pip install webdriver-manager time 라이브러리와 warning을 무시하기 위한 라이브러리를 import 한다. import time import warnings warnings.filterwarnings('ignore') 크롤링을 위해 필요한 라이브러리도 import 해준다. 동적 크롤링을 위해 selenium을 사용하였고, webdriver로는 크롬드라이버를 사용했다. from selenium import webdriver..
네이버 지도 리뷰 크롤링하기 with Selenium, BeautifulSoup
·
TIL/python
공모전 준비를 위해 작성했던 크롤링 코드를 정리하는 글입니다. 크롤링은 공공데이터포털에서 전국 숙박업소에 대한 데이터를 다운로드하여 해당 데이터에 있는 숙소명을 네이버 지도에 직접 검색하여 리뷰를 가져오는 방식으로 진행했다. 다음과 같은 데이터 df에서 '업소명' 컬럼을 사용했으며, 크롤링 과정을 간단히 작성하면 다음과 같다. 크롬 웹드라이버에서 해당 숙소의 고유 주소로 이동(크롤링 코드에서 고유 주소(url)가 나오니 참고) 해당 숙소 정보에서 리뷰 탭으로 이동 리뷰 탭으로 이동 방문자 리뷰 텍스트를 크롤링 먼저 webdrvier-manager를 설치한다. pip install webdriver-manager time 라이브러리와 warning을 무시하기 위한 라이브러리를 import 한다. impor..
python | capitalize(), title() 함수 비교
·
TIL/python
파이썬 문자열 함수 중 대문자로 바꾸는 함수인 upper()와 capitalize(), title()을 예시를 통해 비교해보고자 한다. 문자열 s1='abc'가 있을 때 각 함수를 적용한 결과는 다음과 같다. upper() 함수는 모든 문자열을 대문자로 바꾸고, capitalize()와 title()은 문자열의 맨 앞글자만 대문자로 바꾼다. 그럼 capitalize()와 title()은 같은 역할을 하는 것일까? s2='abc def'와 같이 공백이 있는 경우의 capitalize()와 title() 함수 적용 결과는 다음과 같다. capitalize() 함수는 문자열 s2의 맨 앞글자인 a만을 대문자 A로 바꾼 반면, title() 함수는 공백을 기준으로 문자열을 분리한 듯 a와 d를 각각 대문자 A,..
python | geopy 라이브러리를 사용하여 두 좌표간 거리 구하기
·
TIL/python
geopy는 여러 지오코딩 웹 서비스를 위한 Python 라이브러리이다. 지오코딩(Geocoding): 고유명칭(주소나 산, 호수의 이름 등)을 가지고 위도와 경도의 좌표값을 얻는 것 geopy 라이브러리를 활용하여 다음과 같은 두 좌표(위도, 경도)간의 거리를 구할 것이다. lat, long은 고객 주소의 위경도, merch_lat, merch_long은 상점의 위경도이다. geopy 라이브러리를 사용하기 위해 먼저 pip를 이용해 설치한다. pip install geopy geopy 라이브러리에서 거리 계산을 위해 필요한 distance 모듈을 import 해준다. import geopy.distance distance 모듈은 두 지점에 대한 위도와 경도를 튜플 형태로 받아 거리를 계산한다. geop..