부트캠프를 시작한 지 벌써 일주일이 지났다. OT부터 ESG데이, 파이썬 기초를 배우고 나서 이제 데이터분석의 첫걸음을 디뎠다. 지금까진 파이썬의 기초를 다지는 시간이었다면 앞으로는 데이터 핸들링부터 머신러닝, 딥러닝까지 배우게 된다. 앞으로의 시간이 유익할 수 있게 노력해야지.
1. 데이터 분석이란?
데이터 분석은 크게 6단계로 나뉜다.
1. 문제 정의 단계는 분석하고자 하는 문제를 명확히 이해하고 정의하는 과정이다. 해결하고자 하는 문제를 구체화하고, 필요한 데이터와 분석 범위를 결정하기도 한다.
2. 데이터 수집 단계는 분석에 필요한 데이터를 모으는 과정이다. 데이터는 다양한 출처에서 수집될 수 있으며, 필요한 데이터를 다양한 형태로 수집하거나, 데이터의 질과 적합성을 평가한다. 데이터를 저장 혹은 관리하는 단계이다.
3. 데이터 전처리 단계는 수집한 데이터를 분석에 적합한 현태로 변환하는 과정이다. 분석의 정확성과 신뢰성을 높이기 위해 필수적으로 거쳐야 하는 단계이며, 데이터의 변환, 정제, 통합 등이 포함된다.
4. 모달링 단계는 전처리된 데이터를 사용하여 분석 모델을 구축하는 과정이다. 이 단계에서는 다양한 분석 기법과 알고리즘을 사용하여 데이터를 학습시킨다. 모델의 종류에는 회귀, 분류, 군집화 등이 있고, 모델을 학습시키는 단계이며, 교차 검증을 통해 모델의 성능을 평가하기도 한다.
5. 평가 단계에서는 구축된 모델의 성능을 다양한 지표를 통해 평가한다. 모델이 문제를 얼마나 잘 해결하는 지를 검증하는 단계이기도 하다.
6. 마지막 도출단계는 분석 결과를 실질적인 비즈니스 문제 해결에 적용하는 과정이다.
앞서 말한 6단계를 통해 Raw데이터에서 우리가 필요한 데이터로 가공한 뒤, AI 모델을 학습시키고, AI모델을 활용하게 된다. 이를 데이터 분석이라고 한다.
2. 데이터 전처리
데이터 전처리는 위에서도 말했던 것처럼 가공되지 않은 raw 데이터를 분석 가능한 형태로 변환하는 것을 의미한다. 데이터 전처리에는 5가지 방법이 있으니 참고하자.
- 클리닝: 데이터에서 오류 혹은 결함을 식별하고 제거하는 과정. 이 단계를 통해 신뢰성과 정확성을 보장
- 통합: 여러 출처에서 수집한 데이터를 하나의 일관된 데이터 세트로 결합하는 과정.
- 변환: 데이터 분석에 적합한 상태로 변환하는 과정. 데이터의 구조나 값을 변경하여 분석의 효율성을 높임.
- 축소: 데이터의 크기를 줄여 분석의 효율을 높이는 과정. 불필요한 데이터를 제거하거나 차원을 축소하여 처리 속도 개선
- 이산화: 연속형 데이터를 이산형 데이터로 변환하는 과정. 데이터 분석이나 모델링 시 특정 값 범위를 카테고리로 나누어 사용하기 위함.
데이터의 전처리 과정에 대해서 살펴보았다. 추상적인 단계에 대한 설명이니 추후 수업시간에 자세히 배우게 되면 그때 다시 설명하는 시간을 갖는 것이 좋겠다.
3. Pandas (기초 문법)
pandas는 파이썬에서 데이터 프레임을 사용하기 위해 사용되는 라이브러리이다. 물론 데이터 프레임만을 위한 것은 아니지만, 보편적으로는 데이터 프레임 형식을 사용하여 데이터를 가공한다. 그렇다면 데이터 프레임이라는 것은 무엇일까?
데이터 프레임은 그림과 같은 표 형식을 가진다. 표 안에 데이터들이 들어가게 되고, 행과 열로 분류할 수 있다. 그림으로 보면 오해하기 쉽지만, column의 증가 방향이 오른쪽 방향, row의 증가 방향이 아랫 방향이다. 그렇다는 이야기는 가로 한 줄이 행이 되고, 세로 한 줄이 열이 된다는 뜻이다. 처음에는 행과 열에 대한 개념이 헷갈리기 때문에 익숙해질 필요가 있다.
다음으로, 우리가 데이터를 받아올 땐 값들만 받아오는 경우는 드물다. 보통은 csv파일로 받아오기 때문에 csv파일을 읽어오는 절차가 필요하다. 문법을 알아보기 전에 csv파일을 사용하는 이유에 대해 알아보자.
먼저, csv파일은 텍스트 기반의 형식이다. 쉼표와 값으로 구분되며, 단순한 구조 덕분에 작성, 편집, 읽기가 편하다는 장점이 있다. 텍스트 기반의 형식이기에 메모장 및 워드패드 등의 텍스트 에디터로 열어도 아무런 문제가 없다. 마지막으로 다른 형식에 비해 저장 공간을 덜 차지하기 때문에 동일 용량 대비 다른 형식에 비해 많은 데이터를 저장할 수 있다.
Pandas에서는 csv파일을 불러올 수 있는 함수를 지원한다. 또한 csv파일을 불러와서 데이터 프레임으로 가공을 해준다. 문법을 살펴보자
import pandas as pd
df_example = pd.read_csv("데이터 파일(csv) 경로", 매개 변수)
read_csv는 pandas 라이브러리에 속한 함수 중 하나로, csv파일을 데이터 프레임으로 변환해주지만 만약 csv 파일에 한글이 포함되어 있다면 인코딩 방식을 바꿔주어야 한다. 예제에 있는 매개 변수 위치에 encoding='CP949'를 추가해 주면 한글을 사용할 수 있다. 인코딩 방식을 지정해 주는 매개 변수 외에 많은 매개 변수가 있기 때문에 read_csv 함수를 사용할 땐 pandas 공식 문서를 찾아보고 사용하는 것이 좋을 것 같다. csv 파일을 읽어왔으니 제대로 불러왔는지 확인하기 위해 몇 가지 방법을 사용해 보자.
df_example.shape # 데이터 프레임의 크기를 튜플로 출력
df_example.dtypes # 데이터 프레임 속 데이터의 타입을 확인
df_example.head(n) # 데이터 프레임의 첫 번째 행부터 n 번째 행까지의 값을 출력
df_example.tail(n) # 데이터 프레임의 n 번째 행부터 마지막 행까지의 값을 출력
df_example.index # 데이터 프레임의 인덱스 범위를 range 형식으로 출력
df_example.columns # 데이터 프레임의 column 목록을 출력
위와 같이 데이터 프레임의 크기, 인덱스, 칼럼 등을 확인할 수 있는 다양한 방법이 제공된다. csv파일을 불러오는 함수가 있다면 물론 엑셀 파일을 불러오는 함수도 존재한다.
import pandas as pd
sheet = pd.read_excel('데이터 파일(excel) 경로', 매개 변수)
엑셀 파일은 csv파일과는 달리 한 파일 안에 1개 이상의 시트로 구성되어 있다. 그렇기 때문에 원하는 시트의 값을 불러오기 위해 sheet_name이란 매개 변수를 통해 시트 값을 지정해 주는 것이 중요하다. sheet_name의 기본 값은 0으로, 첫 번째 시트를 기본적으로 불러오게 된다.
4. Pandas (심화)
4-1. 데이터 프레임의 통합
지금까지 pandas의 기초적인 문법을 알아봤다면, 지금부터는 기초 문법에서 한 단계 올라간 조금은 심화된 내용을 알아보자. 데이터 전처리 방법 중 통합 단계가 있었다. 여러 데이터들을 불러와서 한 개의 데이터 프레임으로 가공하는 방법을 알아보자.
import pandas as pd
df_df1 = pd.read_csv('./data1.csv')
df_df2 = pd.read_csv('./data2.csv')
df_total_df = pd.concat([df_df1, df_df2])
pandas에서 지원해 주는 통합 함수는 2가지가 있다. 그중 첫 번째로 concat은 2개 이상의 데이터 프레임을 통합하는 예제다. 2차원인 데이터 프레임은 통합하는 방법도 2가지다. 기준이 되는 데이터 프레임의 하단에 추가할 것인지, 우측에 추가할 것인지 매개 변수를 통해 지정해주어야 한다. 하단에 추가하고 싶으면 행결합, 우측에 추가하고 싶으면 열결합을 이용해야 한다.
axis 매개 변수를 통해 행 결합을 할 것인지, 열 결합을 할 것인지 정할 수 있다. 이렇게 결합한 데이터프레임의 인덱스는 결합 이전의 인덱스를 따르기 때문에 실제 데이터 프레임의 크기보다 인덱스의 값이 낮게 나올 수 있다. 그렇기 때문에 우린 인덱스를 재정렬해주어야 한다. 이때 사용하는 메서드를 살펴보자
데이터프레임.reset_index()
reset_index메서드를 사용해서 데이터 프레임 크기에 맞춘 인덱스를 제공한다. 하지만 인덱스의 재정렬과 같이 데이터 프레임을 변경하는 행동은 민감하기 때문에 새로운 변수에 초기화된 인덱스의 데이터프레임을 할당하는 방법이 제일 안전하다. 하지만, reset_index 메서드의 inplace, drop 매개 변수를 통해 기존에 저장되어 있던 변수를 수정하는 방법도 있다. inplace, drop 매개변수의 초기 값은 False지만, True로 바꿈으로써 동일한 변수에 변경된 데이터프레임을 저장할 수 있게 하고, 기존의 인덱스를 무시하게 된다.
데이터 프레임 결합의 2가지 방법 중 첫 번째 방법을 살펴보았다. 다음은 두 번째 방법을 살펴보자.
import pandas as pd
df_df1 = pd.read_csv("./data1.csv")
df_df2 = pd.read_csv("./data2.csv")
merged_dataframe = pd.merge(df_df1, df_df2, 매개변수)
바로 merge함수를 사용하는 방법이다. concat함수와 달리 조금 더 정교한 결합을 할 수 있게 해 준다. 매개 변수에는 보통 on과 how가 들어가게 된다. on 매개 변수에는 칼럼 이름이 들어간다. 해당 열을 기준으로 병합한다. 이때 중요한 점은 병합하고자 하는 두 데이터 프레임에 동일한 열이 존재해야 병합할 수 있다. on 매개 변수로 기준을 설정해 주었으니 병합의 유형을 지정해야 한다. 기본 값은 'inner'이며, inner 이외에 'outer', 'left', 'right'가 존재한다.
- inner: 공통된 키만 병합
- outer: 모든 키를 병합하고 일치하지 않는 키는 NaN 값으로 채움
- left: 첫 번째 데이터 프레임의 모든 키를 포함
- right: 두 번째 데이터프레임의 모든 키를 포함
지금까지 두 가지 방법의 데이터프레임 결합 방법을 살펴보았다. concat은 행과 열을 기준으로 결합하고, merge는 기준점을 정한 뒤 결합하는 방식을 가진다.
4-2. 데이터 프레임의 값 선택
우리는 지금까지 문자열, 리스트, 튜플 등에서 인덱싱하는 방법을 배웠다. 이와 같은 개념은 데이터 프레임에도 동일하게 적용된다. 데이터 프레임 또한 순서를 갖고 있기 때문에 인덱싱과 슬라이싱하는 방법이 있다. 두 가지 방법에 대해 살펴보자.
데이터프레임명[칼럼명][인덱스명]
전형적인 앞서 배웠던 슬라이싱 방법이다. 데이터 프레임은 2차원이기 때문에 행과 열을 지정할 수 있다. 만약 대괄호가 한 개만 있다면 인덱스를 슬라이싱, 인덱싱하는 방법임을 알아두어야 한다.
대괄호를 이용한 슬라이싱, 인덱싱보다 많이 사용하는 방법은 바로 loc, iloc메서드를 사용하는 방법이다. 예제를 함께 보자.
import pandas as pd
df_data = pd.read_csv('경로', encoding = 'CP949')
df_data.loc[인덱스 이름의 범위, 레이블 이름의 범위]
df_data.iloc[인덱스 위치의 범위, 레이블 위치의 범위]
loc과 iloc의 차이는 다음과 같다. loc은 인덱스, 레이블의 이름으로 범위를 지정하지만, iloc은 인덱스, 레이블의 위치로 따지기 때문에 정수로 인덱싱, 슬라이싱 한다.
실습 예제로 살펴보면 loc과 iloc을 이해하기 쉬울 것이다. loc에서는 실제 인덱스 이름과 레이블의 이름을 이용하여 슬라이싱을 하지만, iloc에서는 정수 형식의 위치 값으로 슬라이싱을 진행하는 것을 확인할 수 있다.
드디어 데이터분석의 첫 걸음을 내디뎠다.
쉽게 따라가지 못하는 학우들도 있지만, 난 지금까지 해온 것들이 있기 때문에 아직까진 따라갈 만 했다.
같은 조원들을 챙기면서 더 많은 내용들을 배우고 싶다.
'ABC부트캠프 데이터 탐험가 과정' 카테고리의 다른 글
[9일차] ABC 부트캠프 파이썬을 이용한 데이터 처리 심화 (0) | 2024.07.16 |
---|---|
[8일차] ABC 부트캠프 Pandas를 이용한 데이터 분석 1 (2) | 2024.07.15 |
[6일차] ABC 부트캠프 파이썬 표준 라이브러리, 객체 지향, 파일 경로 (0) | 2024.07.11 |
[5일차] ABC 부트캠프 파이썬 기초지식 3 (1) | 2024.07.10 |
[4일차] ABC 부트캠프 파이썬 기초지식 2 (0) | 2024.07.09 |