원래 워드 파일에 그날 공부한 내용을 정리하며 복습했었는데, 뭔가 velog에 정리하는게 더 잘 찾아볼 수도 있을 것 같고, 어떻게든 하고 잘 것 같아서 velog에 한 번 정리해보기로 했다! 일단 오늘 것 까지는 word에 작성한 내용을 옮겨오자! 오로지 나만 봐야 안부끄러울 것 같은 정리다...!
22.09.20
Ai school Day 5이자 오늘코드 Day 2
오늘은 뭔가 진도를 쑥쑥 나갔다
정신이 없었다 졸리다!
오늘의 회고
사실(Fact) : 파이썬 기초를 마무리하고, pandas 기초를 배웠다!
느낌(Feeling) : 스스로 생각하여 코드를 짜보는 과정이 흥미로웠다. 다른 사람들의 코드도 보며 다양한 방법으로 짤 수 있다는 것도 알았다. Pandas 들어가고 나서부터는 정신이 없어 겨우 따라갔다.
교훈(Finding) : 여러 연습문제를 풀며 스스로 코드를 짜보는 경험을 많이 해봐야겠다. 그리고 복습을 열심히 해야겠다! 공식 문서를 보는 연습도 해야겠다! 할 게 많다..! 파이팅..!
이것도 앞으로 여기 정리해야겠다!
if, elif, else
로 쓰는 것, 오늘 점프 투 파이썬에서 관련 문서도 읽어서 좀 더 잘 알게 되었던 것 같다.
기억에 남는 내용들을 돌아보면,
비교 연산자로 in
과 not in
을 사용할 수 있었던 것.
Pass
를 사용한다면, 아무것도 하지 않고 지나간다는 것!
if문을 한 줄에 실행하기! 수행할 코드가 한 줄일 때, if (조건) : 수행할 코드
로 쓰는 것!
그거 말고 그것도 있었는데! C언어로 치면 삼항연산자. ? 쓰던 거.
python에서는, (참일 경우 code) if (조건) else (거짓일 경우 code)
로 사용할 수 있다!
만약 저 뒤에 같은 코드를 하나 더 붙인다면, elif
의 효과를 낼 수 있겠다!
comprehension할 때 for 문 뒤에 붙여서도 많이 사용하는 듯 하다!
반복문의 하나인 for 문은, list, 문자열, tuple 등 iterable한 객체들과 함께 사용할 수 있다.
여기서 주의해야 할 점. 컬렉션을 이터레이트 하는 동안 같은 컬렉션을 수정하는 코드는 올바르게 동작하도록 만들기 힘듭니다.
어떤 한 sequence 형 자료에 대해 for문을 돌리고 있을 때, 해당 for문 안에서 그 자료의 값을 바꾸지 않도록 주의하자! 오류가 발생할 수 있다! 오늘 그런 질문을 한 사람도 있었다!
Range(start, stop, step)으로 만들어지는 range 객체 역시 iterable한 형태이기에 함께 자주 사용한다! 이때, range 함수는 활용이 무궁무진한 함수이므로 잘 익혀두자! 특히 step을 음수로 하여 함수를 사용하는 것이 인상깊었다.
또, enumerate 함수에 대해서도 배웠다. 이 함수는 list를 (index, data) tuple의 list로 반환하는 함수이다. 파이썬 공식문서에서는, for문을 사용할 때, range(len())으로 사용하는 것 보다는, enumerate()를 사용하는 것을 추천하고 있다! 잘 알아두자!
그리고 dictionary를 for문을 통해 탐색할 때 자주 사용하는 .items()와, 여러 list들에 대해 동시에 사용할 때 이용하는 zip()함수에 대해서도 알아두자! 신기한 거. Zip은 알겠는데, zip()을 * 와 함께 써서 unzip할 수도 있다는 것! Zip 한 후 다시 x, y = zip(*zip(x,y)) 를 통해 unzip할 수 있다.
for문을 또 많이 사용하는 때는 바로 comprehension이다. Comprehension은 list, dict, set 등 아주다양한 data를 만들 수 있다. 사용법은 다음과 같다.
[a * 3 for a in range(10)]
이런 식! 만약 조건을 붙여주고 싶다면, [a*3 for a in range(10) if i%2==0]
와 같이 사용한다!
{a : a*3 for a in range(10)}
과 같이 써서 dict를, {a for a in range(10)}
과 같이 써서 set을 만들 수 도 있다.
While문 역시 반복문으로, 조건이 만족할 때 동작을 반복하여 수행하는 구문이다!
for문이 동작의 반복 횟수가 정해져 있을 때 사용한다면, while 문의 경우, 어떠한 동작을 조건이 충족될때까지 수행해야하는 경우 주로 사용한다! 또 무한루프에서도 많이 사용한다!
음 특이했던 점으로는….
while (조건) : 실행할 문장, i+=1
등으로 코드를 써왔다면,while True : i+=1, 실행할 문장, 조건(if와 break)
의 순으로 코드를 짜시는 게 인상깊었다.다음은 이제 파이썬의 함수에 대한 내용이었다. 함수를 정의하는 것! 을 배웠다.
특이한 내용이라면, *arg와 **kwarg가 기억에 남는다. 남을 수밖에!
공식문서 지금 또 봤는데… 지금도 어렵다… 뭘까 이게 ㅠㅠ
그럼 한번 나름대로 정리를 해봅시다.
함수를 정의할 때, 매개변수를 위치와 이름으로 정의할 수 있다. 기본적인 경우 그냥 위치에 맞게 인자 값을 주거나(위치) para = 인자값의 형태로 인자 값을 전달(이름)해 주어 함수를 호출할 수 있는 것이다.
그러나, *과 / 라는 특수한 기호들이 함수 정의 시 사용되는 경우가 있다. pos_only, / 와 같이 선언되어 /가 붙은 매개변수는 오직 위치만을 이용해 인자값을 전달받아야 하며, (*, kwd_only)와 같이 선언되어 *이 붙은 변수는 오직 이름(keyword)만을 이용해 인자값을 전달받아야 한다고 한다!
음 그리고, 함수를 정의할 때, parameter의 default 값을 선언해주면, 해당 매개변수에 대한 인자값을 전달해주지 않아도 함수가 실행된다!
이때 또 중요한 점, 키워드 인자는 위치 인자 뒤에 나와야 한다는 점! 과 어떤 인자도 두개 이상의 값을 받을 수 없다는 점! 과 초깃값을 설정해 놓은 매개변수 뒤에 초깃값을 설정하지 않은 변수가 나올 수 없다는 점! 이다.
이게 기본이지만, 더 특별한 것들! *args와 **kwargs에 대해 좀 알아보자.
매개변수에 *args를 써주면, 해당 매개변수에 대한 인자로 몇 개의 값이든 들어올 수 있다. 해당 인자들은 tuple로 묶이게 된다! 여기서 주의할 점은, 일반적인 인자들과 *args를 같이 사용할 때, 일반 인자들이 먼저 나와야 한다는 점(keyword-only arguments는 뒤에 나와도 됨)과 *args와 **kwargs를 함께 사용할 때, *args가 먼저 나와야 한다는 점이다! 유사하게, **kwargs의 경우는 dictionary의 key = value를 인자로 받아 사용할 수 있도록 해준다! 이야 신기하다. 원래는 하나도 이해 못했을 내용인데, 조금 공부 했다고 공식 문서가 아주 조금은 읽히네! 이거 몇 개월, 몇 년 하면 공식문서는 그냥 훌훌 읽히겠다! 으면 좋겠다! 사실 이해가 안된다~~~~~~~~~~~~~~~ 살려줘~!~!~!
def foo(name, /, **kwds):
return 'name' in kwds
>>> foo(1, **{'name': 2})
True
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}
**kwargs를 사용하는 예시이다. (위 : 공식문서) (아래 : 점프 투 파이썬)
그리고 또 함수에서 중요한 점. 지역변수와 전역변수이다!
함수 내의 모든 변수는 원래 함수 안에서만 사용되는 지역변수 이므로, 함수 밖에 아무런 영향을 끼치지 못함을 기억하자!
영향을 끼치게 해주기 위해선, 이를 return 시키거나, global 선언을 이용해 전역변수로 만들어 주어야만 한다!
함수를 정의할 때, 파이썬이니만큼 문서화 시키는 것이 중요하다.
함수의 정의 바로 아래 “”” “””으로 감싸준 후 함수에 대한 설명을 써준 것을 doc string이라고 한다! 함수를 정의해줄 때 이를 쓰는 것을 습관화하자!
그리고 남이 만들어놓은 함수를 사용할 때 이를 통해 함수에 대한 사용법이나 기본 정보를 알 수 있다! 이 역시 습관화해야하는 사항인데, 바로 함수?
, 또는 함수??
를 실행시키는 것이다! (ipython 환경에서 한정)
?로 실행시켰을 경우, 함수의 doc string을 도움말에서 볼 수 있으며, ??로 실행시켰을 경우 source code를 볼 수 있다. 아주 중요하니 외워두고 앞으로 잘 써먹도록 하자! 라이브러리 사용할 때에!
%timeit 를 사용해 ipython 환경에서 코드 수행시 걸리는 시간을 여러 번 반복해 측정할 수 있다!
%time만 사용한다면 1회 수행시 걸리는 시간을 측정한다. 이를 통해 여러 코드의 효율성이나 동작 속도를 비교할 수 있겠다!
PEP8 이라는 문서의 존재! 파이썬 스타일 가이드이다. PEP10이 지난번에 본 Zen of Python!
해당 문서의 내용으로는, 한 줄에는 79자가 최대라는 것, + 연산자는 앞뒤를 띄어쓰고, * 연산자는 붙여쓴다는 것 등! 의 다양한 권장 서식들이 나와 있다!
들여쓰기는 space 4번을 하는게 파이썬의 공식 권장이라는 것! 역시 나와있다! 공식적인 코드를 짤 때, 혹은 다른 사람들과 협업을 하여 코드를 짤 때에는 pep8을 꼭 참고해야 되겠다!
와 벌 써 판다스다…! 빠르다 빨라..! 담주에 결석하면 어떻게 따라가지? 만 걱정되는 요즘..
판다스 복습이나 하자!
Pandas는 파이썬의 가장 대표적인 데이터 분석 도구이다. DataFrame과 Series라는 두 가지 타입의 데이터를 주로 지원하고 있다!
음 데이터 분석의 대표적인 라이브러리들 중, 우리가 주로 사용할 것은 pandas, numpy, matplotlib, seaborn, plotly이다! (numpy는 짱짱이고 빠른, 다차원 배열 연산 지원 라이브러리, matplotlib과 seaborn은 정적인 시각화 라이브러리, plotly는 동적 기반 시각화 라이브러리!이다)
Numpy와 pandas를 함께 import 해준다.
Import numpy as np
Import padnas as pd
여담으로, as가 alias의 준말이었다. (별칭이라는 뜻) 소름돋았다..!
사실 생각보다 너무 간단히 휙 넘어가서 아무것도 잘 모르겠다.
Series는 index와 data를 가진 일차원 벡터 형태의 데이터 타입이다.
DataFrame 은 index(행)와 columns(열)을 가진 2차원 행렬 형태의 데이터 타입이다.
DataFrame에서 행 하나, 또는 열 하나만 따로 떼어서 가져오면 Series형 데이터가 된다.
이번 수업에서 우리의 목표는 pandas cheat sheets(2장)을 이해하고 사용할 수 있도록 하는 것!
DataFrame 자료형의 사용법과 다양한 method, attribute에 대해 배웠다. (내가 그동안 property라고 써왔던 모든 것이 사실 attribute였다!)
DataFrame 만들기. Df = pd.DataFrame()
Column 에 값 추가하기. Df[“col”] = 값
. 이때 만약 값이 하나의 값이면, broadcasting하여 해당 열 모든 행에 그 값이 들어가게 된다. 그리고, df[“col”]
은 Series type
의 값이다.
Series를 list로 바꾸기. df[“col”].tolist()
를 사용할 수 있다!
Dtype : column의 value들의 데이터 타입. 하나라도 float
형태가 있으면 int
가 float로 통일되고, object
(문자형)이 있으면 모두 object로 통일된다는 점! 결국 큰 걸로 통일된다. 이때, NaN
의 dtype은 float이다!
Column 삭제하기 : .drop(“col”, axis = 1)
을 사용한다. Axis = 1이면 열방향, 0이면 행방향이다. 이때, 해당 메소드는 df 객체 자체를 수정하는 값이 아니므로, 이를 위해선 df = df.drop(~~)
의 형태로 본인에 다시 할당시켜 주는 것이 꼭 꼭 꼭 필요하다!! Inplace = True
인자를 추가해주는 방법도 있으나, method chaining
에 문제가 생길 수 있어 추천하지 않는다.
Df.info()
: 데이터의 요약 정보를 본다.Df.head()
df.tail()
: 상위 혹은 하위 5개의 자료들만 본다.Df.shape
(행의 수, 열의 수)의 형태를 알려준다.Df.dtypes
: 모든 column 들의 dtype만 보여준다.index
: index를 보여준다. .columns
: column labels .ndim
:dimension 등 다양한 기능이 있다.Df.describe()
: 데이터의 기술통계값을 볼 수 있다. 수치형 데이터의 경우 개수, 평균, 표준편차, 최소 최대 및 사분위수 값 등을 볼 수 있다. (include = “object”)
로 인자를 전달하면 범주형 데이터의 기술통계값으로, 도수(count), 고유값의 수(unique), 최빈값(top), 최빈값의 빈도수(freq)등을 알 수 있다.강의 내용은 여기까지였다~ 근데 뭔가 이렇게 공부하는 걸로는 안될 것 같은 느낌. 특히 pandas는 더 찾아봐야 할텐데.. 막막하다 막막해! 실습도 해봐야하고... 공식 문서도 더 읽어야 할텐데...! 파이팅하자..!