반응형

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

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

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

오늘은 머신러닝에 대해서 공부해보려 합니다. 정말 자주 들었지만 정확히 무엇인지 몰랐던 머신러닝의 개념을 오늘 정리해 보겠습니다.

 

비전공자가 혼자서 독학으로 공부하고 정리한 것이라 잘 못된 점이 있을 수 있으니 양해 부탁드립니다.

 


 

인공지능 / 머신러닝 / 딥러닝

 

 

인공지능(AI): 사람의 지능을 모방하여, 사람이 하는 것과 같이 복잡한 일을 할 수 있게 기계를 만드는 것

머신러닝(ML): 기본적으로 알고리즘을 이용해 데이터를 분석 및 학습하며, 학습한 내용을 기반으로 판단및 예측

딥러닝(DL): 머신러닝의 다양한 방법론 중 하나로 인공신경망에서 발전한 형태의 인공지능

 

 

머신러닝을 설명하려면 먼저 인공지능이 무엇인지부터 알아야합니다.

 

인공지능이란?

 

인공지능(Artifical Intelligence)은 인간의 학습능력, 추론능력, 지각능력, 그외에 인공적으로 구현한 컴퓨터 프로그램 또는 이를 포함한 컴퓨터 시스템입니다. (위키 백과)

 

쉬운 예를 하나 들자면, 개와 고양이 사진을 보고 구분할 수 있도록 알고리즘을 만들어 컴퓨터가 알아서 판단하는 능력을 구현하는 것도 인공지능 기술이라 할 수 있겠습니다.

 

출처. pixabay

 

전통적이고 가장 쉽게 생각할 수 있는 구분 방법은 사람이 개와 고양이를 구분할 수 있는 특징을 알고리즘으로 구현해서 기계(컴퓨터)에 명령을 내려주는 것입니다. 반복되는 형태나 규칙을 패턴이라고 하는데 이런 패턴을 알고리즘으로 구현하는 일을 모델링(Modeling)이라고도 합니다.

 

 

모델링을 사람이 직접하고, 컴퓨터는 그 모델을 단순히 수행하는 역할에서, 머신러닝의 개념이 출현하고 컴퓨팅 파워가 발전하면서 모델링을 컴퓨터가 수행하게 된 것이죠.

 

 

머신러닝이란?

 

머신러닝이란 말그대로 기계(Machine) + 학습(Learning)의 합성어로 기계가 스스로 학습하는 것을 말합니다.

 

무엇을 학습하냐면, 위에서 언급했던 모델을 스스로 학습 합니다. 즉, 머신러닝은 모델을 만드는 하나의 방법론인 것입니다.

 

사람이 컴퓨터에 데이터(개와 고양이 사진)와 도출하고자 하는 판단 결과(이것은 고양이/개입니다) 데이터를 입력해주면, 컴퓨터가 알아서 판단 알고리즘을 모델링 하는 것입니다.

사실 엄밀히 말하면 컴퓨터가 알아서 하는 것은 없습니다. 컴퓨터가 알아서 모델링 하는 것도 사람이 여러가지 기계학습 방법을 만든 것입니다. 어떻게 하면 효율적으로 컴퓨터가 학습을 할 수 있을까를 연구하는 것이 인공지능(AI) 분야의 핵심이라고 생각됩니다.

 

이러한 방법론에는 지도학습, 비지도학습, 강화학습, 그 외 엄청나게 많은 방법론들이 있습니다. 다음에 하나씩 공부하며 포스팅 해보도록 하겠습니다.

 

 

딥러닝이란?

 

딥러닝은 인간 두뇌의 생물학적 신경망에서 영감을 얻어서 만든 머신러닝의 여러 방법론 중의 하나입니다. 딥러닝이 머신러닝 분야에서 너무 핫해서 일반인들에게는 거의 동일 시 되기도 하죠.

 

deep neural networks, convolutional deep neural networks, deep belief networks와 같은 다양한 딥 러닝 기법들이 컴퓨터 비전, 음성인식, 자연어 처리, 음성/신호처리 등의 분야에 적용되어 최첨단의 결과들을 보여주고 있습니다.

 

2016년 3월 한국을 떠들썩 하게 했던 알파고(AlphaGo)도 딥러닝 기술을 활용한 바둑 프로그램입니다.

 

딥러닝만 해도 엄청난 방법론들이 있고 그 개념이 어렵고 방대해서 이 부분도 추후 공부하며 포스팅 하도록 하겠습니다.

 


<참고 자료>

 

https://www.zendesk.kr/blog/machine-learning-and-deep-learning/

 

딥 러닝과 머신 러닝의 차이

By Brett Grossfeld, 콘텐츠 마케팅 부관리자 Published 2020-01-23 마지막 업데이트 날짜 2020-07-20

www.zendesk.kr

 

 

 

 

 

반응형
반응형

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

 

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

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(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_패스트 캠퍼스 유료강의

반응형
반응형

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

 

 

<참고하면 좋은 글>

 

2021.03.05 - [파이썬 기초/개발환경 구축] - 파이썬 개발환경 구축 3편 (VS code 설치 및 초기설정, 한글패치)

 


 

오늘은 VScode의 수 많은 익스텐션 중에서 특히 코드를 예쁘고 가독성 좋게 만들어주는 비쥬얼 관련 익스텐션을 4가지 소개드리겠습니다.

 

 

<요약>

 

1. Material Theme : 여러가지 테마 설정 가능

2. Marterial Icon Theme : 탐색기에 표현되는 파일의 아이콘 예쁘게 변경됨

3. Bracket Pari Colorizer - 괄호마다 코드에 색깔을 다르게 줌 (대괄호, 중괄호 소괄호 모두 3가지 컬러 반복)

4. indent-rainbow - 들여쓰기 된 부분을 4가지 컬러(반복)로 하이라이트 표시

 

 

1. Material Theme

 

가장 먼저 소개드릴 Extension은 Material Theme입니다. VScode 좌측의 Extensions 탭을 클릭하신 후, 검색창에 아래와 같이 material theme이라고 검색해줍니다.

 

그러면 아래와 같이 두 가지 Extension이 나타날텐데 그냥 둘 다 Install 해주세요. 어차피 이어서 설치할테니까요!

 

 

설치가 완료되었다면 사용방법은 간단합니다.

 

1) 좌측하단의 설정 아이콘을 클릭 후, Color Theme을 선택

2) 상단에 출력되는 여러 테마들을 클릭해보면서 마음에 드는 테마를 선택해주면 끝!

 

참 쉽죠?

 

 

 

2. Material Icon Theme

 

두번째로 소개드릴 Extension은 Material Icon Theme입니다. 이 Extension은 코딩에 실질적으로 도움이 되지는 않지만 그냥 탐색기에 보이는 폴더와 파일이 예뻐보여서 사용합니다.

 

다양한 Icon Theme

 

 

설치 전과 후의 비교 사진입니다. 보면 아시겠지만 적용 전에도 아이콘이 없는 것은 아니랍니다.

 

적용 전

 

적용 후

 

 

3. Bracket Pair Colorizer 2

 

다음으로 알려드릴 Extension은 Bracket Pari Colorizer입니다. 이 Extension은 코딩을 하면은 무조건 사용하게 되는 대괄호[ ], 중괄호{ }, 소괄호( )에 색깔을 입혀주는 역할을 합니다.

 

괄호가 많아지게 되면 같은 괄호끼리는 어디가 열렀고 닫혔는지 헷갈릴 수 있는데, 그럴 때 도움이 될 것 같네요.

 

설치 시 바로 적용됨

 

마찬가지로 설치방법은 colorizer를 검색한 후, Install을 눌러주시면 됩니다. 여기서 주의하셔야 될 점은 버전 1과 버전 2가 공존하는데, 버전 2를 설치해주시는 걸 추천드립니다. 이유는 아래에 설명해두었습니다.

 

 

<Bracket Pair Colorizer 2를 설치하는 이유>

 

버전 2의 F.A.Q를 확인해보니 아래와 같이 설명해 놓았습니다.

 

 

요약하자면,

 

1) 속도와 정확도를 크게 높임

2) 하위 호환성이 손상되어 새 버전이 출시하게 됨

 

 

 

4. indent-rainbow

 

오늘 마지막으로 소개드릴 Extension은 indent-rainbow 입니다. 이름에서 딱 느낌이 오시겠지만 indent(들여쓰기)를 할 때, 무지개 색으로 구분을 해주는 Extension입니다.

 

indent-rainbow 설치

 

설치 전과 후의 이미지는 아래와 같습니다. indent 마다 노란색, 초록색, 빨간색, 파란색이 반복된답니다.

 

설치 전
설치 후

 

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

 

여러분들의 코딩에 많은 도움이 되었길 바래봅니다.

 

감사합니다.


<참고 자료>

 

유튜브 - 드림코딩 by 엘리

https://www.youtube.com/watch?v=bS9yTI2fC0w 

반응형
반응형

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

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

2021.07.09 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_4편.눈금(Tick), 그리드(Grid) 표시하는 법

2021.07.11 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_5편.다중 그래프 그리는 방법(ft. figure, subplot)


먼저 기본 설정을 하고 시작하겠습니다.

 

import matplotlib.pyplot as plt
import numpy as np

plt.rc('font', family='NanumBarunGothic') 
plt.rcParams["figure.figsize"] = (8, 6)

 

 

막대 그래프

: plt.bar(x, y)

 

막대 그래프를 그리는 방법은 지금까지 배운 꺾은선 그래프와 같지만 딱 하나 다릅니다. plt.plot를 plt.bar로만 바꿔주시면 됩니다.

단, plt.bar( ) 함수는 반드시 x, y축 데이터를 모두 넣어 주어야합니다. plt.plot( ) 함수 처럼 자동으로 x축 index를 만들어 주지 않고 에러를 출력하거든요.

 

당연한 이야기지만 x축 데이터와 y축 데이터의 갯수가 같아야합니다.

 

# data 생성
data_y = np.arange(1, 11)
data_x = np.arange(1, 11)

# 꺾은선 그래프 그리기
plt.subplot(2, 1, 1)
plt.plot(data_y)

# 막대 그래프 그래프
plt.subplot(2, 1, 2)
plt.bar(data_x, data_y)

# 그래프 출력
plt.show()

그래프 형태 비교(Line vs Bar)

 

막대별로 다른 색상을 넣거나, 막대의 폭, 테두리 등의 스타일 설정도 가능합니다. 여기서는 다양한 그래프를 다룰 예정이므로 자세한 내용은 글 마지막의 참고 자료를 참고해주세요.

 

참고로 label, legend, title 등은 지난 시간에 배운 내용이 똑같이 적용 가능하답니다.

 

 

 

수평 막대 그래프

: plt.barh(y, x)

 

수평 막대 그래프는 위에서 배운 막대 그래프를 90도 회전시켜서 눞혀 놓았다고 생각하시면 됩니다.

인자로 y축 데이터를 먼저 받는다는 점만 주의하시면 되겠습니다. 그 외의 기타 설정들은 위에서 설명드린 내용과 동일합니다.

 

# data 생성
data_y = np.arange(11, 21)
data_x = np.arange(1, 11)

# 수평 막대 그래프 그래프
plt.barh(data_y, data_x)

# 그래프 출력
plt.show()

 

 

파이 차트 

: plt.pie( )

 

파이 차트는 여러가지 항목의 비율(%)를 효과적으로 나타낼 수 있는 그래프입니다. 참고로 autopct라는 파라미터를 설정해주지 않으면 데이터가 그래프에 표시되지 않는답니다.

 

# ratio (모두 합쳐서 100이 되지 않으면 자동으로 전체의 합에서 각각의 비율을 나타냄)
data = [15, 30, 20, 35]

plt.pie(data, autopct='%.1f%%')

plt.show()

아주 순수 그자체의 pie 차트 -> 못써먹음

 

여기까지만 알려드리면 파이차트는 정말 쓸모가 없을 듯 하여, 옵션들을 설정해서 쓸만하게 만들어보겠습니다.

 

많은 옵션들이 있지만 labels, explodes, colors, shadow 정도면 충분할 듯 하여, 이것들만 다루었습니다.

 

ratio = [15, 30, 20, 35]

# 각 영역의 범례
labels = ['A', 'B', 'C', 'D']

# 각 영역이 중심으로부터 떨어진 거리
explode = [0.05, 0.05, 0.05, 0.05]

# 각 영역의 색상
colors = ['lightpink', 'lightyellow', 'lightgreen', 'lightskyblue']

plt.pie(ratio, autopct='%.1f%%', labels=labels, explode=explode, colors=colors, shadow=True)

plt.show()

 

산점도 그래프

: plt.scatter( )

 

산점도 그래프는 데이터들이 얼마나 분포해 있는지, 그 값의 크기는 어느정도인지를 한 눈에 볼 수 있도록 표현한 그래프입니다.

 

# 0~1 사이의 실수를 무작위으로 50개 생성 (x, y 좌표로 활용)
x = np.random.rand(50)
y = np.random.rand(50)

# 각 점들의 색상 부여를 위한 Array 생성 (데이터와 동일한 50개 필요)
colors = np.arange(50)

# 각 점들의 면적을 부여해서 다양한 점의 면적 표현
area = x * y * 2000

# 0~1 사이의 투명도를 설정하여 점이 겹쳤을 때를 더 예쁘게 표현 가능
alpha= 0.5

# 산점도 그래프 그리기 (여기서 cmap은 matplotlib에 정의된 컬러 조합임)
plt.scatter(x, y, s=area, c=colors, alpha=alpha, cmap='hsv')

# 산점도 그래프 우측에 컬러가 무엇을 뜻하는지 컬러바 표현
plt.colorbar()

# 그래프 출력
plt.show()

 

 

c(color)나 s(area), alpha, colorbar( )와 같은 설정을 해주지 않으면 아래와 같이 허접한(?) 산점도 그래프를 얻을 수 있습니다.

 

위에서 같이 예쁜 컬러를 얻기 위해서는 cmap 설정을 할 수 있으며, 그 양이 방대해서 참고 자료로 대체하도록 하겠습니다. 원하는 컬러맵을 골라서 사용하시면 되겠습니다.

 

https://codetorial.net/matplotlib/set_colormap.html

 

Matplotlib 컬러맵 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np np.random.seed(0) arr = np.random.standard_normal((8, 100)) plt.subplot(2, 2, 1) # plt.scatter(arr[0], arr[1], c=arr[1], cmap='spring') plt.scatter(arr[0], arr[1], c=arr[1]) plt.spring() plt.title('

codetorial.net

 


<참고 자료>

 

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

 

2. Codetorial_Matplotlib 산점도 그리기

https://codetorial.net/matplotlib/scatter_plot.html

반응형
반응형

 

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

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

2021.07.09 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_4편.눈금(Tick), 그리드(Grid) 표시하는 법

 


 

오늘은 여러가지 그래프를 그리는 다양한 방법에 대해서 공부해 보겠습니다.

 

단일 그래프 그리기

 

지금까지 배워왔던 단일 그래프를 그리는 방법입니다. plt.show( )는 주피터 노트북을 사용하신다면 따로 안쓰셔도 그래프가 출력된답니다.

 

# data 생성
data = np.arange(1, 11)

# 그래프 그리기
plt.plot(data)

# 그래프를 보여주는 코드 (주피터 노트북에서는 안해줘도 그래프 출력됨)
plt.show()

 

 

다중 그래프 그리기

 

위에 출력된 그래프의 프래임을 캔버스(Canvas)라고 합니다. 하나의 캔퍼스 위에 여러 그래프를 그리는 방법은 아래와 같습니다.

 

data1 = np.arange(1, 11)
plt.plot(data1)

data2 = np.arange(11, 21)
plt.plot(data2)

plt.show()

 

 

그래프 나누어서 그리기 (다중 캔버스)

 

만약 캔버스를 하나 더 만들어서 그래프를 따로 나타내고 싶을 땐 어떻게 해야할까요? 그럴땐 plt.figure( ) 함수를 추가해주면 된답니다.

 

data1 = np.arange(1, 11)
plt.plot(data1)

# 캔버스  추가
plt.figure()

data2 = np.arange(11, 21)
plt.plot(data2)

plt.show()

 

 

한 캔버스 안에 여러 그래프를 분리해서 그리기

 

방금 배운 plt.figure( )를 사용하면 미리 설정해줬거나 기본적으로 설정된 그래프 사이즈가 그래프 마다 적용되어 스크롤이 너무 길어집니다. 그렇게 되면 그래프들을 한눈에 볼 수가 없겠죠?

 

좀 더 효율적인 방법은 plt.subplot( )을 그려주는 것입니다. subplot(행, 열, 인덱스)의 순으로 적어주시면 됩니다.

 

# 2행 2열로 canvas를 나누어 1번(1행 1열) 칸에 subplot 그리기
data1 = np.arange(1, 11)
plt.subplot(2, 2, 1)
plt.plot(data1)

# 2행 2열로 canvas를 나누어 3번(2행 1열) 칸에 subplot 그리기
data2 = np.arange(11, 21)
plt.subplot(2, 2, 3)
plt.plot(data2 * 3)

# 2행 2열로 canvas를 나누어 4번(2행 2열) 칸에 subplot 그리기
data3 = np.arange(21, 31)
plt.subplot(2, 2, 4)
plt.plot(data3 ** 2)

plt.show()

 

이번 시간에는 심플하게 여러 그래프를 그리는 다양한 방법을 다루어보았습니다.

 

오늘 배우신 내용은 복합적으로 적용가능하니, 스스로 여러가지를 조합해보면서 연습해보시기를 추천드립니다.

 


<참고자료>

 

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

반응형
반응형

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

 

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

 

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

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

 


 

오늘은 지난 시간에 이어서 matplotlib.pyplot 모듈을 이용해서 그래프의 배경에 눈금(Tick)과 격자(Grid)를 표시하는 법에 대해서 공부해보겠습니다.

 

 

눈금 표시

 

우선 기본적인 아주 순수한 상태의 그래프를 하나 그려보겠습니다.

 

plt.plot([1,2,3,4])

 

자, 여기에 눈금들이 이미 있습니다. 자동으로 0.5 간격으로 눈금을 그려준 것을 보실 수 있을거예요.

 

여기서 배울 내용은 이 눈금들을 우리가 원하는대로 설정해주는 것입니다.

 

x축의 눈금은 xticks( ), y축의 눈금은 yticks( )로 설정해줄 수 있습니다. Numpy의 어레이로도 설정 가능한데 간격도 설정해줄 수 있으니, 일정한 간격의 눈금을 매우 세분화해서 표현하고 싶을 때 사용해주면 효과적일 것 같아요!

 

plt.plot([1,2,3,4])

# x축 눈금 설정
plt.xticks([0, 1, 2, 3])

# Numpy의 어레이로도 설정 가능

import numpy as np

# y축 눈금 설정
plt.yticks(np.arange(1, 5, 1))

 

 

눈금에 레이블 달기

 

눈금에 숫자가 아닌 문자를 표시해줄 수도 있답니다.

 

import numpy as np

x = np.arange(0, 100, 0.2)

plt.plot(x, x**2)

plt.title('코딩유치원 월간 방문자 수')
plt.xticks([0, 20, 40, 60, 80, 100], labels=['FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL'])
plt.yticks([0,400,1600,3600,6400,10000], ('0회','400회','1600회', '3600회', '6400회','10000회'))

 

눈금 스타일 설정

 

눈금 스타일은 tick_params( ) 함수를 이용해서 설정해줄 수 있습니다.

 

<설정 예시>

plt.tick_params(axis='x', direction='in', length=5, pad=6, labelsize=10, labelcolor='blue', top=True)

 

어떤 파라미터들이 있고 어떻게 설정 가능한지 표로 정리해놓았으니, 외우실 필요 없이 필요할 때 보시고 코딩하시면 되겠습니다.

 

기능 파라미터 인자 기본값
적용축 선택 axis 'x', 'y', 'both' 'both'
눈금 방향 direction 'in', 'out', 'inout' 'out'
눈금 길이 length int (정수) 3
눈금 위치 top/bottom/left/right True, False bottom / left = True
top / right = False
눈금 굵기 width int (정수) 1
눈금 색상 color 지난 글 (matplotlib 3편) 참조 'black'
여백 (눈금과 레이블 간격) pad int (정수) 3
레이블 크기 labelsize int (정수) 10
레이블 색상 labelcolor 지난 글 (matplotlib 3편) 참조 'black'

 

 

격자 표시

 

격자 표시는 이 한 줄의 코드로 아주 쉽게 설정해줄 수 있습니다.

 

plt.grid(True)

 

방금 전 만들어본 '코딩유치원 월간 방문자 수' 그래프에 적용해 보겠습니다. 조금 더 가시성이 좋네요.

 

 

축 지정

 

만약 축 하나에만 선을 설정해주시고 싶다면, 아래와 같이 파라미터를 설정해주시면 됩니다. 따로 결과 이미지는 넣지 않겠습니다.

 

# 가로선이 그려짐

plt.grid(True, axis='y')

# 세로선이 그려짐

plt.grid(True, axis='x')

 

 

그리드  스타일 설정

 

눈금과 마찬가지로 여러가지 설정이 가능합니다.

 

 

<설정 예시>

plt.grid(True, color='red', alpha=0.5, linestyle='--')

 

수 많은 파라미터들 중 사용할 만한 것만 골라서 표로 정리하였습니다.

기능 파라미터 인자 기본값
라인 색상 color 지난 글 (matplotlib 3편) 참조 'gray'
라인 스타일 linestyle 지난 글 (matplotlib 3편) 참조 '-' (실선)
라인 투명도 alpha 0~1.0 사이의 float 1
라인 굵기
linewidth int (정수) 1

 

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

 

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

 


<참고 자료>

 

https://codetorial.net/matplotlib/set_grid.html

 

Matplotlib 그리드 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2, 0.2) plt.plot(x, x, 'bo') plt.plot(x, x**2, color='#e35f62', marker='*', linewidth=2) plt.plot(x, x**3, color='springgreen', marker='^', markersize=9) plt.grid(True, axis='y', co

codetorial.net

 

 

https://matplotlib.org/stable/api/pyplot_summary.html

 

matplotlib.pyplot — Matplotlib 3.4.2 documentation

cubehelix Unlike most other color schemes cubehelix was designed by D.A. Green to be monotonically increasing in terms of perceived brightness. Also, when printed on a black and white postscript printer, the scheme results in a greyscale with monotonically

matplotlib.org

 

 

 

 

 

반응형
반응형

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

 

 

오늘은 엑셀이나 웹브라우저처럼 파이썬 전용 패키지가 없어서 조작을 할 수 없는 경우에 아주 유용한 PyAutoGUI라는 패키지에 대해서 배워보겠습니다.

 

저는 회사에서 SAP사의 ERP(Enterprise Resource Planning)를 사용하는데, 이걸 자동화 시키려고 하니깐 무료로 제공하는 API가 없어서 고민하던 중 해당 패키지를 사용하면 좋겠다는 생각이 들어서 공부해보게 되었답니다.

 

<PyautoGUI 관련 지난 글>

 

2021.06.14 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_1편.마우스 조작하기

2021.06.15 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_2편.키보드 조작하기(ft.한글 입력 방법)

2021.06.19 - [파이썬 패키지/사무자동화] - [Python / PyAutoGUI] 파이썬 마우스/키보드 조작 패키지_3편.원하는 이미지를 찾아서 클릭하기

 

 

오늘은 지난 시간에 이어서 작동중에 사용자의 확인이 필요하거나 문자 혹은 패스워드를 입력 받아야 하는 경우에 대처할 수 있는 메세지 박스 기능에 대해 배워보겠습니다.

 


 

알림창 띄우기 (OK)

: alert( )

 

가장 기본적인 알림을 띄워보겠습니다. 

 

import pyautogui

pyautogui.alert('코딩유치원 자주 찾아와주세요.')

 

OK 하신겁니다~

 

alert( ) 함수에는 어떤 파라미터가 있는지 한 번 보겠습니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
button (str) 원하는 버튼 이름
(bool) True/False
OK
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

alert( ) 함수의 버튼을 클릭하거나 종료하면는 위에서 설정했던 버튼 이름을 문자열로 리턴해줍니다.

만약 timeout을 설정하셨다면 설정한 시간이 끝나고 timeout을 문자열로 리턴해줍니다.

 

아래의 예제 코드를 실행하셔서 어떻게 작동하는지 확인해보세요.

alert = pyautogui.alert('코딩유치원 자주 찾아와주세요.', title='코딩유치원', button='확인', timeout = 3000)

print(alert)

 

 

확인창 띄우기 (OK / Cancel)

: confirm( )

 

위에서 배운 알림창과 다른 것은 버튼 2개 중 하나를 선택할 수 있다는 것입니다.

 

import pyautogui

pyautogui.confirm('계속 진행하시겠습니까?')

 

 

confirm( ) 함수도 어떤 파라미터가 있는지 보겠습니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
buttons (tuple) ('버튼 이름1', '버튼 이름2') OK & Cancel
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

이 함수 역시 위에서 배운 alert( )와 같이 선택한 버튼의 버튼명을 문자열로 리턴해줍니다.

 

 

텍스트 입력창 띄우기

: prompt( )

 

이번에는 텍스트를 입력받는 것 까지 추가된 창을 띄워보겠습니다.

 

import pyautogui

text = pyautogui.prompt('원하는 메시지를 입력해주세요')

 

 

마찬가지로 설정 가능한 파라미터를 보겠습니다. default 말고는 이미 봤던 친구들이네요.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
default (str) 기본적으로 입력창에 입력된 문자열 X
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

default 옵션이 뭔가 했더니 메시지 입력창에 처음부터 입력되어 있는 메시지였습니다.

 

prompt( ) 함수는 OK 버튼을 누르면 위에서 입력받은 텍스트를 문자열로 리턴해주며, Cancel 버튼을 누를 시엔 None을 리턴해줍니다.

 

 

비밀번호 입력창 띄우기

: password( )

 

이 함수는 위에서 배운 prompt( ) 함수와 같지만 입력 시에 *를 출력하여 보안을 위한 기능을 추가한 함수입니다.

 

 

위의 prompt( ) 함수와 다른 파라미터는 mask 하나입니다. 만약 mask를 '='로 해주면 * 대신에 =으로 출력됩니다.

 

파라미터 (자료형) 입력값 기본값
text (str) 원하는 메시지 X
title (str) 창 제목 X
default (str) 기본적으로 입력창에 입력된 문자열 X
mask (str) 원하는 마스크 기호 *
timeout (int) msecond (단위: 1/1000초) None (시간제한 없음)

 

password( ) 함수는 prompt( ) 함수와 마찬가지로 OK 버튼을 누르면 위에서 입력받은 텍스트를 문자열로 리턴해주며, Cancel 버튼을 누를 시엔 None을 리턴해줍니다.

 

 

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

 

오늘도 코딩유치원을 찾아주신 모든분들께 감사합니다.


<참고 자료>

 

https://pyautogui.readthedocs.io/en/latest/msgbox.html

 

Message Box Functions — PyAutoGUI documentation

PyAutoGUI makes use of the message box functions in PyMsgBox to provide a cross-platform, pure Python way to display JavaScript-style message boxes. There are four message box functions provided: The prompt() Function >>> prompt(text='', title='' , default

pyautogui.readthedocs.io

 

반응형
반응형

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

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

 

 

오늘은 지난 시간에 이어서 matplotlib.pyplot 모듈을 이용해서 그래프의 선 색상, 선 종류, 마커의 종류를 설정하는 법에 대해서 공부해 보겠습니다.

 

선 색상, 종류, 마커 변경하기

 

선 색, 종류, 마커를 변경하기 가장 쉬운 방법은 아래의 표와 코드를 참고하셔서 조금씩 바꿔서 사용하는 것입니다.

 

 

 

<사용 예시>

plt.plot([1, 2, 3, 4], [2, 3, 5, 10], color='r', marker='o', linestyle='--')

 

보통은 이것만으로 충분하니깐 더 많은 컬러와 라인 스타일, 마커가 필요하실 때, 아래의 내용을 참고하시는 걸 추천드립니다.

 

 

선 색깔

 

방금 전 위에서 배운 내용에서 color 파라미터를 더 다양하게 설정하는 방법은 CSS 컬러를 사용하는 방법입니다. 참고로 CSS 컬러는 Hex code를 CSS에서 별도로 정의한 색상들입니다.

 

<사용 예시>

plt.plot([1, 2, 3, 4], [2, 3, 5, 10], color='tomato')

 

 

 

추가적으로 Cycler라는 Matplotlib 별도 정의 컬러들도 있습니다. 'C0'~'C9' 까지 정의되어 있으며 사용 방법은 동일합니다.

 

그럴 일을 거의 없을 것이라 생각되지만 나만의 마음에 드는 컬러를 고르고 싶으시다면, 아래 사이트에 들어가서 원하는 컬러를 만들어서 Hex code로 가져 오실 수 있습니다.

 

https://www.w3schools.com/colors/colors_hexadecimal.asp

 

Colors HEX

 

www.w3schools.com

 

 

선 종류

 

아마도 선을 구분하는데에는 색상으로 충분하겠지만 비슷한 그래프끼리 조금 더 세분화 해서 보여주어야 할 때에는 선 종류까지 설정해주는 것이 좋겠죠?

 

선 종류를 변경하는 방식은 위에서 배웠던 것을 포함하여 3가지입니다. 1, 2번 방법은 표현 방식만 다를뿐 선의 종류가 4가지로 제한되지만 심플하게 사용할 수 있으며, 3번 tuple 방식은 조금 복잡하지만 커스터마이징이 가능합니다.

 

1번 방법 2번 방법 3번 방법 (tuple)
‘ - ‘  'Solid' '(0, (1, 1))'
‘ - - ‘ 'Dashed' '(0, (1, 5))'
‘ : ‘  'Dotted' '(0, (5, 1))'
‘ -. ‘  'Dash-dot' '(0, (3, 5, 1, 5))'

 

 

주석을 달아두었으니 잘 보시고 원하는 옵션을 선택해서 사용하시면 되겠습니다.

 

<사용 예시>

# 포맷 문자열 방식 (‘ - ‘ (Solid), ‘ - - ‘ (Dashed), ‘ : ‘ (Dotted), ‘ -. ‘ (Dash-dot))
plt.plot([3, 3, 3], '-', color='C0', label='Solid')

# linestyle 지정 방식
plt.plot([2, 2, 2], linestyle='dashed', color='C0', label="'dashed'")

# linestyle에 튜플 방식 (커스터마이즈 가능)  --> 4개 이상의 선이 동시에 필요할 때 사용
plt.plot([1, 1, 1], linestyle=(0, (3, 5, 1, 5)), color='C0', label='(0, (3, 5, 1, 5))')

plt.legend(loc=(0.6,0.7), ncol=1, fontsize=7)

 

 

 

<linestyle 옵션 종류>

출처. Codetorial_Matplotlib 강의

 

마커 종류

 

마커는 값을 표시하는 점의 모양을 의미합니다. 특색 있는 마커를 사용하면 가시성이 좋아지는 장점이 있습니다.

 

<사용 예시>

plt.plot([4, 5, 6], marker="H")
plt.plot([3, 4, 5], marker="d")
plt.plot([2, 3, 4], marker="x")
plt.plot([1, 2, 3], marker=11)
plt.plot([0, 1, 2], marker='$Z$')

 

 

<마커 종류>

 

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

 

다음 시간에는 그래프 배경에 눈금과 그리드를 표시하는 법, 축 스케일 및 2차 3차 곡선을 그리는 법에 대해서 공부해보겠습니다.

 


<참고 자료>

 

https://codetorial.net/matplotlib/set_linestyle.html

 

Matplotlib 선 종류 지정하기 - Codetorial

예제 import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 4, 4], '-', color='C0', label='Solid') plt.plot([1, 2, 3], [3, 3, 3], '--', color='C0', label='Dashed') plt.plot([1, 2, 3], [2, 2, 2], ':', color='C0', label='Dotted') plt.plot([1, 2, 3], [1, 1

codetorial.net

 

반응형
반응형

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

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

 

오늘은 matplotlib.pyplot 모듈을 이용해서 그래프를 그리는 법에 대해서 공부해 보겠습니다.

 


 

꺾은선 그래프

 

matplotlib.pyplot 모듈의 plot() 선(Line) 또는 마커(Marker) 그래프 그리기에 사용되는 함수입니다.

 

 

 

데이터 입력하기

 

우선 가장 기본적인 그래프인 선(Line) 그래프를 그려보겠습니다. 보통 그래프를 그리면 (x, y) 값이 필요하죠?

 

pyplot에서는 x값과 y값을 리스트로 묶어서 plt.plot([X값 리스트], [Y값 리스트])으로 값을 입력해줍니다. 참고로 리스트 대신에 튜플이나 Numpy Array 형태로도 데이터를 입력할 수 있답니다.

 

import matplotlib.pyplot as plt

# plt.plot([X값 리스트], [Y값 리스트])

plt.plot([1, 2, 3, 4], [10, 50, 30, 100])

 

만약 plt.plot( ) 안에 리스트를 하나만 넣어주면 어떻게 될까요? 오류가 발생할까요?

 

plt.plot([1,2,3,4])

 

 

정답은 "자동으로 y값 리스트로 판단하여, 0, 1, 2, 3 순의 x값을 자동으로 넣어서 그래프를 그려준다" 입니다.

 

 

Label(축 이름) 넣기

 

그래프를 그리면 X축과 Y축이 무엇을 뜻하는지 반드시 명시해 주어야 합니다. 그럴 때 사용하는 것이 label 함수입니다.

 

기능 파라미터 xlabel( )의 인자 ylabel( )의 인자
레이블 여백 labelpad int (정수) int (정수)
레이블 위치 loc 'left', 'center', 'right' 'bottom', 'center', 'top'

 

plt.xlabel('x축 레이블', labelpad=30, loc='right')
plt.ylabel('y축 레이블', loc='top')

 

 

Legend(범례) 표시

 

Legend는 그래프에 데이터의 종류를 표시하기 위한 텍스트입니다. 한국어로는 범례를 의미합니다.

여러 데이터들이 동시에 그래프 위에 존재할 때 구분하기 위해서 사용합니다.

 

사용 방법은 plot( ) 함수 안에서 label 파라미터에 문자열을 입력해준 후, plt.legend( ) 함수를 이용해 출력해주는 방식입니다.

 

plt.plot([1,2,3,4],[10,50,30,100], label='코딩유치원')

plt.legend()

 

 

범례의 위치를 바꾸고 싶으시다면 아래와 같이 설정 가능합니다. 0.0~1.0 사이의 값이 가능하니 바꾸어 가면서 위치를 조정해보세요.

# 그래프 좌측 하단
plt.legend(loc=(0.0, 0.0))

# 그래프 중앙
plt.legend(loc=(0.5, 0.5))

# 그래프 우측 상단
plt.legend(loc=(1.0, 1.0))

 

그 외 옵션들(범례끼리 배치, 폰트 크기, 테두리)도 많지만 필수라고 생각하는 것만 다루고 넘어가도록 하겠습니다.

 

 

Title (그래프 제목) 표시

 

그래프 이름은 아래와 같이 간단하게 추가해 줄 수 있습니다.

또한 잘 사용할 것 같지는 않지만 제목의 위치를 설정 가능합니다. 옵션은 위에서의 xlabel( ) 함수와 동일합니다.

 

plt.title('그래프 제목')

# plt.title('그래프 제목', loc='right', pad=20)

 

축 범위 지정하기

 

그래프 축의 범위는 설정을 안해주면 자동으로 약간의 여유를 두고 출력되는 것으로 보입니다.

잘은 모르지만 추측컨대, 해당 함수는 그래프 전체를 보기 보다는 원하는 범위만 그래프로 나타내고 싶을 때 사용할 것으로 예상됩니다.

 

plt.plot([1,2,3,4],[10,50,30,100])

# [X최소값, X최대값, Y최소값, Y최대값]
plt.axis([1, 3, 10, 60])

 

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

 

다음 시간에는 선, 마커의 종류와 색상을 바꾸는 방법에 대해서 공부해보겠습니다.


<참고 자료>

 

https://codetorial.net/matplotlib/set_title.html

 

Matplotlib 타이틀 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2, 0.2) plt.plot(x, x, 'bo') plt.plot(x, x**2, color='#e35f62', marker='*', linewidth=2) plt.plot(x, x**3, color='forestgreen', marker='^', markersize=9) plt.tick_params(axis='both'

codetorial.net

 

반응형
반응형

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

 

 

오늘은 데이터 분석의 꽃이라 불리우는 데이터 시각화를 도와주는 라이브러리에 대해 배워보겠습니다.

 

matplotlib

: 파이썬 기반 시각화 라이브러리

 

1) 파이썬 표준 시각화 도구라고 불릴만큼 다양한 기능 지원

2) 세부 옵션을 통하여 아름다운 스타일링 가능

3) 다양한 그래프를 그릴 수 있음 

4) pandas와 연동이 용이함

 

 

다양한 그래프의 예시는 아래의 공식문서를 참고해주세요.

 

https://matplotlib.org/stable/gallery/index.html

 

Gallery — Matplotlib 3.4.2 documentation

Gallery This gallery contains examples of the many things you can do with Matplotlib. Click on any image to see the full image and source code. For longer tutorials, see our tutorials page. You can also find external resources and a FAQ in our user guide.

matplotlib.org

 

 

matplotlib 불러오기

 

matplotlib 라이브러리에는 다양한 패키지가 있지만 저희는 거의 pyplot만 사용할 예정입니다. pyplot은 numpy를 np, pandas를 pd로 사용하 듯이 plt로 줄여서 사용합니다.

 

# matplotlib.pyplot만 import 함

import matplotlib.pyplot as plt

 

matplotlib 기초

 

우선 정말 기본적인 그래프를 하나 그려보겠습니다.

 

plt.plot([1,2,3,4])
plt.ylabel('y-label')
plt.show()

 

 

그래프가 출력이 되었습니다. 오늘은 코드가 무엇을 의미하는지는 생각하지 말고 넘어가도록 하겠습니다.

 

 

 

<참고. 구 버전의 주피터 노트북의 경우, 아래의 설정을 해주어야 그래프가 표시됨>

 

저의 경우엔 정상적으로 그래프가 출력되었으나, 구 버전의 주피터 노트북을 사용하시는 분은 아래의 코드를 입력해주셔야 그래프가 정상적으로 출력된다고 합니다.

%matplotlib inline

 

 

한글 폰트 설정

 

별도로 한글 폰트 설정을 해주지 않으면 아래와 같이 그래프에 한글이 들어갔을 때 깨져서 나오게 됩니다.

 

참고로 데이터 분석은 Jupyter notebook과 Colab(구글에서 만듦)을 주로 이용하며, 두 가지 웹 기반 IDE에서 한글 폰트 설정하는 방법을 모두 알려드리도록 하겠습니다.

 

plt.plot([1,2,3,4])
plt.ylabel('한글 깨짐 확인')
plt.show()

 

문제 현상

 

 

주피터 노트북 한글폰트 설정

 

코딩유치원에서 주로 사용하는 주피터 노트북의 matplotlib 한글 폰트 설정법은 아래와 같습니다. 아주 간단하죠?

 

import os


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

if os.name == 'posix':

    plt.rc("font, family="AppleGothic")

else

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

 

한글과 영어 모두 잘 나오는 것을 확인 할 수 있습니다.

 

Colab 한글폰트 설정

 

주피터 노트북이 아닌 Colab을 사용하시는 분은 아래의 코드를 실행시켜 주세요.

 

# 네이버 나눔 폰트 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

 

실행이 완료된 후에는 상단의 런타임 메뉴에서 런타임 다시 시작을 클릭해주신 후, 그 전에 실행했던  라이브러리 import와 데이터 셋 불러오기를 다시 해주셔야 합니다.

 

 

그 다음엔 아래의 코드로 font를 'NanumBarunGothic'으로 설정해 주세요. 폰트는 Nanum 폰트 중 아무거나 해주셔도 됩니다.

결과는 주피터 노트북과 같으니 생략하도록 하겠습니다.

plt.rc('font', family='NanumBarunGothic') 

 

 

기타 설정

 

그래프의 글씨가 흐릿하게 보이는 문제 해결

 

%config InlineBackend.figure_format = 'retina'

 

문제 현상

 

 

문제 해결 후 그래프 이미지

: 그래프가 크고 뚜렷하게 출력됨

 

 

그래프 크기 설정

 

데이터가 얼마나 많은가에 따라서 데이터들이 너무 가까이 붙어있거나 너무 큰 경우도 있습니다. 이럴 땐 아래의 코드를 이용해 적절한 크기로 조절해서 출력해보세요.

 

plt.rcParams["figure.figsize"] = (4, 3)  # (x, y) 그래프 크기 설정

 

 

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

 

다음 시간부터는 pyplot 패키지에 대해서 하나씩 공부해보겠습니다.


<참고 자료>

 

1. 파이썬으로 시작하는 데이터 사이언스_네이버 부스트코스 무료강의

https://www.boostcourse.org/opencourse

 

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

 

반응형

+ Recent posts