총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2: 5화 “아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
Data Science [데이터분석가가반드시알아야할모든것] 10. 데이터 탐색과 시각화
728x90
반응형

학습 목표: 탐색적 데이터 분석, 상관성 분석, 데이터 시각화

> 데이터 형태와 분포, 이상치와 결측치 등을 확인

데이터 분석에서 ML 모델의 성능보다 데이터를 올바르게 파악하고 효과적으로 가공하는 것이 더 중요하다.
그 과정에서 EDA 와 데이터 시각화는 구별해야 한다. 

 

10.1 탐색적 데이터 분석: EDA

기술 통계와 데이터 시각화를 통한 데이터 특성 파악

10.1.1 엑셀을 활용한 EDA

10.1.2 탐색적 데이터 분석 실습

# 필요한 패키지 설치
# 데이터 불러오기
# 각 컬럼의 속성 및 결측치 확인
 df.info()

# 각 컬럼의 통계치 확인
 df. describe() 
//describe는 수치형 데이터에만 적용

# 각 컬럼의 왜도 확인
 df.skew()
//skew도 numeric 데이터에만 적용

# numeric 타입의 컬럼만 선택
# 각 numeric 컬럼의 왜도 계산

 

10.2 공분산과 상관성 분석

변수들의 특성을 파악한 뒤에 변수 간 관계를 살펴본다.

  • x y 관계 - 입력 변수와 target의 관계
  • x 끼리의 관계

Multicollinearity 다중공선성: 회귀분석에서 독립변수들 간에 강한 상관관계가 나타나는 것

Multicollinearity를 방지하고자 함이 목적이다.

이를 위해 Covariance(공분산)과 Correaltion coefficient(상관계수)을 이용한다. 

  • 각 변수의 변동이 얼마나 닮았는지를 표현하는 두 개의 다른 계산식

10.2.1 Covariance 공분산

두 분산의 관계를 뜻한다: 두 변수의 공통적인 분산의 정도

  • 분산: 한 변수의 각각의 데이터가 퍼진 정도

 

10.2.2 Correlation coefficient 상관계수

공분산은 두 변수의 상관관계를 표현함에 한계가 있다. 각 변수 간의 다른 척도 기준이 수치화에 그대로 반영되어 공분산 값이 지니는 크기가 상관성의 정도를 나타내지 못한다. 이를 보완하기 위해 상관계수를 이용한다.

  • 공분산 값을 normalize하여 상관성을 비교하기도 한다.  
  • normalize: 변수 각각의 표준편차 값으로 나누는 것

 

Pearson corr

X1과 X2가 함께 변하는 정도(공분산)을 X1과 X2가 변하는 전체 정도로 나눈다.

  • 함께 변하는 정도는 전체가 변하는 총량을 초과할 수 없기 때문에 [-1, 1]로 나타난다. 
  • 상관계수는 예상치의 정확도가 높아진다는 개념이다. 
분산의 관계성이 같다면, 기울기가 크든 작든 상관계수는 같다. 산점도의 기울기와 상관계수는 관련이 없다. 

 

10.2.3 공분산과 상관성 분석 실습

# 산점도 행렬 시각화
sns.pairplot(df, diag_kind = 'kde') // 동일한 변수의 산점도를 분포로 표현
plt.show()

# 동일 변수는 산점도(상관계수 1)이 일직선으로 나오기 때문에 분포도로 변환해 정보량을 늘린다.

# 피어슨 상관계수 확인
df.corr(method = 'pearson')

# 중복 제거 히트맵 시각화
// 상관성의 높고 낮음 파악 - 가독성 높이기

# 매트릭스의 우측 상단을 모두 True로, 하단을 False로 변환
np.triu(np.ones_like(df.corr()))

# True/False mask 배열로 변환
mask = np. triu(np.ones_like(df.corr(), dtype = np.bool))

# 히트맵 그래프 생성
fig, ax = plt.subplots(figsize=(15,10))
sns.heatmap(df.corr(), mask = mask, 
			vmin = -1, vmax = 1, 
            annot = True, 
            cmap = "~", cbar = Ture)
ax.set_title("~", pad = 15)

 

10.3 시간 시각화

시점 요소가 있는 데이터는 시계열(Time series) 형태로 시간의 흐름을 표현할 수 있다. 

  • '연속형' 시간 간격의 밀도가 높을 때 '연속형' 선 그래프를 이용한다.
    • 추세선: Moving averages ; 데이터를 연속적인 그룹으로 묶어 평균을 구한다. 
  • '분절형' 시간 간격 밀도가 낮거나 값의 상대적인 차이를 표시하는 '분절형'

 

10.3.1 시간 시각화 실습

# 30일 이동평균 생성
df_line['Month'] = df_line['Sales'].rolling(window = 30).mean()

 

10.4 비교 시각화

Heatmap chart: 그룹별 요소가 많아질 때 사용한다.

  • row: 그룹, column: 요소
  • 그리는 방법이 까다롭기 때문에 데이터 구조와 확인하고자 하는 목적을 정확히 파악해야 한다.
  • 예시: 직급별 연간 독서량(권), 직업군 별 건강(혈당, 맥박, 체지방량) 등 

Radar chart(방사형 차트)

Parallel coordinates(평행 좌표 그래프)

 

10.4.1 비교 시각화 실습

# 히트맵 시각화 v1

fig = plt.figure(figsize(8,8))
fig.set_facecolor('white')
plt.pcolor(df1.values)

# x,y축 칼럼과 label 설정
plt.xticks(range(len(df1.columns)), df1.columns)
plt.yticks(range(len(df1.index)), df1.index)
plt.xlabel('~', fontsize = 10)
plt.ylabel( )

plt.colorbar() // 색이 해당하는 수치
plt.show()

 

10.5 분포 시각화

데이터를 처음 받았을 때 각 변수가 어떤 요소로, 어느 비율로 구성되어 있는 지 파악하는 중요한 방법이다.

  • quantitative
    • histogram - bin(가로)과 density(세로)로 구성
    • 구간이 너무 많으면 보기 어렵고 구간이 너무 적으면 정보 손실이 크기 때문에 20개 정도로 시작한다.
  • qualitative
    • pie chart > donut chart
    • treemap
      구성 요소가 복잡할 때, 구성 요소의 비율에 따라 작은 사각형을 쪼개 포함하도록 표현해 위계구조를 표현한다.
    • waffle chart
      위계구조를 표현하지는 못한다.

10.5.1 분포 시각화 실습

# 두 개 이상 히스토그램 시각화

# 각각의 데이터셋 생성

# 10 단위로 히스토그램 시각화
plt.hist(df1_1, color = ' ', alpha = 0.2, bins = 10, label = ' ', density = True)
plt.hist(df1_2, color = ' ', alpha = 0.2, bins = 10, label = ' ', density = True)
// alpha 로 투명도를 조절해 겹치는 부분을 표현한다.

plt.legend() // 범례
plt.show()


# 도넛차트 시각화
// 파이차트에 차트 형태 옵션을 추가해 도넛 형태로 조정한다.

# 파이차트 시각화
fig = plt.figure(figsize=(,)) # 캔버스 생성
fig.set_facecolor('') # 캔버스 배경색 설정
ax = fig.add_subplot() # 프레임 생성

# 파이차트 출력

# 도넛차트 시각화를 위한 옵션 설정
wedgeprops = { 'width' : 0.7, 'edgecolor': 'w', 'linewidth': 5} // width가 핵심이다

plt.pie(,)
plt.show()

 

10.6 관계 시각화

Scatter plot : 두 개의 연속형 변수 간의 관계를 나타낼 수 있다. 

  • 극단치를 제거하고 그려야 시각화 효율이 높다. 
  • 겹치는 데이터의 정보 확인을 위해 alpha 값 조정이 필요하다. 

Bubble chart : 두 개 이상 변수의 상관관계를 확인할 수 있다.

  • 그러나 세 가지 요소보다 늘어나면 한 번에 제공되는 정보가 너무 많아 차트 해석이 어려워진다. 
버블 차트를 해석할 때 원의 지름이 아닌 '원의 면적'을 통해 크기를 판단하도록 주의한다.

 

10.6.1 관계 시각화 실습

# 기본 산점도 시각화
plt.scatter(df[' '], df[' '], s=50, alpha = 0.4) 
// alpha 값 조정으로 겹치는 부분을 효과적으로 확인
plt.show()


# 산점도에 회귀선 추가와 label 추가
ax = sns.Implot(x=' ', y = ' ', data = df)

? Implot(x = ' ', y = ' ') 이랑 plt.xlabel, plt.ylabel 의 차이가 뭐징?

 

10.7 공간 시각화

실제 지도 위에 데이터를 표현할 수 있다. 거시적에서 미시적으로 진행되는 분석 방향과 같이 스토리라인을 잡고 시각화 적용하는 것이 좋다. 

  • Dot map
  • Bubble map
  • Choropleth map
  • Connection map

10.7.1 공간 시각화 실습

# 서울 지도에 스타벅스 지점수 도드맵 시각화

m = folium.Map(location = [97.541, 126.986], zoom_start = 12, width ="%100", height = "%100")
location = list(zip(df.latitude, df.longitude))
for i in range(len(locations)):
	folium.CircleMarker(location = locations[i], radius = 1).add_to(m) // CircleMarker로 버블 표현
m

# 버블맵 시각화
# 지점 수 집계 후 중심점 산출 // 버블맵은 특정 지점에 지정된 수치의 값을 표현하기 때문에 기준점이 필요하다.

# 구의 중심 지점 만들기
df_m = df.groupby('구의이름').agg({'latitude':'mean', 
								'longitude':'mean',
                                'name':'count'}).reset_index()
df_m.heat()

 

10.8 박스 플롯

양적 척도 데이터의 분포 및 편향성, 평균과 중앙값 등 다양한 수치를 보기 쉽게 정리한다. 

  • 데이터 분포도를 함께 떠올리는 습관이 필요하다.

 

10.8.1 박스 플롯 실습

# 가로세로 box plot

plt.figure(figsize = ())
sns.boxplot(x = ' ', data = df) // y로 바꾸면 가로 box plot이 된다
plt.show()

# 추가 옵션 
# 평균 표시
sns.boxplot(x="State", y="Profit", 
			showmeans= True, 
            boxprops = {'facecolor': 'None'}, data = df)
            
// 데이터 포인트 개별 표시
sns.stripplot(x='State', y='Profit', 
			data = df, jitter = True, marker='o', 
            alpha = 0.5, color = 'black')

plt.show()

 

 

 

728x90
Data Science [데이터분석가가반드시알아야할모든것] 10. 데이터 탐색과 시각화