본문 바로가기
ETC/각종정보

[재무빅데이터분석사 2급] Python 정리

by sssinga 2023. 6. 13.

 

 

 

 

 

변수의 설정

  • 변수: 컴퓨터 메모리에 어떤 설명의 결과를 저장하고 이를 선언(할당, 지정) 한 것
  • 등호(=)는 변수를 설정한다고 표현. 이는 value(값)을 할당(assign)한다는 의미
    • 참고: '같다'는 '=='임
  • 변수명명 규칙: 변수는 문자 또는 언더바(_)로 시작되어야 하며 문자, 숫자, 언더바만 포함되어야함 (특수문자X)
  • python의 내장함수(built-in) 명도 변수로 사용할 수 없음
    • and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield
  • None은 아무 값도 없다는 것을 의미
  • 0은 0이라는 값(value)을 가진 것
  • 변수 여러개 한꺼번에 만들기 >>> a, b, c = 2, 3, 4

 

연산자와 복합연산자

  • 연산자
연산자 의미 결과
+ 더하기 3 + 4 7
- 빼기 4 - 3 1
* 곱하기 3 * 4 12
/ 나누기 3 / 4 0.75
% 나머지 7 % 3 1
// 7 // 3 2
** 제곱 3 ** 4 81

 

  • 복합 대입 연산자 (a=3이며 아래의 식은 각각 독립적이라고 가정)
복합 대입 연산자명 설명식 복합 대입 연산자 예
+= a = a + 1 a += 1 4
-= a = a - 1 a  -= 1 2
*= a = a * 2 a *= 2 6
/= a = a / 2 a /= 2 1.5
%= a = a % 2 a %= 2 1
//= a = a // 2 a //= 2 1
**= a = a ** 2 a **= 2 9

 

주석 처리하기

  • 주석 처리시 코드 실행에 아무런 영향을 미치지 않음. 코드 설명 등에 대해 작성
  • 한 줄에서 #로 시작하면 그 뒤는 모두 주석으로 처리됨
  • 여러 줄 주석 처리하기 위해서는 해당 영역 앞 뒤에 작은 따옴표(또는 큰따옴표) 세 개 입력

 

들여쓰기(indent)와 콜론(:)

  • 코드 블록의 첫째 줄의 끝에 콜론(:) 기호를 넣음으로써 코드 블록의 시작을 나타냄
  • 코드 블록의 첫째 줄 다음 줄은 들여쓰기를 하여 코드 블록이 계속해서 이어진다는 것을 나타냄
  • 가독성을 높이기도 하고 들여쓰기를 하지 않을 시 에러 발생

 

자료형의 종류

  • Data Type(데이터 타입): 파이썬에서 자료의 종류
a = 1 정수형 integer
b = 1.0 실수형 float
c = "ㅎㅇ" 문자형 string
d = [1,2,3,4,5] 리스트 list
e = (6,7,8) 튜플 tuple
f = {9,10,11} 세트  set
g = {1 : "참", 2 : "거짓"} 딕셔너리 dictionary

 

리스트 (List)

  • 여러 데이터를 묶어 하나의 목록으로 표현하는 개념 >>> a = [1,2,3,4,5]
  • 순서가 있으며 0부터 시작된다
  • 인덱싱(indexing)과 슬라이싱(slicing)이 가능하다
    • 인덱싱: 인덱스를 통하여 리스트 안에서 해당하는 값을 얻는 것 >>> a[0] 은 1
    • 슬라이싱: 리스트의 일정 구간의 값을 잘라내어 얻는 것 >>> a[0:2] 는 [1,2]
  • 스텝 슬라이싱: [시작인덱스:끝인덱스(:step)] -> 시작인덱스부터 시작해서 끝 인덱스 직전까지 step씩
  • 역 슬라이싱: [높은인덱스:낮은인덱스:-step] -> 높은인덱스부터 시작해서 낮은인덱스 직전까지 step씩
  • 리스트의 연산

  • 리스트의 수정은 인덱싱이나 슬라이싱을 통해서 직접 수정 가능
  • 리스트의 크기는 len() 함수로 괄호 안에 리스트를 넣으면 해당 리스트의 크기(원소의 개수)를 나타낸다.
  • 리스트(시퀀스형 자료 또는 string) 내에 어떤 값이 포함되어 있는지 체크하기
    • 값 in 리스트 -> a=[1,2,3,4,5] 일 때,  >>> 3 in a 는 True /  >>> 6 in a 는 False
    • 리스트 in 리스트 -> b=[1,2] 일 때, >>> b in a 는 True / >>> a in b 는 False
  • 리스트 조작: 파이썬의 내장함수를 사용하여 리스트를 수정하는 방법
내장함수명 의미 사용 예
append() 끝에 추가 >>> a. append(6)
>>> a
[1,2,3,4,5,6]
count() 해당 원소가 들어간 개수 세기 >>> a.count(4)
1
extend() 리스트 확장 >>> a.extend([6,7,8])
>>> a
[1,2,3,4,5,6,6,7,8]
index() 해당 원소의 첫번째 위치 나타내기 >>> a.index(6)
5
pop() 저장된 곳에서 원소 빼기 >>> a.pop(2)
3
>>> a
[1,2,4,5,6,6,7,8]
reverse() 원소 순서 거꾸로 하기 >>> a.reverse()
>>> a
[8,7,6,6,5,4,2,1]
sort() 오름차순으로 정렬 >>> a.sort()
>>> a
[1,2,4,5,6,6,7,8]

 

튜플 (tuple)

  • 리스트와 비슷한 자료형으로 괄호로 묶여짐 >>> a = (50, 2)
  • 하나의 값도 사실상 원소가 한 개인 튜플로 취급할 수 있음
  • 원소가 한개인 튜플을 만들기 위해서는 괄호 안에서 하나의 원소 뒤에 콤마를 하나 더 찍어야 한다.
    • >>>(50,) == 50 은 False 이나, >>>(50) == 50 은 True
  • 튜플은 데이터 값이 초기에 결정된 후 바꿀 수 없지만, 리스트는 데이터 값을 바꿀 수 있다.
  • 리스트는 튜플에 비하여 다양한 변화를 줄 수 있지만 처리속도는 상대적으로 느리다.

 

딕셔너리 (dictionary)

  • 사전이라는 의미로 키(key)와 값(value)로 구성된 자료 구조 >>> {키1:값1, 키2:값2}
  • 키는 중복될 수 있지만 마지막 값으로 대체된다
  • 딕셔너리는 순서가 없으므로 인덱스로는 찾을 수 없고 로 찾을 수 밖에 없다
  • 딕셔너리는 키로 접근하여 값을 바꿀 수 있다 >>> a['b'] = 3
내장함수명 의미 사용 예
dict() 명시적으로 딕셔너리 선언하기 >>> c = dict(d=3, e=4, f=5)
>>> print(c)
{'d':3, 'e':4, 'f':5}
keys() 키 가져오기 >>> a = {'a':1, 'b':2, 'c':3}
>>> a.keys()
dict_keys(['a','b','c'])
values() 값 가져오기 >>> a.values()
dict_values([1,2,3])
items() 키와 값을 튜플로 가져오기 >>> a = {'a':1, 'b':2, 'c':3}
>>> a.items()
dict_items([('a',1), ('b',2), ('c',3)])

 

데이트타임 (DateTime)

  • DateTime은 자동으로 타입을 설정해주지 못하므로 객체로 전환하기 위해서는 전용 라이브러리를 불러와야 한다.
  • datetime 라이브러리는 날짜와 시간에 특화된 라이브러리이며, 아래와 같은 주요 클래스(class)가 있다.
    • 날짜와 시간을 함께 저장하는 datetime 클래스
    • 시간만 저장하는 time 클래스
    • 날짜마만 저장하는 date 클래스
    • 시간의 구간 정보를 저장하는 timedelta 클래스
  • 라이브러리를 불러오는 구문 : import 라이브러리 (as 약자)
  • 라이브러리 안에 있는 클래스 별도로 불러오는 구문: from 라이브러리 import 클래스
  • >>>import datetime as dt  >>> a = dt.datetime(2019,10,31)
    • a 뒤에 .year .month .day .hour .minute .second 등을 붙여 원하는 값만 출력 가능
    • >>> a.weekday() 는 요일로 변환하는 함수로 값은 3
    • >>> print(a.date()) 는 2019-10-31
    • >>> print(a.time()) 는 00:00:00
  • strftime() 메쏘드: 날짜와 시간 정보를 문자열로 바꿔주는 메쏘드로, 문자열을 어떤 형식(format)으로 할지인 형식 문자열을 인자로 받는다. -> 사용자가 정의하는 방식에 따라 다양한 날짜 형식으로 변경 가능
날짜 및 시간 지정 문자열 의미 사용 예
%Y 4자리 연도 숫자 >>> a.strftime("%Y")
'2019'
%m 2자리 월 숫자 >>> a.strftime("%m")
'10'
%H 24시간 형식 2자리 시간 숫자 >>> a.strftime("%H")
'00'
%M 2자리 분 숫자 >>> a.strftime("%M")
'00'
%S 2자리 초 숫자 >>> a.strftime("%S")
'00'
%A 영어로 된 요일 문자열 >>> a.strftime("%A")
'Thursday'
%B 영어로 된 월 문자열 >>> a.strftime("%b")
'October'
%Y-%m-%d XXXX-XX-XX 형식의 복합 문자열 >>> a.strftime("%Y-%m-%d")
'2019-10-31'
  • strptime() 메쏘드: 문자열로부터 날짜와 시간 정보를 불러들여서 datetime.datetime 클래스 객체를 만들 수 있다.
    • >>> dt.strptime("2019-01-02 12:44", "%Y-%m-%d %H:%M")
    • dt.datetime(2019,1,2,12,44)
  • 날짜나 시간의 간격을 구할 때는 두 개의 datetime.datetime 클래스 객체 차이를 구한다. 이 결과는 datetime.timedelta 클래스 객체로 반환된다.

  • datetime.timedelta 클래스는 다음과 같은 속성과 메쏘드를 가진다.
속성 의미 사용 예
- - >>> a = dt.datetime(2019,2,19,14)
>>> b = dt.datetime(2019,1,2,13)
>>> 차이 = a - b
days 일수 >>> 차이.days
48
seconds 초 ( 0 ~ 86399) >>> 차이.seconds
3600
microseconds 마이크로초 ( 0 and 999999) >>> 차이.microseconds
0

 

 

IF 문

  • if문의 기본 구조  : if ~ else 문

  • if ~ elif ~ else 문

 

 

FOR 문

  • 특정 범위의 자료나 리스트에 대해서 처음부터 끝까지 하나씩 추출하여 특정 코드를 반복적으로 수행할 때 사용하는 제어문 -> 특정 범위나 리스트가 매우 클 때 사용하면 편리
  • for 문의 기본 구조

  • 중첩 for문: for문 하위에 for문을 더 넣어서 반복 수행

 

리스트 컴프리헨션 (List Comprehension)

  • Comprehesion: 반복적으로 생성 간으한 객체(object)를 생성하기 위한 방법
  • 리스트 안에서 for문과 if문을 이용하여 리스트를 작성하고 처리할 수 있게 해주는 방법

  • 변형 예시 >>> [ i+5 for i in range(5) ] 는 [5,6,7,8,9]
  • 단일 if문을 포함한 List Comprehension >>> [ i for i in range(5) if i % 2 == 0 ] 는 [0,2,4]
  • if와 else를 포함한 List Comprehension >>> [ i if i % 2 == 0 else None for i in range(5) ] 는 [0,None,2,None,4]
    • if만 쓰는 경우 for문 뒤에 쓰지만, else가 추가되는 경우 if~else문을 i와 for 사이에 위치시켜야 한다
  • 중첩 for 문을 포함한 >>> [ i*j for i in range(1,6) for j in range(7,10)]는 [7,8,9,14,16,18,21,24,27,28,32,36,35,40,45]

 

사용자 함수

  • Python의 함수 구분 - 내장함수, 라이브러리 제공 함수, 사용자가 직접 만든 함수
  • 사용자 함수: 각종 제어문(if, for 등)을 중첩적으로 사용 가능 >>> def func(a,b):

  • 함수 안에서 최종적으로 나오는 결과 값을 return 값이라고 함. return만 입력하는 경우도 있는데, 이 경우는 함수 실행을 여기서 끝내라는 의미
  • 전역(global)변수: 함수 밖에서 정의한 변수
  • 지역(local)변수: 함수 안에서 별도로 정의한 변수로 함수가 실행되는 동안에만 존재. 함수 실행 끝나면 삭제
  • 람다(lambda) 함수 >>> f = lambda x,y : x+y 라 선언하고 >>> f(5,6) 이라고 사용하면 11 값 나옴
    • return 값 X, 콜론 뒤에 나오는 식에서 새로운 변수 정할 수 없으나 lambda 함수 밖에 있는 변수 사용 가능
    • map함수(함수, 반복가능한 자료형 입력변수로 받음)와 연결하여 자주 사용
    • >>> a = map(lambda x:x*2, [1,2,3,4]) >>> lista(a) 는 [2,4,6,8]

 

문자열(string) 처리 함수

구분 함수명 의미 사용 예
대소문자 변환 upper() 대문자로 바꾸기 >>> a = 'hello'
>>> a.upper()
'HELLO'
lower() 소문자로 바꾸기 >>> a = 'HELLO'
>>> a.lower()
'hello'
문자열 검색 count() 괄호 안의 문자열 발생 횟수 구하기
해당 문자열이 없으면 0 반환
>>> a = '가나다라마마마사'
>>> a.count('마')
3
find() 괄호 안 문자열의 인덱스 구하기
*문자열 중복 시 첫 번째 인덱스 구함
* 해당 문자열이 없으면 -1 반환
>>> a = '가나다라마마마사'
>>> a.find('마')
4
rfind() 괄호 안 문자열을 오른쪽부터 찾아 인덱스 구하기
*문자열 중복 시 마지막 오른쪽 인덱스 구함
* 해당 문자열이 없으면 -1 반환
>>> a = '가나다라마마마사'
>>> a.rfind('마')
6
index() 괄호 안 문자열의 인덱스 구하기
*문자열 중복 시 첫 번째 인덱스 구함
* 해당 문자열이 없으면 에러 메시지 반환
 (ValidError : substring not found)
>>> a = '가나다라마마마사'
>>> a.index('마')
4
rindex() 괄호 안 문자열을 오른쪽부터 찾아 인덱스 구하기
*문자열 중복 시 마지막 오른쪽 인덱스 구함
* 해당 문자열이 없으면 에러 메시지 반환
 (ValidError : substring not found)
>>> a = '가나다라마마마사'
>>> a.rfind('마')
6
startswitch() 괄호 안 문자열로 시작하면 True,
아니면 False 반환
>>> a = '가나다라마마마사'
>>> a.startswitch('가나')
True
endswitch() 괄호 안 문자열로 끝나면 True,
아니면 False 반환
>>> a = '가나다라마마마사'
>>> a.endswitch('마사')
True
isalnum() 문자열이 알파벳(al)과 숫자(num)로 이루어져 있으면 True,  아니면 False 반환 >>> a = '가나다라마마마사123'
>>> a.isalnum()
True
isalpha() 문자열이 알파벳(영어, 한글)으로만 이루어져 있으면 True,  아니면 False 반환 >>> a = '가나다라마마마사123'
>>> a.isalpha()
False
isdigit() 문자열이 숫자로만 이루어져 있으면 True, 아니면 False반환
*isnumeric()과 동일
>>> a = '123'
>>> a.isdigit()
True
문자열에 공백 존재 여부 및 처리 lstrip() 문자열의 왼쪽에 있는 공백 제거 >>> a = '  가나다  ' 
>>> a.lstrip()
'가나다  '
rstrip() 문자열의 오른쪽에 있는 공백 제거 >>> a = '  가나다  '
>>> a.rstrip()
'  가나다'
strip() 문자열의 양쪽에 있는 공백 제거 >>> a = '  가나다  '
>>> a.strip()
'가나다'
isspace() 문자열이 공백(whitespace)으로만 되어 있는 경우 True, 아니면 False 반환 >>> a = '   '
>>> a.isspace()
True
문자열의 구분, 연결, 교체 등 split() 문자열을 구분자(separator)로 구분한 결과를 리스트로 처리 >>> a = '가, 나, 다'
>>> a.split(sep = ',')
['가', '나', '다']
replace() replace('구 문자열', '신 문자열', max)
*max가 있으면 그 개수만큼 교체하고 그 이후는 무시
>>> a = '가 가 가 나'
>>> a.replace('가', '아', 2)
'아 아 가 나'
join() '(연결하고자 하는 문자'.join(리스트) >>> a = ['가', '나', '다']
>>> b = '_'.join(a)
'가_나_다'
zfill() 문자열을 괄호 안 숫자만큼의 길이로 만들어서, 필요한 자리수만큼 앞에 '0'을 채움 >>> a = '123'
>>> a.zfill(5)
'00123'
문자열에서의 최대값, 최소값 구하기 max() 해당 문자열의 최대값 (알파벳 순서상)
*숫자열에서는 가장 큰 값 반환
>>> a = '가나다라마마마사'
>>> max(a)
'사'
min() 해당 문자열의 최소값 (알파벳 순서상)
*숫자열에서는 가장 작은 값 반환
>>> a = '가나다라마마마사'
>>> min(a)
'가'
숫자->문자 str() 괄호 안의 숫자를 문자열로 변경 >>> a = 123
>>> str(a)
'123'
문자->숫자 int() 괄호 안의 문자를 정수(integer)로 변경 >>> a = '123'
>>> int(a)
123
 float() 괄호 안의 문자를 부동소수(float)로 변경 >>> a = '123'
>>> int(a)
123.0

 

 

range(), enumerate(), zip() 함수

  • range(): 순차적으로 정수를 생성하는 함수
    • range(앞숫자, 뒤숫자): (앞숫자) 부터 (뒤숫자-1) 까지 1씩 증가하는 순차적인 정수
    • range(앞숫자,뒤숫자,step): (앞숫자) 부터 (뒤숫자-1) 까지 step 숫자만큼 증가하는 순차적인 정수
    • range(뒤숫자): 뒤숫자만 있으면 앞숫자 0과 step 1이 생략되어 있는 것
  • enumerate(): 괄호 안의 시퀀스 자료의 인덱스와 원소를 함께 추출하는 함수 >>> list(enumerate(a))
    • 리스트 컴프리헨션에서 사용 가능 >>> [idx for idx, data in enumerate(a) if data == '가']
  • zip(): 2개 이상의 시퀀스형 자료를 한데 묶어서 튜플을 원소로 구성하는 시퀀스로 만들어주는 함수 >>> list(zip(a,b))
    • 리스트 컴프리헨션에서도 사용 가능 >>> [data[0] for data in zip(a,b,c) if data[2] == '가']
  • enumerate() 함수와 zip() 함수의 조합: zip(a,b,c)에서 c가 '대변'인 a의 항목과 b의 금액을 c의 항목과 함께 출력할 때 해당 인덱스까지 출력하고 싶은 경우

 

연산 결과를 나타내는 함수

함수명 의미 사용 예
count() 숫자로 구성된 시퀀스 자료형 개수의 합
* len()과 동일한 결과를 나타냄
>>> a = [100, 200, 300, 400]
>>> count(a)
4
stdev() 숫자로 구성된 시퀀스 자료형의 표준편차 >>> a = [100, 200, 300, 400]
>>> stdev(a)
129.09944487358058
variance() 숫자로 구성된 시퀀스 자료형의 분산 >>> a = [100, 200, 300, 400]
>>> variance(a)
16666.66666666668
set() 시퀀스 자료형에서 중복되는 값을 제외하여 세트로 보여줌 >>> a = [100, 200, 200, 400]
>>> set(a)
{200, 100, 400}

 

all(), any() 함수

  • all() 함수: 괄호 안의 경우가 모두 참이면 True, 아니면 False 반환. 따라서 괄호 안의 경우가 단일일 경우 error가 나오므로 복수의 경우(일반적으로는 순환)로 만들어주어야 한다

  • any() 함수: 괄호 안의 경우가 어느 하나라도 참이면 True, 아니면 False 반환. 따라서 괄호 안이 복수여야 하고 리스트 컴프리헨션처럼 for문을 이용하여 해당 경우를 순환시킬 수 있다.

 

filter() 함수

  • 시퀀스형 자료에서 특정 조건을 충족하는 값만 추출할 때 사용하는 함수 >>> filter(함수, 시퀀스형 자료)
  • 함수 결과 자체는 객체로 나오기 때문에 이를 리스트로 처리해 결과를 리스트로 볼 수 있다
  • 인자로 포함되는 함수는 사용자 정의 함수도 가능하지만 lambda함수를 사용하는 경우가 많다

 

문자열 포맷팅

함수명 의미 사용 예
%s 문자열 (string) >>> '내 이름은 %s이다.' %'홍길동'
'내 이름은 홍길동이다.'
%d 정수 (integer) >>> '나는 %d 살이다.' %16
'나는 16 살이다.'
%f 부동소수(float)
*디폴트는 소수점 6자리. 소수점 2자리면 %0.2f와 같이 설정한다.
>>> '나의 평균 점수는 %0.1f 점이다.' %75.3
'나의 평균 점수는 75.3 점이다.'
  • format() 함수를 사용하는 방법

 

예외 처리

  • 에러가 발생하는 예외 상황에 대해서 적절히 반영하기
  • try, except 문

  • break 문: 가장 가까이서 둘러싸는 for문으로부터 빠져나가게 만든다.

  • continue 문: for 문에서 특정 조건에서만 코드를 실행하지 않고 다음으로 이동하고 싶을 때 사용

 

 

 

 

KICPA ALLDEMY (https://kicpa-alldemy.com/)의 재무빅데이터분석사2급 파이썬 강의를 학습하고 개인 학습용으로 정리한 글입니다.

댓글