당신의 코드를 더 간략하고 읽기좋게 만들어줄 파이썬의 기능과 기술을 소개드립니다.
데이터 사이언티스트라면 파이썬은 필수 툴입니다. 같은 코드를 짜고 같은 결과를 내는데 누군가는 매우 길고 복잡한 코드를 쓰는가 하면 누군가는 한 줄로 끝내기도 합니다. 긴 코드를 짧게 쓰는 스킬을 익힌다면 코드도 간략해지고 시간도 절약할 수 있는 일석 이조의 효과를 얻을 것입니다. 그래서 준비했습니다. 짧은 코드를 짤 수 있는 방법 다섯가지를 한번 알아보시죠.
isinstance
isinstance는 파이썬의 내장함수로 object가 특정 type인지 아닌지 판단해 줍니다.
아래 예시를 보면, integer 인지, float인지, 아닌지를 판별할 수 있으며,
리스트인지, 아닌지를 판별할 수 있죠.
a = 4
c = ('t','p','l')
if isinstance(a, int):
print("a is an integer")
elif: isinstance(a, float):
print("a is a float")
else:
print("a is not an integer")
if isinstance(c, list):
print("c is a list")
else:
print("c is not a list")
예를들면, 만약 데이터가 float으로 이루어진 리스트라고 가정하고 코드를 작성했다고 합시다. 그러나 사실 데이터는 문자열 리스트라면 결국 오류가 발생하게 됩니다. 그럴 때 사전에 데이터 타입을 검증하기 위한 용도로 isinstance를 사용할 수 있겠죠?
Lambda
람다는 파이썬에서 가장 강력하고 중요한 함수라고 할수 있습니다. 아주 많이 사용되기도 하기 때문에 어떻게 작동하는지 알아 두어야 합니다. 람다는 함수를 define하지 않고도 함수를 사용할 수 있게 해줍니다. 기본적으로 이름을 굳이 지을 필요 없는 한 줄의 함수가 필요할 때 유용하게 쓰입니다. 만약 복잡한 함수를 짜야한다면 def 로 함수를 정의하는 편이 나을 것입니다.
alpha = lambda x: x*3
print(alpha(3))
## output will be 9
print(alpha(4.5))
## output will be 13.5
beta = lambda x: x>0
print(beta(4))
## output will be True
print(beta(-3))
## output will be False
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2])
##output will be [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
이 기능은 전체 데이터의 각 데이터 포인트를 처리해야 할 때 유용합니다 (위의 예시처럼 배열 정렬).
Zip
이 함수는 두 개 이상의 목록을 동시에 반복문에 적용할 때 유용합니다. 아래 예제에서 한 줄의 반복문으로 세개의 리스트에서 각 인덱스를 써서 세개의 값을 합친 리스트를 출력합니다.
alpha = [1,2,3,4,5,6]
beta = [7,8,9,10,11,12]
gamma = [13,14,15,16,17,18]
output = []
for a, b, c in zip(alpha, beta, gamma):
print(a, b, c)
for a, b, c in zip(alpha, beta, gamma):
output.append(a+b+c)
print(output)
데이터 과학자로서 이것은 예를 들어 신경망을 훈련 할 때 활용하는 도구입니다. 우리는 일반적으로 input들을 list로 지정하고 ground truths를 또 다른 리스트로 저장합니다. 모델을 훈련 시키려면이 두 목록을 동시에 반복하여 네트워크에 제공하여 ground truth와 예측값을 통해 loss를 계산해내죠.
filter
이 기능은 리스트의 데이터를 필터할 때 유용합니다. 아래의 예시를 보면, 홀수를 필터링 했습니다. 람다를 사용했는데, 람다를 한번 더 보여주고 싶어 사용했습니다. 다른 일반 함수도 사용할 수 있습니다.
alpha = [1,2,3,4,5,6]
filtered = list(filter(lambda x:x%2, alpha))
print(filtered)
## output will be [1, 3, 5]
데이터 사이언스에는 필터를 쓸일이 아주 많으니까 필터를 가까이 둬야 합니다.
One Line for Loop
루프를 한줄로 쓰면 코드가 짧아집니다.
## conventional method
for i in range(10):
print(i)
## one line method
for i in range(10): print(i)
## conventional method
output = []
for i in range(10):
output.append(i**2)
## one line method
output=[]
for i in range(10): output.append(i**2)
위의 예시는 너무 심플하죠. 이제 좀 더 좋은 기능을 알아보죠.
values = ['alpha', 'beta', 'gamma', 'phi']
# regular function
def ends_with_a(values):
valid = []
for word in values:
if word[-1].lower() == 'a':
valid.append(word)
return valid
print(ends_with_a(values))
## output will be ['alpha', 'beta', 'gamma']
# list comprehension
filtered_list = [word for word in values if word[-1].lower() == 'a']
# results
print(filtered_list)
## output will be ['alpha', 'beta', 'gamma']
위에서는 일반적인 방법으로 마지막 글자가 'a'인 글자를 필터 했습니다. 두번째에서는 아주 강력한 방법인 list comprehension을 사용했죠. 결과는 동일합니다. 그러니까 one line for loops 는 Clean code를 위해 잘 활용할 수 있겠습니다.
마무리
위에서 소개드린 파이썬 스킬들은 아주 강력합니다. 그리고 데이터 과학자로써 이를 자연스럽게 활용할 수 있다면 코드 작성 속도와 수준이 업그레이드 될 것입니다. 이 기능들을 연습하고 자주 적용해본다면 언젠간 익숙하게 쓸 수 있게 될거라 생각합니다.
혹시 더 좋은 스킬을 아신다면 저에게도 알려주세요.
감사합니다.
이 글은 아래 Harsh Maheshwari씨의 글을 참고하여 작성되었습니다.
'AI 인사이트' 카테고리의 다른 글
챗GPT 1주년 축하해!! 기술 지형을 뒤흔든 변곡점! 무엇이 변했고, 우리 일자리는 무사한가? (0) | 2023.11.22 |
---|---|
11월 22일 AI동키의 인공지능 뉴스 요약(인공지능 레벨 분류, 올트만, CES 혁신상) (0) | 2023.11.22 |
현직 AI 프롬프트 엔지니어가 알려주는 ChatGPT를 사용하여 최상의 결과를 얻는 3가지 방법 소개 (0) | 2023.04.28 |
공부한 자는 시스템과 표준을 얻고 경험한 자는 프레임워크를 얻는다 (0) | 2022.06.08 |
[파이썬] 여러장의 PDF 문서를 이미지로 변환하기 : 이걸로 끝남 (pdf2image) (0) | 2021.05.17 |
댓글