변수의 설정
- 변수: 컴퓨터 메모리에 어떤 설명의 결과를 저장하고 이를 선언(할당, 지정) 한 것
- 등호(=)는 변수를 설정한다고 표현. 이는 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급 파이썬 강의를 학습하고 개인 학습용으로 정리한 글입니다.
'ETC > 각종정보' 카테고리의 다른 글
재무빅데이터분석사 2024년 시험일정 기출문제 강의 난이도 등 (1) | 2023.11.20 |
---|---|
[재무빅데이터분석사 2급] 기초통계 정리 (0) | 2023.06.02 |
[재무빅데이터분석사 2급] 데이터베이스 정리 (0) | 2023.06.02 |
고수익 블로그 찾는 방법 + 티스토리 분석 사이트에서 인기글, 키워드 확인하기!! (0) | 2023.03.28 |
티스토리 시작할 때 세팅 - 콘텐츠, 스킨, 플러그인 등 (0) | 2023.03.05 |
댓글