EDA
1. 탐색적 데이터 분석 과정
- EDA (Exploratory Data Analysis) 라고 함
- 데이터 분석을 위해 raw data를 다양한 각도에서 관찰하여, 데이터를 이해하는 과정
- 데이터 분석 주제마다 EDA를 통해 진행하는 과정은 각양각색이므로, 정형화된 패턴은 없지만,
- 크게 다음과 같은 3가지 과정은 기본이 될 수 있으므로 다음 3가지 과정을 기본으로 이해하기로 함
- 데이터의 출처와 주제에 대해 이해
- 데이터의 크기 확인
- 데이터 구성 요소(feature)의 속성(특징) 확인
- feature: 데이터 구성 요소를 위미함
- 예: 어떤 초등학교에 학생 성적을 기록한 데이터가 있다면, 학생 이름, 과목별 성적등을 feature로 볼 수 있음 (가볍게 field/column 이라고 봐도 무방함)
존 튜키라는 미국 통계학자가 제안한 분석 방법론
기존 통계학이 가설을 세우고, 가설을 검정하는 방법론에 치우쳐, 데이터 본래의 정보를 파악하기 어려우므로, 본연의 데이터 탐색에 집중하자는 방법론
2. 실제 데이터로 pandas 라이브러리와 탐색적 분석 과정 익히기
코로나 바이러스 데이터와 함께 pandas 라이브러리 익히기
- COVID-19-master 폴더 확인
- 데이터 다운로드: https://github.com/CSSEGISandData/COVID-19
- 데이터 압축 풀고 COVID-19-master 폴더를 통째로 pandas_eda 주피터 노트북이 있는 폴더 안에 하위폴더로 이동
- COVID-19-master.zip
- csv 파일을 pandas dataframe 으로 읽기 위해 read_csv() 함수를 사용함
- csv 구분자는 quotechar=구분자 옵션을 넣어서 구분자가 다른 경우도 읽기 가능
doc = pd.read_csv("파일명", encoding='utf-8-sig', quotechar=',')
- 에러 나는 데이터는 항상 있을 수 있음, 해당 데이터는 생략하는 것이 일반적임
doc = pd.read_csv("파일명", encoding='utf-8-sig', error_bad_lines=False)
import pandas as pd doc = pd.read_csv("COVID-19-master/csse_covid_19_data/csse_covid_19_daily_reports/04-01-2020.csv", encoding='utf-8-sig')
Processing
1. 탐색
코로나 바이러스 데이터와 함께 pandas 라이브러리 익히기
- COVID-19-master 폴더 확인
import pandas as pd
PATH = "COVID-19-master/csse_covid_19_data/csse_covid_19_daily_reports/"
doc = pd.read_csv(PATH + "04-01-2020.csv", encoding='utf-8-sig')
doc.head()
데이터프레임에서 Series 추출하기
- 하나의 feature(column)만 선택하면 됨
countries = doc['Country_Region']
countries.head()
Series 로 feature를 보다 상세하게 탐색하기
- size : 사이즈 반환
- count() : 데이터가 없는 경우를 뺀 사이즈 반환
- unique(): 유일한 값만 반환
- value_counts(): 데이터가 없는 경우를 제외하고, 각 값의 갯수를 반환
print (countries.size, countries.count())
2522 2522
print (countries.unique(), len(countries.unique()))
countries.value_counts()
2. 컬럼 선택
covid_stat = doc[['Confirmed', 'Deaths', 'Recovered']]
covid_stat.head()
3. 행 선택
doc = pd.read_csv(PATH + "04-01-2020.csv", encoding='utf-8-sig')
doc_us = doc[doc['Country_Region'] == 'US']
doc_us
4. 결측값 처리하기
결측값 확인
- isnull() : 없는 데이터가 있는지 확인 (True or False)
- sum() : 없는 데이터가 있는 행의 갯수 확인
- 통상 isnull().sum() 으로 사용
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc.isnull().sum()
결측값 삭제
- dropna() : 결측치를 가진 행을 모두 삭제
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc.dropna()
doc.head()
특정 컬럼만 결측값 삭제
- subset으로 해당 컬럼을 지정해줌
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc.dropna(subset=['Confirmed'])
doc.head()
결측값 일괄 대체
- fillna(특정값) : 특정값으로 결측치를 대체
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc.fillna(0)
doc.head()
특정 컬럼을 특정 값으로 일괄 변경하기
- 별도 사전 데이터를 생성
- 없는 데이터를 변경할 컬럼명만 키로 만들고
- 변경할 특정 값을 키값으로 넣고,
- fillna() 함수에 적용
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
nan_data = {'Deaths': 0, 'Recovered':0}
doc = doc.fillna(nan_data)
doc.head()
5. 데이터 결합
- groupby() : SQL 구문의 group by 와 동일, 특정 컬럼을 기준으로 그룹
- sum() : 그룹으로 되어 있는 데이터를 합치기
doc = pd.read_csv(PATH + "04-01-2020.csv", encoding='utf-8-sig')
doc.head()
doc = doc.groupby('Country_Region').sum()
doc.head()
- groupby 에 의해서, index가 Country_Region 의 각 국가로 변경됨
doc.columns
doc.index
- index로 검색해서 US 의 합계 검색 가능
doc[doc.index == 'US']
6. 컬럼 타입 변경하기
pandas에서 데이터 타입은 dtype 으로 불리우며, 주요 데이터 타입은 다음과 같음
- object 는 파이썬의 str 또는 혼용 데이터 타입 (문자열)
- int64 는 파이썬의 int (정수)
- float64 는 파이썬의 float (부동소숫점)
- bool 는 파이썬의 bool (True 또는 False 값을 가지는 boolean)
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc[['Country/Region', 'Confirmed']]
doc.info()
astype({컬럼명: 변경할타입}) : 특정 컬럼의 타입을 변경
- 변경할 데이터에 없는 데이터(NaN)이 있을 경우, 에러가 날 수 있음
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc[['Country/Region', 'Confirmed']] # 필요한 컬럼만 선택하기
doc = doc.dropna(subset=['Confirmed']) # 특정 컬럼에 없는 데이터 삭제하기
doc = doc.astype({'Confirmed': 'int64'}) # 특정 컬럼의 데이터 타입 변경하기
doc.info()
doc.head()
7. 데이터프레임 컬럼명 변경하기
- columns 로 컬럼명을 변경할 수 있음
- 컬럼명이 다르면 groupby 불가능
doc = pd.read_csv(PATH + "01-22-2020.csv", encoding='utf-8-sig')
doc = doc[['Country/Region', 'Confirmed']] # 필요한 컬럼만 선택하기
doc.columns
Index(['Country/Region', 'Confirmed'], dtype='object')
doc.columns = ['Country_Region', 'Confirmed']
doc.columns
Index(['Country_Region', 'Confirmed'], dtype='object')
8. 데이터프레임에서 중복 행 확인/제거하기
duplicated() : 중복 행 확인하기
doc = pd.read_csv("COVID-19-master/csse_covid_19_data/UID_ISO_FIPS_LookUp_Table.csv", encoding='utf-8-sig')
doc = doc[['iso2', 'Country_Region']]
doc
doc.duplicated()
doc[doc.duplicated()]
drop_ducplicates() : 중복 행 삭제중복값
- 특정 컬럼을 기준으로 중복 행 제거하기
- subset=특정컬럼
- 중복된 경우, 처음과 마지막 행 중 어느 행을 남길 것인지 결정하기
- 처음: keep='first' (디폴트)
- 처음: keep='last'
doc = doc.drop_duplicates(subset='Country_Region', keep='last')
doc
'빅데이터 분석가 양성과정 > Python' 카테고리의 다른 글
pandas_COVID-19 ( 3 ) (0) | 2024.07.09 |
---|---|
pandas_COVID-19 ( 2 ) (0) | 2024.07.09 |
Pandas (0) | 2024.07.09 |
Matplotlib ( 2 ) (0) | 2024.07.09 |
Matplotlib ( 1 ) (0) | 2024.07.09 |