Home [SeSAC]파이썬 강의
Post
Cancel

[SeSAC]파이썬 강의

1. 파이썬 알아보기

파이썬이란?

  • 1990년 암스테르담의 귀도 반 로선(Guido Van Rossum)이 개발한 인터프리터 방식의 프로그래밍 언어
  • 구글 소프트웨어의 50%이상이 파이썬을 사용
  • 드롭박스, 인스타그램, 유튜브등이 파이썬으로 작성됨
  • 공동작업과 유지 보수가 쉽다

인터프리터 방식이란?

한줄씩 실행되는 방식

파이썬의 특징

  • 인간다운 언어

강점:

  • 쉬운 난이도
    • 초보 프로그래머들에게 자주 추천됨
    • 오픈 소스가 많아 정보 검색이 용이
  • 무료지만 강력
    • 오픈 소스임으로 어디서든 파이썬 사용 가능
    • 개발 속도가 빠름

활용 분야:

  • 테이터 크롤링
  • 테이터 분석
  • 머신 러닝

다른 언어들의 활용 분야:

  • C: 속도에 특화된 언어
  • Java: 웹, 안드로이드 언어
  • Swift: 아이폰 앱

파이썬 설치

공식 싸이트에서 다운보단 필요한 툴들과 함께 패키지 형식으로 제공하는 아나콘다에서 받는걸 추천

아나콘다 링크: https://www.anaconda.com/products/distribution

파이썬 개발 환경

  • Jupyter Notebook: 웹 브라우저에서 파이썬 코드를 작성, 실행할 수 있는 개발도구
  • Google Colab: 주피터 노트북과 같지만, 협업에 용이함
  • Pycharm: 스마트 코드 완성, 코드 검사, 즉성 오류 강조 표시 기능이 추가된 플랫폼

2. 숫자형 자료형

  • 숫자 형태로 이루어진 자료형

정수형

1
2
a = 3 # a에 3을 저장
print(a) # print() 출력 명령어

실수형

1
2
a = 3.14 # 소수 형태의 숫자를 a에 저장
print(a)

다른 언어들과 다르게 형변환이 불필요하다

지수 표현

1
2
3
a = 5.15E+10 # 5.15 * 10^10
a = 5.15E10 # +생략 가능
a = 5.15e10 # 소문자 e 가능

연산

  • 덧셈 연산: +
  • 뺄셈 연산: -
  • 곱셈 연산: **
  • 나눗셈 연산: /
  • 나눈 후나머지: %
  • 몫: //
  • 사용자가 요청한 정보를 화면에 출력해주는 기능
1
2
print('Hello World!') # 헬로 월드 출력
print('Hello World!', end='\n') # end='\n' 가 기본값으로 들어가있어 줄바꿈이 실행된다
1
2
print('Python', 'is', 'too', 'fun!') # Python is too fun! 출력
print('Python', 'is', 'too', 'fun!', sep=' ') # sep=' ' 가 기본값으로 들어가있어 ,마다 띄어쓰기가 실행됨

실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#변수 a를 만들고, 변수 a에 정수 5를 할당해보세요.
a = 5
#변수 b를 만들고, 변수 b에 정수 10을 할당해보세요.
b = 10
#두 변수 a,b를 더한 값을 변수 c에 할당해보세요.
c = a+b
#두 변수 a,b를 뺀 값을 변수 d에 할당해보세요.
d = a-b
#두 변수 a,b를 곱한 값을 변수 e에 할당해보세요.
e = a*b
#두 변수 a,b를 나눈 값을 변수 f에 할당해보세요.
f = a/b
#변수 a를 변수 b로 나눈 후, 나머지 값을 g에 할당해보세요.
g = a%b
#변수 b를 변수 a로 나눈 후, 몫을 h에 할당해보세요.
h = b//a
#마지막으로 변수 a~h까지 모두 더한 값을 출력해보세요.
print(a+b+c+d+e+f+g+h)

3. 문자열 자료형

  • 문자, 단어 등으로 구성된 문자들의 집합
1
2
3
4
text = 'Hello World'
text = "Hello World"
text = '''Hello World'''
text = """Hello World"""

왜 네가지 방법으로 분류가 되있나?

  • 중간에 따옴표를 쓰고 싶을 때 활용 가능

문자열 자료형 표현 방법

1
2
3
4
5
6
7
text = "'Hello' 'World'" # '가 같이 저장됨'
text = "He said \"Hi\" to me" # 백슬래쉬 사용
text = "Life is too short \n You need Python" # \n 줄바꿈 표시

text = """Life is too short
You need Python.
""" # """안에 감싸준다면 줄바꿈도 인식됨
  • 이스케이프 코드: 미리 정의 둔 문자조합

문자열 덧셈

1
2
3
4
a = 'Python'
b = 'is too fun!'

print(a + b) # Python is too fun!

문자열 곱셈

1
2
a = 'Python'
print(a*3) # PythonPythonPython

문자열 길이 구하기

1
2
a = 'Python'
print(len(a)) # 6

문자열 인덱싱

1
2
3
a = 'Python'
print(a[0]) # P
print(a[-1]) # n

문자열 슬라이싱

1
2
3
4
a = 'Python is too fun!'
print(a[2:9]) # thon is
print(a[:9]) # Python is
print(a[3:]) # thon is too fun!

문자열 전용 함수: format

1
2
3
4
5
6
7
8
text = "I eat {} apples".format(3)
print(text) # I eat 3 apples

text = "I eat {} apples and {} orages".format(3, 5)
print(text) # I eat 3 apples and 5 oranges

text = "I eat {0} apples and {0} orages".format(3, 5)
print(text) # I eat 3 apples and 3 oranges

15. 예외처리

예외처리를 해야하는 경우

  1. 내 코드에 아무런 문제가없을 때
  2. 어디론가 이동할 때

예외처리 기본 구조

1
2
3
4
5
6
try:
	수행할 코드
except:
	try 문에서 에러가 났을 경우 수행할 코드
finally:
	에러와 상관없이 무조건 수행할 코드

에러 일부러 발생시키기

1
raise 에러이름

실습

1
2
3
4
5
6
7
8
9
10
11
12
13
#아래 코드에서 찾았습니다! 가 출력되었을때, 모든 반복문을 강제로 나가는 코드로 수정해보세요. 

try:
    for n1 in range(1000): 
      for n2 in range(1000): 
          for n3 in range(1000): 
              for n4 in range(1000): 
                  for n5 in range(1000): 
                      if (n1+n2+n3+n4+n5) == 1000:
                        print("찾았습니다!")
                        raise NameError
except:
    print("에러")

16. 내장함수

  • 파이썬에서 기본적으로 제공하는 함수
  • print, len과 같이 다방면으로 쓸 수 있는 함수
  • append와 같은 함수는 전용함수이다

파일 쓰기/읽기: open

1
2
3
f = open("새파일.txt", 'wt')
f.write("hello")
f.close()
파일 열기 모드설명
r읽기모드 - 파일을 읽기만 할 때 사용
w쓰기모드 - 파일에 내용을 쓸 때 사용
a추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

abs()

절대값을 리턴

1
2
abs(3) # 3
abs(-3) # 3

all()

모두 참이면 True

1
2
all([1,2,3]) # True
all([1,2,3,0]) # False

any()

하나라도 참이면 ㅆ겯

1
any([1,2,3,0]) # True

divmod()

몫과 나머지 튜플형태로 리턴

1
divmod(7, 3) # (2,1)

enumerate()

리스트, 튜플, 문자열의 위치와 값 반환

1
enumberate(['body', 'foo', 'bar']) #[[0,'body'], [1, 'foo'], [2, 'bar']]

eval()

실행 가능한 문자열을 실행한 결과값을 반환

1
2
3
eval('1+2') # 3
eval("'hi' + 'a'") # 'hia'
eval('divmod(4,3)') # (1,1)

filter()

1
2
3
def positive(x):
	return x > 0:
print(list(filter(positive, [1, -3, 2, 0, -5, 6])))

id()

  • 주소값을 리턴
    1
    2
    
    a = 3
    id(3) # 135072304
    

int()

정수 반환

1
2
3
int('3') # 3
int('3.14') # 3
int('11', 2) # 3

len()

길이 반환

list()

리스트 반환

map()

1
2
3
4
def two_times(x):
	return x*2

list(map(two_times, [1,2,3,4])) # [1,4,6,8]

max()

최대값 리턴

min()

최소값 리턴

power()

x의 y제곱 리턴

1
pow(2,4) # 16 2**4와 같음

range()

1
list(range(5)) # [0,1,2,3,4]

round()

반올림

1
round(5.678, 2) # 2번째 자리까지 반올림

sorted

정렬

1
2
sorted([3,1,2,]) # [1,2,3]
sorted("zero") # ['e', 'o', 'r', 'z']

tuple()

튜플로 변환

type()

자료형 확인

zip()

동일한 개수로 묶어주는 함수

1
list(zip([1,2,3], [4,5,6])) # [(1,4), (2,5), (3,6)]

17. 라이브러리

  • 다른 사람이 만들어 놓은 프로그램을 가져오는 기능
1
2
import 라이브러리 [as 변경이름]
from 라이브러리 import 이름 [as 변경이름]

time

1
2
3
import time
time.time() # 988458015.73417199 # 1970년 1월 1일 오전 0시 0분 0초부터 지금까지 시간
time.ctime() # 'Sat Apr 28 20:56:31 2001'

calendar

1
2
3
import calendar
print(calendar.calendar(2015))
calendar.weekday(2015, 12, 31) # 0이 월요일 -> 3: 목요일

random

1
2
3
4
5
6
7
8
9
10
import random
random.random() # 0~1사이의 아무 숫자
random.randint(1,10) # 1~10사이의 랜덤한 정수 10 포함

data = [1,2,3,4,5]
random.shuffle(data) # 순서를 섞어줌
print(data) #[5,1,3,4,2]

random.sample(data, 3) # 랜덤한 3개 추출
data # [5,3,2]

실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#1. time 라이브러리를 가져와서 tm이라는 이름으로 사용하세요. 
import time as tm
#2. random 라이브러리로부터 randint함수만 가져오세요. 
from random import randint
#3. time 라이브러리를 사용해서 오늘이 무슨 요일인지 화면에 출력해보세요. 
print(tm.ctime().split()[0])
#4. random 라이브러리의 randint()함수를 사용하여 1부터 10까지 컴퓨터가 랜덤으로 번호를 갖게하고, 
#컴퓨터의 번호를 맞추는 게임을 만들어보세요. (번호를 맞추면 "맞췄습니다!"를 출력하고, 틀리면 "틀렸습니다"가 출력되면 됩니다)

com = randint(1,10)
me = int(input('값 입력:'))

if com == me:
    print('맞췄습니다!')
    
else:
    print("틀렸습니다")

18. 수치계산 라이브러리 Numpy 알아보기

  • 다차원의 배열 자료구조를 다룰 수 있으며, 벡터와 행렬을 사용하는 선형대수 계산에 주로 사용

np.array

  • 행렬 변환
    1
    2
    3
    
    array1 = np.array([1,2,3])
    print(type(array1)) # <class 'numpy.ndarray'>
    print(array1.shape) # (3,) 1차원 데이터 3개
    
  • 병렬계산이 가능해진다
    • ex) np.array([1,2,3])+3
1
2
3
array2 = np.array([[1,2,3], [4,5,6]])
print(type(array2)) # <class 'numpy.ndarray'>
print(array2.shape) # (2, 3)

ndim: 차원 확인

1
2
print(array1.ndim) # 1
print(array2.ndim) # 2

데이터 타입 확인 (type(), array.dtype)

1
2
3
4
5
6
list1 = [1,2,3]
print(type(list1)) # <class `list`>
array1 = np.array(list1)

print(type(array1)) # <class 'numpy.ndarray'>
print(array1, array1.dtype) # [1 2 3] int64

행렬을 프린트할때 리스트와는 달리 , 없이 [1 2 3] 처럼 프린트된다

  • 주의할 점: 리스트에 문자열과 숫자가 포함되어있다면, 행렬로 변환시에 모두 문자열로 바뀌게 된다
1
2
3
list2 = [1,2,3, 'test']
array2 = np.array(list2)
print(array2, array2.dtype) # ['1' '2' '3' 'test'] <U21
  • 마찬가지로 int형과 float형이 섞여있다면 float형으로 모두 변환된다
1
2
3
list3 = [1,2,3,4.0]
array3 = np.array(list3)
print(array3, array3.dtype) # [1. 2. 3. 4.] float64

astype: 데이터 타입 변환

1
2
3
array_int = np.array([1,2,3])
array_float = array_int.astype('float64')
print(array_float, array_float.dtype) # [1. 2. 3.] float64

zeros: 0으로 채워진 행렬 만들기

1
2
3
zero_array = np.zeros((3,2), dtype='int32')
print(zero_array) # [[0 0] [0 0] [0 0]]
print(zero_array.dtype, zero_array.shape) # int32 (3, 2)

ones: 1로 채워진 행렬 만들기

  • 1.0인 float형식으로 채워진 행렬 만들어줌

reshpe: 차원 바꾸기

  • 개수가 같아야함! (10, 1) -> (2,5)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    array1 = np.arange(10)
    print('array1:\n', array1)
    # array1:
    # [0 1 2 3 4 5 6 7 8 9]
    array2 = array1.reshape(2,5)
    print('array2:\n', array2)
    # array2:
    # [[0 1 2 3 4]
    # [5 6 7 8 9]]
    

인덱싱, 슬라이싱

불리언 인덱싱

1
2
3
4
array1d = np.arange(start = 1, stop = 10)
# []안에 array1d > 5 Boolean indexing을 적용
array3 = array1d[array1d > 5]
print('array1d > 5 불린 인덱싱 결과 값:', array3) # array1d > 5 불린 인덱싱 결과 값: [6 7 8 9]

행렬 정렬

1
2
3
4
org_array = np.array([3,1,9,5])
sort_array2 = org_array.sort()
print('org_array.sort() 호출 후 반환된 행렬:', sort_array2) # org_array.sort() 호출 후 반환된 행렬: None
print('org_array.sort() 호출 후 원본 행렬:', org_array) # org_array.sort() 호출 후 원본 행렬: [1 3 5 9]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
array2d = np.array([[8,12], [7,1]])
sort_array2d_axis0 = np.sort(array2d, axis=0)
print('로우 방향으로 정렬: \n', sort_array2d_axis0)

# 로우 방향으로 정렬: 
# [[ 7 1] 
# [ 8 12]]

array2d = np.array([[8,12], [7,1]])
sort_array2d_axis1 = np.sort(array2d, axis=1)
print('행 방향으로 정렬: \n', sort_array2d_axis1)
# 행 방향으로 정렬: 
# [[ 8 12] 
# [ 1 7]]

argsort: 정렬된 인덱스를 리턴

1
2
3
org_array = np.array([3,1,9,5])
sort_indices = np.argsort(org_array)
print('행렬 정렬 시 원본 행렬의 인덱스:', sort_indices) # 행렬 정렬 시 원본 행렬의 인덱스: [1 0 3 2]

행렬 내적( np.dot)

1
2
3
4
5
A = np.array([[1,2,3], [4,5,6]])
B = np.array([[7,8], [9,10], [11,12]])
dot_product = np.dot(A,B)
print('행렬 내적 결과: \n', dot_product)
# 행렬 내적 결과: [[ 58 64] [139 154]]

전치 행렬(np.transpose)

1
2
3
4
5
6
A = np.array([[1,2], [3,4]])
transpose_mat = np.transpose(A)
print('A의 전치 행렬:\n', transpose_mat)
# A의 전치 행렬:
# [[1 3]
# [2 4]]
This post is licensed under CC BY 4.0 by the author.

[정보처리기사]3과목 운영체제

[SeSAC]판다스, Seaborn, Matplotlib 라이브러리