BASHA TECH

Ch02. 판다스 시작하기 본문

Computer/Pandas

Ch02. 판다스 시작하기

Basha 2022. 9. 23. 15:44
728x90

 

2-1. 데이터 집합 불러오기

2-2. 데이터 추출하기 => 열 단위 데이터 추출 , 행 단위 데이터 추출, loc/iloc

2-3. 기초적인 통계 계산

2-4. 그래프 그리기

ch02.ipynb
0.12MB

 

참고 링크 : https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html

 

pandas.DataFrame — pandas 1.5.0 documentation

Column labels to use for resulting frame when data does not have them, defaulting to RangeIndex(0, 1, 2, …, n). If data contains column labels, will perform column selection instead.

pandas.pydata.org

 

행 선택 할 때 사용

iloc : Purely integer-location based indexing for selection by position.

loc : Access a group of rows and columns by label(s) or a boolean array.

 

참고 : https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

pandas.read_csv — pandas 1.5.0 documentation

Delimiter to use. If sep is None, the C engine cannot automatically detect the separator, but the Python parsing engine can, meaning the latter will be used and automatically detect the separator by Python’s builtin sniffer tool, csv.Sniffer. In addition

pandas.pydata.org

# 02-01 데이터 불러오기
# read_csv() pandas module function : csv 파일 읽기 => dataframe return
# gapminder.csv

# import pandas
# pandas.read_csv()

import pandas as pd
# pd.read_csv()?
pd.read_csv?
# read_csv() => return dataframe(sheet) object
df = pd.read_csv('../data/gapminder.tsv', sep='\t') #sep = ',' '\t'
# 데이터 간단히 확인 : head() => 앞, tail() : 뒤에 있는 데이터 확인
df.head(1) # head(cnt) => 위에서 5개 확인 default가 5개임.
# 1개만 확인 하고 싶으면 df.head(1)
# default => df.head()
# 뒤 확인 => tail(cnt)
df.tail()
df = pd.read_csv(
    '../data/gapminder.tsv' # 읽어올 파일 지정
    , sep='\t' # 데이터 분리 기호 => tab
    , header=0 # 컬럼명으로 사용할 행 선택, default => 0
)
# 데이터 간단히 확인 : head() => 앞, tail() : 뒤
df.head(1) # head(cnt) => 위에서 5개 확인 default가 5개
# 타입 확인 (타입은 내장함수임)
type(df)
# => pandas.core.frame.DataFrame
# pandas.core. : package  / frame. : module  / DataFrame : class
# class => variable / method
# 데이터 구조 확인 : shape attribute => tuple
df.shape
# df라는 데이터프레임의 기본 정보를 출력해라.
df.info()
# 데이터프레임에서 컬럼(열) 인덱싱, 컬럼(열) 슬라이싱
# 1. 인덱싱
# 2. 슬라이싱
# 3. 블린 인덱싱
# 4. 팬시 인덱싱
df.head()
# 1. Indexing country 추출
df['country']
# 2. Column Slicing => country continent year => 팬시 색인 : 비연속 인덱싱
# 팬시 색인 : 비연속 슬라이싱. (슬라이싱은 연속되어야 하니까 이건 비연속.)
# df[0:2] # 행 추출
# df['country':'year'] # 범위를 줘서는 안 된다. TypeError 뜸
# df['country','continent','year'] # KeyError
subset = df[['country','continent','year']] # => Fancy Indexing
type(subset) # DataFrame
df.columns
df[['country','year','pop']].head() # DataFrame object가 나옴
df[['country','year','pop']].head().sort_values(by='year') # year로 정렬.
# 5년마다 인구조사 한다는 걸 알수 있음. 그리고 인구가 증가하고 있다는 사실도.
# 
df[0:2]
# 행 추출
# loc(명인덱싱), iloc(정수인덱싱)
df.head()
df.loc[0] # series로 나옴
df.loc[0]['continent'] # continet라는 인덱싱을 가져와!
df.iloc[0]
df.loc[0]
df.iloc[99] # iloc로 접근 했으니 정수 인덱싱이지만 이름이 99인 row가 있다. Name: 99
# 행, 열 추출
# df.loc[행,열]
df.loc[:,['year','pop']] # DataFrame
# 행, 열 추출
# df.loc[행,열]
df.loc[5:10,['year','pop']] # 판다스의 인덱스는 and 값 제외 안 됨. 5~10 모두 나옴
df.loc[:,'year'] # Series
df.loc[:,['year']] # DataFrame
# DataFrame과 Series는 다른 거임
type(df.loc[:, 'year'])
type(df.loc[:, ['year']])
df.loc[:,['year','pop']].head()
# 'year','pop' : 명인덱싱 => loc 사용해야 한다.
df.iloc[:,['year','pop']].head() # *** IndexError!
# iloc는 에러임 loc를 써야함. 
# 왜 loc여야 되는가? year,pop은 명 인덱싱이니까 인덱싱이 안 맞아서 에러남.
# iloc 사용
df.iloc[:,-1]
df.iloc[:,[-1]].head() # DataFrame
df.iloc[:,['gdpPercap']].head() # 이건 loc, iloc 구분해서 사용하기
df.loc[:,['gdpPercap']].head() # 이건 iloc임.
# 대륙별 나라 개수 세기
df.groupby(by=['continent'])['country'].nunique()
df.groupby(by=['continent'])
# SeriesGroupBy
df.groupby(by=['continent'])['country']
# 대륙이 빠진 value count
df['continent'].value_counts()
# 숫자형 데이터의 기술 통계 => object인 애들은 모두 빠짐
df.describe()
df.info()
# describe는 DataFrame
type(df.describe())
# 이 표에서 50%가 중위값 
# 평균과 중위값이 같다 => 밸커버(=정규분포)
df.describe()[['year','pop']]
## 데이터 시각화
import matplotlib.pyplot as plt
# 시각화에 사용할 데이터 생성
# 연도별 lifeExp 평균
# 긴 코드는 \ 치고 다음줄로 내려가면 코드가 이어진다.
global_yearly_life_expectancy = \
    df.groupby('year')['lifeExp'].mean()
print(global_yearly_life_expectancy)
# axis x(x축)/index : year , values= > y axis
# Series => plot() method : 선 그래프
global_yearly_life_expectancy.plot()
728x90
반응형

'Computer > Pandas' 카테고리의 다른 글

Ch05. 데이터 연결하기  (0) 2022.09.27
Ch04. 그래프 그리기  (0) 2022.09.27
Ch03. 판다스 데이터 프레임과 시리즈  (0) 2022.09.26
판다스 정리  (0) 2022.09.26
pandas 설치  (1) 2022.09.23
Comments