반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


혹시 'Garbage in, garbage out'라는 말을 들어보셨나요?  

 

직역하면 쓰레기가 들어가면 쓰레기가 나온다라는 말로, 아무리 좋은 컴퓨터와 알고리즘이라도 잘못된 입력값이 들어가면 잘못된 출력값이 나온다는 말입니다.

 

제가 예전에 데이터 분석 프로세스를 요리하는 과정에 비유했었는데요.

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

 

데이터 수집 과정을 요리 재료를 준비하는 과정이라면, 잘못된 데이터란 상한 음식에 비유할 수 있겠죠.

 

상한 재료로 요리한 음식을 먹은 손님은 아마 다시는 식당을 찾아 오지 않을 것이기 때문에 요리사는 재료를 준비하는데에 가장 많은 신경을 써야할 것입니다. 요리사가 직접 재료를 준비하지 않고 다른 사람에게 일을 맡기더라도 재료의 상태를 체크할 수도 있어야겠죠?

 

마찬가지로 데이터 분석가는 데이터를 준비하는데에 가장 많은 신경을 써야합니다. 앞서 말씀드렸듯이 가장 근본이 되는 데이터가 신뢰를 잃으면 그 데이터 분석 결과는 아무도 믿을 수가 없기 때문입니다.

 

그래서 오늘은 일반적인 데이터 준비 과정에 대해서 알아보려 합니다.

 

1. 데이터 수집

 

가장 첫 단계는 분석에 사용할 데이터를 분석 DB(데이터 베이스)로 가져 오는 것입니다.

 

회사 내부의 DB에 프로젝트에 사용할 데이터가 있다면 그곳에서 가져오고, 없다면 외부에서 데이터를 사거나 크롤링을 통해서 수집해야합니다.

 

이때 주의할 점은 메타 데이터를 함께 수집해야한다는 것입니다. 메타 데이터는 데이터에 대한 정보로, 데이터의 정의, 기본키(Primary Key), 생성 기준, 생성 시점, 연관된 데이터 정보 등이 있습니다. 이러한 메타 데이터는 추후 단계들에서 데이터를 다룰 때에 중요한 참고 자료가 됩니다.

 

2. 데이터 품질 확인

 

두번째 단계는 수집한 데이터를 얼마나 믿을 수 있는지 확인하는 단계입니다.

 

데이터의 품질은 크게 7가지 지표로 평가합니다.

 

 

3. 데이터 정제

 

세번째 단계는 위의 단계에서 확인된 부족한 데이터 품질을 향상시키기 위해 데이터를 정제하는 단계입니다. 

 

1단계에서 언급했던 메타 데이터를 참고해서 누락된 값(결측치)과 오류 값을 적절히 전처리 해줍니다.

 

만약 메타 데이터가 부족하여 전처리할 근거가 부족할 때엔, 해당 변수의 평균값이나 최빈값으로 대체하기도 하며, 해당 변수에 집중적으로 오류값이나 결측치가 발생할 때엔 해당 변수를 통째로 제거해주기도 합니다.

 

4. 데이터 변환

 

네번째 단계는 수집한 데이터의 형태나 스케일 등을 변환 처리하는 단계입니다.

 

데이터 변환을 해주는 이유는 더 나은 데이터 분석 결과를 얻기 위해서입니다.

 

데이터 변환 방법에는 여러가지가 있지만, 가장 널리 사용하는 방법은 정규화(Normalization), 범주화(Categorisation)가 있습니다.

 

정규화는 예를 들어 신장과 몸무게의 스케일이 달라서 어느 한가지 변수가 해석 결과에 크게 영향을 끼치는 것을 방지하기 위해서 0~1 사이의 값으로 변환시키는 것을 말합니다.

 

범주화는 연속되는 값을 어느 구간으로 나누어서 분류하고 싶을 때 사용합니다. 예를 들어 평균 60점 이상은 1, 미만은 0으로 변환하는 것이죠.

 

5. 데이터 특성 추출

 

다섯번째 단계는 '피처 엔지니어링'이라고도 불리는 단계로, 분석을 위하여 변수(혹은 피처)를 새로 만드는 것을 말합니다.

 

이 과정에서는 해당 분야에 대한 전문적 지식과 분석 경험이 필요합니다. 데이터 분석 대회 플랫폼으로 유명한 Kaggle의 순위를 가르는 요인 중에 '피처 엔지니어링'이 중요한 역할을 한다고 합니다.

 

마치 원석을 가공해서 보석을 만들어 내는 것과 비슷한 과정이라고 이해하시면 좋을 것 같습니다.

 

 

6. 데이터 준비  과정 기록

 

마지막 단계는 1~5단계에서 수행한 작업을 문서화 하는 단계입니다. 데이터 준비에 사용한 코드와 각각의 과정을 설명하고 기록하는 것입니다.

 

데이터 분석이 한 번에 끝난다면 이 과정이 필요 없겠지만, 대부분의 데이터 분석은 일정한 주기로 새롭게 생성되는 데이터를 다시 분석하고 결과를 점검합니다.

 

그렇기 때문에 반복되는 데이터 분석 작업을 효율적으로 수행하고, 이전의 데이터 분석과 동일한 관점을 유지하기 위해서는 데이터 준비에 사용한 코드와 각 단계에서 수행한 작업에 대한 설명을 잘 정리해야합니다.

 

 


<참고 자료>

 

1. 빅데이터 커리어 가이드북 (도서)

 

2. 데이터 품질 지표

https://charstring.tistory.com/144

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 pandas를 공부하다가 새롭게 알게된 내용을 간단히 정리하고 공유하려고 합니다.

 

바로 엑셀 파일(.xlsx)을 판다스의 Data frame으로 불러올 때, 시트를 선택해서 불러오는 방법인데요.

 

지금까지 sheet_name을 별도로 설정 안 해줘도 잘 동작했던 이유는 sheet_name 파라미터의 기본값이 가장 첫 시트였기 때문이었습니다.

 

만약 한 엑셀 파일에 여러 시트가 있고, 각각의 시트를 차례대로 참조해야할 때는 오늘 내용이 도움이 될 것 같습니다.

 


시작하기에 앞서 테스트를 위해, 아래와 같이 시트가 2개인 엑셀 문서를 만들어 보았습니다. 

실습에 사용 할 엑셀

1. 시트 이름으로 불러오기

 

먼저 시트 이름으로 "2반" 시트의 데이터를 불러와 보겠습니다. 

 

import pandas as pd

# df = pd.read_excel("엑셀 파일 경로", sheet_name = "불러올 시트 이름")
df = pd.read_excel("Test.xlsx", sheet_name="2반")
df

 

<실행 결과>

 

아주 잘 불러와 졌네요!

 

 

2. 시트 인덱스로 불러오기

 

다음으로는 시트의 인덱스를 이용해서 "2반" 시트의 데이터를 불러와 보겠습니다. 인덱스는 0부터 시작하므로 첫번째 시트가 0, 두번째 시트가 1입니다.

 

import pandas as pd

# df = pd.read_excel("엑셀 파일 경로", sheet_name = 불러올 시트의 인덱스)
df = pd.read_excel("Test.xlsx", sheet_name=1)
df

 

<실행 결과>


<참고 자료>

 

엑셀과 비교하며 배우는 파이썬 데이터 분석_장쥔홍 지음

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 데이터 분석을 왜 하는지와 산업별로 데이터 분석이 어떻게 활용되는지에 대해서 알아보고 정리해보았습니다.

 

무엇을 공부할 때 지금 공부하는 것을 어디에 가치있게 사용할 수 있는지를 파악하는 것은 매우 중요하다고 생각하니까요.


1. 데이터 분석은 왜 하는가

 

1) Summary

- 데이터를 인식가능한 수준으로 요약 (시각화 포함)

 

2) Insight

- 방대한 데이터 속에서 인사이트 도출

- 데이터간의 유의미한 차이나 관계를 확인

 

3) Decision

- 요약된 정보와 인사이트를 토대로 효과적인 의사결정

 

2. 데이터 분석은 산업별로 어떻게 활용되는가

 

1) 제조

- 실시간으로 생산실적 시각화 및 모니터링

- 각종 센서들과 사물인터넷 기술을 활용하여 설비의 운전상황을 파악하고 고장을 예측하여 미리 수리

- 공정별 제품의 상태를 측정/기록하여, 불량이 발생한 원인을 찾고 개선

 

2) 금융

- 기존 고객의 신상, 신용, 서비스 이용 패턴을 기반으로 채무불이행 리스크 예측

- 지점별 매출, 고객 정보, 위치 등의 데이터를 분석하여 신규 지점 위치 선정

 

3) 유통업/e-커머스

- 상품 판매 테이터를 활용하여 소비자가 선호하는 상품을 선택

- 상품별 우선순위에 따른 재고 관리를 통하여 재고 비용 감소

- 연관 상품 추천 서비스를 통핸 매출증대

 

4) 컨텐츠

- 컨텐츠별 조회수, 체류 시간, 평점 등을 활용하여 시청자가 원하는 트랜트를 분석

- 댓글 내용을 분석하여 고객이 원하는 부분을 세부 키워드로 추출

 

5) 통신

- 고객 유치와 이탈 방지를 위한 마케팅 전략 수립

- 기지국 기반 위치 정보를 활용한 유동인구 분석

 

6) 교통

- 시간대별/정차역별 지하철 및 버스 이용객수 분석

 

7) 농업

- 날씨, 토양환경, 작물 이미지 등의 데이터를 분석해 수확량 증가와 품질 향상

- 분석을 통해 최적의 파종, 농약 살포, 수확 시점을 도출

 

3. 어떤 데이터를 분석에 활용하는가

 

1) 내부 데이터

- 사내 데이터베이스

- 기존 엑셀 데이터 등

 

2) 직접 수집한 데이터

- 설문/리서치 결과

- 센서를 통한 수집

 

3) 외부 데이터

- 정부 기관에서 제공하는 공공데이터

- 일부 업체가 공개한 민간 데이터

- 협의나 구매를 통해 얻은 타사 데이터

 


<참고 자료>

 

1. 한번에 끝내는 데이터 분석 툴 초격차 패키지 Online_패스트 캠퍼스 유료 강의

 

2. 빅데이터 활용 사례

https://www.finereport.com/kr/빅데이터-활용-사례/

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.24 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

 


 

이번 시간에는 처음 데이터 셋을 접했을 때, 각 열(Column)들의 데이터 분포를 한 눈에 파악할 수 있는 방법에 대해 공부해보겠습니다.

 

공공데이터 포털에서 제공되는 실제 데이터 셋을 예제로 이용해서 알아보겠습니다.

 

데이터 다운받기

 

오늘 사용할 데이터 셋은 국민건강보험공단_건강검진정보입니다.

먼저 아래의 링크로 접속하셔서 데이터 셋(csv 파일)을다운로드 해주세요.

 

https://www.data.go.kr/data/15007122/fileData.do#/layer_data_infomation

 

 

참고로 100만명에 대한 정보가 있으므로, 데이터 셋 용량이 117.6MB로 많이 큰 편입니다.

 

혹시 실수로 파일을 여시면 Excel로 열리게 되어, 100만년 뒤에 열리게 되는 것을 경험 하실 수 있으니 주의해주세요!

 

 

데이터 불러오기

 

데이터가 다운로드 완료되면, Jupyter Notebook 혹은 VScode에서 ipynb 파일을 하나 생성하시고 같은 폴더에 데이터를 이동시켜주세요.

 

혹시 VScode에서 Jupyter Notebook 사용하는 법을 모르신다면 아래의 글을 참고해주세요.

 

2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

 

그 다음으로 할 일은 관련 패키지를 import 해주는 것입니다.

 

import pandas as pd
import numpy as numpy
import matplotlib.pyplot as plt

 

다음은 pandas의 read_csv( ) 함수를 이용해서 데이터 셋(국민건강보험공단_건강검진정보_20191231.csv)를 불러와줍니다.

 

이 때 주의하실 점은 그냥 불러오시면 UTF-8로 인코딩하므로, 한글을 인식하지 못해서 깨진다는 것입니다.

 

인코딩 미설정으로 한글 깨짐

 

이러한 현상을 방지하기 위해서, encoding="cp949"를 꼭 넣어주세요.

 

# euc-kr: 한글 2350자 표현 / cp949: 11172자 표현

df = pd.read_csv("./국민건강보험공단_건강검진정보_20191231.csv", encoding="cp949")

 

 

데이터 파악하기

 

데이터 생김새 파악

데이터가 불러와졌으면 바로 df.head( )로 대략적인 데이터 생김새를 확인해봅시다.

 

34개의 열들(columns)이 있다고 하는데 너무 길어서 중간에 ...으로 생략되어 있어서 아직은 데이터 셋이 어떤 아이인지 잘 모르겠네요.

 

 

데이터 정보 파악

어떤 열이 있는지, Null값은 없는지, 데이터 타입은 무엇인지를 df.info( )로 확인해보겠습니다.

 

Null 값 분포 시각화

우선 Null 값을 조금 파악해보겠습니다. Null이란 값이 없음을 의미하는데 이는 데이터 분석 결과에 왜곡을 줄 수 있기에 적절한 처리가 필요합니다.

 

일단 이번 시간에는 처리에 대한 방법은 다루지 않고 Null 값 분포를 한눈에 파악하는 방법만 간단히 소개하고 넘어가도록 하겠습니다.

 

# 각 열마다 Null의 갯수를 모두 합쳐서 그래프를 그려줌

df.isnull().sum().plot.barh(figsize=(10,9))

 

<여기서 잠깐>

 

그래프에 출력되는 한글 폰트가 깨짐을 방지하기 위해서 아래의 코드를 추가해줍니다.

 

import os

# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정

if os.name == 'posix':
    plt.rc("font", family="AppleGothic")

else:
    plt.rc("font", family="Malgun Gothic")

 

 

다시 본론으로 돌아와서, 출력된 그래프를 살펴보겠습니다.

 

이렇게 그래프로 보니깐 위에서 non-null로 표시될 때보다 어떤 데이터가 Null 값을 많이 갖고 있는지 한 눈에 파악이 가능하지 않나요?

 

 

Hist 함수로 각 컬럼의 데이터 분포 파악

 

오늘의 핵심 주제인 hist( ) 함수를 이용해서 각 열의 데이터들의 분포를 살펴보겠습니다.

 

참고로 h라는 변수에 df.hist( )를 담아주는 이유는 이렇게 해주지 않으면 쓸 데 없는 글자들이 그래프 위에 출력되는 것을 방지해주기 위함입니다. 궁금하신분은 df.hist( )만 입력해서 어떻게 출력되는지 비교해보셔도 좋을 것 같습니다.

h = df.hist(figsize=(30,20))

 

이렇게 모든 히스토그램(histogram) 그래프를 출력하니 너무 빽빽하고 작아서 보실 때에 불편할 수가 있습니다.

 

그럴 땐 나누어서 출력이 가능합니다. 총 31개의 히스토 그램이니깐 16개, 15개로 나누어서 출력해보겠습니다.

 

# iloc[ ] 함수를 이용하여 0이상 16번째 미만의 열의 데이터만 hist( )로 출력

h = df.iloc[:,:16].hist(figsize=(20,12))

 

 

만약 데이터 분포를 더욱 작게 나누어서 보고싶으시면 bins라는 파라미터를 설정해주시면 되니깐 참고하세요.

# iloc[ ] 함수를 이용하여 16번째 열 이상의 데이터만 hist( )로 출력

h = df.iloc[:,:16].hist(figsize=(20,12), bins=100)

 

데이터는 용량을 줄이기 위해서 코드화 하여 데이터 셋을 만들었다고 합니다. 예를 들어 성별을 남/여가 아닌 1/2로 한 것 처럼 말이죠.

 

데이터 코드에 대한 설명은 아까 데이터를 받은 링크의 하단에 주기성 과거 데이터의 '국민건강정보데이터 건강검진정보 사용자 메뉴얼_20171027'을 다운로드 받으시면 확인 하실 수 있습니다. (hwp 파일이므로 뷰어가 필요한 점 유의해 주세요)

 

 

 

글이 너무 길어질 듯하여 데이터 해석까지는 다루지 않았지만 여러분 스스로 히스토그램과 코드 정보들을 보면서 데이터를 파악해보시는 연습을 해보시면 좋을 것 같아요!

 

오늘도 공부하시느라 고생 많으셨습니다~


 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.24 - [분류 전체보기] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)

 

 

 

이번시간에는 데이터 분석할 때 데이터 프레임을 다양한 형태로 변형시켜서 볼 수 있는 함수인 pivot-table과 groupby에 대해서 배워보겠습니다.

 


 

피벗 테이블 (pivot-table)

 

먼저 피벗 테이블에 대해서 알아보겠습니다.

 

엑셀을 좀 아시는 분이라면 한 번쯤 들어보셨을 피벗 테이블과 같은 개념입니다. 피벗 테이블을 사용하면 데이터 프레임을 재구성해서 다른 인사이트를 얻을 수 있습니다.

 

글로 설명하기가 쉽지 않아서 바로 실제 예제로 설명드릴게요! 예제는 지난 시간에 전처리했던 데이터를 사용하겠습니다.

 

15~20년 전국 민간아파트 평당 분양가격.csv
0.27MB

 

오늘도 역시 가장 먼저 할 일은 사용할 패키지들을 불러오는 것이겠죠?

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

데이터 불러오기

 

csv 파일을 받으셨다면 판다스로 csv 파일을 불러와주세요.

 

해당 코드는 csv 파일과 ipynb 파일이 동일한 폴더에 위치하여야 정상 작동합니다.

 

df = pd.read_csv("15~20년 전국 민간아파트 평당 분양가격.csv")

 

 

데이더가 어떻게 생겼는지 살펴보겠습니다.

 

 

음 예전에 전처리를 하다가 저도 모르는 사이에 Unnamed: 0이라는 열이 생겼네요. 필요없는 열이라서 살포시 지워주고 넘어가겠습니다.

 

# 열 제거 시엔 '열이름'과 axis=1 / 행 제거 시엔 인덱스 번호와 axis=0

df = df.drop(['Unnamed: 0'], axis=1)

 

결과 확인 없이 바로 피벗 테이블 함수를 적용해보겠습니다.

 

# 기본적으로 평균값 출력

pd.pivot_table(df, index='지역명', columns='연도', values='평당 분양가격')

 

결과를 보시면 index에 입력한 '지역명'이 행을 이루고, columns에 입력한 '연도'가 열을 이루고 있습니다.

그리고 표를 채우고 있는 데이터들은 values에 입력한 '평당 분양가격'으로 이루어져 있습니다.

 

 

여기서 알아두면 좋은 것은 데이터 프레임을 채우고 있는 데이터들이 평균값이라는 것입니다.

 

만약 aggfunc 파라미터에 아래와 같은 값들을 넣어주면 다양한 결과를 얻을 수 있습니다. 참고로 np는 numpy의 약자입니다.

 

1) np.sum - 합계

2) np.mean - 평균

3) np.median - 중위값

4) np.var - 분산

5) np.std - 표준편차

6) np.min - 최소값

7) np.max - 최대값

 

#aggfunc 옵션에 np.max를 입력하여 최대값 데이터를 출력

pd.pivot_table(df, index='지역명', columns='연도', values='평당 분양가격', aggfunc=np.max)

 

와.. 2020년에 서울에서 가장 비싼 분양가는 평당 약 4190만원이네요..!

 

 

groupby

 

groupby( ) 함수는 괄호( )안에 입력한 '컬럼명'의 데이터들을 같은 것 끼리 묶어주는 역할을 합니다.

 

가장 기본적인 groupby 함수 사용법은 다음과 같습니다.

 

df.groupby('지역명').count()

 

데이터들을 '지역명'끼리 묶어서 행을 구성하고 count( ) 함수로 데이터 갯수들을 출력했습니다.

 

pivot-table과 비슷하게 아래와 같은 함수들을 사용해서 다양한 통계값들을 얻을 수 있습니다.

 

1) count() - 갯수

2) sum() - 합계

3) median() - 중위값

4) mean() - 평균

5) var() - 분산

6) std() - 표준편차

7) min() - 최소값

8) max() - 최대값

 

 

아래와 같이 원하는 열의 데이터만 출력해줄 수도 있습니다.

 

df.groupby('지역명')['평당 분양가격'].median()

 

Multi-index

 

마지막으로 알려드릴 내용은 multi-index에 대한 내용입니다. 새로운 함수를 사용하는 것은 아니고, groupby를 사용합니다.

 

말로는 설명하기가 어려워 예제를 보면서 설명드리겠습니다.

 

df.groupby(['지역명','연도'])[['평당 분양가격']].mean()

 

아까 배웠던 groupby( ) 함수에는 '컬럼명'을 하나만 넣어줬다면 이번에는 ['컬러명1', '컬럼명2'] 처럼 대괄호 안에 두 가지 컬럼명을 넣어주었습니다. 참고로 순서도 중요합니다.

 

 

참고로 [['평당 분양가격']]과 같이 대괄호를 두 번 사용해준 이유는 결과를 시리즈가 아닌 데이터 프레임 형태로 보기 위함입니다. 대괄호를 하나만 써서 시리즈 형태로 출력하면 결과가 좀 덜 예쁘다랄까요?

 

이번 시간에 알려드릴 내용은 여기까지입니다.

 

열이름(컬럼명)을 바꿔가시면서 연습해보시면 확실히 pivot-table과 groupby를 마스터 하실 수 있을거예요.

 

오늘도 코딩유치원을 찾아주신 여러분들께 감사드립니다.

 


 

<참고 자료>

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.22 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 8편. 전처리 지옥 맛보기 (ft. loc[ ] 제대로 이해하기)

 

 

오늘도 데이터 분석은 VScode에서 Jupyter Notebook을 실행하여 진행하였습니다. 혹시 VScode와 주피터 노트북이 깔려있지 않으신분들은 '개발환경 구축' 목록을 클릭하셔서 관련 글들을 읽으시는 것을 추천드립니다.

 


 

이번 시간에는 지난 시간에 전처리 해보았던 '2015~2020년 전국 민간아파트 분양가' 데이터를 이용해서 데이터 시각화를 해보겠습니다.

 

지난 글(파이썬 데이터 분석 8편)을 모두 따라하신 후, 이번 글을 따라하셔도 되고, 아래의 데이터를 받아서 바로 따라 하셔도 됩니다.

 

house_price_preprocessing.csv
0.22MB

 

이번 글만 보시는 분들을 위해서 아래의 데이터를 가지고 Pandas로 DataFrame을 불러오는 것부터 시작해 보겠습니다.

 

아 그전에 오늘 사용할 패키지들을 불러와주겠습니다.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

데이터 불러오기

 

csv 파일을 받으셨다면 판다스로 csv 파일을 불러와주세요.

 

해당 코드는 csv 파일과 ipynb 파일이 동일한 폴더에 위치하여야 정상 작동합니다.

 

df = pd.read_csv("house_price_preprocessing.csv")

 

잘 불러와졌는지 확인해봅시다.

 

 

4505개의 행과 6개의 열이 모두 잘 불러와졌네요.

 

쓰레기 데이터 제거 (drop)

 

지난 시간에 전처리 했던 것을 생각해보면 값이 미입력 되거나 이상하게 표기된 것들을 모두 0으로 처리했었습니다.

 

# '분양가격' 열에서 값이 0인 것들을 모두 출력
df.loc[ df['분양가격'] == 0]

 

이런 데이터는 전체 결과에 왜곡된 결과를 가져오므로 제거해 주어야 합니다.

 

데이터 프레임에서 어떤 값이 포함된 행을 제거해줄 때는 drop( ) 함수를 사용합니다.

 

drop( )

 

drop( ) 함수를 이용해서 행을 제거해줄 떄는 2가지 인자를 입력해줍니다.

첫번째 인자는 index, 두번째 인자는 axis입니다.

 

먼저 제거해 줄 행들의 index는 아래와 같이 받을 수 있습니다.

 

# 분양가격이 0인 행의 index 모두 가져오기
idx = df.loc[ df['분양가격'] == 0].index

idx

>>>
Int64Index([  28,   29,   34,   81,  113,  114,  119,  166,  198,  199,
            ...
            4418, 4448, 4453, 4458, 4459, 4461, 4488, 4493, 4499, 4503],
           dtype='int64', length=320)

 

index를 받았으니, drop 함수로 문제의 320개 행들을 제거해줍니다. 이때, 행 제거이므로 axis=0이 되겠습니다.

# idx 행들을 drop, 행은 axis=0 (열은 axis=1)
df = df.drop(idx, axis=0)

 

잘 제거 되었는지 한 번 확인해볼까요? df.count( ) 함수를 이용해보겠습니다.

 

아까 320개의 데이터가 모두 제거 되었다면 4505 - 320 = 4185개가 출력되어야 겠죠?

 

잘 제거가 된 것 같네요!

 

데이터 시각화를 들어가기 전에 한 가지를 더 전처리 해주도록 하겠습니다.

 

현재의 분양가격은 ㎡(제곱미터)당 가격입니다. 하지만 우리가 현실에서 주로 사용하는 가격은 평당 가격이죠?

좀 더 직관적인 데이터 시각화를 위해서 1평 = 3.3㎡ 단위 변환을 해주도록 하겠습니다.

 

# numpy의 브로드 캐스트 개념 이용(모든 열 한꺼번에 사칙연산 가능)
df['분양가격'] = df['분양가격']/3.3


# 열 이름을 '분양가격'을 '평당 분양가격'으로 변경
df = df.rename(columns={'분양가격': '평당 분양가격'})

 

단위가 잘 변경되었는지 확인해 볼까요?

 

 

아주 잘 변경되었네요!

 

 

데이터 시각화

 

이제 데이터 시각화를 바로 들어가보겠습니다.

 

시각화를 위해서 관련 셋팅을 좀 해주겠습니다. 자세한 내용은 주석을 참고해주세요.

 

# 그래프 출력 시 이상한 에러들 무시
import warnings
warnings.filterwarnings("ignore")


# 그래프 그릴 때 한글 깨짐 방지 설정
import os

# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정

if os.name == 'posix':
    plt.rc("font", family="AppleGothic")

else:
    plt.rc("font", family="Malgun Gothic")


# 그래프 사이즈 설정
plt.figure(figsize=(12,8))

 

지역별 분양가격

 

먼저 지역별 분양가격 평균 가격을 그려보겠습니다. 별다른 처리 없이 '지역명'과 '분양가격'을 x, y축으로 설정하고 그려주면 자동으로 지역명이 같은 분양가들을 통합해서 그 평균 가격을 그려주는 것으로 보입니다.

 

왜 그렇게 생각했냐면, groupby( ) 함수를 이용해서 출력해본 평균데이터와 값이 비슷했답니다. 추후에 groupby에 대해서 포스팅 해보도록 하겠습니다.

 

# '지역명'으로 묶어서 '분양가격'의 평균을 나타냄
df.groupby('지역명')['평다 분양가격'].mean()

 

# seaborn 패키지로 막대 그래프 그리기
sns.barplot(x='지역명', y='평당 분양가격', data=df)

 

확실히 서울이 압도적으로 비싼 것을 보실 수 있습니다.

 

 

연도별 분양가격

 

연도별로 분양가격의 평균이 어떻게 변하는지도 살펴보겠습니다.

 

sns.barplot(x='연도', y='평당 분양가격', data=df)

 

역시 인플레이션 때문에 분양가는 해가 갈 수록 비싸진다는 것을 데이터로 알 수 있습니다.

 

오늘 준비한 내용은 여기까지 입니다.

 

공부하시느라 고생 많으셨습니다!


<참고 자료>

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

 

 

 

오늘은 데이터 분석가가 가장 싫어하지만, 많은 시간을 할애한다는 데이터 전처리를 맛보기로 체험해보는 시간을 가져보겠습니다.

 

하시면서 ValueError를 정말 많이 보시게 될텐데요. 에러가 출력되더라도 정상적인 것이니 당황하지 마시고 다음 코드로 넘어가시면 되겠습니다.

 

참고로 오늘도 데이터 분석은 VScode에서 Jupyter Notebook을 실행하여 진행하였습니다. 혹시 VScode와 주피터 노트북이 깔려있지 않으신분들은 '개발환경 구축' 목록을 클릭하셔서 관련 글들을 읽으시는 것을 추천드립니다.


 

데이터 불러오기

 

오늘 사용할 데이터는 공공데이터 포털에서 다운로드 받은 '민간 아파트 가격 동향' 데이터 셋입니다.

 

해당 코드를 실행하면 데이터 셋이 불어와지니 따로 다운로드 받으실 필요는 없습니다.

 

# 데이터 프레임 가져오기
df = pd.read_csv('https://bit.ly/ds-house-price')

# 데이터 프레임 출력
df

 

df를 출력해보면 아래와 같이 나옵니다.

 

 

 

열 이름 중에 '분양가격(㎡)'은 (㎡)이 코딩하면서 입력하기 어려우니 '분양가격'으로 바꾸어 주겠습니다. (글이 길어질 듯 하여 결과는 생략)

 

# 열 이름 바꾸는 법
df = df.rename(columns={'분양가격(㎡)': '분양가격'})

 

그리고 해당 데이터들은 제곱미터당 가격이므로 우리에게 익숙한 평당 가격으로 바꾸어 주려면 3.3으로 나누어서 생각하시면 됩니다.

 

가장 위에 위치한 2015년 10월의 평당 분양가격은 5841/3.3해서 1770만원이겠네요. 요즘 같으면 상상도 못할 낮은 가격이네요!

 

 

 

데이터 Overview

 

데이터를 전체적으로 바라보기 위해서 아래와 같은 함수를 사용해봅시다.

 

# 데이터 열 이름, 행 갯수, 각 열의 데이터 타입, 전체 용량 등등
df.info()

 

 

위와 같이 결과가 출력될텐데요. 여기서 주목하실 부분은 2가지 입니다.

 

1) 다른 열들과 다르게 분양가격에는 null이 존재

    - 전체 4505개의 데이터 중 non-null 값이 4210개 (null 값 295개)

 

2) 데이터 타입이 정수(int)나 실수(float)가 아닌 문자열(object)

 

자, 이 점을 인지한채로 다음 단계로 넘어가 보겠습니다.

 

 

 

데이터 전처리

 

아마 데이터 분석가가  해당 데이터 셋을 사용하는 이유는 민간 아파트의 분양가 동향을 파악하기 위함일 것입니다.

 

언뜻 생각하기에 분양가에 수식이라도 걸려면 데이터 타입이 문자열이 아닌 정수나 실수여야 겠죠?

 

그래서 '분양가격'의 데이터 타입을 int로 바꾸어 줘보겠습니다. 지금부터 에러가 시작되니 놀라지마세요.

 

# 분양가격 컬럼(열)의 데이터 타입을 int로 바꿈
df['분양가격'].astype(int)

 

쭉 에러가 길게 나올텐데 가장 아래를 보시면 이런 문구가 있을 것입니다.

ValueError: invalid literal for int() with base 10: '  '

 

에러를 설명하자면 '  ' (참고로 빈칸 하나가 아니라 두 개)가 있어서 int로 못바꿔주겠다는 뜻입니다.

 

df.loc[ ] 함수를 이용해 어떤 행들이 분양가격이 '빈칸 두 개'로 입력되어 있는지 확인해봅시다.

 

# '분양가격' 열의 데이터들 중 '  '(빈칸 두개)로 이루어진 행만 출력
df.loc[df['분양가격'] == '  ']

 

 

분양가격에 아무것도 쓰이지 않은 것 같아보이지만 '빈칸 두 개 '가 들어가 있는 상태입니다.

 

 

<여기서 잠깐>

 

df.loc[ ] 함수

 

df.loc[Series, Column]의 형태로 자주 쓰이며, 특정 조건을 만족하는 데이터를 추출하거나 변경하고 싶을 때 매우매우 많이 사용됩니다.

 

첫번째 인자로는 주로 "True/False 정보를 담은 Series"가 들어가며, 두번째 인자는 입력을 하지 않거나, '특정 컬럼명'을 입력해줍니다.

 

만약 '특정 컬럼명'을 입력하면 해당 열의 정보만 가지는 Series를 출력하고, 입력하지 않으면 Series에서 True인 행의 모든 열 정보를 출력합니다. (위에서 사용한 코드는 '특정 컬럼명'을 입력하지 않은 것입니다)

 

 

 

빈칸을 0으로 바꾸기

 

loc[ ] 함수를 응용해서 '  ' 문자를 '0'으로 바꾸어 줍니다.

 

여기서 주의하셔야 될 점은 그냥 0이 아닌 문자열 '0'로 해주셔야 한다는 것입니다. 그냥 0으로 하여도 에러는 나지 않지만 나중에 숫자 0이 어느 순간 NaN 값으로 바뀌어서 계속 NaN 값이 잡초처럼 자라나거든요.

 

# 분양가격이 '  '인 것을 0으로 일괄 변경
df.loc[ df['분양가격'] == '  ', '분양가격'] = '0'

 

 

다시 '분양가격' 데이터 타입을 int로 바꾸기 위해 시도해보겠습니다.

df['분양가격'].astype(int)

 

또 에러가 출력됩니다. 이번에는 NaN 값이 있다고 하네요.

ValueError: cannot convert float NaN to integer

 

 

NaN 값을 0으로 바꾸기

 

Nan 값은 데이터 분석에서 너무 자주 나와서 따로 함수가 있습니다. fillna( )라는 함수로 NaN 값을 0으로 채워줍시다.

여기서도 주의하실 점은 그냥 0이 아닌 '0'이어야 한다는 것입니다! 이유는 위에서 설명드린 것과 같습니다.

# Nan 값을 fillna() 함수를 이용해 0으로 채워 줌
df['분양가격'] = df['분양가격'].fillna('0')

 

문제를 해결했으니 다시 또  변경을 시도해봅니다.

 

df['분양가격'].astype(int)

ValueError: invalid literal for int() with base 10: '6,657'

 

에러를 살펴보니 숫자 사이에 콤마(,)가 있어서 int로 못바꿔주겠다는 뜻입니다.

 

콤마를 제거해 주기 전에 잠시 데이터를 확인해볼까요?

 

# '분양가격' 열의 데이터 중 '6,657'이 포함된 행 출력 (index 번호 포함)
df.loc[df['분양가격'] == '6,657']

 

실행결과를 보시면 2125번 행에 문제가 된 데이터가 들어있는 것을 확인 하실 수 있습니다.

 

 

문자열의 특정 문자 변경하기 (replace)

 

문자열을 다루는 함수를 통해 콤마만 없애줘 보겠습니다.

 

# replace( ) 함수를 통해 ','를 ''(따옴표 사이에 아무것도 없음)로 바꾸어 줌으로써 제거

df['분양가격'] = df['분양가격'].str.replace(',', '')

 

없어졌는지 확인해보겠습니다. 참고로 iloc[ ]를 loc[ ]로 바꾸어도 동일한 결과를 얻을 수 있습니다. 두 함수의 차이점은 추후 제대로 포스팅 해보겠습니다.

 

그리고 대괄호를 하나만 하면 시리즈 형태로 출력되고, 대괄호를 두 번 중첩하면 데이터 프레임 형태로 출력된다는 점 알려드리고 싶어서 아래와 같이 결과를 출력해봤습니다.

 

[ ] -> Series    /    [[ ]] -> Dataframe

 

 

자 그럼 우리의 숙원 사업(?)인 astype(int)를 다시 시도해보겠습니다. 이 코드는 앞으로도 너무 많이 나오므로 '정수화'라고 명칭하겠습니다.

 

df['분양가격'].astype(int)

 

ValueError: invalid literal for int() with base 10: '-'

 

이번에는 누가 마이너스(-) 기호를 넣어뒀네요. 이번에도 replace 함수로 간단히 바꿔주겠습니다. (자세한 내용 생략)

 

df['분양가격'] = df['분양가격'].str.replace('-', '0')

 

'-'가 없어졌을테니 다시 한 번 정수화 시도!

 

 

드디어 성공했습니다. 그러면 잘 바뀌었는지 볼까요?

 

df.info( ) 함수를 이용해서 분양가격이 object가 아닌지 다시 살펴보겠습니다.

 

 

바뀌었는데 바뀌지 않았습니다. 사실 여러분들에게 꼭 알려드리고 싶은 것이 있어서 이렇게 했답니다.

 

그건 바로 df['분양가격']에 변경 결과를 다시 대입해주어야 한다는 것이죠. 데이터 프레임을 다룰 때 항상 주의하셔야 할 점이랍니다.

 

df['분양가격'] = df['분양가격'].astype(int)

 

우리가 원하던 전처리인 분양가격을 문자열에서 정수로 만드는 것을 해보았습니다.

 

 

 

 


<참고 자료>

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.


오늘은 데이터 분석의 프로세스에 대해 큰그림을 그려보고, 프로세스 중에서 가장 많은 시간을 차지하고 중요한 데이터 전처리 과정에 대해 자세히 알아보겠습니다.


 

데이터 분석 프로세스

 

 

1. 데이터 수집


데이터 분석은 데이터를 얻는 것 부터 시작됩니다. 데이터는 크게 두 가지로 나눌 수 있습니다.

- 정형 데이터(structured data)
- 비정형 데이터(unstructured data)

정형 데이터는 질서있게 정리된 데이터 셋을 떠올리시면 됩니다. 흔히 사용하는 엑셀에 정리된 데이터, 혹은 질서정연하게 정리된 관계형 데이터베이스가 그 예가 되겠네요. 공공데이터 포털에서 제공하는 자료들은 모두 정형 데이터라고 할 수 있겠습니다.

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

비정형 데이터는 정형 데이터와 반대로 여기저기 분산되어 있고, 체계적으로 정리되지 않은 느낌의 데이터입니다. 유튜브의 댓글, 텍스트 문서, 이미지 등이 그 예입니다. 이런 정보들은 주로 웹 크롤링 기술을 이용합니다.

2021.03.22 - [파이썬 패키지/웹 크롤링] - [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초

참고로 오늘날 생성되는 전체 데이터의 80% 이상은 비정형 데이터라고 하네요.

2. 데이터 탐색 (EDA)


데이터 탐색 단계는 EDA(Exploratory data analysis)로 불리며, 한국어로 번역하면 탐색적 데이터 분석입니다.


데이터를 모두 직접 수집했다면 각 변수들에 대해 파악이 되어 있겠지만, 그렇지 않은 경우엔 처음 만난 데이터 셋을 파악해야 합니다.

요리로 비유하자면, 앞 단계에서 모은 재료(데이터)들의 맛이나 특성을 파악하는 단계라고 할 수 있습니다. 재료들을 정확히 파악해서 적절하게 조합해야지 좋은 요리가 나오겠죠?

사실 이 단계는 딱 하나의 단계라고 말하기에는 조금 애매한 것 같아요. 왜냐하면 데이터 셋을 파악하기 위해서 약간의 전처리도 필요하고, 직관적으로 파악하기 위해서 데이터 시각화를 하기도 하니깐 말이죠.

다시 말해, 요리 재료의 특성을 파악하기 위해서 조금 잘라서 먹어보기도 하고, 재료를 섞어서 살짝 조리한 뒤, 어떤 맛이 나는지 먹어보기도 하는 단계랄까요?

 

이런 과정 속에서 유의미한 정보를 얻는다면, 그것만으로도 훌륭한 데이터 분석을 했다고 할 수도 있겠습니다.

 

 

3. 데이터 전처리

 

잘 손질된 요리 재료 (출처. Pixabay)


계속해서 요리를 예로 설명드려 보겠습니다.

재료를 파악했다면, 이제 요리하기 쉬운 형태로 손질을 해야겠죠? 재료에 상한 부분이 있다면 도려내거나, 특별히 튀어나온 부분이 있다면 제거해주어야 할 것입니다.

이렇게 다음 과정인 데이터 모델링(혹은 시각화)를 위해서 데이터를 적절한 형태로 손질하는 과정을 데이터 전처리라고 합니다.

데이터에 결측치(값 없음)가 있거나 이상치(너무 튀는 값)가 있으면 이를 적절히 처리해주어야 데이터의 왜곡을 피할 수 있습니다.

그런 값들이 있을 때는 단순히 삭제를 해주거나 평균값이나 보간법을 이용해 적절한 값으로 대체해 줄 수 있을 것입니다.
그 외에도 다양한 전처리 기법들이 있으며, 추후 공부하면서 포스팅 하도록 하겠습니다.

Forbes에서 인용한 CrowdFlower의 설문 결과에 따르면 데이터 분석가는 업무 시간 중 80%정도를 데이터 수집 및 전처리 과정에 사용하며, 동시에 업무 중 가장 싫은 단계로 꼽혔다고 하네요.

 

4. 데이터 모델링

 

완성된 요리 = 모델링 (출처. pixabay)


데이터 분석의 목적인 모델링입니다. 완성된 요리라고 생각하시면 되겠습니다.

모델링이란 무엇일까요? 저는 모델링이란 '현실에 적용 할 수 있는 쓸모있는 가상의 무엇인가를 만드는 일'이라고 생각합니다. 그것이 잘 시각화된 데이터일 수도 있고, 분류 혹은 예측 알고리즘을 적용한 서비스가 될 수도 있겠습니다.

이해를 돕기 위해 예를 들어보겠습니다.

실제 사례로는 월마트의 사례가 있습니다. 월마트 데이터 분석가가 장바구니 데이터를 살펴보니, 사람들이 맥주와 귀저귀를 함께 담는 경우가 많은 것을 찾아냈습니다. 이 정보를 토대로 오프라인 매장에 맥주와 귀저귀를 함께 진열했더니 매출이 몇 십프로가 올랐다고 합니다.

우리 주변에서 찾아볼 수 있는 데이터 모델링의 가장 좋은 예는 유튜브 영상 추천 서비스가 있습니다. 사용자의 검색 기록, 시청 기록을 바탕으로 사용자가 좋아할 만한 영상을 추천해주는 시스템이죠. 이 서비스는 상당히 효과를 발휘해서 많은 사람들을 유튜브에 많은 시간을 쏟게 만듭니다.


<참고 자료>

http://www.dodomira.com/2016/10/20/how_to_eda/

 

데이터 전처리 -데이터 전처리(클린징)에 대한 모든 것

본 포스팅에서는 탐색적 데이터 분석(EDA)라고 불리우는 단계에서 수행해야 할 Task에 대해 순서대로 정리해 보고자 합니다. EDA는 데이터 셋 확인 - 결측값 처리 - 이상값 처리 - Feature Engineering 의

www.dodomira.com


https://m.blog.naver.com/quest_kor/221861917060

 

정형 데이터란 무엇이고 DBA에게 왜 중요할까?

<이미지 출처 : Quest.com> 정형 데이터란 무엇이고 DBA에게 왜 중요할까? 기업은 비즈니스 의사...

blog.naver.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

<Numpy 패키지 관련 이전 글>

 

2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념

2021.06.18 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_Numpy 2편. 인덱싱과 슬라이싱

 

 


 

arrange

 

arrange 함수는 규칙적으로 나열된 배열을 얻고싶을 때 사용하는 함수입니다. 

 

파이썬 문법에서 for문 뒤에 주로 사용하는 range 함수와 비슷하면서 조금은 다른 np.arrange 함수입니다.

np.arrange(start=1, stop=11, step=1)

>>> array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])


# 파라미터명을 생략하고 순서대로 적어줘도 됨 (step은 기본값 1)
np.arange(1,11)

>>> array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

 

참고로 range(1, 11)을 변수에 저장해도 출력해보면 그냥 range(1, 11)로 나오지 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]으로 나오지 않습니다.

즉, range는 list나 array를 생성하는 것이 아니라 for문 안에서만 작동하는 자료의 형태라고 생각하시면 되겠습니다.

 

 

 

sort

 

1차원 정렬

 

sort는 내림차순(큰 값 우선) 정렬과 오름차순(작은 값 우선) 정렬을 해주는 함수입니다.

 

sort 함수를 사용하는 방법은 두 가지입니다.

 

1) sort(arr)

2) arr.sort( )

 

다만, arr.sort( )를 사용하면 원래의 array가 변경되므로, arr2 = np.sort(arr)와 같이 따로 저장해서 사용하는 것을 추천드립니다.

 

arr = np.array([4,1,5,7,6,3,9,2,8])

# 오름차순
np.sort(arr)
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 내림차순
np.sort(arr)[::-1]
>>> array([9, 8, 7, 6, 5, 4, 3, 2, 1])


# 만약 arr을 sort된 상태로 변경하고 싶다면
arr.sort()

arr
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

 

2차원 정렬

 

2차원 정렬은 축에 대한 이해가 필요합니다. 이를 위해 지난 시간에 다루었던 축에 대한 그림을 가져와봤습니다.

 

출처. https://velog.io/@mingki

 

2차원 배열은 앞서 배운 sort( ) 함수를 사용하기 위해서 axis 파라미터를 설정해주어야 합니다.

 

axis = 0 으로 설정해주었을 때는 같은 행 내에서 정렬합니다. 행 내에서 열이 다른 요소들을 정렬하므로 "열정렬"이라 합니다.

 

axis = 1 로 설정해주었을 때는 같은 열 내에서 정렬합니다. 열 내에서 행이 다른 요소들을 정렬하므로 "행정렬"이라 합니다.

 

 

저는 축의 방향과 정렬되는 방향이 90도여서  여러분들은 어떠신가요? 

 

arr_2d = np.array([[15,5,20,10],[9,3,6,12],[8,4,6,2]])

arr_2d
>>> array([[15,  5, 20, 10],
           [ 9,  3,  6, 12],
           [ 8,  4,  6,  2]])

#같은 행 내에서 오름차순 정렬 (열정렬)
np.sort(arr_2d, axis=1)
>>> array([[ 5, 10, 15, 20],
           [ 3,  6,  9, 12],
           [ 2,  4,  6,  8]])

#같은 열 내에서 오름차순 정렬 (행정렬)
np.sort(arr_2d, axis=0)
>>> array([[ 8,  3,  6,  2],
           [ 9,  4,  6, 10],
           [15,  5, 20, 12]])

 

 

argsort

 

일반적은 sort( )는 값을 반환하지만 argsort( )는 인덱스를 반환합니다. 데이터 분석을 하다보면 변할 수 있는 값보다 index 정보를 필요로 할 때가 있는데 이 때 사용한다고 합니다. 당장 쓸 일은 많이 없을 것 같으니 그냥 이런게 있구나 하고 넘어가시는 걸 추천드립니다.

 

arr_2d = np.array([[15,5,20,10],[9,3,6,12],[8,4,6,2]])

arr_2d
>>> array([[15,  5, 20, 10],
           [ 9,  3,  6, 12],
           [ 8,  4,  6,  2]])

#같은 행 내에서 오름차순 정렬 (열정렬)
np.argsort(arr_2d, axis=1)
>>> array([[1, 3, 0, 2],
           [1, 2, 0, 3],
           [3, 1, 2, 0]])

#같은 열 내에서 오름차순 정렬 (행정렬)
np.argsort(arr_2d, axis=0)
>>> array([[2, 1, 1, 2],
           [1, 2, 2, 0],
           [0, 0, 0, 1]])

 

오늘 준비한 내용은 여기까지입니다.

 

사칙연산 및 broadcasting까지 다루려 했으나 내용이 많이 길어질 듯 하여 다음 글에서 다루도록 하겠습니다.

 

오늘도 공부하시느라 고생 많으셨습니다!


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

오늘은 아래와 같이 요즘 조회수가 잘 나오는 유튜브 채널 Top20개의 그래프를 얻는 법에 대해 공부해 보겠습니다.

 

 


 

1. Kaggle에서 데이터 가져오기

 

구글이나 네이버에서 kaggle을 검색하여 접속해줍니다.

 

그리고 화명 상단의 검색창에서 youtube를 검색한 후, 좌측의 Today 옵션을 클릭해서 가장 상단의 자료를 클릭해줍니다.

 

 

가장 상단의 YouTube Trending Video Dataset (updated daily)를 클릭하셨다면 아래와 같이 데이터를 받을 수 있는 화면이 뜨는데 우리는 KR_youtube_trendig_data.csv 자료를 클릭해서 다운로드 해주겠습니다.

 

링크. https://www.kaggle.com/rsrishav/youtube-trending-video-dataset?select=KR_youtube_trending_data.csv

 

 

<여기서 잠깐>

 

Kaggle이란?

 

Kaggle은 세계에서 가장 큰 데이터 사이언스 커뮤니티입니다.

 

다양한 종류의 데이터 셋(Datasets)을 제공받을수 있을 뿐만 아니라, 여러 경연들(Competitons)에 참여하여 자신의 데이터 분석 실력을 검증해볼 수도 있습니다. 경연에서 우수한 성적을 거두어 높은 랭킹에 이름을 알림으로써 PR용도로 활용할 수 있답니다.

 

기업 및 단체에서 데이터와 해결과제를 등록하면, 데이터 과학자들이 이를 해결하는 모델을 개발하고 경쟁해서 상금도 거머쥘 수 있습니다. 교육용 예제 데이터가 아닌 실제 비즈니스 현장에서 나온 데이터이기에 실전 감각도 기를 수 있습니다.

 

또한 경쟁자들의 코드 혹은 그들이 진행했던 프로젝트와 코드를 공유하는 곳도 따로 있어서, 그걸 따라하면서 실력을 키워볼 수도 있는 너무나도 유용한 사이트입니다.

 

 

 

2. 데이터 전처리

 

데이터를 다운로드 받았다면 프로젝트 폴더에 csv 파일을 위치시켜준 후, 적당한 제목으로 주피터 노트북 혹은 vscode의 주피터 노트북 연동을 통해 ipynb 파일을 하나 생성해줍니다.

 

1) 관련 패키지 import

 

가장 먼저해줄 것은 관련 패키지를 불러오는 것입니다.

 

import pandas as pd
import numpy as numpy
import seaborn as sns
import matplotlib.pyplot as plt
import os

 

2) Dataset 판다스로 불러오기

 

다음으로는 csv 형식의 데이터를 가져와보겠습니다.

 

KRvideo = pd.read_csv("KR_youtube_trending_data.csv")

 

만약 에러가 출력되신다면 아래와 같은 옵션을 추가해보세요.

 

KRvideo = pd.read_csv("KR_youtube_trending_data.csv", engine="python", error_bad_lines="false")

 

 

3) 불러온 데이터 살펴보기

 

데이터가 에러 없이 잘 불러와졌다면 데이터를 조금 살펴보겠습니다.

 

데이터 프레임 형태 파악

 

# 데이터 프레임 형태 파악 (상위 5개 행 x 전체 열 출력)
KRvideo.head()

 

열(column)이 많아서 스크롤을 넘기면서 무엇을 데이터 분석에 사용할지 고르는게 좋을 것 같습니다.

저는 영상제목(title), 채널명(channelTitle), 조회수(view_count)만 사용할 예정입니다.

 

 

데이터 전체 정보 요약

 

# 데이터 프레임의 전체 정보 요약
KRvideo.info()

 

<출력 결과>

 

총 65754 x 16 사이즈의 데이터 프레임이며, 위와 같은 16 종류의 데이터를 갖는 것을 알 수 있습니다.

 

 

4) 데이터 전처리

 

지금부터 데이터를 조금씩 입맛에 맞게 골라내고 다듬어 보겠습니다.

df = KRvideo[["title", "channelTitle", "view_count"]]
df

 

 

조회수 순 내림차순 정렬

 

지금은 조회수 순이 아닌 가장 처음의 데이터 셋에 저장된 순서이므로 내림차순(큰 것이 위에 오도록)으로 정렬해주겠습니다.

 

df_sorted = df.sort_values(by='view_count', ascending=False)
df_sorted

 

 

역시 글로벌 스타인 방탄소년단의 영상이 가장 핫하네요! 하지만 이상한게 보이시죠? 바로 데이터들이 중복된다는 것입니다.

 

그 이유는 우리가 사용하는 데이터 셋이 매일 최대 200개의 인기 급상승 동영상의 정보를 계속 추가하기 때문입니다.

 

인기 급상승 동영상으로 선정되는 알고리즘을 잘 모르지만 기존 조회수 대비 조회수가 짧은 시간 내에 급격히 증가하면 선정되므로, 이미 인기있어진 동영상은 어느 순간부터 최신의 view_count가 반영되지 않는 듯 하네요.

 

2021년 7월 17일 기준 4.5억회이지만 위의 데이터 셋에는 2.9억회 정도까지만 반영된 것을 보면 말이죠!

 

이런 정황으로 보았을 때, 이 데이터 셋으로는 어떤 채널의 조회수가 가장 많이 나오는지 보다는 어떤 채널의 동영상들이 급격히 인기를 얻었는지를 알 수 있지 않나 생각합니다.

 

 

중복 제거

 

데이터가 매일 누적되며, 중복되는 것들이 있으므로 가장 최신것만 남기고 제거해주도록 하겠습니다.

 

# 영상제목과 채널명이 둘 다 중복인 영상 제거
df_sorted_latest = df_sorted.drop_duplicates(['title','channelTitle'], keep='first')

# 상위 10개 영상 확인
df_sorted_latest.head()

 

역시 방탄소년단과 블랙핑크가 세계적인 인기를 받고 있다는 것이 보이는 결과입니다. 10위에 제가 요즘 좋아하는 에스파도 보이네요!

 

 

채널별 조회수 합계 및 조회수 상위 20개 채널 확인

 

이제 마지막으로 어떤 채널이 가장 인기를 끌고 있는지 채널별로 조회수를 모두 합쳐서 순위를 매겨보겠습니다.

 

# groupby() : 특정 컬럼을 기준으로 그룹을 묶어서 평균, 합계를 낼 수 있음

# 채널별 조회수 합계 계산
df_channel_view_sum = df_sorted_latest.groupby(['channelTitle']).sum()

# 채널별 조회수 내림차순 정렬
df_channel_view = df_channel_view_sum.sort_values(by='view_count', ascending=False)

# 총 2253개의 채널 중 상위 20개 채널만 가져오기
df_channel_view_top20 = df_channel_view[:20]

# 데이터 출력
df_channel_view_top20

 

 

그래프로 데이터 시각화

 

시각화를 위해서 데이터에 index를 추가해줄 필요가 있습니다. 0~99까지의 index가 있어야지 그래프가 그려진답니다.

 

df_channel_view_top20_index = df_channel_view_top20.reset_index()
df_channel_view_top20_index

 

글이 너무 길어져서 결과는 생략하였으니, 직접 확인해보시기 바랍니다.

 

그럼 이번 프로젝트의 마지막 결과물인 데이터 시각화를 해보겠습니다.

 

# 그래프 출력 시 이상한 에러들 무시
import warnings
warnings.filterwarnings("ignore")


# 그래프 그릴 때 한글 깨짐 방지 설정
import os

# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정

if os.name == 'posix':
    plt.rc("font", family="AppleGothic")

else:
    plt.rc("font", family="Malgun Gothic")


# 그래프 사이즈 설정
plt.figure(figsize=(10,10))


# seaborn 패키지로 수평막대 그래프 그리기
sns.barplot(x='view_count', y='channelTitle', data=df_channel_view_top20_index)

 

결과를 보니 상위권은 거의 다 엔터테인먼트 회사의 유튜브 채널들이 차지하고 있는 것을 확인할 수 있습니다.

 


<참고 자료>

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

<Numpy 패키지 관련 이전 글>

 

2021.06.16 - [파이썬 패키지/데이터분석] - [Python/Numpy] 데이터 분석 수치연산 패키지_numpy 1편. ndarray, shape, axis의 개념


 

ndarray의 인덱싱과 슬라이싱

 

이미 이 글을 읽으시는 분들은 파이썬 기초 문법을 공부하시면서 리스트의 인덱싱과 슬라이싱에 대해서 한 번쯤 들어보셨을 것이라 생각됩니다. 기본적으로 ndarray의 인덱싱, 슬라이싱도 리스트와 같은 규칙을 따릅니다. 

 

2021.03.12 - [파이썬 기초/기초 문법] - [코딩유치원] 파이썬 기초 문법 4편_리스트 자료형

 

따라서 1차원 array의 인덱싱은 리스트 문법 글로 대신하고, 2차원 array에 대해서만 간단히 정리하고 넘어가겠습니다.

 

 

2차원 array의 인덱싱과 슬라이싱

 

기초문법 강의에서는 자세히 다루지 않았었지만 리스트 안에는 리스트가 들어갈 수 있습니다. 이런 식으로 말이죠.

 

arr_list = [[1,2,3],[4,5,6],[7,8,9]]

print(arr_list[0][2])    # 리스트의 0번 인덱스 안의 2번 인덱스
>>> 3

print(arr_list[2][0])    # 리스트의 2번 인덱스 안의 0번 인덱스
>>> 7

 

이 리스트를 numpy.array( ) 안에 넣어서 ndarray를 만들면 그것이 바로 행렬(matrix)가 되며, 거의 동일하게 인덱싱할 수 있습니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

# 1행, 3열  --> 3
arr_2d[0,2]

# 3행, 1열  --> 7
arr_2d[2,0]

 

비슷한 개념의 슬라이싱도 해볼까요? 이미 아시겠지만 슬라이싱이란 간단히 '범위 인덱싱'이라고 생각하시면 됩니다.

참고로 슬라이싱의 0:2가 뜻하는 것은 0이상 2이하라는 뜻입니다.

 

# 2행 모두  --> array([4,5,6])
arr_2d[1, :]

# 1열 모두 --> array([1,4,7])
arr_2d[:, 0]

# 3행의 1,2열 --> array([4,5])
print(arr_2d[2,0:2])

# 1,2행의 1,2열 --> array([1,2],[4,5])
print(arr_2d[0:2,0:2]

 

 

fancy indexing

 

fancy는 동사로 원하다, 끌리다라는 뜻이 있죠. 대충 원하는거 골라서 다 가져오겠다라는 뜻으로 해석됩니다.

말로 표현해보려다 실패하고 코드로 설명드려 보겠습니다. 

 

arr = np.array([10,20,30,40,50])

# 보통 인덱싱
arr[1]
>>> 20

# 팬시 인덱싱
arr[[0,2,4]]
>>> 10, 30, 50

 

여기서 주의하실 점은 꼭 [ ]를 한 번 더 써주셔야 한다는 것입니다. 그냥 arr[0,2,4] 이런 식으로 하시면 에러가 납니다.

당연히 리스트를 담은 변수를 넣어줘도 됩니다. arr[리스트] 이런 식으로 말이죠.

 

 

Bollean indexing

 

ndarray의 장점은 ndarray에 조건문을 적용하면 모든 값에 개별적으로 적용되어 그 결과를 True와 False로 돌려준다는 것입니다.

그렇게 나온 결과 array를 위에서 배운 fancy indexing 처럼 그대로 array[ ] 안에 넣어주면 해당 인덱스가 True인 값만 출력해줍니다.

 

이 개념은 데이터 분석에서 아주아주 유용하게 사용되므로 잘 이해하고 넘어가시는 것을 추천드립니다.

 

arr_2d = numpy.array([1,2,3],[4,5,6],[7,8,9])

arr_2d

>>> array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

# Boolean indexing

arr_2d > 2

>>> array([[False, False,  True],
          [ True,  True,  True],
          [ True,  True,  True]])


# Boolean indexing 사용법

arr2d[arr2d > 5]

>>> array([6, 7, 8, 9])

 

조금 특이한 점은 2차원 배열도 Boolean indexing을 통해 값을 얻으면 1차원 배열로 값을 출력한다는 것입니다.

 

다음 시간에는 numpy의 정렬과 사칙연산에 대해서 공부해보겠습니다.


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 파이썬 데이터 분석하면 바로 떠오르는 패키지 중 하나인 Numpy에 대해서 알아보겠습니다.

 

numpy란?

 

Numpy는 선형대수, 수치해석, 통계 관련한 파이썬 패키지로, 어려운 프로그래밍 언어인 C, C++, Fortran에 비해 아주 쉽게 고성능의 수치 연산을 가능하게 해주는 패키지 입니다. Numerical Python의 줄임말로 '넘파이'라고 부르며, pandas와 matplotlib 같은 다른 데이터분석용 패키지의 기반이 되기도 합니다.

 

통상적으로 데이터분석은 VScode IDE 보다는 Jupyter Notebook을 사용하므로 만약 주피터 노트북에 대해 모르신다면 아래의 글을 읽고 나신 후에 이 글을 읽으시는 것을 추천드립니다.

 

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

 

 

numpy 설치

 

 만약 Anaconda를 설치하신 분들은 numpy가 이미 설치되어 있으며, 순정 파이썬(파이썬 공식 홈페이지에서 다운로드)를 받으신 분들은 아래의 코드를 터미널창에 입력해주세요.

pip install numpy

 

numpy 불러오기

#numpy 패키지를 np라는 이름으로 불러오기
import numpy as np

 

numpy 배열 (ndarray)

numpy의 가장 기본적인 구조로 1D array(벡터), 2D array(행렬), 3D array(텐서)와 같은 데이터 구조를 가집니다.

참고로 ndarray라는 말은 n dimension array의 줄임말입니다.

 

출처. https://velog.io/@mingki

 

여기서 알아두셔야 할 개념이 있는데 바로 axis와 shape입니다.

 

axis shape
기준이 되는 축으로 축의 갯수는 차원과 같음


(axis 0) = 1D array
(axis0, axis 1) = 2D array
(axis0, axis1, axis 2) = 3D array

배열의 차원과 크기 정보



(3, ) = 3의 배열
(4,3) = 4x3의 배열
(2,5,3) = 2x5x3의 배열

 

위에서 배운 개념들을 실제 numpy에서 어떻게 코드로 사용하는지 알아보겠습니다.

 

1차원 배열 (1D array)

 

가장 기본적인 배열인 1차원 배열입니다. 흔히 수학적으로 벡터라고 부릅니다. 따로 dtype를 설정해줄 수 있습니다.

np.array([1,2,3,4])


np.array([1,2,3,4], dtype=int)

 

2차원 배열 (2D array)

 

가장 많이 사용되는 2차원 배열입니다. 우리가 흔히 아는 행렬(Matrix)입니다.

np.array([1,2,3],[4,5,6],[7,8,9])

 

shape 확인

 

shape 함수로 해당 배열의 shape를 확인 할 수 있습니다.

my_list = [1,2,3,4]
my_list2 = [[1,2,3],[4,5,6]]   # 2행 3열

arr1 = np.array(my_list)
arr2 = np.array(my_list2)

arr1.shape
>>> (4, )

arr2.shape
>>> (2,3)   #(행,열)

 

넘파이 배열과 리스트와의 차이점

 

파이썬에서 주로 사용하는 array인 리스트와 numpy의 array인 ndarray를 비교하면서 ndarray의 특징을 알아보겠습니다.

 

1. 데이터 타입을 출력해보면 list와 numpy.ndarray로 다른 타입을 가집니다.

my_list = [1,2,3,4]

type(my_list)
>>> list

my_ndarray = np.array([1,2,3,4])

type(my_ndarray)
>>> numpy.ndarray

 

2. 리스트와 다르게 array에서는 data 타입이 단일이어야 합니다.

 

# 리스트는 각자 다른 자료형을 함께 저장 가능
my_list = [1,0.5,'python']

# ndarray는 한가지로 통일된 자료형으로 저장
my_ndarray = np.array([1,0.5,'python'])

>>> array(['1', '0.5', 'python'], dtype='<U6')    #모든 자료형이 문자열 타입으로 바뀜

 

위에서와 같이 np.array를 만들 때 따로 dtype을 지정하지 않은 경우엔 아래와 같은 규칙을 따릅니다.

 

1) 정수(int)와 실수(float)가 섞여 있는 경우 

    - 모두 실수로 바뀜

np.array([1,0.5,3])

>>> array([1. , 0.5, 3. ])

 

2) 정수, 실수, 문자열이 섞여 있는 경우

    - 모두 문자열로 바뀜 (이전 코드 참조)

 

 

즉, 별도로 dtype을 지정하지 않은 경우 아래의 우선순위를 따릅니다. (str > float > int)

 

 

만약 dtype을 별도로 지정했다면 아래와 같은 규칙을 따릅니다.

 

1) float을 int 지정했을 때는 내림 처리

np.array([1,0.9,3], dtype=int)

>>> array([1, 0, 3])

 

2) str을 int나 float으로 지정했을 경우, 에러 발생

np.array([1,0.5,'python',3], dtype=int)

>>>
ValueError: invalid literal for int() with base 10: 'python'

 

단, str이 다른 숫자와 같은 자료형태를 갖고 있으면 에러 없이 지정 dtype으로 변경

np.array([1,'2',3], dtype=int)

>>> array([1, 2, 3])

 

오늘 준비한 내용은 여기까지입니다.


<참고자료>

 

패스트캠퍼스_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<데이터 분석 관련 글>

 

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

 

이번 시간에는 원하는 데이터만 고르기 위한 능력을 길러보겠습니다. 데이터 프레임에서 원하는 데이터들을 찾기 위해서는 열(column)과 행(row)를 적절히 인덱싱(Indexing)해주면 됩니다. 차근차근 함께 알아가보시죠.

 


 

우선 지난 시간에 이어서 다룰 데이터는 아래와 같습니다.

 

 

컬럼명은 아래와 같으며, 우리가 이번 시간에 사용할 컬럼명들은 붉은색 밑줄로 표시해보았습니다.

 

인덱싱 기초 함수

 

DataFrame["컬럼명"]

: 데이터 프레임에서 원하는 컬럼만 가지는 Series 생성

 

DataFrame["원하는 컬럼명"]을 입력하면 해당 컬럼명만 가지는 Series가 만들어집니다. 앞으로 데이터 분석 시 아주 많이 사용되는 함수이니 기억해두면 좋을 것 같습니다.

 

 

DataFrame[ Series(True/False)]

: 데이터 프레임의 특정 열(column) 안에서, 원하는 데이터를 포함한 행(row)만 출력

 

여기서 Series(True/False)란 아래 코드의 결과 시리즈를 뜻합니다.

 

df["상권업종대분류명"] 에서 데이터가 "의료"인지 아닌지에 따라 True/False로  되돌려주는 코드입니다.

 

이 코드를 다시 df[ ] 안에 입력할 시에, True인 것들만 가지는 데이터 프레임을 얻으실 수 있습니다.

 

df[df["상권업종대분류명"] == "의료"] 이런 식으로 말이죠.

 

여기서 추가적으로 알려드리고 싶은 것은 &(and)와 |(or)를 이용해서 여러 조건을 동시에 만족하는 데이터들을 가져올 수도 있습니다.

 

 

 

DataFrame.loc[행, 열] , 여기서 행과 열은 리스트나 Series 형태로 입력 가능

 

ex) DataFrame.loc[ Series(True/False), "컬럼명" ]

: DataFrame[Series(True/False)]를 통해 얻은 데이터 프래임 중, "컬럼명"만 가지는 Series를 리턴

 

현재 medical 변수에는 True/False 정보를 갖고 있는 Series 자료가 들어가 있습니다. 우리는 이 것을 loc[] 함수의 첫번째 인자로 사용해서 하고 "상권업종중분류명"이란 컬럼명을 가진 정보만 Series로 가져와보겠습니다.

 

Series.value_counts( )

: Series 내의 데이터들을 숫자를 카운트해서 Series 형태로 리턴

 

앞서 말씀드렸듯이 df["상호명"]은 상호명의 정보만 가지는 1차원 데이터 자료인 Series입니다. 이 Series가 무슨 자료들을 가지는지 value_counts( ) 함수로 한 눈에 파악 가능합니다.

 

Series.str.contains("문자열")

: Series 내에서 "문자열"을 포함하고 있는 문자 데이터(object)들을 True로, 그 외의 것들을 False로 리턴

 

아래의 코드는 "상호명" 중에서 "종합병원"이 들어간 데이터들을 True로 가지는 Series를 돌려주는 코드입니다.

만약에 종합병원이 들어가지 않은 것을 True로 받고 싶으시다면 아래의 코드 앞에 ~(Not 연산자)를 하나 붙여주시면 됩니다!

 

 

Series.str.endswith("문자열")

: Series 내에서 "문자열"로 끝나는 문자 데이터(object)들을 True로, 그 외의 것들을 False로 리턴

 

위에서 배웠던 value_counts( ) 함수를 이용해서 "상호명"이 "의원"으로 끝나는 곳은 39174개라는 것을 알 수 있습니다.

 

 

인덱싱을 이용한 데이터 전처리

 

위에서 배운 함수들을 이용해서 '서울특별시'에 위치한 '종합병원'으로 분류되는 상호명을 살펴보겠습니다.

 

여기서 주목할 부분은 &(and) 연산자로 여러 조건을 함께 만족하는 df를 얻은 것과 .copy( )를 사용함으로써 기존 df에 영향이 가지 않도록 했다는 것입니다.

 

아래의 코드는 위에서 배운 함수들을 제대로 숙지했다면 충분히 이해할 수 있으니 스스로 해석해봅시다. 참고로 .unique( )는 중복되는 데이터를 제외하고 돌려주는 함수입니다.

 

위의 데이터들을 보시면 종합병원으로 분류되었음에도 '알콜중독및정신질환상담소', '서울성모병원장례식장꽃배달', '우울증센터' 등과 같이 종합병원이 아닌 데이터들이 보입니다. 이런 것들을 제거해주는 것이 데이터 전처리입니다. 우리는 위의 데이터들을 보고 제외해야 할 자료들을 drop( ) 함수로 df에서 제거해주도록 하겠습니다.

 

.index는 우리가 찾은 데이터들의 행 index 번호를 리턴해주는 함수입니다. 아래의 코드는 '꽃배달', '의료기', '장례식장', '상담소', '어린이집'이 포함된 데이터와 '의원'으로 끝나는 데이터를 각각 drop_row1과 drop_row2에 리스트 형식으로 저장하는 코드입니다.

 

최종적으로 위에서 구한 drop_row를 모두 더해서 drop( )함수에 넣주었습니다. 이로써 최종적으로 서울에 위치한 종합병원은 58개라고 판단할 수 있겠습니다.

 


비전공자로서 공부하며 글을 쓰다보니, 이 글에 다 담지 못한 내용들이 많음을 느낍니다. 추후 부족한 내용은 보완하도록 하겠습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

<데이터 분석 관련 글>

 

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

 

이번 시간에는 데이터 분석에서 중요한 개념인 결측치에 대해서 알아보고, 주피터 노트북에서 결측치를 어떻게 찾고 제거할 수 있는지 알아보겠습니다.

 


결측치란?

출처. Null 나무위키 

 

결측치(Missing Value)는 직역하면 '값이 없는 것'을 의미합니다.  결측치는 사용하는 언어마다 여러가지로 표현됩니다.

 

- NA : Not Available (유효하지 않은)

- NaN : Not a Number (숫자가 아닌)

- Null : 아무것도 존재하지 않음을 의미

 

예를 들어서 설문조사를 했는데, 응답자가 10가지 질문 중에 4가지만 응답했다면 나머지 6가지는 결측치가 되는 것입니다. 제가 전공자가 아니라서 아직 잘 모르지만 결측치는 데이터를 분석하는데에 장애 요소라고 하며, 아래와 같은 문제를 일으킬 수 있다고 합니다.

 

- 결측치를 모두 제거할 경우, 막대한 데이터 손실을 불러일으킬 수 있음

- 결측치를 잘 못 대체할 경우, 데이터에서 편향(bias)이 생길 수가 있음

 

결측치 유형에 따른 처리에 대해 정리된 글이 있어 링크를 공유드립니다.

 

junklee.tistory.com/4

 

결측치(Missing Value) 처리

데이터를 다루다보면 필연적으로 결측치(Null, NaN, Na 등)를 만나게 됩니다. 학습초기에는 그저 이렇게하면 되지 않을까 싶은데로 데이터를 처리해왔었는데 관련된 가이드라인이 있어 정리하고자

junklee.tistory.com

 


 

Jupyter notebook에서 결측치 다루기

 

먼저 지난 시간 불러왔던 데이터 셋을 가져와서 정보를 보겠습니다.

 

import pandas as pd
df = pd.read_csv("소상공인시장진흥공단_상가업소정보_의료기관_201909.csv", low_memory=False)

df.shape

<결과>

(91255, 39)

 

df.shape로 데이터 셋의 행(row)와 열(column)의 갯수를 살펴보니, 91255개의 행과 39개의 열로 이루어져있습니다. 참고로, df를 출력해봐도 아래로 91255개의 행이 쭉 있어서 화면에 모두 표시 되지 않고 ...으로 생략되어 출력됩니다.

 

df.head( )

: 데이터 프레임 구조 확인

 

df.head( ) 함수로 가장 위의 행을 확인 해보겠습니다. head( )의 안에 숫자를 넣는 만큼 행이 표현되며, 아무것도 입력하지 않을 시엔 5개가 기본적으로 표시됩니다.

 

 

df.info( )

: 데이터 프레임 정보 확인

 

데이터 셋 df의 종합적인 정보는 df.info( ) 함수를 통해 확인 가능합니다. 여기서 주목해서 보실 부분은 Non-Null Count입니다. 결측치가 아닌 데이터의 갯수를 의미합니다. 즉, 91335, 39의 데이터 셋에서 91335 non-null는 결측치가 없는 열(column)이다는 것을 의미하고, 지점명처럼 숫자가 1346개라는 말은 거의 모든 값이 결측치라는 것을 의미합니다.

 

참고로, Dtype의 int64는 정수, object는 문자열, float64는 실수를 의미합니다. 그리고 가장 아래에 보면 데이터 크기가 27메가 정도네요.

 

 

df.isnull( )

: 데이터 프레임에서 결측치를 True, 값이 있으면 False를 반환

 

 

우리는 df.isnull( ) 함수와 sum( ) 함수를 조합해서 각 column들이 몇개의 null값을 가졌는지 확인 가능합니다. 추후 이 값을 사용하기 위해서 null_count 변수에 담아주었습니다. 참고로 null_count 값은 Data frame(2차원 자료)이 아닌 Series(1차원 자료)입니다. 데이터 프레임은 위의 그림처럼 표의 형태이고, 시리즈는 아래와 같이 표의 느낌이 없습니다.

 

 

Series.reset_index( )

: Series 형태의 자료를 DataFrame 자료로 변형

 

 

DataFrame.columns = ["바꿀 컬럼명", ..., (반드시 컬럼 갯수만큼!) ]

: DataFrame의 컬럼명을 바꿈

 

Pandas는 컬럼명을 가지고 데이터를 자주 다룹니다. 그래서 컬럼명을 데이터의 정체성을 잘 표현할 수 있도록 잘 정의해줄 필요가 있습니다. 여기서는 위에서 만들어진 데이터 프레임의 컬럼명인 index와 0을 "컬럼명"과 "결측치수"로 변경해보겠습니다.

 

 

DataFrame.sort_values( by="컬럼명")

저는 데이터 분석을 위해서 결측치가 가장 많은 10개의 컬럼들을 모두 제거한 데이터 프레임을 얻을 예정입니다. 이를 위해서는 결측치수가 많은 순서대로 즉, "결측치수"를 기준으로 내림차순으로 정렬해서 10개의 행만 얻어야 합니다. 이를 위해서는 아래와 같이 코딩하시면 됩니다. 아래의 코드에서 만약 ascending을 입력하지 않으면 기본적으로 ascending=True로 되어있어 오름차순으로 정렬됩니다.

 

 

DataFrame["컬럼명"]

: 데이터 프레임에서 원하는 컬럼만 가지는 Series 생성

 

 

DataFrame["원하는 컬럼명"]을 입력하면 해당 컬럼명만 가지는 Series가 만들어집니다. 잠시 후에 drop( ) 함수를 이용해서 해당 컬럼들을 제거 해주기 위해서 사용할 예정입니다. 이 뿐만 아니라 앞으로 데이터 분석 시 아주 많이 사용되는 함수이니 기억해두면 좋을 것 같습니다.

 

DataFrame.drop( row의 index 혹은 column의 이름, ...(여러개 가능), axis = 0 or 1 )

: 원하는 row나 column을 제거하는 함수

 

df.drop( ) 함수에는 아래의 인자들이 들어갈 수 있습니다.

 

1) row의 index (series나 list 형태도 가능)

2) column의 이름 (series나 list 형태도 가능)

 

이때 주의할 것은 행(row)를 제거할 경우엔 'axis = 0'으로, 열(column)을 제거할 경우엔 'axis = 1'로 설정해주어야 한다는 것입니다.

 

이 예제에서는 위에서 얻었던 drop_columns 시리즈에서 컬럼명들을 리스트 형식으로 변형시켜보겠습니다. 사실 위에서 구한 drop_columns를 그대로 사용해주어도 상관없지만, 리스트로 바꿔서 사용할 경우, 여러 drop case들을 합쳐줄 때 편한 점이 있으므로 알아두시면 좋을 것 같습니다.

 

.tolist( ) 함수를 이용해 시리즈 형태에서 리스트 형태으로 바뀐 것을 확인해보세요. 

 

여기서 얻은 drop_columns_list 리스트를 drop( )함수에 넣어서 처음 데이터 프레임과 무엇이 달라졌는지 확인해봅시다.

 

series 형태의 drop_columns를 사용했을 때

 

list 형태의 drop_columns_list를 사용했을 때

처음의 데이터 프레임 df와 결측치가 많은 10개의 열을 제거한 df_drop의 shape를 비교해보니, 열이 39개에서 29개로 줄어든 것을 확인할 수 있습니다.

 

그리고 df_drop.info( ) 함수를 통해 아래와 같이 용량이 기존 27.2MB에서 20.2MB로 7MB 감소한 것도 확인하실 수 있습니다.

 


오늘은 데이터 분석에서 데이터 전처리 중, 결측치를 다루는 방법에 대해서 간단하게 알아보았습니다.

다음 시간에는 원하는 데이터만 가져오는 방법에 대해서 알아보겠습니다.

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

<데이터 분석 관련 글>

 

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

 

<VSCode에서 주피터 노트북 사용하는 법>

 

2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

 

이번 시간에는 지난 시간 공공데이터포털에서 받은 csv 형식의 데이터를 주피터 노트북으로 불러와서 사용하는 방법에 대해 알아보겠습니다.

 


Jupyter notebook에서 자료 불러오기

 

우선 cmd를 켜고, jupyter notebook을 입력해서 주피터 노트북을 실행시켜줍니다. cmd 창을 켜면 가장 기본 경로 (저의 경우엔 사용자 폴더)를 기준으로 주피터 노트북이 실행됩니다.

 

 

우측 상단의 New를 클릭하시고 Folder를 클릭하시면 Untitled Folder가 생성됩니다.

 

 

폴더의 왼쪽 사각형을 체크하면 좌측 상단에 Rename이 나타납니다. 이걸 클릭하면 팝업창이 나와서 폴더명을 변경하실 수 있습니다.

혹시 한글이름을 인식 못할 수도 있으니, 적당한 영어이름을 지어주도록 합시다. 저는 data_coding이라고 지어보겠습니다.

 

 

새로 생성한 폴더를 클릭해서 들어간 후, 새로운 python3 파일을 생성해줍니다. 생성하면 새로운 탭이 생기면서 이런 화면이 뜨는데 빨간색 사각형 부분을 클릭해서 원하는 파일명으로 변경해줍니다.

 

다시 이전 탭으로 와서 보면 파이썬 파일명이 변경된 것을 보실 수 있습니다. 여기에 아까 받았던 csv 파일을 드래그해서 올려놓으면 용량이 큰데도 업로드 할거냐고 물어보는데 ok를 누르시면 됩니다. 여기서 끝이아니라 다음에 Upload 버튼을 눌러주어야 업로드가 마무리 됩니다.

 

 

업로드가 완료되면 파이썬 파일로 들어가서 코딩을 시작해보겠습니다. 차례대로 한줄씩 코딩하고 실행해보세요.

 

참고로 Shift+Enter를 누르면 현재 셀이 실행되고, 다음 셀이 생성됩니다.

 

import Pandas

 

첫번째는 pandas 패키지를 불러오는 단계입니다.

- %ls: 현재 주피터 노트북이 실행된 경로(폴더)에 있는 파일 목록을 불러옴

- import pandas as pd: pandas 패키지를 pd라는 이름으로 import

 

read_csv( )

 

두번째는 pd.read_csv()함수로 csv 파일을 불러오는 단계입니다.

 

아래 그림과 같이 쌍따옴표 사이에 우리가 다운받았던 csv 파일을 입력해주시면 됩니다.

%ls를 통해서 출력했던 파일명을 복사 붙여넣기 하시면 편해요.

 

위와 같이 쭉 데이터 프레임이 나올텐데요. 자료는 나오지만 상단에 붉은 색 표시로 경고 문구가 나옵니다. 이 경고 문구를 조금 더 자세히 살펴 보겠습니다.

DtypeWarning: Columns (35) have mixed types.Specify dtype option on import or set low_memory=False.
  has_raised = await self.run_ast_nodes(code_ast.body, cell_name,

 

우선 경고 문구의 제목은 DtypeWarnig입니다. 파이썬님이 데이터 타입이 마음에 안든다고 하시네요. have mixed types라는 말에서 뭔가 데이터 타입이 섞여있다는 말인 것 같습니다. 결론적으로 low_memory=False로 set하라고 친절하게 알려주네요. 

 

시키는대로 따라해보니 경고 문구가 사라진 것을 확인 하실 수 있습니다.

 

여기서 알려드릴 꿀팁은 Tab과 Shift+Tap의 기능입니다.

 

Tap

1. 패키지, 함수 참조 및 자동완성

2. 기존 변수 참조 및 자동완성

 

코딩 중간에 Tab를 사용하면 다음에 입력 가능한 코드들이 출력됩니다. 아래의 그림은 pd. 까지 입력한 후 탭을 눌렀을 때의 상태입니다. 만약에 처음 사용하는 패키지에 대해서 잘 모를 때 '패키지명.'을 입력하고 탭을 눌러보시는 건 어떨까요? 예를 들어서 pd.r 혹은 pd.read까지 입력하신 후 탭을 누르시면 read 관련 함수들이 쭉 나오니깐 한 번 확인해보세요.

 

Shift+Tap

이 명령어는 커서가 위치한 코드에 사용된 함수에 대해서 자세히 설명해줍니다. 누구나 처음보는 함수는 '이게 무슨 함수인지', '어떤 인자를 입력받는지' 전혀 모를 수 밖에 없습니다. 그럴 땐 Shift+Tap을 살포시 눌러주세요. 그럼 친절하게 설명이 나올거에요. 모든 설명은 당연히(?) 영어로 나옵니다. 이래서 부모님이 영어를 열심히 하라고 하셨나봅니다...하지만 우리에게는 구글 번역이 있으니 너무 상심하지 맙시다!

 

 

 

마지막으로 이번 데이터에서는 인코딩 문제가 발생하지 않았지만, 아래의 경우처럼 UnicodeDecodeError라고 출력되는 경우가 있습니다.

이 경우는 한글 파일을 인코딩 못해서 생기는 문제로, 위에서 low_memory=False를 입력한 것과 같은 방식으로, encoding="cp949"를 입력해주시면 파일이 정상적으로 불러와집니다.

 


<참고하면 도움되는 글>

 

2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

 

[Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법

안녕하세요, 코린이를 위한 코딩 유치원에 오신 것을 환영합니다. 이번 시간에는 제목처럼 VSCode에서 Jupyter Notebook 사용하는 법 저희 코딩유치원에서 주로 사용하는 IDE는 VSCode입니다. 아래와 같

coding-kindergarten.tistory.com

 

반응형

+ Recent posts