EDA with Python - Pandas
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
I. 개요
Pandas
는panel data
의 의미를 가지고 있다.- 흔히, 엑셀 데이터로 불리우는
관계형(Relational)
또는레이블링된(Labeling)
된 데이터를 보다 쉽게, 직관적으로 작업할 수 있도록 설계되어 있다. Python
에서 데이터 분석을 수행하기 위한 매우 기초적이며 높은 수준의 문법을 제공한다.Pandas
는 크게Series
&DataFrame
을 다룰 수 있도록 기초 문법을 제공하고 있다.Pandas
가 다루는 여러 종류의 데이터를 확인해보자.- SQL 테이블 또는 Excel 스프레드시트에서와 같이 형식의 행과 열이 있는 표 형식 데이터
- 순서 및 순서 지정되지 않은(고정 빈도일 필요는 없음) 시계열 데이터.
- 행 및 열 레이블이 있는 임의 행렬 데이터(동일하게 입력 또는 이기종)
- 기타 형태의 관측/통계 데이터 세트
II. 모듈 Import
- 패키지 설치방법은 설치 문서를 확인한다.
import pandas as pd
print(pd.__version__)
1.0.3
III. Pandas 기본 활용법
Pandas
가 제공하는 다양한 기능은 다음과 같지만, 본 튜토리얼에서는Sample
위주로 다루도록 한다.- 부동 소수점 데이터뿐만 아니라 부동 소수점 데이터에서도 결측 데이터(NaN으로 표시됨)를 쉽게 처리함
- 크기 변이성: DataFrame 및 고차원 객체에서 열을 삽입 및 삭제 가능
- 자동 및 명시적 데이터 정렬: 객체를 라벨 집합에 명시적으로 정렬하거나, 사용자가 라벨을 무시하고
Series
,DataFrame
등이 자동으로 데이터를 계산에서 정렬 가능 - 데이터 집합에서 데이터 집합의 분할 적용 결합 작업을 수행할 수 있는 기능
- 다른
Python
및NumPy
데이터 구조에서 색인이 다른 데이터를DataFrame
개체로 쉽게 변환 - 지능형 라벨 기반 슬라이싱, 고급 인덱싱 및 대용량 데이터 세트 부분 집합 취하기
- 직관적인 데이터 세트 병합 및 결합
- 유연한 데이터 세트 재구성 및 피벗테이블 구성
- 축의 계층적 라벨링(눈금당 여러 개의 라벨을 가질 수 있음)
- 플랫 파일(CSV 및 구분), Excel 파일, 데이터베이스 로딩 및 초고속 HDF5 형식의 데이터 저장/로딩에 사용되는 강력한 데이터 IO 도구
- 시계열별 기능: 날짜 범위 생성 및 주파수 변환, 이동 창 통계, 날짜 이동 및 지연.
IV. Pandas Sample Tutorial
- 간단하게
Pandas
를 활용한Tutorial
을 확인해보자.
(1) 파라미터 세팅
- 먼저, 행과 열을 최대 출력하는 개수를 지정한다.
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
(2) 데이터 생성
- 데이터를 생성하는 방법은 크게 2가지로 구분된다. (
Series
,DataFrame
) - 먼저
Series
를 만들어보자.
temp_series = pd.Series([1,2,3,5,8,13,21])
print(temp_series)
0 1
1 2
2 3
3 5
4 8
5 13
6 21
dtype: int64
- 이제
Series
에 있는 데이터와 함께DataFrame
을 만든다.
series_df = pd.DataFrame({
"No":range(1,5),
"날짜":pd.Timestamp('20200601'),
"출석점수":pd.Series(5, index=list(range(4)), dtype='float64'),
"등급":pd.Categorical(["A등급", "B등급", "C등급", "D등급"]),
"구분":"학점"
})
print(series_df)
No 날짜 출석점수 등급 구분
0 1 2020-06-01 5.0 A등급 학점
1 2 2020-06-01 5.0 B등급 학점
2 3 2020-06-01 5.0 C등급 학점
3 4 2020-06-01 5.0 D등급 학점
- 이번에는 딕셔너리에서 데이터프레임으로 변환하는 소스코드다.
- 아래 코드에서 보여주고자 하는 것은 딕셔너리의 크기가 동일하지 않아도, 데이터프레임으로 변환되는데 문제가 없다.
- 다만,
NaN
으로 채울 뿐이다.
dict_df = [{'가': '사과', '나': '볼'},{'가': '비행기', '나': '방망이', '다': '고양이'}]
dict_df = pd.DataFrame(dict_df)
print(dict_df)
가 나 다
0 사과 볼 NaN
1 비행기 방망이 고양이
- 이번에는 배열에서 데이터프레임으로 변환하는 소스코드다.
sdf = {
'국가':['한국', '미국', '일본'],
'ISO-Code':[1,2,3],
'지역': [4180.69, 4917.94, 454.07,],
'위치': ["서울", "LA", "동경"]
}
sdf = pd.DataFrame(sdf)
print(sdf)
국가 ISO-Code 지역 위치
0 한국 1 4180.69 서울
1 미국 2 4917.94 LA
2 일본 3 454.07 동경
(3) 파일 입출력
- 외부 데이터의 파일 입출력에 대한 코드를 입력한다.
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'
df = pd.read_csv(url)
print(df.head(2))
39 State-gov 77516 Bachelors 13 Never-married \
0 50 Self-emp-not-inc 83311 Bachelors 13 Married-civ-spouse
1 38 Private 215646 HS-grad 9 Divorced
Adm-clerical Not-in-family White Male 2174 0 40 \
0 Exec-managerial Husband White Male 0 0 13
1 Handlers-cleaners Not-in-family White Male 0 0 40
United-States <=50K
0 United-States <=50K
1 United-States <=50K
- 컬럼명이 지정되지 않아 관측값이 컬럼명 위치에 있는 것을 확인할 수 있다.
- 이 때에는 컬럼명을 먼저 저장한 뒤, 아래와 같은 코드로 실행하면 정상적으로 데이터프레임이 완성된다.
columns = ['age', 'workclass', 'fnlwgt', 'education', 'education_num',
'marital_status', 'occupation', 'relationship', 'ethnicity',
'gender','capital_gain','capital_loss','hours_per_week','country_of_origin','income']
df2 = pd.read_csv(url, names=columns)
print(df2.head(2))
age workclass fnlwgt education education_num \
0 39 State-gov 77516 Bachelors 13
1 50 Self-emp-not-inc 83311 Bachelors 13
marital_status occupation relationship ethnicity gender \
0 Never-married Adm-clerical Not-in-family White Male
1 Married-civ-spouse Exec-managerial Husband White Male
capital_gain capital_loss hours_per_week country_of_origin income
0 2174 0 40 United-States <=50K
1 0 0 13 United-States <=50K
- 컬럼명에 대한 정보는 Adult Data Set 에서 참고한다.
- 판다스를 배울 때 조금더 자세히 배우겠지만,
info()
함수를 사용하면 데이터의 일반적인 정보를 확인할 수 있다.
print(df2.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32561 entries, 0 to 32560
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 32561 non-null int64
1 workclass 32561 non-null object
2 fnlwgt 32561 non-null int64
3 education 32561 non-null object
4 education_num 32561 non-null int64
5 marital_status 32561 non-null object
6 occupation 32561 non-null object
7 relationship 32561 non-null object
8 ethnicity 32561 non-null object
9 gender 32561 non-null object
10 capital_gain 32561 non-null int64
11 capital_loss 32561 non-null int64
12 hours_per_week 32561 non-null int64
13 country_of_origin 32561 non-null object
14 income 32561 non-null object
dtypes: int64(6), object(9)
memory usage: 3.7+ MB
None
V. 결론
- 간단하게
Pandas
를 활용한 데이터 생성 및 파일 입출력에 대해서 배우는 시간을 가졌다. - 만약, 빠르게 판다스를 활용하여 데이터 전처리를 연습 하고 싶다면, 공식홈페이지에 있는 10 minutes to pandas에서 학습하는 것을 권장한다.
- 강사는
Kaggle
데이터를 활용하여Pandas
함수를 응용할 것이다.
Reference
Mukhiya, Suresh Kumar, and Usman Ahmed. “Hands-On Exploratory Data Analysis with Python.” Packt Publishing, Mar. 2020, www.packtpub.com/data/hands-on-exploratory-data-analysis-with-python.