본문 바로가기

더 나은 엔지니어가 되기 위해/파이썬을 파이썬스럽게

(18)
파이썬 클린 코드 2 - 클린 코드와 코딩 가이드라인 클린 코드란 클린 코드란 한 마디로 말해, 쉽게 이해 가능하며 지속적으로 개발하기 용이한 코드를 말한다. 코드는 누구나 짤 수 있다. 하지만 보기 좋고 심플하면서도 핵심 로직을 잘 풀어낸 코드를 짜내는 건 아무나 할 수 없다. 지속해서 성장하는 시스템에 유연하게 코드를 바꿀 수 있도록 설계해야 하고, 올바른 자료구조와 로직으로 하려는 일을 간단하게 드러내야 한다. 무엇보다 코드만 보고도 무엇을 하려는지 이해 가능해야 한다. 클린 코드는 개발자에게 일종의 '선'과 같은 개념이다. 현실적으로 불가능하더라도, 이러한 이상향이 있다는 것을 인지하고 내 코드를 평가할 수 있어야 한다. 적어도 내 코드가 별로인지 괜찮은지는 알아야 한다. 클린 코드는 특히 엔지니어간의 커뮤니케이션과 코드의 유지 관리성을 강조한다. ..
파이썬 클린 코드 1 - 파이썬스러운 코딩을 파이썬 문법 컨셉 들어가며 이 글은 책 파이썬 클린 코드를 읽고 정리한 글이다. 클린 코드는 프로그래밍 언어 구분 없이 일반적으로 존재하는 개념인데, 파이썬에서는 좀 특이한 관습이 있다. '파이썬스럽게(Pythonic)' 라는 것인데, 이 때문에 같은 개념과 논리더라도 다른 프로그래밍 언어와는 클린 코드에 대한 구현이 조금 다르다. 그래서 이 책에서는 두 가지를 말한다. 파이썬스러운 코드와 이를 기반으로 한 클린 코드를 짜는 것. 클린 코드에 대한 여러 서적들이 있지만 이 책을 먼저 잡은 이유도 이 때문이다. 클린 코드의 개념을 잘 알면서, 이를 파이썬스럽게 짤 수 있는 능력, 하다 못해 그럴 수 있는 '감'이라도 잡고 싶었다. 정리하는 글은 책의 목차를 그대로 따라가지 않는다. 위에 설명한 두 가지에 초점을 두어 내 나..
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..