데이터 시각화01
데이터시각화 -> 분석 프로세스 -> 다변량 분석 -> 이변량 분석
데이터 전처리와 데이터 분석에서 많은 시간이 소요된다.
데이터를 한 눈에 파악하는 두가지 방법
시각화(그래프)
수치화(통계량)
테블로나 파워비아이?
!pip install koreanize_matplotlib -q
import matplotlib.pyplot as plt
import koreanize_matplotlib
warnings.filterwarnings(action='ignore')
%config InlineBackend.figure_format='retina'
plot() 함수를 사용해서 그래프를 기본적으로 그릴 수 있다.
stock = stock.loc[stock['Date'].between('2022-12-01', '2022-12-31'), :]
콤마 뒤에 오는 콜론은 삭제가 가능하다. 전체 데이터에서 일부 부분만 가져왔기 때문에 인덱스를 reset_index 해준다.
plt.plot() 는 꺾은선 그래프를 그린다.
plt.show() 깔끔하게 그래프만 나오게 보여준다.
plot() 안에 값을 하나만 넣으면 Y축값이 된다. x축을 지정하지 않으면 '인덱스'가 x축이 된다.
언제가 얼마였는지가 중요하지 않고 y축에 대한 전제척인 흐름를 보는 것이 중요하다.
숫자의 경우 눈금이 생략이 가능하다. 문자열의 경우는 생략되지 않는다.

축의 이름과 그래프의 이름을 정해줄 수 있다.
size : 폰트의 크기
pad : 제목과 그래프의 간격
shift+tab 을 함수 내에 커서를 두고 누르면 함수 내 매개변수를 확인할 수 있다.
선의 스타일과 마커의 모양을 설정할 수 있다.

plt.plot() 안에 선의 색상 g, 선의 스타일 o-- 으로 지정해서 그래프의 linestyle를 설정할 수 있다. '.--'은 작은 동그라미의 마커를 의미한다.

여러 그래프를 겹쳐서 그릴 수 있다.
show()로 그래프를 마무리하기 전에 plot() 함수를 반복해서 사용하면 여러 그래프를 겹쳐서 그릴 수 있다.
plt.plot(stock['Day'], stock['Open'], color='tab:blue', marker='o', linestyle='--' , markersize=10)
plt.plot(stock['Day'], stock['Close'], color='r', marker='s', linestyle='--')
plt.title('Stock Price', size=15, pad=10)
plt.xlabel('Day')
plt.ylabel('Price')
plt.show()

linewidth 으로 그래프 선의 굵기도 지정할 수 있다

plt.xticks()와 plt.yticks()로 눈금을 설정할 수 있다.
범례와 괘선을 추가할 수 있다.
plt.plot()를 작성할 때 적은 label이 범례의 이름이 된다.
plt.legend()의 위치는 loc=''를 통해서 정할 수 있다. label를 미리 지정하지 않을 때는 legend에서 리스트 형태로 label를 지정한다.
plt.grid()로 axis = '' 어느 축에 그리드를 그릴지 설정할 수 있다.

해당 변수의 메모리를 비워주거야 한다. del sum으로 변수로된 sum을 비워준다.
축의 범위를 조정할 수 있다.
그래프의 크기를 조정할 수 있다.
수평선과 수직선을 추가할 수 있다.

그래프에 텍스트를 추가할 수 있다.
plt.plot(stock['Day'], stock['Close'], marker='o')
plt.title('Stock Closing Price', size=15, pad=10)
plt.axhline(135, color='grey', linestyle='--')
plt.axvline(10, color='grey', linestyle='--')
plt.text(-0.5, 135.2, '135', color='r')
plt.text(10.2, 125.5, '10', color='r')
plt.show()

plt.axhline(y_mean, color='r', linestyle=':', linewidth=0.5)
plt.text(-0.5, y_mean+0.5, y_mean, color='r', size=7, weight='bold')
선언한 변수를 이용해서 작성할 수 있다.

그린 그래프를 드레그 앤 드랍으로 바탕화면에 옮기면 그래프가 이미지로 저장된다.
seaborn은 데이터 시각화의 라이브러리 중 하나이다.
matplotlib을 기반으로 작성되었으며 고수준 인터페이스를 제공한다.
사용할 기본 라이브러리와 분석 대상이 되는 데이터를 읽어온다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import koreanize_matplotlib
import seaborn as sns
import warnings
histogram
seaborn의 hue는 특별한 기능이다. age에 대해서 survived에 따라서 0과 1로 나눌 수 있다. 누적이 아닌 값임을 확인하자. 이는 matplotlib에는 존재하지 않는 기능이다.
hue 매개변수를 사용하면 지정한 변수의 데이터 분포를 다른 열을 기준으로 구분해 확인할 수 있다.
Density plot
빈도에 따라서 모양이 변하지 않는다. 히스토그램은 빈도에 따라서 모양이 변한다.
연속된 숫자의 데이터를 확률값을 그래프로 나타낸다. 그럼으로 그래프 내 면적은 100% 1이 된다.
sns.kdeplot(x='Age', data=titanic, bw_adjust=0.5)
plt.show()
bw_adjust는 디폴트가 1로 부드러운 곡선을 보여주며 해당 값을 조정하여 히스토그램과 유사하게 나타낼 수 있다.

hue 매개변수를 사용하면 구분하는 열에 따라서 각각의 그래프의 면적이 1이 되게 한다.


Box plot
sns.boxplot(y='Age', data=titanic)
plt.show()

IQRx1.5의 값은 그래프에서 나타나지 않고 해당 값 안에서 가장 작은 값은 가로줄로 나타나고, 선을 넘어가는 큰값은 이상치로 나타난다. boxplot에서는 중앙값임을 알 수 있고 평균은 그래프 내에서 알 수 없다.
sns.boxplot(y='Age', x='Survived', data=titanic)
plt.show()

x에 설정한 컬럼을 기준으로 y축에 설정된 컬럼의 분포를 확인한다.
sns.boxplot(x='Age', y='Survived', data=titanic, orient='h')
plt.show()

가로로 그래프를 그리고 싶을 때는 orient='h'로 지정해서 그릴 수 있다.
하한(lower bound) : Q1-1.5IQR
상한(upper bound) : Q3+1.5IQR
Distribution plot
sns.distplot(x=titanic['Age'], bins=16, hist_kws={'edgecolor': 'k'},
kde=True,
hist=True,
rug=True)
plt.show()

단일 변수의 시각화를 나타낸다. histogram과 density plot을 같이 그릴 수 있다. hue 매개변수 사용이 불가하다.
joint plot


Pair plot
여러 변수 간의 관계를 산점도와 변수 분포를 시각화한다. 변수 간의 관계는 산점도로 나타나고, 변수 자기자신은 히스토그램 분포로 나타난다.
Count plot
count plot을 사용하면 집계하지 않아도 알아서 count하여 집계할 수 있다.
머신러닝에서 분류 데이터가 어떻게 분포하고 있는지 확인할 때 count plot을 많이 사용한다.
hue 매개변수가 사용이 가능하다.

생존자수1만 보았을 경우에는 큰 차이가 없지만 전체적인 생존 비율을 hue 매개변수를 통해서 비교하면 의미있는 값을 구할 수 있다.

Bar plot
bar plot은 데이터의 평균과 신뢰 구간을 시각화해준다. csv로 가져오는 데이터는 세상의 모든 데이터가 아니다. 전체 데이터인 모집단에 대해서 표본만을 가지고 있는 것이다.
신뢰구간은 표본에서 일부만 무작위 샘플링을 하여 평균을 구한다. 복원추출을 하여 샘플링을 반복(5000번)해서 구한 평균들의 평균을 구한다. 분포를 그려서 가장 작은 2.5%와 가장 큰 2.5% 평균을 제거하여 세로선의 95% 신뢰구간을 의미한다.

sns.barplot(x='Embarked', y='Fare', data=titanic, errorbar=('ci', 95), n_boot=5000)
plt.show()
errorbar 매개변수로 디폴트 신뢰구간 외에 지정이 가능하고, n_boot 매개변수를 통해서 무작위 샘플링 복원 추출의 반복횟수를 지정할 수 있다.
heatmap

pivot()함수를 통해서 2개의 축으로 데이터를 집계하여 정리할 수 있다.

temp1 = titanic.groupby(['Embarked', 'Pclass'], as_index=False)['PassengerId'].count()
temp2 = temp1.pivot(index='Embarked', columns='Pclass', values='PassengerId')
display(temp2)
sns.heatmap(temp2, annot=True)
plt.show()
heatmap의 색이 연할수록 큰값, 진한색일수록 작은값을 의미한다.


Business understanding
비즈니스에서 어떤 문제가 발생하였는지 탐색하고 데이터 분석의 방향과 목표를 설정하여 초기 가설을 수립힌다.
초기 가설 수립에서는 다양한 직무의 사람들과의 의견을 수렴할 필요가 있다. 데이터 의 존재 여부를 고려하지 않고 가설을 도출한다.
Data understanding
문제의 해결책을 만드는 데이터가 문제에 정확히 부합하는 데이터가 있는 경우는 많이 없다. 데이터에 따라서 데이터 취득 및 유지 비용이 다르다.
가용 데이터를 하나의 데이터프레임으로 가공해야 한다. 새로운 원시 데이터를 넣었을 때 원활하게 작동하는 데이터파이프라인을 구현해야 한다.
데이터 탐색 : EDA, CDA
Data preparation
데이터 분석을 위해 특정 조거에 맞는 데이터 유형과 구조가 있기에 해당 데이터의 형태를 조작하고 변환하는 과정이 필요하다.
데이터가 범주형 데이터인지, 수치형 데이터인지에 따라서 나누고 탐색의 방법이 다르다.
Modeling
중요 변수들을 선택하고, 적절한 알고리즘을 적용하여 예측 모델을 생성한다.
Evaluation
모델에 대한 데이터 분석 목표와 비즈니스 목표달성에 대한 평가한다.
모델에 대한 최종 평가는 test set를 이용한다.
Developing
프로덕션 환경의 파이프라인, 모델 및 배포가 고객 목표를 충족하는지 확인한다.
데이터 수집부터 모델 배포 관리까지 파이프라인으로 구성해야 한다.
분석할 수 있는 자료의 종류를 수치형과 범주형을 나눌 수 있다.

수치형 데이터
1. 수치화해서 분석한다. -> 최소값, 최대값, 평균값, 표준편차, 사분위수
2. 시각화해서 분석한다. -> histogram과 density plot, box plot으로 분포를 확인한다.
범주형 데이터
1. 수치화해서 분석한다. -> 최빈값 등 범주별로 비율value_counts을 확인한다.
2. 시각화해서 분석한다. -> bar plot이나 count plot으로 범주값별로 확인한다.
수치형 변수는 크기를 비교할 수 있는 연속적인 숫자를 갖는 변수이다.
plt.rcParams['figure.figsize'] = (6, 4)
모든 차트의 크기를 고정할 수 있다.
mean() : 평균
median() : 데이터를 크기 순으로 나열한 상태에서 가운데 위치한 중앙값
mode() : 빈도가 가장 높은 값인 최빈값
describe() : 4분위수(25%, 50%, 75%, 경계에 있는 값은 양쪽값의 평균으로)와 함께 시리즈로 결과가 나타난다. 시리즈는 컬럼명으로 접근한다.

descirbe()는 기본적으로 수치 데이터에 대해서만 나온다. 모두 보고자 하면 include='all' 매개변수를 추가하여 볼 수는 있다.
titanic[['Age']].describe()

시리즈로 나오는 결과에 의지를 보여준다! []를 한번 더 씌움으로써 데이터프레임 형태로 결과를 표시할 수 있다.
titanic[['Age']].describe().T

결과를 가로 방향으로 바꾸어 표시할 수 있다.