본문 바로가기
AI 인사이트

데이터 사이언티스트라면 반드시 알아야하는 5가지 필수 파이썬 스킬(feat. 꿀팁)

by AI 동키 2021. 5. 22.
반응형

당신의 코드를 더 간략하고 읽기좋게 만들어줄 파이썬의 기능과 기술을 소개드립니다.

Photo by  Hitesh Choudhary  on  Unsplash

데이터 사이언티스트라면 파이썬은 필수 툴입니다. 같은 코드를 짜고 같은 결과를 내는데 누군가는 매우 길고 복잡한 코드를 쓰는가 하면 누군가는 한 줄로 끝내기도 합니다. 긴 코드를 짧게 쓰는 스킬을 익힌다면 코드도 간략해지고 시간도 절약할 수 있는 일석 이조의 효과를 얻을 것입니다. 그래서 준비했습니다. 짧은 코드를 짤 수 있는 방법 다섯가지를 한번 알아보시죠.

 

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씨의 글을 참고하여 작성되었습니다.

 

5 Essential Python function and skills you should know as a data scientist

I have been working in data science for the past few years, which involved a great amount of work in python. So, over time I learned a few skills, which made working in python much more fun and easy…

towardsdatascience.com

 

반응형

댓글