Python 기본적인 개념
by Kim
목차
이번 글은 Python에 익숙해지기 위해 간단한 함수 등을 다뤄보는 내용입니다. 여기부터 자료 구조까지 Part 1
이고 numpy, pandas 등 모듈을 활용하여 데이터 분석 모델에 직접 입력하기 전 데이터를 전처리하는 부분은 Part 2
로 나누었습니다.
모듈 불러오기
R에서 본인의 사용목적에 따라 패키지(Package)
를 설치하고 라이브러리(Library)
를 불러오듯이 Python 또한 이런 과정이 필요합니다. 데이터 분석에 필요한 기본적인 모듈(Module)
은 아나콘다에 이미 설치가 되어 있기 때문에 새로운 모듈을 설치하는 것은 이후에 다루도록 하고 우선은 모듈을 불러오는 문법을 간단히 언급하고자 합니다. 예를 들어 pandas 라는 이름의 모듈을 불러온다고 하면
import pandas
을 하면 자신이 필요한 모듈을 라이브러리 불러오듯이 불러올 수 있습니다. 그리고 불러온 모듈에 내장된 함수를 사용하는 방법은 아래와 같습니다. 위에서 불러온 pandas 모듈에 있는 DataFrame이라는 함수를 사용하면
pandas.DataFrame(변수명)
이런 식으로 사용하면 됩니다.
함수와 메서드
Python에는 SQL이나 R에서는 볼 수 없는 형태의 함수가 있습니다. 메서드(Method)
라는 개념인데 함수는 보통 함수 이름을 입력하고 괄호 안에 모든 변수를 넣는데 메서드는 가장 앞에 변수를 적고 .(마침표)
를 찍은 후 메서드의 이름을 적고 나머지 변수를 괄호 안에 넣는 방식입니다.
예를 들어 data라는 변수에 fuction을 각각 적용하는 문법은 아래 표와 같습니다.
함수(function) | 메소드(method) |
---|---|
function(data, …) | data.function(…) |
Python에서 함수를 사용할 때 주의할 점이 있는데 같은 기능을 가진 함수, 메소드 양쪽 모두 구현되어 있는 경우도 있으나 한 쪽만 구현되어 있는 경우도 있으니 자신이 쓰는 함수가 어떤건지는 알아둘 필요가 있습니다.
둘의 차이는 이 외에도 클래스(Class)에 종속 여부 또한 있지만 분석에 필요한 개념은 아니기 때문에 문법 차이 외의 개념에 대해서 더 궁금하신 분들은 메소드 vs 함수
로 구글링하시면 추가 정보를 얻으실 수 있습니다.
Python에 익숙해지기 위해 간단한 함수 몇 개를 추가적으로 다루어봅시다. 우선 spyder에서 코드를 실행하는 방법은 f9를 누르는 것입니다. 커서가 올라가 있는 줄의 코드가 실행이 되며 여러 줄의 코드를 동시에 실행하고 싶을 때는 실행할 코드를 모두 블록 지정한 뒤 f9를 누르면 됩니다.
print 함수는
프로그래밍을 안 해본 사람도 어디선가 들어봤을 정도로 다른 프로그래밍 언어에서도 잘 쓰이는 유명한 함수입니다. 입력값에 대해 원하는 형태(포맷/format)에 맞춰서 출력해주는 함수입니다. 간단한 예제를 통해 알아보도록 합시다.
입력 값 | 출력 형식 |
---|---|
print(1) | 1 |
print(‘%d’ % 1) | 1 |
print(‘%.2f’ % 10) | 10.00 |
print(‘%5.2f’ % 10) | 10.00 |
print(‘%s’ % ‘abcde’) | abcde |
print(‘%02d’ % 1) | 01 |
print(‘%d + %d = %d’ % (1,2,3)) | 1 + 2 = 3 |
순서대로 설명하자면, 포맷없이 숫자를 print에 넣으면 그대로 출력됩니다. 문자의 경우 따옴표를 붙이지 않으면 변수로 인식하기 때문에 제대로 실행이 되지 않으니 주의합시다.
그 밑으로는 print('포맷' % 변수 )
식의 문법으로 되어 있는데 각각에 대해 표로 다시 정리해보겠습니다.
포맷 | 설명 |
---|---|
‘%d’ | 정수 출력 |
’%.2f’ | 소숫점 2자리까지 출력(자동 반올림) |
‘%5.2f’ | 총 5자리 출력, 소숫점 2자리만 출력 |
‘%02d’ | 총 2자리 출력, 자릿수 부족시 0으로 채워서 출력 |
‘%s’ | 글자 그대로 출력 |
여기까지는 값 하나를 포맷에 맞춰 출력하는 문법에 대해 알아보았습니다. 다음으로는 상단 표에서 가장 아래에 있는 '%d + %d = %d' % (1,1,2)
에 대해 설명드리겠습니다. 이 입력값은 다른 입력과 다르게 변수 부분이 소괄호로 묶여있습니다. 뜻은 괄호 내에 있는 변수를 좌측부터 우측 순서대로 왼쪽 포맷에 맞춰서 출력한다는 것입니다. 그렇기 때문에 가장 좌측에 있는 1이 맨 앞에 출력되었고 다음 변수인 2가 + 뒤에 출력 되고 마지막 변수인 3이 = 뒤에 출력이 되는 것입니다.
다음으로는 이스케이프 문자
에 대해 알아보겠습니다. print함수는 포맷에 특정 문자를 입력하면 그것을 포맷 형식으로 인식하고 변수를 그 포맷에 맞춰 출력하게 되는데 입력 값의 포맷에 문자를 넣을 때 이를 포맷 형식으로 인식시키지 않고 그대로 출력
시켜주는 것을 도와주는 것이 이스케이프 문자입니다. 위에서 포맷 중에 %d
가 있는데 print 함수로 출력시에 %d 위치에 변수가 출력되는 것이 아닌 %d 그대로 출력하고 싶은 경우를 예로 들 수 있겠습니다.
이스케이프 문자 | 역할 | 설명 |
---|---|---|
\n | 새로운 줄로 이동 | `Enter` 누른 효과 |
\t | 다음 탭으로 이동 | `Tab`을 누른 효과 |
\b | 뒤로 한 칸 이동 | `Backspace`를 누른 효과 |
\\ | \ 출력 | |
\' | ' 출력 | |
%% | % 출력 |
이런 식으로 이스케이프 문자를 알고 있으면 원하는 형태로 출력시 문법 오류가 발생하지 않습니다. 위 표에서 %%라는 이스케이프 문자를 몰랐다면 변수 1
과 2
를 넣어서 1 % 2
라는 값을 출력할 때 print('%d %% %d' % (1,2))
라고 하지 않고 print('%d % %d' % (1,2))
라고 작성하고도 오류가 나고도 무엇이 문제인지 모를 것입니다.
print('%d % %d' % (1,2))
Traceback (most recent call last):
File "<ipython-input-17-1159f7d66e65>", line 1, in <module>
print('%d % %d' % (1,2))
ValueError: unsupported format character '%' (0x25) at index 5
색인
색인은 특정 변수에서 원하는 부분은 출력하는 것을 의미하며 변수[위치값]의 형식으로 추출이 가능합니다. SQL이나 R에서는 위치의 시작이 1인데 반면, Python에서는 위치의 시작이 0, 1:2는 1에서 1까지(2의 이전인)를 의미합니다.
R과 또 다른 점이 있는데 문자열에서도 위치 색인이 가능하다는 것입니다. 한 글자 단위로 위치가 있다는 것인데, v1 = ‘abcdef’ 라는 변수를 예시로 사용해보도록 하겠습니다.
입력 | 출력 형식 |
---|---|
v1[1] | ‘b’ |
v1[1:2] | ‘b’ |
v1[1:3] | ‘bc’ |
이런 식으로 특정 문자에 대해서도 몇 번째부터 몇 번째까지 색인이 가능합니다.
연산
잠시 쉬어가는 차원에서 간단한 연산을 해보도록 하겠습니다.
연산 | 연산자 |
---|---|
덧셈, 뺄셈 | + , - |
곱셈, 나눗셈 | * , / |
제곱 | ** (^ 사용불가) |
그런데 R과 차이점이 있는데 R에서는 벡터와 단일 값을 연산하면 벡터 연산이 지원이 되는데 Python에서는 벡터 연산을 지원하지 않습니다. R에서 하듯이 산술연산을 하다가 당황할 수 있습니다.
[1,2,3] + 1
Traceback (most recent call last):
File "<ipython-input-25-e259f035f6b7>", line 1, in <module>
[1,2,3] + 1
TypeError: can only concatenate list (not "int") to list32.343)
Out: 232
그리고 자기 자신에게 하는 연산에 있어 조금 간편한 방법이 있습니다. 사용하고 싶은 연산자
를 =
와 붙여서 사용하면 자기 자신을 두 번 언급하지 않으면서 연산이 가능합니다. 예를 들어 a = 3이라는 숫자가 있다고 할 때 a에 5를 더하고 싶을 때 보통 a = a + 5
를 생각하실 수 있겠지만 a += 5
로도 가능하다는 것입니다.
반올림은 round(숫자) 로 할 수 있습니다. 그리고 내림을 할때 문제가 있는데 trunc라는 함수가 기본 함수가 아니기 때문에 math 라는 모듈을 불러와서 실행을 해야합니다.
trunc(2.32)
Traceback (most recent call last):
File "<ipython-input-18-827b1c8fca55>", line 1, in <module>
trunc(2.32)
NameError: name 'trunc' is not defined
import math
math.trunc(232.343)
Out: 232
문자열 메소드
이번에는 아래 문자열들을 이용하여 문자열 메소드에 대해 배워보도록 합시다.
1) startswith
R에서는 stringr
패키지의 str_detect(a1, ‘[^prefix]‘)와 같은 역할을 하는 메소드로 문법은 아래와 같습니다.
a1.startswith(prefix, - 시작값 확인 문자열
start, - 검사 시작 위치(생략가능)
end) - 검사 끝 위치(생략가능)
예제 | 설명 |
---|---|
a1.startswith(‘a’) | ‘a’로 시작하는지 여부 |
a1.startswith(‘a’,1) | a1[1:] (‘bcde’)가 ‘a’로 시작하는 여부 |
2) endswith
R에서는 str_detect(a1, ‘[prefix$]’)와 같은 역할을 하는 메소드로 startswith와 반대 역할을 합니다.
a1.endswith(suffix, - 끝값 확인 문자열
start, - 검사 시작 위치(생략가능)
end) - 검사 끝 위치(생략가능)
예제 | 설명 |
---|---|
a1.endswith(‘e’) | a1이 ‘e’로 끝나는지 여부 |
a1.endswith(‘e’,1,3) | a1[1:3]이 ‘e’로 끝나는지 여부 |
a1.endswith(‘c’,1,3) | a1[1:3]이 ‘c’로 끝나는지 여부 |
3) strip
공백을 제거하는 메소드로 SQL에서는 trim에 해당합니다.
예제 | 설명 |
---|---|
a2.lstrip() | a2 왼쪽에서 공백 제거 |
a2.rstrip() | a2 오른쪽에서 공백 제거 |
a2.strip() | a2 양쪽에서 공백 제거 |
4) replace
치환 메소드로 R에서는 str_replace, SQL에서는 REPLACE가 있습니다.
예제 | 설명 |
---|---|
a1.replace(‘a’,’A’) | ‘a’를 ‘A’로 치환 |
a1.replace(‘a’,’’) | ‘a’를 삭제 |
- 5) split
- 분리 메소드
a3.split(‘;’)
6) 대/소문자 치환
예제 | 설명 |
---|---|
a1.upper() | 소문자로 |
a1.lower() | 대문자로 |
a1.title() | 첫 글자만 대문자로 |
7) find
위칫값 메소드로 SQL의 INSTR함수와 동일합니다.
a1.find(‘a’) - a의 위치값
8) count
문자열 내에 괄호 안 문자가 몇 개 있는지 알려주는 메소드입니다.
a1.count(‘a’) - a의 포함횟수
9) format
괄호 안 변수를 앞 변수 형식에 맞춰 변환시켜주는 메소드입니다.
‘{0:d} + {1:d} = {2:.2f}’.format(1,2,3)
Python의 자료 구조에 들어가기 앞서서 워밍 업(warming up) 차원에서 간단한 함수들과 Python 언어의 특징을 다뤄보았습니다. 글 작성하면서 스스로도 정리가 되는 느낌이네요. 다음 포스트에는 Python의 자료 구조를 본격적으로 다뤄보도록 하겠습니다.
다음 내용
* 자료 구조
- list
- map
- Series
- tuple
- dictionary
* 반복(제어)문
- for
- while
- if
- 제어문
- 리스트 내포 표현식(List Comprehension)
Subscribe via RSS