독학하는 학생의 정리노트

독학하며 정리노트를 올리는 학생 공부 블로그입니다.

IT 프로그래밍/Python 파이썬

데이터 사이언스 판다스 총정리

공부 안 하는 학생 2020. 9. 26. 19:55

글 쓰는 시간 11p.m, 저녁에 놀았던 나 자신에 업보라 생각하고 데이터 분석 이론을 지금 끝내보자.

막상 이론을 공부하기 싫으니 문득 "내가 이걸 이용해서 뭘 만들 수 있을까"라는 생각이 들어 찾아보니 생각보다 뭘 많이 만들 수 있는 정말 "기초"였다.

기초도 어렵게 느껴지는 와중 "남들은 이걸 다 했을텐데" 라는 생각을 하게 되었고 늦은 밤, 시기 늦은 공부에 대한 열정이 피어오르기 시작하여 정리노트를 만든다. 

 

****생각보다 많이 유용한 내용입니다****

 

pandas = 파이썬에 대표 데이터 분석 라이블러리 ( 판다와는 관련이 없다 ) + 시각화 가능

행과 열을 다루는 엑셀과 같은 것이다. 하지만 엑셀로는 힘든 대용량의 데이터를 pandas는 분석할 수 있다.

10 minutes to pandas를 실행해보는걸 추천한다고 써져있다.

생각보다 방대하다 왠만큼 하는 사람도 한 두어 시간 걸린다 하니 난 5시간 이상 걸릴 예정이다.

저는 주피터 노트북을 이용해 정리를 했습니다.

핵심 

  • pandas
  • dataframe
  • series
  • sort
  • drop
  • groupby
  • pivot table
  • plot

 

이 소스코드는 오늘 포스팅에서 쓰일 메인코드입니다

강의에서 소스코드를 복붙 해서 실행시키라 해서 했더니 저런 표 같은 아웃풋이 나왔다.

괄호와 숫자만 있는 코드에서 저런 표가 나올 거라는 생각을 못했다.

여기서 끝나면 어디서나 볼 수 있는 설명이지만 나도 이해가 안돼서 코드를 하나하나 분석해보자!

 

먼저 알아둬야 할 것은 DataFrame 안에 있는 숫자들은 다 리스트 형태이다.

반복문을 사용하여 리스트를 출력하면 리스트가 세로로 출력된다.

그리고 그 출력하는 리스트.index를 붙이면 앞에 0부터 숫자가 인덱스로 출력된다. 그리고 리스트 앞에 ""로 문자열로 나타나져있는 영문자들은 출력할 때 리스트 중에서 젤 먼저 출력된다.

그리고 index에 1,2,3과 같은 숫자를 직접 입력하여 넣어줬기 때문에 index가 0부터 출력하지 않고 1부터 출력한다.

pd.DataFrame이 주는 기능으로 이것들을 위에서 본 결과처럼 표 형태로 발현되는 것 같다.

영어론 Matress 한국어로는 행렬 고등학교 수학에서 나온 개넘과 유사해 보인다.

*세로가 행 가로가 열*

 

만드는 방식은 공식인가보다 그냥 외우자

 

Series = df["a"]라고 column을 출력하게 되면 a column에 있는 4,5,6의 값이 출력된다. 1차원

수학적으로 표현하면 벡터다. 그냥 알고만 있자

위에서 나온 코드를 보면 a는 4,5,6과 같은 답이 적혀있었다. 그리고 index가 1부터 3까지라 지정해줘서 첫 세로줄에 1,2,3이 출력된 후 다음 줄에 4,5,6이 출력된 것을 볼 수 있다.

 

하지만 대괄호를 하나 더 쓰게 된다면 DataFrame 형태로 출력된다. 2차원

여기서 내가 알 수 있는 것은 DataFrame 형식은 저 표 형식을 의미하는 것 같다.

df에서 a라는 값을 가져오지만 4보다 큰 값만 불러온다 라는 의미를 가지고 있는 series 1차원 코드입니다.

dtype 즉 값 변환은 boolean 즉 문자인 true or false로 출력되는 걸 알 수 있습니다.

a에는 4,5,6이 있었기 때문에 4와 같은 값을 지닌 첫 번째 숫자인 4를 제외하면 모두 True 값을 변환하고 4만 False 값이 반환된 것을 볼 수 있다.

직역 : dataframe에 a column에서 4 이상인 숫자들만 출력

 

이번엔 아까와 같은 코드를 또 한 번 대괄호에 감쌌다. 그 말은 1차원 series 형태였던 전 결과 값을 DataFrame 즉 형, 표 형식으로 표시하는 걸 볼 수 있다. 하지만 4였던 index 1 값 들만 사라졌다.

그럼 여기서 새로운 의문이 든다. 아까는 a값만 출력되어 나왔는데 이번엔 b,c 와 index 2,3값도 함께 출력되었다.

그 이유를 추측하자면 df가 dataframe인데 저 값을 표로 나타내야 하는데 전에 코딩해놓은 게 빈칸으로 들어가 출력되어 나온가 아닌가 싶다. 

직역: dataframe 형식으로 dataframe안에 있는 a column에 4 이상인 숫자들을 출력

코드는 이해하는게 가장 중요하다

 

Rows = series = 1차원 = index part.

숫자의 크기만 정한다.

columns = dataframe = 2차원

[[]] 대괄호가 2개 있다.

 

두 column을 불러올 때 df["a", "b"]로 코드를 짜면 에러가 뜬다.

그래서 두 개 이상에 column을 불러올 때는 [[]]로 dataframe 형식으로 만들어준다, 다시 말하면 column들을 list화 시켜 코드를 작성해야 한다.

df 안에 있는 a column에 값을 센다.

a column 안에는 4,5,6에 숫자들이 있다. 결과 값에 "6이 1개, 5가 1개, 4가 1개 있다"라고 출력되었다.

 

len를 이용하여 df에 길이를 출력해보자, 결과 값이 3이 나왔다.

그럼 len에는 행의 길이를 나타내는 걸까 열의 길이를 나타내는 걸까.. 해서 4X3을 해봤더니 값이 4가 나왔다.

즉 len은 행의 길이를 보여준다.

 

.sort_values() 를 써보았다. 그냥 series 에 df["a"]와 별 차이 없어 보인다. 하지만 내가 보고 있는 강의에서는 값이 다르게 변환되어 나왔다. 강의에서는 위 len을 강의할 때 다른 예시로 메인코드를 살짝 손보았다. 그래서 요는 column 안에 있는 값이 작은 수에서 큰 수 순서로 세로로 나타나 진다. 그래서 index 번호가 엉망이 되어 처음에 영상을 봤을 때 헷갈렸었다. (series)

직역 : df에 있는 column a에 값을 1 차월적으로 순서대로 나열하라

 

영어를 잘하는건 아니지만 편하다

좀 크게 보면 df.sort_values('mpg')

Order rows by values of a column (low to high)라고 쓰여있다.

여기서부터가 고난의 시작이다. 아직 총 14분 정도 되는 강의에 8분 30초까지 밖에 오지 못했다.

 

자 뭐가 달라졌나 보자 , 그냥 a가 df뒤 .sort 앞에 있었는데 아예 코드 맨 뒤로 넘어왔다.

직역 : df 전체를 작은 수에서 큰 수로 나열하지만 a column 값 기준으로 한다.

그리고 항상 [] 인 리스트 형태로 쓰이다 () 소괄호로 변하였다.

 

일단 나의 궁금증을 자극시키는 것은

1) a가 df뒤 .sort 앞에 있었는데 아예 코드 맨 뒤로 넘어온 이유

2) 리스트 형태인 대괄호가 왜 () 소괄호로 바뀐 이유

3) 왜 두 번째 코드는 대괄호가 없었는데 DataFrame 형식으로 출력된 걸까

4) column a 값 기준이 뭘까

 

먼저 1번에 대답은 a column만 혹은 전체 df에 sort 나열 기준 a로 나누어진다 (이게 더 말이 어렵다)

2번 : 첫 번째는 딱 a를 집어 이것"만" 느낌이고 두 번째는 이것에 있는 "이거"와 함께 또는 "이거"를 기준으로

3번:  첫번째는 dataframe "안에 있는" a에 순서를 정리하라, 느낌이면 두번째는 dataframe "안에 있는 것들의" 순서를 a를 기준으로 하여라

4번: 이 질문은 다른 파트를 하던 중 머릿속에서 정리되어 바로 나온 거기 때문에 원래는 저 앞에 있어야 한다, 아무튼 내 코드에는 index가 1부터 3까지 순서대로 있지만 위에 나온 코드들처럼 column안에 있는 값을 정리할 때에는 index 순서를 무시하고 column안에 있는 값을 최우선으로 바꾼다. 즉 우선순위를 뜻하게 된다.

약간 아버지가 가방에 들어가신다, 가방이 아버지께 들어간다. (좀 억지) 이 느낌일 것 같다.

ascending

df.sort_values("a", ascending=False)

바로 위 코드와 유사하지만 ascending=False가 붙었다.

그냥 "반대로"라는 말을 지녀서

직역하자면 "df 전체를 작은 수에서 큰 수로 나열하지만 a column 값 기준으로 한다 하는 것을 반대로 하라"가 된다.

python에서 이와 비슷한 것으로 reverse가 있다.

 

직역 : df에 있는 list 형태에 c를 드랍한다, 좌표

c는 list 상태입니다, 왜냐고요? c 안에는 10, 11, 12와 같은 숫자들이 있기 때문에 저건 list 입니다.

axis=1는 좌표 같은 것입니다. 행은 axis=0인 것 같네요(강의에는 자세히 나와있지 않아서 추측하였습니다)

 

테트릭스 게임같ㄷr

 

사진 속 맨 위에 있는 [22] 코드는 drop 코드와 일치합니다.

코드[22] 와 같이 코드를 만들고 바로 df를 출력시키면 c가 사라지지 않은 dataframe이 출력된다.

그래서 아래 [23] 코드처럼 c를 드랍한다는 코드를 다시 한번 df 변수에 넣어주고 새로 바뀐 df 변수를 출력하면 깔끔히 c가 지워진 코드가 출력된다.

 

데이터 집계(후에 공공데이터를 이용해 집계를 할 때 사용됨):

pivot 과 pivot table에 차이점: pivot은 행을 열로 바꿀 수 있지만 형태만 변하며 pivot table은 연산까지 할 수 있다.

직역 : a라는 column으로 groupby 해서 b라는 column 값으로 평균값을 구한다.

df.droupby(["a"], ["b"]).mean()는 에러가 났다. 왜 그럴까 다시 10분 동안 머리를 감싸고 생각해보았다.

이 부분은 다음 소스코드에서 자세히 살펴보겠다.

감이 오시나요?

df에 groupby된 a의 값을 b에 넣으라는 말 같다. 그야말로 서랍장 신세. 그래서 groupby가 될 a만 () 소괄호 속에 있고 b는 괄호 밖에 있으며 .mean(평균값)을 뒤에 붙인 것을 보아 a가 groupby되어 평균값이 된 값을 b에 넣는다.라고 생각할 수 있다.

그럼 이제 .agg가 뭔가.. 밑에 사진을 보면

 

agg(function) :

aggregate group using function. 이라고 적혀있다. (선택형)

그냥 간단히 한 번에 많은 연산 내용을 담을 때 쓰는 봉지 같은 느낌이다.

 

여기까지 읽으신 분들은 제가 뭘 할지 아실겁니다.

 

바뀐 거라곤. describe() 밖에 없는 코드, 하지만 값은 뭐가 많이 변했군요.

이건 간단히 ".describe() = 모든 연산" 이라 이해하시면 됩니다.

모든 연산을 한 번에 저렇게 표로 나타내고 싶으시다면 .describe를 사용하세요.

 

이 pivot_table 에서는 data, index, values가 들어간다.

index로는 문자열인 a를 넣어주면 b값으로 평균값을 내주는데 전에는 데이터에 행이 4개였는데 행이 3개로 그룹화해서 값을 계산해 주었다. 그리고 이 aggregation function이 기본적으로 mean 즉 평균값으로 되어있다.

 

[33] 코드가 현 df 변수에 있는 dataframe이다.

만약에 df ["a"]에 겹치는 숫자가 있으면 a에 같은 숫자가 있는 b열에 있는 숫자들이 서로 더해지면서 /n을 하게 된 값이 pivot_table에 나오게 된다.

나머지 하나씩만 있는 값들은 변동 없이 똑같은 값이 b로 들어간다.

 

 

plotting = 그래프를 그릴 수 있다 ( 시각화 )

df.plot() = 그래프 표현

bar() = 막대그래프

area(): 넓이만큼 색칠되어 있는 그래프

모두 변수.plot.??으로 해야한다. 마지막에는 () 소괄호를 꼭 넣어줘야 한다.

 

11시쯤에 공부를 시작하며 1시간 안에 다 끝낼 수 있을 거라 믿었던 나 자신이 조금 원망스러웠던 5시간이었다.

강의 동영상은 총 14분, 노트 정리하며 모르는 것이 있으면 머리 싸매고 10분 ~ 20분씩 생각해보고 영어자료들 한국어로 해석하고 또 나만의 jupyter note도 만들고 이래저래 해서 5시간이 걸렸다.

하지만 기초적인 data science에 관한 것들을 배웠어서 정말 빡집중으로 5시간을 보냈다.

이왕 이렇게 된 거 quiz까지 끝내고 날 새야겠다 오늘도 data science 공부하느라 밤샌 공부 안 하는 학생이었습니다.

edwith 입문 부스트 코스 [파이썬으로 시작하는 데이터 사이언스]