(이 글은 '언어와정보처리' 과목에서 '파이썬 기초' 수업 내용을 정리한 글이다.)
pytorch 에 대해 들어가기 전, python 기초를 간단하게 리뷰하고 넘어가려한다.
먼저 코딩을 해야 하는 이유부터 생각해보자면,
1. 다양한 분야로의 확장 적용
2. 이론 공부의 구체화
3. 연구 주제의 구체적 증명
이 가능해진다.
- 코딩을 한다면, 본인의 분야에서 이론상의 공부로만 끝나는 것이 아니라 코딩을 통해 배웠던 것을 구체화시킬 수 있다.
- 연구자로서는, 연구주제가 결정되고 연구를 하게 되었을 때, 이론상/내 생각으로만 설명을 끝내는 것이 아니라 코딩, 즉 수치적으로 증명을 해내는 과정을 통해 내 생각이 맞다. 다르다. 를 객관적으로 증명할 수 있다. (연구쪽에서는 코딩을 이런식으로 사용)
- 인공지능이 생활 곳곳에 많이 적용되고 있기 때문에, 인공지능/코딩을 빼놓고는 다양한 것을 하기가 쉽지 않아졌다.
코딩을 한다는 것
- 무엇을 만들어볼까? (목적)
- 왜 만들어야 할까? (목적)
- 비슷한 것이 있을까? (검색)
- 뭘까.. 뭘까.. 뭘까.. (끈기)
--> 코딩을 잘하고 싶다면, 일단 뭘 만들고 싶은데? 왜 만들고 싶은데? 라는 질문에 대답할 수 있어야 한다.
ex) 딥러닝을 이용한 음성인식 - 한국어 방언 중 이게 어떤 방언인지..
- 무엇을 만들까? - 방언 분류기(방언을 분류하는 모델을 만든다)
- 왜 만들어야 할까? - 연구목적도 있지만, 실제 대검찰청에 보이스피싱 신원파악을 위해서 필요.
- 비슷한 것이 있을까? - 내 머릿속에서 나오는 것보다 더 좋은 것이 이미 있을 수 있기 때문에 검색
- 뭘까..뭘까.. - 잘 안되었을 때 계속 뭘까 뭘까.. 고민
(막연히 코딩을 하는 것보다 이러한 목적이 있어야 한다.)
코딩할 때 필요한 것
1. 입력과 출력이 무엇인지 확인하기
2. 입력과 출력의 형태가 무엇인지 확인하기
- 숫자처럼 보이지만 문자 형태일수도.. 정말 숫자 형태일수도.. 형태를 확인
Python 프로그래밍 언어
- 1990년 귀도 반 로섬(Guido van Rossum)에 의해 탄생 (구글의 개발자)
- 생활 속 python
--> 컴퓨터 프로그래밍 교육, 기업의 실무(google 소프트웨어 50% 이상이 파이썬으로 구현, 인스타그램, dropbox)
- 인터프리터 언어
--> 크게 컴퓨터 언어는 인터프리터 언어, 컴파일러 언어로 나뉨
--> 인터프리터 언어는 한 줄 씩 코드를 해석해서 그 때마다 실행하여 결과를 확인,
안맞는게 있으면 그 때 에러메세지 뱉어냄
--> 컴파일러 언어는 처음부터 끝까지 다 봐서 문법 체크하고,
하나라도 틀리면 실행하지 않고 모든게 완벽하게 맞아야지 실행함.
--> 불편하지 않나? 그래도 컴파일러 언어들(C, C++, Java..) 이 속도가 훨씬 빠름.
Colab : Python 설치 없이 Python 프로그래밍 하기
- 구글에서 제공하는 Colaboratory
- 브라우저에서 python 을 작성하고 실행할 수 있음
- 장점 : 구성이 필요하지 않음(설치같은거 기본으로 되어있음), GPU 무료 액세스, 간편한 공유
--> 딥러닝은 엄청난 양의 데이터를 빨리 처리해야하는데, 그 때 연산에 특화되어있는 GPU 사용
--> 노트라는 개념으로 간편하게 공유가능
자료형
- 숫자 (Numbers) : 정수형(Integers)(int), 실수형(부동소수점)(Floating-points)(float)
- 문자열 (Strings) : "" 와 ''를 사용
- 리스트 (Lists)
- 튜플 (Tuples)
- 딕셔너리 (Dictionaries)
- 집합 (Sets)
- 불 (Boolean)
문자열 (Strings)
- I'm hungry 처럼 문자열에 ' 가 포함되는 경우, ""를 사용.
- 줄바꿈 문자 \n (new line) : 줄바꿈 문자를 사용하여 입력할 때는 같은 줄이더라도 출력은 \n을 기준으로 줄이 바뀌어 출력됨.
- 줄바꿈 문자와 같이 문자 그대로 출력되지 않고 특수한 기능을 가지는 문자들을 'Escape Codes' 라고 함.
* 문자열 내 문자 바꾸기
- 문자열 데이터를 변수처럼 취급하여 새로 저장하는 (assign) 방법 통하지 않음
a = "My lyfe is awesome!"
a[4] = "i"
이 경우 변경되지 않고 에러뜸
방법1 : 바꿀 문자 (y) 를 기준으로 앞뒤를 substring으로 만든 후 새로 변경할 문자 (i) 와 합치기
new_a = a[:4] + "i" + a[5:]
방법2 : replace() 메소드를 사용하여 y를 i로 바꾸기
- replace 사용법 : (문자열).replace(변경할 substring, 새로 바꿀 substring)
new_a = a.replace("lyfe", "life")
* 문자열 나누기(split)
- split() 사용법 : (문자열).split(분절 기준) - 분절 기준이 없을 경우 스페이스를 기준으로 분절
- 결과 : 분절된 substring들은 리스트(List) 형태로 출력됨
a = "My life is awesome!"
split_a = a.split()
print(split_a)
결과 : ['My', 'life', 'is', 'awesome!']
ex) 문자 e 를 기준으로 분절
- 분절 기준인 e 는 결과에 포함되지 않음
split_a = a.split('e')
print(split_a)
결과 : ['My lif', ' is aw', 'som', '!']
* 문자열 포맷팅(formatting)
- 사전에 정의된 변수를 문자열의 일부로 사용
- 기존 방법 : 문자열과 변수를 단순하게 합쳐 보기
--> 문자열과 숫자는 붙여서 사용할 수 없음 --> 숫자를 문자형으로 바꾸어야 함.
num_of_apples = 3
string = "I have " + num_of_apples + " apples."
--> 에러 : 3은 숫자형이고 나머지는 문자형이기 때문에, 서로 다른 자료형 합칠 수 없음
- 기존 방법으로 해결 : 숫자를 str() 을 사용하여 문자형으로 바꾼 후 합치기
--> 띄어쓰기 등을 생각하여 str() 의 앞뒤를 고려해야해서 조금은 불편함.
string = "I have " + str(num_of_apples) + " apples."
print(string)
결과 : I have 3 apples.
- 문자열 포맷팅으로 해결하기
1) 포맷팅 방법 1 : 특수문자 (%d, %f, %s) 를 사용하여 표현하기
- 정수형은 %d (digit), 실수형은 %f (float), 문자형은 %s (string) 사용
- %f 의 경우, %와 f 사이에 .(숫자)를 추가하면 소수점 (숫자)째 자리까지만 반올림하여 출력됨.
ex) string = "I have %d apples." % num_of_apples
string = "I have %d apples." % num_of_apples
결과 : I have 3 apples.
ex) string = "The %s score is %.2f." % (score_type, average_score)
score_type = "average"
average_score = 12.3456
string = "The %s score is %.2f." % (score_type, average_score)
print(string)
결과 : The average score is 12.35.
2) 포맷팅 방법 2 : format()를 사용하여 표현하기
- %d, %f, %s 대신 입력할 정보를 {} 로 대신 표현하고, {문자열}.format(입력정보)로 문자열 표현
- 장점 : 데이터 종류에 상관없이 {} 로 통일하여 나타낼 수 있음.
- 실수형 입력의 경우, {} 안에 :.(숫자)f 를 추가하면, 소수점 (숫자)째 자리까지 반올림하여 출력
ex) string = "I have {} apples.".format(num_of_apples)
string = "I have {} apples.".format(num_of_apples)
결과 : I have 3 apples.
ex) string = "The {} score is {:.2f}.".format(score_type, average_score)
score_type = "average"
average_score = 12.3456
string = "The {} score is {:.2f}.".format(score_type, average_score)
결과 : The average score is 12.35.
* 문자열 예제 문제
name = "Dave", age = 12, rate1 = 3.13, rate2 = 5.05 일 때,
"Hi. My name is Dave. I am 12 years old.
My total rate is 8.2." (반올림하여 소수점 첫째 자리까지만 출력) 를 출력해보기
ex) string = "Hi. My name is %s. I am %d years old.\nMy total rate is %.1f." % (name, age, rate1+rate2)
string = "Hi. My name is %s. I am %d years old.\nMy total rate is %.1f." % (name, age, rate1+rate2)
ex) string = "Hi. My name is {}. I am {} years old.\nMy total rate is {:.1f}.".format(name, age, rate1+rate2)
string = "Hi. My name is {}. I am {} years old.\nMy total rate is {:.1f}.".format(name, age, rate1+rate2)
'python' 카테고리의 다른 글
파이썬으로 파일 읽기/쓰기 - read(), readlines() (0) | 2021.12.08 |
---|---|
파이썬 함수 이해하기 (0) | 2021.12.08 |
파이썬의 연산자와 제어문(IF, FOR, WHILE) (0) | 2021.12.08 |
파이썬 자료형 - (3) 딕셔너리 dictionary (0) | 2021.12.08 |
파이썬 자료형 - (2) 리스트 list (0) | 2021.12.08 |
댓글