카테고리 없음

[KMU SUMMER AI] 파이썬으로 데이터 주무르기, pandas

프로틴형님 2022. 7. 16. 07:04

I. pandas 시작하기


PREREQUISITE : Table

  • 행과 열을 이용해서 데이터를 저장하고 관리하는 자료구조(컨테이너)
  • 주로 행은 개체, 열은 속성을 나타냄

Pandas 시작하기

import pandas를 통해서 진행( pd라는 alias 사용 )

import pandas as pd

II. pandas로 1차원 데이터 다루기 - Series


Series?

  • 1-D labeled array
  • 인덱스를 지정해줄 수 있음
s = pd.Series([1,4,9,16,26])
t = pd.Series({'one':1, 'two':2, 'three':3, 'four':4, 'five':5})

Series + Numpy

  • Series는 ndarray와 유사하다 !
s[1] # 4
t[1] # 2
t[1:3] # two ~ three
s[s > s.median()] # 자기 자신의 median(중앙값) 보다 큰 값들만 가지고 와라

Series + dict

  • Series는 dict와 유사하다 !
t['one'] # 1
t['six'] = 6 # Series에 값 추가
'six' in t # True
'seven' in t # False

# t['seven'] => Keyerror
t.get('seven') # 에러가 나지 않음. 찾는 값이 없는 경우 None 반환
t.get('seven',0) # 찾는 값이 없는 경우 0 반환

Series에 이름 붙이기

  • name 속성을 가지고 있다.
  • 처음 Series를 만들 때 이름을 붙일 수 있습니다.
s = pd.Series(np.random.randn(5), name="random_nums")

s # Name: random_nums, dtype: float64
s.name = "임의의 난수"

s # Name: 임의의 난수, dtype: float64

III. Pandas로 2차원 데이터 다루기 - dataframe


dataframe?

  • 2-D labeled table
  • 인덱스를 지정할 수도 있음
d = {"height":[1,2,3,4], "weight":[30,40,50,60]}

df = pd.DataFrame(d)

df 
# 결과
    height    weight
0    1    30
1    2    40
2    3    50
3    4    60

df.dtypes
# 결과
height    int64
weight    int64
dtype: object

From CSV to dataframe

  • Comma Seperated Value를 DataFrame으로 생성해줄 수 있다.
  • .read_csv()를 이용
# 동일 경로에 country_wise_latest.csv

covid = pd.read_csv("./country_wise_latest.csv")

covid

Pandas 활용 1. 일부분만 관찰하기

  • head(n): 처음 n개의 데이터 참조
# 위에서부터 5개를 관찰하는 방법(함수)

covid.head(5)
  • tail(n): 마지막 5개를 관찰하는 방법(함수)
covid.tail(5)

Pandas 활용 2.데이터 접근하기

  • df['column_name'] or df.column_name
covid['Active']
covid['WHO Region']
# covid.WHO Region

Honey Tip !

  • Dataframe의 각 column은 "Series"다 !
type(covid['Confirmed'])
# pandas.core.series.Series

covid['Confirmed'][0]
# 36263

covid['Confirmed'][1:5]

Pandas 활용 3. "조건"을 이용해서 데이터 접근하기

# 신규 확진자가 100명이 넘는 나라를 찾아보자 !

covid[covid["New cases"] > 100].head(5)
# WHO 지역이 동남아시아인 나라 찾기

covid['WHO Region'].unique()
covid[covid['WHO Region'] == "South-East Asia"]

Pandas 활용 4. 행을 기준으로 데이터 접근하기

# 예시 데이터 - 도서관 정보


books_dict = {"Available":[True, True,False], "Location":[102,215,323], "Genre":["Prigramming", "Physics", "Math"] }

books_df = pd.DataFrame(books_dict, index=["버그란 무엇인가", "두근두근 물리학", "미분해줘 홈즈"])

books_df

인덱스를 이용해서 가져오기: .loc[row, col]

books_df.loc["버그란 무엇인가"]

type(books_df.loc["버그란 무엇인가"])
# pandas.core.series.Series
# "미분해줘 홈즈 책이 대출가능한지?"

books_df.loc["미분해줘 홈즈"]["Available"]
books_df.loc["미분해줘 홈즈", "Available"]
# False

숫자 인덱스를 이용해서 가져오기: .iloc[rowidx, colidx]

# 인덱스 0행의 인덱스 1열 가지고오기

books_df.iloc[0,1]
# 102
# 인덱스 1행의 인덱스 0~1열 가지고오기

books_df.iloc[1, 0:2]

Available    True
Location      215
Name: 두근두근 물리학, dtype: object

Pandas 활용 5. groupby

  • Split : 특정한 "기준"을 바탕으로 DataFrame을 분할
  • Apply : 통계함수 - sum(), mean(), median() ... - 을 적용해서 각 데이터를 압축
  • Combine : Apply된 결과를 바탕으로 새로운 Series를 생성(group_key : applied_value)
  • .groupby()
covid.head(5)

# WHO Region 별 확진자수

# 1. covid에서 확진자 수 column만 추출한다.
# 2. 이를 covid의 WHO Region을 기준으로 groupby 한다.

covid_by_region = covid["Confirmed"].groupby(by=covid["WHO Region"])

covid_by_region
<pandas.core.groupby.generic.SeriesGroupBy object at 0x7ff54ed47d90>

covid_by_region.sum()
WHO Region
Africa                    723207
Americas                 8839286
Eastern Mediterranean    1490744
Europe                   3299523
South-East Asia          1835297
Western Pacific           292428
Name: Confirmed, dtype: int64
# 국가당 감염자 수

covid_by_region.mean() # sum() / 국가 수
WHO Region
Africa                    15066.812500
Americas                 252551.028571
Eastern Mediterranean     67761.090909
Europe                    58920.053571
South-East Asia          183529.700000
Western Pacific           18276.750000
Name: Confirmed, dtype: float64