Python

Python - 데이터분석 1

해변 2022. 6. 15. 22:07
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