제가 듣고 있는 강의에서 프로젝트를 하나 시작했습니다.
프로젝트 내용은 Jupyter Notebook을 이용해 '서울시 5대 범죄 현황.xlsx'을 활용해 데이터 시각화까지 하는 것입니다.
오늘은 '서울시 5대 범죄 현황.xlsx'을 Jupyter Notebook에서 사용하는 것을 배웠습니다.
import numpy as np
import pandas as pd
import seaborn as sns
위의 함수는 python의 3대장 라이브러리입니다.
Library | 설명 |
numpy | 행렬 연산, 수치 계산 |
pandas | 정형 데이터 핸들링 |
seaborn | 정형 데이터 시각화 |
matplotlib |
정형 데이터 시각화를 위해서는 matplotlib을 사용하는데, seaborn이라는 함수가 더 그래프가 이쁘고, 코드가 쉽습니다.
하지만 seaborn은 matplotlib의 자식이라 matplotlib의 코드들로 이루어져 있습니다.
pandas에 대한 추가적인 설명을 하겠습니다. 우선 정형 데이터란, 숫자로 표현이 가능한 모든 데이터를 의미합니다.
이 정형 데이터가 만약 [1, 2, 3, 4, 5], [a, b, c, d, e] 1차원 배열로 되어 있다고 생각을 해봅시다.
df = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
df
그러면 1차원 배열이였던 것이 2차원 DataFrame으로 바뀌게 됩니다.
즉, pandas는 서로 다른 type의 데이터를 공통된 type으로 변환시켜주는 함수라고 생각하면 됩니다.
df = pd.read_excel('animals.xlsx')
df
여기서도 excel 파일을 읽고 불러준다는 뜻입니다.
Jupyter Notebook과 같은 파일에 엑셀 파일이 있으므로 바로 읽을 수 있습니다.
하지만, 엑셀 파일을 읽어들이는데 한글 파일이 깨지면 다음과 같이 인코딩 값을 지정해주면 됩니다.
with open('animals.xlsx', mode="r", encoding="utf-8") as file:
df = pd.read_excel(file)
추가적으로, 보통 엑셀 파일은 인코딩 값을 지정하지 않지만, csv 파일은 인코딩 값을 지정해줘야 합니다.
df = pd.read_csv('~~~~.csv', encoding='utf-8')
df
이제 df DataFrame을 살펴 보도록 합시다.
name 열 앞의 0~100 까지 숫자가 있는 열을 index 열이라고 부르는데, 이 열이 매우 중요합니다.
df.set_index('name')
이 코드를 작성해주면 index 열이 name 열로 바뀌게 됩니다.
* 참고 사항 *
DataFrame을 불러 들이고, 살펴볼때 필수적으로 거쳐가는 함수입니다.
함수 명 | 설명 |
df.head(3) | 내가 원하는 행의 갯수를 위에서 부터 보여줍니다. >> 위의 데이터 보고 싶을 때 |
df.tail(3) | 내가 원하는 행의 갯수를 아랫쪽에서 부터 보여줍니다. >> 아래 데이터 보고 싶을 때 |
df.describe() | DataFrame의 요약된 정보를 표현해줍니다. ex) 기술 통계량 (평균, 표준편차, 중위값, 최빈값 등등) |
df.info() | DataFrame의 정보를 표시 |
이때, 아마도 가장 많이 사용하는 함수는 describe 함수입니다. 중위값, 표준편차값, 최솟값, 최댓값 등등을 표현해주는 함수입니다.
마찬가지로 info 함수도 Data Type을 살펴보거나, DataFrame 중 비어있는 곳이 있는지 알아볼때 사용합니다.
각 열의 이름 | 설명 |
column | DataFrame 각각의 열의 이름 |
NoN-Null Count | 결측치를 표현 |
지금은 결측치가 없지만, DataFrame에 결측치가 없는 경우는 없다. 그래서 결측치를 채우는 방법을 알아야 한다.
결측치를 채우는 가장 단순한 방법은 랜덤하게 값을 넣는 것이다. 하지만 이러면 오류가 많이 발생한다.
* 결측치 채우는 방법 *
ex) 보험 가입 고객 데이터 중 나이 열에 일부 데이터가 빠져있는 경우
이름 | 성별 | 나이 | 보험 가입 년도 | 보험 금액 |
홍길동 | 남 | 23 | 2023 | 134,341 |
영희 | 여 | 2022 | 123,324 | |
철수 | 남 | 22 | 2021 | 123,134 |
1. 주변 행의 값으로 채워 넣기.
홍길동의 나이와 철수의 나이를 평균 내서 영희의 나이로 넣는 방법이다. 하지만 이것은 영희와 상관 없는 방법이다.
하지만 나이가 아니라 온도의 변화처럼 시간에 따라 변하는 데이터라면 유용할 수 있는 방법이다.
2. 열의 대푯값을 계산해서 채워 넣기.
df.describe()를 사용해 평균, 중위값, 최빈값을 선택해서 넣는 방법이다.
평균값은 나이열의 평균값, 중윗값은 나이열 중에 중간값이지만 전체 데이터가 짝수라면 (1, 2, 3, 4) 2와 3의 평균값인 2.5가 들어간다.
최빈값은 나이열의 전체 데이터 중에 가장 많이 나타나는 값이다.
3. 전체 행을 그룹으로 묶고 그룹 내 해당 열의 값을 예측해서 채워 넣기.
같은 성별을 그룹으로 묶은 다음 평균 나이를 계산해서 넣는 방법
4. 나머지 열들로 머신러닝 예측모델을 만든 뒤, 해당 열의 값을 예측해서 채워넣기
결측치가 있는 열을 제외한 모든 열을 사용해서 예측 모델을 만든다.
하지만 결측치가 된 열이 별로 중요하지 않은 열이라면 과감하게 삭제하는 것도 방법이다.
'Jupyter NoteBook' 카테고리의 다른 글
03. Jupyter Notebook DataFrame 기초 (0) | 2023.06.29 |
---|---|
01. Jupyter Notebook 단축키 (0) | 2023.06.27 |