흔한말 (collection)/Python

파이썬, 과연 엑셀보다 어려운가?

hnanmal 2023. 2. 23. 19:40
300x250

도입: 들어가기 앞서

누군가 자신의 문제를 컴퓨터로 해결하고자 한다면, 그 문제 해결의 흐름을 도식화 했을 때 과거에는 다음과 같았을 겁니다.
 

쉽게 말하면 문제를 가지고 있는 user가 직접 컴퓨터에 명령 내릴 수단을 가지고 있지 않으니, 컴퓨터 코딩에 특화된 사람들이 1, 2, 3 단계를 수행해서 Solution Software를 개발한 뒤에 user 에게 배포하는 식이었죠.
그런데 요즘은 다른 방식도 추가되었습니다.
 
 

위 그림처럼 기존의 소프트웨어 개발 영역도 여전히 존재하지만, 코딩을 통해 자신만의 즉석 솔루션을 개발해서 업무나 연구, 작업 등에 자동화, 효율화를 추구하게 되는 방향도 생겨나게 된 것이죠.
 
이걸 저 혼자 Personal Scripting Area라고 부르는데, 이 영역에 속하는 툴들이 참 많이 있습니다.
 
그 종류 중 하나는 기존의 복잡하고 덩치가 큰 Solution Software위에 올라타서, Solution Software 자체를 좀 더 효율적으로 조작할 수 있도록 도와주는 툴들이 있는가 하면 (Revit-Dynamo 같이),
Jupyter Notebook 같이 파이썬이나 여타 프로그래밍 언어를 사용자가 즉석에서 REPL환경으로 돌릴 수 있도록 만든 툴도 있습니다.

 

*REPL : Read–Eval–Print Loop의 약자로 파이썬 대화형 환경 같은 것을 말합니다. 컴파일 과정 없이 즉석에서 코드를 입력하고 결과를 바로 알 수 있는 환경을 말합니다.
 
그러다 보니, 프로그래밍 언어를 배울때 가장 장벽이 되던 개발환경 세팅에 대한 문제가 상당부분 사라지게 되었고, 사람들에게 Python이 좀 더 가벼운 툴로 인식될 수 있는 환경이 갖춰진 것 같습니다.
 
이런 배경에서 생각해 보면,
순수한 언어 측면에서 봤을때, 과연 파이썬 언어가 엑셀의 함수들을 배우는 것보다 고차원적인 두뇌 노동을 필요로 할까요?
 
저는 당연히 아니라고 생각합니다. 이제 파이썬에 대한 심리적 장벽을 좀 낮춰보자는 취지로 아래 글을 써 보도록 하겠습니다.
 
 

엑셀 - 파이썬 함수 비교

0. 주피터 노트북 열기 (인터넷 창으로)

일단 손쉽게 파이썬 코드를 작성해볼 수 있어야 겠죠?
https://jupyter.org/try 를 눌러서 이동하세요.
 

3개의 메뉴 중에 가운데 Jupyter Notebook 을 눌러보면 튜토리얼 주피터 노트북이 하나 뜹니다.
이건 나중에 한번 차분하게 읽어보시고,
 
 

좌 상단에 있는 JupyterLite 로고를 눌러보세요.
 
 

이렇게 디렉토리가 나오고, 상단에 여러 메뉴가 있습니다. New Notebook 버튼을 누르면.
 
 

이렇게 빈 노트북이 나옵니다. 그리고 Select Kernel 창이 하나 뜨는데, 여기서 Python이라고 되어 있는지만 확인하고 Select 버튼을 눌러주면 됩니다.
 
 

자, 깔끔하게 빈 노트북 하나를 생성했습니다. 여기까지 1분도 안 걸리셨을거라 믿습니다.
 
만약 회사나 기타 네트워크 보안환경 등의 이유로 온라인 버전의 주피터노트북이 잘 작동되지 않는 경우에는 직접 컴퓨터에 주피터 노트북을 설치한 뒤에 실습해보시길 권합니다.
 
설치는 어렵지 않고 인터넷에 글들이 너무 많으니 생략합니다.
 
 

1. 사칙 연산

이제 엑셀도 새창 하나 열어준 다음, 더하기, 빼기, 곱하기, 나누기 부터 한번 보겠습니다.
 
 

머리 속 떠오르는데로 1 + 2 라고 적었는데, 3으로 계산 결과가 잘 나왔습니다.
파이썬도 똑같습니다.
 
 

위쪽에 보이는 회색 칸 하나가 엑셀의 셀 한칸에 해당한다고 생각하면 됩니다.
셀에 1+2를 입력하고, 값 계산을 원한다는 의미로 shift + enter 키를 누르면 바로 아래에 결과값이 나타나게 됩니다.
그 밖에 빼기, 곱하기, 나누기는 생략하겠습니다.
 
 

2. Sum함수

엑셀 Sum함수도 해볼까요?
 
 

B칼럼에 4,5,6,7,1,2,3 의 숫자들이 있는데, 한꺼번에 더하고 싶다면 Sum 함수를 쓰면 됩니다.
파이썬에서는?
 
 

data라는 변수에 [4, 5, 6, 7, 1, 2, 3] 이라는 숫자들을 리스트로 저장합니다. 그다음에 엑셀과 똑같이 sum( ) 이라는 함수이름 옆의 괄호에 data라고 적어주면 결과값이 나옵니다. 별 차이가 없습니다.
 
data라는 변수에 숫자들을 할당한 이유는 단순히 깔끔하게 보여주기 위해서 입니다. sum( [4, 5, 6, 7, 1, 2, 3] ) 이라고 작성해도 동일하게 계산 결과가 나옵니다.
 
 

이렇게 말입니다.
 
단지 엑셀은 셀 하나에 숫자 하나씩 만 입력할 수 있기 때문에, 각 셀에 숫자를 집어넣고, 그 셀들의 위치 범위를 (B8:B14) 이렇게 입력하게 되는 것이 차이점입니다.
이제 sum(B8:B14) 과 sum(data)가 완전히 동일한 표현인걸 이해할 수 있습니다.
 

3. If 함수

엑셀에서 if 함수는 조건에 따라 다른 값을 반환하는 함수입니다.

=IF(조건, True일 때 반환할 값, False일 때 반환할 값)

이렇게 써놓고 보니까 의외로 구조가 간단하죠?
 
If 함수에는 3개의 재료만 입력해주면 됩니다.

  1. 조건
  2. 조건이 참일때 결과값
  3. 조건이 거짓일때의 결과값

 
조건이라는 말이 좀 애매하게 들릴 수 있는데, 계산해서 참인지 거짓인지 판별이 되는 구문이 조건이라고 생각하면 됩니다. 주로 등호 부등호를 통해 값을 비교하면 참이나 거짓이 값으로 나오겠죠?
 
 

간단한 예를 보여드리면 이렇게 됩니다.
이걸 파이썬으로 바꿔볼까요?
 
 

구조가 크게 다르지 않습니다. 조건을 if 라는 말 다음에 적어주고 콜론을 마지막에 붙인 뒤에, 줄을 바꿔 참일때 결과를 적어줍니다.
 
다시 줄을 바꿔서 조건이 거짓일때 결과값은 else: 라고 적은 뒤에 또 줄바꾸고 적어주면 됩니다.

if 조건:
    True일 때 반환할 값
else:
    False일 때 반환할 값

Python에서의 if 구문의 구조를 간단하게 써보면 위와 같습니다.
 
 

4. Vlookup 함수

엑셀에서 vlookup 함수는 특정 값을 참조하여 데이터 영역에서 해당 값과 일치하는 값을 찾아 반환하는 함수입니다.

=VLOOKUP(참조할 값, 참조할 범위, 반환할 열 번호, 정확히 일치 여부)

구조를 보면 vlookup 함수에는 4개의 재료가 필요합니다.

  1. 참조할 값
  2. 참조할 범위
  3. 반환할 열 번호
  4. 정확히 일치 여부

4번 항목은 거의 대부분 False 로 입력하면 됩니다. True로 하게되면 유사한 값까지 포함해서 결과를 내기때문에 원하는 것과 다른 결과가 나오는 경우가 생깁니다.
 
 

예제를 만들어 보면 이렇게 되겠네요. 노란색 셀에 양파라고 입력하면, 좌측 A,B 칼럼에 있는 데이터 중 첫째열을 기준으로 이름이 동일한 항목을 찾아서 B열에 있는 가격을 알려줍니다.
 
이번에는 파이썬으로 동일한 작업을 해봐야겠죠?
딕셔너리를 쓰면 간단하게 구현할 수 있습니다.
 
먼저 엑셀과 동일하게 데이터 세팅을 해둘게요.
 
 

이름 항목들과 가격 항목들이 파이썬에서 리스트로 저장되었습니다. 순서대로 대응되는 것을 확인할 수 있네요. 작업하기 편하게 아예 짝지은 데이터 형식으로 바꿔 보겠습니다. 코드 한줄이면 됩니다.
 
 

이렇게 짝지어진 데이터를 딕셔너리 라고 합니다.
 
엑셀 vlookup 함수에서는 이 작업을 하기 위해 참조할 범위, 반환할 열 번호 부분을 함수의 재료로 입력하게 되어 있다고 부연 설명 드릴 수 있겠네요.
 
이제 양파 가격을 출력해 볼까요?
 
 

딕셔너리의 이름 뒤에 대괄호를 배치하고, 그 안쪽에 재료의 이름을 넣기만 하면 알아서 해당하는 값을 출력해 줍니다!!
 
 

필요한 코드만 정리해서 다시 보여드리면 위 그림과 같습니다.
 
 

5. Left 함수

엑셀에서는 글자들 중의 일부를 가지고 조작하는 경우도 자주 있습니다. 대표적으로 Left, Right 함수들이 있습니다.
엑셀의 Left 함수는 문자열에서 왼쪽에서부터 지정한 길이만큼의 문자열을 반환하는 함수입니다.
 
 

이런 식으로 사용합니다.
 
Python에서는 이 작업을 문자열 인덱싱이라는 기능으로 간단하게 구현할 수 있습니다.
 
 

엄청 간단하죠? 구문을 해석해보면, { 문자열 이라는 변수에 “안녕하세요.” 를 저장한 뒤에, 문자열의 가장 0번째 (프로그래밍에서는 가장 처음이 1이 아니고 0입니다.) 부터 2번째 전까지 잘라내라 } 라는 뜻입니다.
 
0을 생략할 수 있어서 이렇게 써도 작동합니다.
 

 
 
 

결론

사용하는 형식이 약간 다를 뿐이지, 엑셀의 함수와 파이썬 언어는 본질적으로 같은 일을 하기 위해 필요한 재료의 갯수도 같고, 그 입력 형식도 많이 다르지 않습니다. 익숙하냐 그렇지 않냐의 차이일 뿐이라고 생각합니다.
 
물론 그럼 익숙한 엑셀 쓰지 왜 파이썬을 쓰나요? 라는 질문이 나올텐데, 파이썬으로 엑셀 보다 훨씬 더 다양하고 유연하게 상황을 해결할 수 있다고 일단은 대답할 수 있겠네요.
 
어쨋든 이번 글은, 프로그래밍이 너무 어렵게 보여서 망설이던 사람들을 파이썬으로 유도하는 어트랙션 성격의 글이라고 봐 주시면 감사하겠습니다.
 
이렇게 시작을 해내면, 이미 절반이기 때문입니다.

반응형