본문 바로가기

더 나은 엔지니어가 되기 위해

(80)
df.iterrows() 대신, df.itertuples()? Pandas Iteration 성능비교 가장 먼저, 아래 글을 참고했다. Stop using df.iterrows() This morning I came across an article with tips for using Pandas better. One of the claims was that df.itertuples() should be used instead… medium.com Pandas dataframe 에서 이터레이션 도는거 꽤 중요하다. 경험상, 보통 df.iterrows() 돌리는데, 이거 엄청느리다. 아무튼 글의 핵심은 이거다. dataframe 에서 행 단위 반복문 쓸 때, df.iterrows() 쓰지말고 df.itertuples() 쓰세요. 차이가 무지막지하게 큽니다. 이터레이션 도는데 뭐가 이렇게 차이나지? 싶었는데,..
python 멀티 프로세싱은 parmap 으로 하자. [2020.07.24 에 남기는 글] 이 글은 레거시적인 성격이 있습니다. 파이썬에서 멀티프로세스, 쓰레드 이용하기 가장 좋은 법은 concurrent.futrues 에서의 ThreadPoolExecutor 와 ProcessPoolExecutor 를 사용하거나 asyncio 를 사용하는 것입니다. 따라서 이 글은 이제는 별로 추천드리고 싶지 않습니다. 파이썬3에서 일반적으로 멀티프로세스 사용하는 방법 최근에 파이썬으로 프로젝트를 하다가 단일 프로세스로 루프문 돌리니까 너어어무 느려서, 속도를 좀 올려보고자, 멀티프로세싱을 사용해보게 되었다. 파이썬3 에서 일반적으로 사용하는 멀티 프로세싱 방법은 다음과 같이 크게 2가지 방법이 있다. multiprocessing.Process(...) multiproce..
pandas, 데이터 프레임 합치는 방법 중 뭐가 제일 빠를까 pandas 에서 기존 데이터 프레임에 행(row) 를 추가해야할 때, 뭘 쓰면 좋을까. 일단 방법은 3가지가 있다. pd.DataFrame() + np.concatenate() pd.concat() df.append() 세가지 방법 중 뭐가 제일 빠른지 빠르게 확인해본다. 데이터 크기 print(df1.shape) print(df2.shape) # output (1048575, 11) (385067, 11) pd.DataFrame + np.concatenate 이용 start_time = time.time() df3 = pd.DataFrame(np.concatenate((df.values, df2.values), axis=0 )) end_time = time.time() print(end_time - ..
파이썬 제너레이터 간단 정리 파이썬은 주로 데이터를 다룰 때 쓰는 프로그래밍 언어로 많이 쓰인다. 특히, 큰 양의 데이터를 다룰 때, CPU/Memory 등 하드웨어 리소스들을 신경쓰며 프로그래밍 해야하는 상황이 생기는데, 이럴 때 파이썬에 등장하는 키워드가 바로 제너레이터다. 이에 대해, 간략히 요약하여 기록해보려고 한다. 대부분의 글은 아래 링크를 참조했다. 좀 더 알고싶다면 아래 링크를 참조하면 된다. 이글은 핵심만 적는다. 참고 링크 [번역] 이터레이터와 제너레이터 python generator(제너레이터) 란 무엇인가 제너레이터란? 한 마디로 말해, yield 구문을 갖고있으면서 이터레이터를 반환하는 함수다. def A(n): i = 0 while i < n: yield i i += 1 이 때, 이터레이터란, next() ..
파이썬 정렬, 다중 조건으로 한 번에 하기. 파이썬으로 문제를 풀다보면, 여러 조건으로 소팅을 해야하는 경우가 있다. 일반적인 소팅은 다음과 같이 sorted() 혹은 .sort() 를 사용한다. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted() 를 찬찬히 살펴보면 다음과 같다. a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)] # 인자없이 그냥 sorted()만 쓰면, 리스트 아이템의 각 요소 순서대로 정렬을 한다. b = sorted(a) # b = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)] # key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다. c = sorted(a, key = lambd..
파이썬 Asterisk(*)에 대해서 머신러닝을 위한 파이썬 워밍업을 수강하던 와중에, Asterisk(*) 에 관해, 새롭게 알게된게 있어서 적어본다. 파이썬 오픈소스들 보다보면, 함수 정의할 때 인자에 *args 식으로 인자가 정의되어있는 식으로 *을 종종본다. 사실 이전 포스트에서도 적었듯, 이 쓰임새를 아예 몰랐던 건 아닌데, 이번 강좌를 통해 더 깊이 알게되었다. 사실, Asterisk라고 부르는 것도 처음알게 되었다. 용도와 쓰임새를 하나씩 다시 복습해보자. 1. * 인자는 함수 내에서 튜플이다. 가장 직관적인 예는 다음과 같다. def a(*args): print(type(args)) print(args) a(1,2,3,4) # output: # # (1, 2, 3, 4) 보다시피 튜플이다. 따라서, 내부에서 list처럼 mut..
파이썬을 파이썬 답게. (코딩 문제편) 코딩 테스트 문제에서 나 같이 파이썬을 파이썬스럽게 잘 못쓰는 사람들을 위한 강의가 프로그래머스에 있었다. 무료로 진행중인 강의이고, 30분 정도면 금방 볼 수 있는 내용인데, 내가 필요하다 싶은 것만 짧게 정리해두었다. 모든 내용과 출처는 https://programmers.co.kr/learn/courses/4008 여기에 있다. * 혹시나 문제가 있을 시에, 글을 바로 삭제하겠습니다. n진법으로 표기된 string을 10진법 숫자로 변환하기 - int 함수 파이썬의 int(x, base = 10) 함수는 진법 변환을 지원합니다. 이 기본적인 함수를 잘 쓰면 코드를 짧게 쓸 수 있고, 또 시간을 절약할 수 있습니다. num = '3212' base = 5 answer = int(num, base) 알..
파이썬 초급, 그 다음 단계 내가 파이썬을 처음 접해본 것은, 대학교 3학년 컴퓨팅 사고력 멘토를 처음 들어갔을 때다.학교에 필수교양으로 이제 막 '컴퓨팅 사고력' 이 엄청나게 열리던 시기였고, 컴퓨터 공학과에서 엄청나게 많은 멘토모집을 했었다.멘토 시급이 엄청 높아서, 나를 비롯한 대부분의 컴공 친구들이 파이썬을 잘 몰라도, 일단 지원하고 보았다.그리고 수업 일주일 전에 받는 강의 ppt 로 파이썬을 공부했다.그렇게 난 2년 정도 파이썬 멘토를 하였고, 강의교재 수준의 파이썬은 쉽게 다룰 수 있었다.부끄럽지만, 내가 알고있는 파이썬은 이 정도 였다. 최근 K사에서 단기 인턴을 하는 동안, 무수히 많은 파이썬으로 짜인 코드들을 보았고, 내 파이썬 문법실력이 얼마나 빈약한지를 깨달았다.일할 때는 일일이 stack overflow 에서..