220110 python 첫 수업: 설치 및 자료형1(숫자형, 문자열)
새로운 곳으로 학교를 옮기게 되었다.
과정은 상단 카테고리에 정리해서 올릴 것 같지만 암튼 대학원을 다른 학교로 옮기게 되었고, 사전교육을 받게되었다. Python시험 점수 보고 충격.. 이렇게 python기초문법을 몰랐던가.. 그동안 수업들은건 뭐고, 졸시 통과한건 뭐고.. DB나 선형대수는 진짜 잘 모르니까 각오하고 있었는데 파이썬 점수가 너무 처참했다... 뭘 틀렸는지 알려줘ㅠㅠㅠㅠ!!! 그동안 구글링에 너무 의존했나 싶고.. 현타가 세게와서 결심했다.
이번 기회에 기초를 탄탄히 다져놓으리라..!
그래서 이 시리즈(220110~220123)는 DA에서 제공해주는 파이썬 사전교육+그동안 배웠던 자료들을 총정리하여 포스팅할 예정이다. 총 8번 수업이니까 차근차근 해나가면 되리라 생각한다.
이 글의 가장 큰 독자는 다시 파이썬을 까먹을 미래의 나, 그리고 python.. 필요하다는데 한 번 해볼까? 하는 모두이다. 장황한 이론보다는 필요한 내용을 간결하게 정리하는걸 지향한다.
나의 경우, 코딩을 어느정도 배우고 난 다음부터는 직접 타이핑하기보다는 구글링을 통해 필요한 코드를 얻어와서 적용시키는 경우가 대부분이었다. 하지만 너무 구글링에 의존하면 이렇게 기초를 까먹고 기초부터 다시 배워야하는 상황이...ㅠㅠㅠ 이번 기회로 다같이 처음부터 해나가보는걸로..!
1. 아나콘다 설치
사실 python만 사용하고 싶은거라면 python만 설치해도 된다. 하지만 다양한 파이썬 라이브러리와 툴을 종합적으로 편하게 사용하고 싶다면 아나콘다를 설치하는 것이 유리하다. 좀 무겁긴 하지만 용량만 된다면 훨씬 편하게 사용할 수 있다고 생각한다. 사실 정말 무거워서 걱정되면 코랩으로 가는게..
아래의 링크에서 anaconda를 설치할 수 있다.
https://www.anaconda.com/products/individual
Anaconda | Individual Edition
Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.
www.anaconda.com
윈도우 환경을 사용하고 있다면 초록색 버튼download를 눌러주면 되고, 그 외의 환경이라면 'Get additional Installers'를 선택해 자신에게 맞는 환경의 아나콘다를 설치하면 된다.
나의 경우, 이미 anaconda가 설치되어있었지만 수업을 진행하시는 교수님께서 윈도우 사용자계정이 영문명으로 되어있지 않은 경우 새 계정을 생성해 콘다를 설치하라고 권장하셔서 수업 끝나고 새로이 계정을 만들었다. 사실 가볍게 공부만 해볼거라면 필수라고 생각되진 않는다. 라이브러리 활용하다가 문제생길까봐 그런거라..
계정은
1) [Windows 설정]->[계정]->[가족 및 다른 사용자]->[이 PC에 다른 사용자 추가]
2) '이 사람의 로그인 정보를 가지고 있지 않습니다'클릭 후 'Microsoft 계정 없이 사용자 추가' 클릭
3) '사용자 이름'에 영문자 이름을 입력한 후 [다음] 클릭
4) 윈도우 버튼에서 새로운 계정으로 로그인 가능
위의 절차를 따르면 새로운 계정을 만들고 접속도 가능하다. 기존의 환경에서 아예 새로운 환경을 하나 더 갖게 되는거라 다른 사람들 보면 목적을 분리하여 컴퓨터를 사용할 때 이런 기능을 이용하는 것 같았다. 나의 경우 코딩과 블로그 포스팅만 하려고 필요한 환경을 세팅해서 적응에 오랜 시간이 걸리지는 않았다.
2. Jupyter notebook 단축키
파이썬 등 여러 프로그래밍 언어의 코드를 작성하고 실행해볼 수 있는 툴로 대표적인게 jupyter notebook이다. 요즘은 jupyter notebook의 기능을 확장한 jupyter lab도 많이 활용된다. 개인적으로 jupyter notebook이 좋은건 코드블럭을 활용해 부분실행이 가능하다는 점, 그리고 html을 공부하고 나니 마크다운을 활용하기 너무 편해서 계속 사용하고 있다.
그리고 이번 수업을 통해 jupyter notebook의 여러 단축키를 배우게 되어 더 편하게 활용할 수 있을 것 같다. 아래의 사진과 같이 코드를 입력할 때는 초록색 입력모드, 여기서 칸 왼쪽 빈공간을 마우스로 누르거나, Esc를 누르면 하늘색으로 바뀌는데 이걸 커맨드(Command)모드라고 한다. 여기서 h를 누르면 여러 단축키를 확인할 수 있다. 내가 자주 사용하기로 한 단축키는 아래와 같다.
단축키 | 기능 |
Shift+Enter | 현재 셀 실행 |
Alt+Enter | 현재 셀 실행 후 다음 셀 만들기 |
b | 현재의 셀 밑에 새로운 셀 만들기 |
a | 현재의 셀 위에 새로운 셀 만들기 |
dd | 현재 셀 지우기 |
m | 현재 셀 markdown으로 변경하기 |
y | 현재 셀 code mode로 변경하기 |
shift+tab | edit mode일 때(초록색) 함수에 대한 설명제공 |
이외에도 다양한 단축키가 있으니 궁금하신 분들은 command mode에서 h를 눌러 확인해보면 된다.
3. 자료형
자료형은 python의 기본이다. 나의 경우 외부 csv파일을 불러와서 시각화를 하거나 연산을 할 때 자료형이 맞지 않아 에러가 난 적이 많았다. 특히 표 안에 분명 숫자인데 문자열로 인식한다던가.. 이런 경우에는 해당 열의 데이터타입을 꼭 바꿔주어야 필요한 연산을 하거나 시각화를 할 수 있다.
그리고, 자료형에 대한 지식은 내가 실제로 보았던 한 대학원 면접문제이기도 하였다. 나의 경우 1전공이 인문이었기 때문에 대학원 입장에서 내가 코딩을 할 수 있는지, 데이터 사이언스와 관련된 지식을 잘 습득했고 활용했는지를 알아보기 위해 어떤 자료형에 대해 물어봤고, 그거랑 어떤 다른 자료형이랑 비교해서 설명해보라고 하셨다. 그러니까 중요하다구!
여기서부터는 배웠던 내용에 주석을 일부 추가했다.
1) 숫자형¶
변수¶
- 메모리에 값을 저장하기 위해 할당하는 공간
- 수, 텍스트, 목록(리스트), 이미지 데이터 등을 담을 수 있음
## 변수
a = 1 #변수에 할당
a
1
print(a) #print를 활용해서 출력할 수 있다.
1
숫자형¶
- 정수형(int): 1234
- 실수형(float): 3.1415
- 복소수(complex): 3+4j
type(a) #정수형(int)
int
b = 1.2 #실수형(float)
type(b) #type()함수를 통해 각 데이터의 타입을 알 수 있다.
float
숫자 자료형의 연산¶
#연산가능
a = 3
b = 4
a + b
7
a * b #곱셈
12
a / b
0.75
a - b
-1
a ** b #a의 b제곱
81
7 % 3 #7을 3으로 나눠주었을 때 나머지
1
7 // 3 #몫
2
7 / 3 #cf. 그냥 나누기
2.3333333333333335
추가내용: round(), abs()¶
#round(x, n): x를 x자릿수에서 반올림
round(3.1425, 2)
3.14
#abs(x): x를 절대값으로 계산
abs(-7)
7
2) 문자열 자료형¶
- 문자, 단어 등으로 구성된 문자들의 집합(꾸러미)
- 큰따옴표 또는 작은따옴표로 묶어서 표현
a = "Hello World" #큰따옴표
a
'Hello World'
a='Hello' #작은따옴표
a
'Hello'
a = """Python's """
"""작은 따옴표를 문자로 인식하기 위해
큰따옴표를 사용하거나 큰따옴표 3개를 함께 사용하기도 함"""
a #큰따옴표가 함께 출력됨
"Python's "
그러면 인용문은 어떻게 문자열로 표현하지?
say="Python is very easy." he says. #그대로 하면 에러가 납니다.
File "<ipython-input-21-7ac6d38726b0>", line 1
say="Python is very easy." he says.
^
SyntaxError: invalid syntax
say = '"Python is very easy". he says' #겹치지 않게 따옴표를 사용합시다.
say
'"Python is very easy". he says'
say = '\"Python is very easy\". he says' #escape code
say
'"Python is very easy". he says'
food = 'Python\'s favorite food is perl.' #\'
food
"Python's favorite food is perl."
multiline="Life is too short\nyou need python" #newline
multiline
'Life is too short\nyou need python'
print(multiline) #print()해야 효력이 발휘된다.
Life is too short
you need python
tabs = "Life is too short\tyou need python"
print(tabs) #하나의 탭 간격이 들어감
Life is too short you need python
a = "a\b\c"
print(a)
a\c
a="a\\b\\c"
#이스케이프 코드를 문자열로 인식하기 위해 또하나의 이스케이프코드가 필요하다
print(a)
a\b\c
문자열 연산¶
문자열도 숫자형과 같이 연산이 가능하다.
단, 자료형이 다른 변수끼리는 연산이 불가능하다.
##문자열 연산
a = "Python"
b = " is fun"
a + b
'Python is fun'
a + 2 # can only concatenate str (not "int") to str 둘이 자료형이 달라 연산 불가능
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-41-a917fe5125e3> in <module>
----> 1 a+2
TypeError: can only concatenate str (not "int") to str
#해결
a + str(2)
#다른 데이터타입을 string으로 바꿔주는 str함수사용
#숫자열을 문자열로 바꿔줌
'Python2'
a * 2 #문자열의 반복
'PythonPython'
"=" * 50
'=================================================='
print("=" * 50)
print("result")
print("=" * 50)
==================================================
result
==================================================
문자열 길이 세기: len()¶
#문자열 길이세기(문자+공백+특수문자)
a = "Life is too short"
len(a) #공백포함
17
문자열 인덱싱과 슬라이싱¶
a = "Life is too short. You need Python."
len(a) #마지막 문자(.)가 34번. 0번부터 시작함
35
a[0]
'L'
a[3]
'e'
a[34]
'.'
a[-1] #뒤에서부터 세는 것. -0개념이 없기에 -1부터 시작
'.'
a[-5]
't'
a[0] + a[1] + a[2] + a[3]
'Life'
끝나는 숫자보다 하나 더 크게 숫자를 설정해준다
a[0:4] #끝나는 숫자보다 하나 더 크게!!!
'Life'
a[0:5] #공백까지 출력
'Life '
a[:6] #0부터 시작하고 싶을 때
'Life i'
a[19:]
'You need Python.'
a[:]
'Life is too short. You need Python.'
a[19:-5] #뒤에서 다섯번째 t.바로 그 전까지 출력됨
'You need Py'
a = "20220110Cloudy"
day = a[6:8] #correct
mon = a[4:6] #correct
year = a[:4] #correct
weather = a[8:] #
print(day)
print(mon)
print(year)
print(weather)
10
01
2022
Cloudy
문자열 포맷팅¶
이건 처음 보는거라 연습이 더 필요할 것 같다.
"I eat %d apples." %3
#문자열 안에 들어갈 숫자를 뒤에 입력. 여기서 d는 digit.
'I eat 3 apples.'
"I eat %d apples. " %"five"
#숫자가 들어가는 자리에 문자가 들어가 error
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-76-d2188b1428b6> in <module>
----> 1 "I eat %d apples. " %"five"
TypeError: %d format: a number is required, not str
"I eat %s apples." %"five" #s는 string
'I eat five apples.'
"I eat %s apples. " %"5" #숫자라도 ""안에 있으면 문자형이다.
'I eat 5 apples. '
num = 10
day = "three"
"I ate %d apples. so I was sick for %s days." %(num, day) #함께 사용할 수 있다.
'I ate 10 apples. so I was sick for three days.'
문자형 원하는대로 위치시키기¶
"%10s" % "hi" #문자열까지 합쳐서 10칸
' hi'
"%10s" % "hello"
#전체길이 10. 뒤에는 내가 원하는 문자열 들어가도록 맞춰주기
' hello'
#문자열 먼저나오고 뒤에 문자열 길이 맞춰주고 싶음
"%-10s" % "hi"
'hi '
"%-10s" % "hello"
'hello '
#앞뒤로 맞춰주고 싶음
"%-10shello"%"hi" #hi나오고 10칸 그다음 hello
'hi hello'
소수점 나올 때 많이 사용되는 포맷¶
"%0.3f" % 3.42134234 #세자리까지 먼저 나오기
#f=float, n자리에 출력을 원하는 자리수를 입력, 반올림 됨
'3.421'
"%0.2f" % 3.42134234
'3.42'
"%0.2f" % 3.42765 #반올림되어 3.43이 되는 것을 확인할 수 있음
'3.43'
- 문제
문자열 포맷팅을 사용하여 4.254536를 소수점 두번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬되도록 해보세요.
"%10.2f" % 4.254536 #전체길이 10에서 앞에 공백 들어가게 출력
' 4.25'
포맷함수 사용: .format()¶
#포맷함수 사용
"I eat {0} apples".format(3)
'I eat 3 apples'
"I eat {0} apples".format("five")
'I eat five apples'
num=3
"I eat {0} apples".format(num)
'I eat 3 apples'
num = 10
day = "three"
"I ate {0} apples. so I was sick for {1} days.".format(num, day)
'I ate 10 apples. so I was sick for three days.'
"I ate {num} apples. so I was sick for {day} days.".format(num=10, day="three")
'I ate 10 apples. so I was sick for three days.'
문자열 관련 함수¶
#해당 문자 개수 세기: .count()
a = 'hobby'
a.count('b')
2
a = 'hobby'
a.count('a')
0
a = 'hobby'
a.count('ob') #안에 몇개 있는지 세어줌
1
count()에서 주의할 것¶
k='abaabababa'
k.count('aba') #겹치지 않고 그냥 딱 세기 겹쳐서 세버리기 말기
3
k.count('bab') #겹쳐서 세지 않기
1
a = 'Python is the best choice.'
#문자의 인덱스 번호 반환: .find()
a.find('b') #인덱싱 번호를 알려주는 것
14
a[14]
'b'
find와 달리 index는 없는 값을 찾으면 에러가 발생한다.
a.find('k') #없는 것 찾으면 -1반환
-1
a.index('b')
14
a.index('k') #없을 때 에러발생
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-103-dd5961ecfc01> in <module>
----> 1 a.index('k') #없을 때 에러발생
ValueError: substring not found
a.find('t') #여러 개 있는 경우 첫번째 위치만 반환
2
#구분자로 합치기: "구분자".join()
",".join('abcd')
'a,b,c,d'
" ".join('abcd')
'a b c d'
";".join('abcd')
'a;b;c;d'
#대문자: .upper()
a = 'hi'
a.upper()
'HI'
#소문자: .lower()
b="HI"
b.lower()
'hi'
공백지우기¶
a = ' hi '
a.lstrip() #왼쪽 공백 지우기
'hi '
a.rstrip() #오른쪽 공백 지우기
' hi'
a.strip() #양쪽 공백 모두 지우기
'hi'
.replace('원래문자', "바꿀문자")¶
필요없는 문자를 공백으로 지우거나, 어떤 단어 한번에 수정하고 싶을 때 사용
a = "Life is too short. You need Python."
a.replace('Life', 'Study')
'Study is too short. You need Python.'
.split('구분자')¶
구분자를 기준으로 문자열을 리스트로 분리
a.split() #구분자를 입력하지 않으면 공백으로 분리함
['Life', 'is', 'too', 'short.', 'You', 'need', 'Python.']
b = 'a:b:c:d'
b.split(':')
['a', 'b', 'c', 'd']
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))