파이썬 코딩 한줄 9

pyenv와 virtualenv 활용법 (for Mac)

기능 pyenv를 활용하면 지정한 디렉토리 따라 다른 버전의 파이썬으로 자동 버전 변경되도록 설정할 수 있다. 또한 virtualenv와 연계해서 가상환경을 사용하면 해당 폴더로 진입할 시 자동으로 가상환경을 activate해주는 편리함이 제공된다. 참고로 pyenv는 맥에서만 작동하지만 2022년 이후 window에서 사용 가능한 pyenv가 있다고 한다. 아래 예시는 맥 사용 예시를 들고있다. 설정 brew 설치가 되어있지 않다면 brew 설치를 선행한다. brew 설치 후 아래 순서를 따라간다. brew install pyenv # 설치가 끝나면... brew install pyenv-virtualenv brew를 오랜만에 이용하면 brew update부터 진행하므로 시간이 꽤 걸릴 수 있으니 이상..

함수에서 *args 와 **kwargs를 알아보자

*args와 **kwargs의 용도에 대해서 알아봅시다. (반드시 args, kwargs라는 명칭을 사용하지 않아도 됩니다. *apple로 써도 됩니다.) *args *args는 몇 개의 입력값을 받을지 정해지지 않았을 경우에 대해 사용합니다. *args가 튜플 형태로 전달되는 것을 확인할 수 있습니다. *args는 항상 입력 파라미터의 마지막 단에 위치해야 합니다.(**kwargs보다는 앞에) class Team: """팀 노드 생성""" def __init__(self, *args): self.member = args # 다음 노드에 대한 레퍼런스 team1 = Team("강아지", "토끼", "고양이") team2 = Team("사슴", "호랑이") team3 = Team("개미", "코끼리", "..

키워드를 활용한 간단한 제품 추천 컨텐츠 기반 필터링(CBF)

각 제품을 설명하는 단어 모음이 있다면 간단한 추천 모델 개발이 가능합니다. 아래 예시는 제품별 상세 내역 이미지에서 문장을 추출한 뒤 전처리를 한 결과입니다. prod_seq는 제품별 고유 넘버이며 text_new는 각 제품의 키워드를 담은 리스트입니다. 여기서 인덱싱의 편의를 위해 prod_seq를 index로 설정하였음을 기억해 주세요. 아래 데이터프레임을 df 변수로 지정합니다. 진행 과정은 아래와 같습니다. 1. 키워드를 전부 꺼내 고유값을 제거한 하나의 리스트로 만듭니다. 2. row는 prod_seq로, columns는 각 키워드 하나하나로 구성된 데이터 프레임을 생성합니다. 3. 신규 생성한 데이터프레임에서 제품별 키워드가 존재할 경우 1, 없으면 0으로 표기합니다. 4. 제품 간 코사인 ..

[pandas apply] 텍스트를 일정 길이만큼 잘라서 분리하기

만약 위와 같이 각 seq(시퀀스)별로 엄청 긴 문장의 text가 포함된 df가 있다고 가정합니다. 텍스트를 만약 길이(len) 20 단위로 잘라서 데이터프레임으로 만들기 위해서는 어떻게 해야 할까요? 각 텍스트의 총 길이 보기 df['len'] = df['text'].apply(len) df apply 와 len 함수를 쓰면 간단하게 text의 총 길이를 출력할 수 있습니다. 각 text의 길이를 알면 몇 번 잘라야 되는지 알 수 있기 때문입니다. 저희는 길이 20 단위로 자를 예정이므로 153 // 20을 하면 7이 나오게 되는데 7번 자르면 마지막에 길이 13인 텍스트가 남게되므로 이것도 챙기려면 7 + 1 총 8번 쪼개야 함을 알 수 있습니다. 텍스트 자르기 함수 작성 def func(seq, t..

아직도 셀레니움(Selenium)에서 벗어나지 못했다면...

셀레니움은 최후의 수단 저도 처음에 배울 때는 BeautifulSoup과 Selenium으로 입문했습니다. 사실 셀레니움이 직관적이고, 동적페이지 대응하기도 나름 편하고, 거의 웬만해서는 다 뚫기 때문에 많은 사람들이 쓰는 것 같습니다. 하지만 저는 소제목 그대로 최후의 수단으로 셀레니움을 선택합니다. 우선 태그 찾느라 HTML 처다보고 있는 것도 눈아프고, 인스타와 같이 제대로 관리하는 사이트는 정기적으로 태그명이 바뀌기 때문에 재사용성이 떨어지고, 무엇보다 스크랩 속도가 너무 느립니다. 구글링으로 쉽게 찾을 수 있는 크롤링 예시 중 하나인 스타벅스 매장 주소 스크랩을 예시로 보여드리겠습니다. 예상하기로는 해당 주소로 가서 F12로 inspector창 열어서 "서울", "경기", "광주"...이렇게 태..

파이썬 groupby로 요소 모아 보기 (단순 집계 이상으로 활용하기)

대부분 groupby 를 활용해서 sum, mean, count, std 출력을 벗어나지 못하리라 생각합니다. 하지만 단순히 groupby로 요소를 그룹화한 결과를 보고 싶으셨던 적 있지 않나요? 예를 들어 회원 정보에서 거주지별로 몇 명이 사는지를 구하는 것이 아니라 거주지 별로 누가누가 사는지 명단을 뽑아보고 싶은 것과 같은 상황 말이죠 타이타닉 예시를 가지고 설명드려볼 수 있을 것 같은데요 df.groupby('Pclass')['Name'].count() Out: Pclass 1 216 2 184 3 491 Name: Name, dtype: int64 위와 같은 방식으로 Pclass(등급)별 탑승 인원 수가 몇명인지 정도를 뽑아보는게 일반적인 경우겠죠? 그런데 각 Pclass에 누가누가 타고 있는지..

이미지 URL에서 이미지 파일 다운받기

아래와 같이 urllib 모듈을 활용하면 이미지 URL에서 이미지 파일을 다운받을 수 있다. import urllib.request url = "이미지URL" urllib.request.urlretrieve(url, '저장경로/저장할파일명.jpg') 하지만 가져오려는 이미지 URL에 한글이 섞여있을 때도 있다. url = 'https://abc.com/group/사진/젓갈01.jpg' 과 같이 말이다 (예시) requests 과정에서 한글이 섞긴 URL을 get하려 할 경우 ASCii 코드 문제를 언급하며 오류가 발생한다. 이럴 경우 아래와 같이 url에서 한글인 부분을 해시코드와 같은 형태로 바꿔주는 작업이 필요하다. def transfrom_url(url): from urllib.parse impor..

파이썬 print와 return의 차이가 헷깔리는 이유는?

print와 return의 차이가 헷깔리신다면! 인터넷에 print와 return 차이를 검색하면 초보자 입장에서 뭐라는지 모를 설명이 참 많은데요. 제가 쉽게 정리해 드릴게요. 저희가 이론적으로 어떤지 궁금한게 아니잖아요?? print는 결과값을 출력창으로 보고 싶을 때 씁니다. return은 함수(def)의 결과값을 지정할 때 씁니다. 제 생각에 print와 return을 헷깔리게 하는 포인트는 아래 두가지 이유가 아닐까 생각합니다. 1. print가 코드 연산(계산)의 결과라고 생각하기 때문 2. def 함수의 활용 방법이 다양하기 때문 1. print는 "보여주세요" 라는 뜻이에요. "함수에서 print를 쓰면 되지 왜 굳이 return을 쓰나요?" 라는 질문을 하신다면 print 함수가 어떤 식..

주피터노트북에서 그래프 사용 시 문제 해결 Tip

matplotlib 사용 시 주요 불편 사항을 정리했습니다. 1. 그래프가 잘 안보일 때 jupyterthemes 을 설치해서 주피터 노트북 테마를 다크 계열로 사용하시는 분들이 계실텐데요. 다 좋은데 그래프의 x축과 y축 단위가 안보여서 짜증나셨던 분들이 계실 것 같아요. %matplotlib inline import pandas as pd df = pd.read_csv('/Users/leitmotiv/csvdata/broadcast.csv', index_col=0) df.plot() 이렇게 방송국 시청률 데이터를 선 그래프로 불러왔더니 x축 y축 내용이 잘 안보이게 되죠. 이럴 경우 여러가지 해결 방법이 있겠지만, 저는 주로 아래처럼 코드를 사용합니다. import matplotlib.pyplot ..