1. Intro

그동안 배운 것은 행과 열, 특정 조건을 만족하는 데이터만 조회하는 것을 다루었다. 이번시간에는 조금 함수를 활용하여 데이터를 가공하는 법을 알려드리고자 한다.

 

만약, 판다스 기초적인 부분부터 확인 하고 싶다면 아래 글들을 차례대로 해보기를 권한다. 

 


 

2019/10/30 - [Python/[Python] 데이터 전처리] - [Python] 판다스 자료 구조 - Series

 

[Python] 판다스 자료 구조 - Series

Intro 파이썬의 수많은 라이브러리 중, 엑셀데이터를 수집하고 정리하는 데 최적화된 도구가 판다스 라이브러리라고 볼 수 있다. 판다스를 배우면 데이터과학의 80~90% 업무를 처리할 수 있고, 데이터과학자에게..

cozydatascientist.tistory.com

2019/11/04 - [Python/[Python] 데이터 전처리] - [Python] 판다스 자료 구조 - 데이터프레임

 

Pandas Dataframe

데이터프레임은 2차원 배열의 행과 열로 구성되어져 있다. 대부분의 사람들이 알고 있는 마이크로소프트사의 EXCEL, SQL Table 등을 생각하면 데이터프레임을 쉽게 이해할 수 있다. 판다스에서 가장 많이 사용되는 객체이며, 실제 파이썬을 활용한 데이터 분석을 하고 싶다면 필수적으로 알아야 하는 내용이다. 기본적으로 Python은 행렬 연산에 최적화된 언어라고 할 수 있지만, 판다스 라이브러리는 R의 데이터프레임에서 유래했다고 알려져 있다. 여기서 잠깐

chloevan.github.io

 

[Python] 판다스 자료 구조 - 데이터프레임

데이터프레임은 2차원 배열의 행과 열로 구성되어져 있다. 대부분의 사람들이 알고 있는 마이크로소프트사의 EXCEL, SQL Table 등을 생각하면 데이터프레임을 쉽게 이해할 수 있다. 판다스에서 가장 많이 사용되는..

cozydatascientist.tistory.com

2019/11/08 - [Python/[Python] 데이터 전처리] - [파이썬] 판다스 활용 데이터 전처리 - 열 다루기

 

[파이썬] 판다스 활용 데이터 전처리 - 열 다루기

1. Intro 지금까지 배운 것은 데이터프레임으로 변환하는 내용이었다. 데이터프레임으로 변환한다는 뜻은 결과적으로 연구자 또는 분석 요건에 맞춰서 데이터를 가공할 줄 알아야 한다. Pandas를 배우는 궁극적인..

cozydatascientist.tistory.com

2019/11/12 - [Python/[Python] 데이터 전처리] - [파이썬] 판다스 활용 데이터 전처리 - 행 다루기

 

[파이썬] 판다스 활용 데이터 전처리 - 행 다루기

1. Intro 지난 시간에는 열(=Column)을 다루는 것을 배웠다. 구체적으로는 열을 선택하는 방법, 추가하는 방법, 삭제하는 방법을 배웠다. 이번에는 행을 다루는 것을 배워보도록 해보자. [지난 글] 2019/11/12 - [..

cozydatascientist.tistory.com

2019/11/15 - [분류 전체보기] - [파이썬] 판다스를 활용한 행과 열 동시에 다루기

 

[파이썬] 판다스를 활용한 행과 열 동시에 다루기

이번 시간에는 지난시간에 기본적인 내용에서 실무에서 주로 사용하는 iloc와 loc를 활용해서 행과 열을 동시에 다루는 법에 대해 알려준다. 2019/11/08 - [Python/[Python] 데이터 전처리] - [파이썬] 판다스 활..

cozydatascientist.tistory.com


2. Data Transformation(데이터 가공)

이번에는 기상 데이터를 활용할 것이며, 마찬가지로 데이터는 DataCamp를 통해서 수집하였다. 

import pandas as pd
url = 'https://assets.datacamp.com/production/repositories/502/datasets/6c4984cb81ea50971c1660434cc4535a6669a848/pittsburgh2013.csv'
weather = pd.read_csv(url)
weather.shape
weather.head()

총 365개의 행과 23개의 변수로 이루어진 데이터셋을 확인해보자. 참고적으로 위 데이터는 `Pittsburgh` 2013년 기상 데이터로 확인된다. 사용자 정의 함수를 만들고, 데이터의 칼럼 변환시 참고하도록 해보자. 

 

2.1 apply()

먼저 `.apply()`함수를 이용해보자. 

사용자 정의 함수를 작성한 후, 적용하는 소스코드다. 사용자 정의 함수는 화씨 온도단위를 섭씨 온도단위로 바꾸는 것이다.  이 때 변환하려는 변수는 `Mean TemperatureF`와 `Mean Dew PointF`이다. 

def to_celsius(F): 
    return 5/9*(F-32)

df_celsius = weather[['Mean TemperatureF', 'Mean Dew PointF']].apply(to_celsius)
df_celsius.columns = ['Mean TemperatureC', 'Mean Dew PointC']
print(df_celsius.head())
   Mean TemperatureC  Mean Dew PointC
0          -2.222222        -2.777778
1          -6.111111       -11.111111
2          -4.444444        -9.444444
3          -2.222222        -7.222222
4          -1.111111        -6.666667

한국사람에게 친숙한 겨울철 영하온도가 기록되는 것을 확인할 수 있다. 

2.2 map()

`.map()`함수를 사용하려면 데이터 전체보다는 Series 타입에서만 사용해야만 한다. 좀 더 쉽게 표현하면 한 변수에 대해서만 적용이 가능하다는 뜻이다. 이번에는 election 데이터를 활용하도록 한다. 

import pandas as pd
url = 'https://assets.datacamp.com/production/repositories/502/datasets/502f4eedaf44ad1c94b3595c7691746f282e0b0a/pennsylvania2012_turnout.csv'
election = pd.read_csv(url, index_col = "county")
election.head()

winner 변수를 활용해서 새로운 변수 group를 만들 것이다. Romney에 해당하면 A Obama에 해당하면 B 이렇게 적용할 것이다. 보통 이런 경우에는 조건문 if() 함수가 떠오르겠지만, .map() 함수를 사용하면 보다 쉽게 데이터를 변환할 수 있다.

A_B = {'Romney' : 'A', 'Obama' : 'B'}
election['group'] = election.winner.map(A_B)
print(election.head())
          state   total      Obama     Romney  winner  voters    turnout  \
county                                                                     
Adams        PA   41973  35.482334  63.112001  Romney   61156  68.632677   
Allegheny    PA  614671  56.640219  42.185820   Obama  924351  66.497575   
Armstrong    PA   28322  30.696985  67.901278  Romney   42147  67.198140   
Beaver       PA   80015  46.032619  52.637630  Romney  115157  69.483401   
Bedford      PA   21444  22.057452  76.986570  Romney   32189  66.619031   

              margin group  
county                      
Adams      27.629667     A  
Allegheny  14.454399     B  
Armstrong  37.204293     A  
Beaver      6.605012     A  
Bedford    54.929118     A  

위에서 볼 수 있는 것처럼 group 변수가 생겼고, Romney와 Obama에 매칭되는 A, B값이 들어간 것을 확인할 수 있다.

2.3 vectorized functions()

 

from scipy.stats import zscore
turnout_zscore = zscore(election['turnout'])
election['turnout_zscore'] = turnout_zscore
print(election.head())
          state   total      Obama     Romney  winner  voters    turnout  \
county                                                                     
Adams        PA   41973  35.482334  63.112001  Romney   61156  68.632677   
Allegheny    PA  614671  56.640219  42.185820   Obama  924351  66.497575   
Armstrong    PA   28322  30.696985  67.901278  Romney   42147  67.198140   
Beaver       PA   80015  46.032619  52.637630  Romney  115157  69.483401   
Bedford      PA   21444  22.057452  76.986570  Romney   32189  66.619031   

              margin group  turnout_zscore  
county                                      
Adams      27.629667     A        0.853734  
Allegheny  14.454399     B        0.439846  
Armstrong  37.204293     A        0.575650  
Beaver      6.605012     A        1.018647  
Bedford    54.929118     A        0.463391  

z점수는 표준점수로 이해하면 된다. 양수가 나왔다면 평균보다 상위에 있는 것이고, 음수가 나왔다면 평균보다 하위에 위치에 있다는 뜻이다.

 

지금까지 판다스의 기본을 다루었다. 

 

다음시간에는 인덱싱 다루는 법에 공유하겠다. 

+ Recent posts