Python - 데이터분석 1
1장 데이터의 추출
파이썬을 이용한 데이터 분석은 Doit! 데이터분석을 위한 판다스 입문 이라는 책으로 공부를 할 예정이다.
데이터 분석의 기초 'Pandas'
판다스(Pandas)는 파이썬 데이터 처리를 위한 라이브러리이다.
Pandas를 사용하기 위해선 파이참/vscode 등의 파이썬 터미널에
pip install pandas
를 통해 판다스를 설치해주자.
그 후
import pandas as pd
df = pd.read_csv('./doit_pandas-master/data/gapminder.tsv', sep='\t')
print(df.shape)
이러한 코드를 통해 지정한 데이터 파일을 불러올 수 있으며 3번째 줄의 실행 결과는
(1704, 6)
이다. 1704행 6열의 크기를 가진 데이터임을 확인할 수 있으며 데이터 타입은 DataFrame이다.
pd.read_csv를 통해 데이터 파일을 불러 올 수 있으며 파일 경로를 입력해준다(상대/절대경로 모두 가능)
sep='\t'는 데이터를 구분하는 단위가 Tap(\t)키이며 csv파일이 아닌 tsv파일 이기에 파이썬에서 읽을 수 있도록 해주었다.
데이터 분석에 앞서 가장 중요한 어떠한 컬럼들이 존재하는지, 데이터 타입이 무엇인지, 해당 컬럼들의 정보는 무엇인지 확인할 필요가 있다.
print(df.columns)
이 코드를 통해 해당 데이터파일의 열의 이름 즉 인덱스들을 확인할 수 있다.
출력 결과
Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap'], dtype='object')
이 코드를 통해 데이터파일 인덱스들의 자료형을 확인할 수 있다.
print(df.dtypes)
출력결과
country object
continent object
year int64
lifeExp float64
pop int64
gdpPercap float64
dtype: object
이 코드를 통해 좀 더 상세히 확인할 수 있다.
print(df.info())
출력 결과
<bound method DataFrame.info of country continent year lifeExp pop gdpPercap
0 Afghanistan Asia 1952 28.801 8425333 779.445314
1 Afghanistan Asia 1957 30.332 9240934 820.853030
2 Afghanistan Asia 1962 31.997 10267083 853.100710
3 Afghanistan Asia 1967 34.020 11537966 836.197138
4 Afghanistan Asia 1972 36.088 13079460 739.981106
... ... ... ... ... ... ...
1699 Zimbabwe Africa 1987 62.351 9216418 706.157306
1700 Zimbabwe Africa 1992 60.377 10704340 693.420786
1701 Zimbabwe Africa 1997 46.809 11404948 792.449960
1702 Zimbabwe Africa 2002 39.989 11926563 672.038623
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298
[1704 rows x 6 columns]>
판다스와 파이썬 자료형 비교
판다스 | 파이썬 | 설명 |
object | string | 문자열 |
int64 | int | 정수 |
float64 | float | 소수점을 가진 숫자 |
datetime64 | datetime | 파이썬 표준 라이브러리 datetime이 반환하는 자료형 |
열 단위 데이터 추출하기
데이터프레임에서 데이터를 열 단위로 추출하기 위해선 어떻게 해야할까?
대괄호와 열 이름을 이용한다면 간단히 추출할 수 있다.
coun_year_df = df[['country','year']]
print(coun_year_df)
출력 결과
country year
0 Afghanistan 1952
1 Afghanistan 1957
2 Afghanistan 1962
3 Afghanistan 1967
4 Afghanistan 1972
... ... ...
* 이 코드의 중요한 점은 df의 country, year 두개의 인덱스를 뽑아서 저장하는 과정에 있어 하나의 리스트로 감싸줘야 한다
또한 데이터.head(), .tail() 메소드를 사용해 데이터의 처음 혹은 끝의 데이터를 원하는 만큼 뽑아서 확인할 수 있으며 default값은 5이다.
loc 속성으로 행데이터 추출하기
loc속성에 대괄호를 이용하여 인덱스를 전달하면 행 데이터를 추출할 수 있다.
print(df.loc[:4])
출력 결과
country continent year lifeExp pop gdpPercap
0 Afghanistan Asia 1952 28.801 8425333 779.445314
1 Afghanistan Asia 1957 30.332 9240934 820.853030
2 Afghanistan Asia 1962 31.997 10267083 853.100710
3 Afghanistan Asia 1967 34.020 11537966 836.197138
4 Afghanistan Asia 1972 36.088 13079460 739.981106
중요한점은 loc속성과 tail 메소드가 반환하는 자료형이 다르다.
loc속성은 시리즈이며 tail 메소드는 데이터프레임 형식으로 반환한다.
iloc 속성
loc와 유사한 속성이지만 이 둘 함수의 차이점이 존재한다.
loc[0]은 전체 데이터 프레임에서 인덱스 이름이 0인 행만 추출하는 것
iloc[0]은 전체 데이터 프레임에서 0번째 행에 있는 값들만 추출하는 것
이 차이점을 알고 넘어가자 !!
range 메소드
range 메소드는 파이썬 내장 메소드이며 지정한 구간의 정수 리스트를 반환해준다
small_range = list(range(5))
print(small_range)
출력 결과
[0, 1, 2, 3, 4]
이를 좀 더 응용하여 슬라이싱과 비슷한 느낌으로 0부터 5까지의 숫자를 2 간격으로 반환하게 해줄 수 있다.
small_range = list(range(0, 6, 2))
print(small_range)
출력 결과
[0, 2, 4]
위에 정리한 내용들을 바탕으로 간단한 예제를 풀어보자.
//0, 99, 999번째 행의 0, 3, 5번째 열 데이터를 추출하기
print(df.iloc[[0,99,999], [0, 3, 5]])
출력 결과
country lifeExp gdpPercap
0 Afghanistan 28.801 779.445314
99 Bangladesh 43.453 721.186086
999 Mongolia 51.253 1226.041130
iloc 속성의 열 지정값으로 정수 리스트를 전달하면 나중에 어떤 데이터를 추출하기 위한 코드인지 파악하기 어렵다.
그래서 loc 속성을 이용해 열 이름을 지정해주는 방법이 바람직하다.
//인덱스가 10인 행부터 13인 행의 country, lifeExp,gdpPercap 열 데이터를 추출하는 코드
print(df.loc[10:13,['country','lifeExp','gdpPercap']])
출력 결과
country lifeExp gdpPercap
10 Afghanistan 42.129 726.734055
11 Afghanistan 43.828 974.580338
12 Albania 55.230 1601.056136
13 Albania 59.280 1942.284244