1. 데이터 시각화의 목적
- 데이터 시각화가 중요한 이유
분석된 결과에 따라 다양한 의사결정이 이루어지는데 이때, 전달하고자 하는 목적을 시각화된 자료와 함께 전달한다면 큰 설득력을 갖출 수 있다.
- 데이터 시각화의 목적
1) 패턴 발견 및 이해
데이터 시각화는 데이터 내의 숨겨진 패턴을 발견하고 이해하는데 도움을 준다. 그래프나 차트를 통해 데이터의 특징을 시각적으로 파악할 수 있다.
사례 | 시각화 |
시간에 따른 매출 추이 분석 | Line |
지역별 매출 비교 분석 | 지도 |
제품 카테고리별 매출 분석 | 막대 그래프, 원형 차트 |
고객 구매 패턴 분석 | 히스토그램, Box Plot |
2) 의사 결정 지원
시각화는 복잡한 데이터를 이해하고 결정을 내리는 데 도움을 준다. 시각화를 통해 정보를 명확하게 전달해서 의사 결정 과정을 지원한다.
사례 | 시각화 |
마케팅 캠페인 효과 분석 | Line |
캠페인 채널별 효과 비교 | 막대 그래프, 원형 차트 |
고객 반응 분석 | 히스토그램, Box Plot |
A/B 테스트 결과 시각화 | 다양한 그래프 |
3) 효과적인 커뮤니케이션
시각화는 데이터 분석 결과를 다른 사람들과 공유하거나 설명할 때 유용하다. 데이터를 시각적으로 보여주면 이해하기 쉽고 기억하기 쉬운 형태로 전달할 수 있다.
보고서, 프레젠테이션 등 효과적으로 내용을 구성할 수 있고 전문가와 비전문가 모두 쉽게 이해하고 의사소통할 수 있게 도와주는 역할을 해준다.
2. Matplotlib 알아보기
다양한 종류의 그래프를 생성하기 위한 도구를 제공하는 라이브러리로 2D 그래픽을 생성하는 데 주로 사용된다. 선 그래프, 막대그래프, 히스토그램, 산점도, 파이 차트 등 다양한 시각화 방식을 지원한다.
3. 그래프 그리기 - 도구
- plot()
pandas의 plot() 메서드는 DataFrame 객체에서 데이터를 시각화하는 데 사용된다. 선 그래프를 그리기 위해서는 plot() 메서드를 호출하고 x와 y인수에 각각 x축과 y축에 해당하는 열을 지정한다.
import pandas as pd
import matplotlib.pyplot as plt
data = {
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1]
}
df = pd.DataFrame(data)
# 선 그래프 그리기
df.plot(x='A', y='B')
plt.show()
- 스타일 설정
plot() 메서드를 호출할 때 다양한 스타일 옵션을 사용하여 그래프의 스타일을 설정할 수 있다. color, linestyle, marker 등의 파라미터를 사용하여 선의 색상, 스타일, 마커를 변경할 수 있다.
색상은 기본색상 이름 또는 RGB 값을 직접 지정할 수 있고, 선의 스타일은 '-'(실선), '--'(대시선), ':'(점선), '-.'(점-대시선) 등으로 지정할 수 있다. 마커는 데이터 포인트를 나타내는 기호로, 'o'(원), '^'(삼각형), 's'(사각형), '+'(플러스), 'x'(엑스) 등 다양한 기호로 지정할 수 있다.
ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
plt.show()
- 범례 추가
legend() 메서드를 사용하여 그래프의 범례를 추가할 수 있다.
#1 label
ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o', label='Data Series')
#2 legend
ax.legend(['Data Series'])
#1번 또는 2번 방법으로 범례를 추가할 수 있습니다.
plt.show()
- 축, 제목 입력
set_xlabel(), set_ylabel(), set_title() 메서드를 사용하여 x축과 y축의 레이블 및 그래프 제목을 추가할 수 있다.
ax.set_xlabel('X-axis Label')
ax.set_ylabel('Y-axis Label')
ax.set_title('Title of the Plot')
plt.show()
- 텍스트 추가
text() 메서드를 사용하여 그래프에 특정 위치에 텍스트를 추가할 수 있다.
ax.text(3, 3, 'Some Text', fontsize=12)
plt.show()
- 사이즈 설정
plt.figure() 함수를 사용하여 Figure 객체를 생성하고, 이후에 figsize 매개변수를 이용하여 원하는 크기로 설정할 수 있다.
plt.figure(figsize=(8, 6)) # 가로 8인치, 세로 6인치
- 한꺼번에 설정
plot() 함수에 color, linestyle, marker, label 등의 파라미터로 스타일과 범례를 적용한다. xlabel(), ylabel(), legend(), text() 함수들을 사용하여 각각의 설정을 추가
plot() 함수에는 범례, 제목, 텍스트를 직접적으로 입력하는 기능은 내장되어 있지 않다.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 그래프 그리기
plt.figure(figsize=(8, 6)) # 가로 8인치, 세로 6인치
plt.plot(x, y, color='green', linestyle='--', marker='o', label='Data Series')
# 추가 설정
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')
plt.title('Title of the Plot')
plt.legend()
plt.text(3, 8, 'Some Text', fontsize=12) # 특정 좌표에 텍스트 추가
# 그래프 출력
plt.show()
4. 그래프 그리기 - 차트
- 그래프 자료유형
그래프 유형 | 자료 유형 | 특징 |
Line Plot | 연속형 데이터 | 데이터의 변화 및 추이를 시각화 |
Bar Plot | 범주형 데이터 | 카테고리 별 값의 크기를 시각적으로 비교 |
Histogram | 연속형 데이터 | 데이터 분포, 빈도, 패턴 등을 이해 |
Pie Chart | 범주형 데이터의 비율 | 범주별 상대적 비율을 부채꼴 모양으로 시각화 |
Box Plot | 연속형 데이터의 분포 | 중앙값, 사분위수, 최소값, 최대값, 이상치 확인 |
Scatter Plot | 두 변수 간 관계 | 변수 간의 관계, 군집, 이상치 등 확인 |
- Line
선 그래프는 데이터 간의 연속적인 관계를 시각화하는 데 적합하다. 시간에 따른 데이터의 변화, 추세를 보여줄 때 효과적이다.
import pandas as pd
import matplotlib.pyplot as plt
data = {'날짜': ['2023-01-01', '2023-01-02', '2023-01-03'],
'값': [10, 15, 8]}
df = pd.DataFrame(data)
# '날짜'를 날짜 형식으로 변환
df['날짜'] = pd.to_datetime(df['날짜'])
# 선 그래프 작성
plt.plot(df['날짜'], df['값'])
plt.xlabel('날짜')
plt.ylabel('값')
plt.title('선 그래프 예시')
plt.show()
- Bar vs Histogram
막대그래프는 범주형 데이터를 나타내며, 각각의 막대로 값의 크기나 빈도를 시각적으로 비교할 때 유용하게 사용된다.
히스토그램은 연속된 데이터의 분포를 보여주어 주로 데이터의 빈도를 시각화하여 해당 데이터의 분포, 패턴 이해하는 데 사용된다.
import pandas as pd
import matplotlib.pyplot as plt
data = {'도시': ['서울', '부산', '대구', '인천'],
'인구': [990, 350, 250, 290]}
df = pd.DataFrame(data)
# 막대 그래프 작성
plt.bar(df['도시'], df['인구'])
plt.xlabel('도시')
plt.ylabel('인구')
plt.title('막대 그래프 예시')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
# 히스토그램 그리기
plt.hist(data, bins=30)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()
구분 | Bar | Histogram |
데이터 유형 | 범주형 데이터 비교 | 연속적 데이터 분포 |
막대 형태 | 수직 or 수평 막대(크기) | 마대가 붙어있는 형태(빈도) |
시각화 유형 | 해당 범주의 크기를 나타냄 | x축은 데이터 값의 범위, y축은 해당 범위에서의 빈도를 나타냄 |
예시 | 팀별 판매량, 국가별 GDP | 시험 점수 분포, 온도 변화 |
- Pie
원 그래프는 전체에 대한 각 범주의 비율을 보여줄 때 유용하며, 주로 비율을 비교하는 데 사용된다.
import matplotlib.pyplot as plt
sizes = [30, 20, 25, 15, 10]
labels = ['A', 'B', 'C', 'D', 'E']
# 원 그래프 그리기
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Pie Chart')
plt.show()
- Box plot
박스 플롯은 데이터의 분포와 이상치를 시각적으로 보여준다. 중앙값, 사분위 수(25%, 50%, 75% 위치의 값), 최소값, 최대값, 이상치를 한눈에 파악할 수 있다.
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
# 박스 플롯 그리기
plt.boxplot(data)
plt.xlabel('Data')
plt.ylabel('Value')
plt.title('Box Plot')
plt.show()
- Scatter
산점도는 두 변수 간의 관계를 점으로 표시하여 보여주는 그래프이다. 두 변수 간의 상관관계를 보여주고 각 점이 포인트를 나타내 점의 분포를 시각적으로 확인할 수 있다.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 산점도 그리기
plt.scatter(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot')
plt.show()
5. 간단한 용어 설명
- 중앙값
데이터의 크기를 수서대로 나열했을 때 정확히 중간에 위치하는 값을 말한다. 만약 데이터가 짝수 개 일경우 중앙에 위치한 두 값의 평균이 중앙값이 되며 중앙값은 데이터의 중심 결함을 나타내는 하나의 지표로서 사용된다. 중앙값은 데이터의 이상치에 대해 덜 민감하며, 데이터의 대표값을 파악하는 데 사용된다.
- 사분위수
데이터를 4등분한 지점을 말한다. 사분위수는 데이터의 분포를 더 자세히 이해하고 데이터 집합의 특성 및 이상치를 파악하는데 유용하다.
1) 1사분위수(Q1): 데이터의 하위 25%에 해당하는 값
2) 2사분위수(Q2): 데이터의 중앙값에 해당하는 값
3) 3사분위수(Q3): 데이터의 상위 25에 해당하는 값
- 이상치
일반적인 데이터 집합의 패턴에서 크게 벗어나는 값을 가진 데이터 포인트를 말한다. 다른 데이터들과 비교했을 때 극단적으로 크거나 작은 값을 갖는 경우를 의미한다. Box Plot이나 Histogram 등을 사용하여 시각적으로 확인할 수 있다.
- 상관관계
산점도에서 점들이 오른쪽 위 방향으로 일직선으로 분포되어 있으면 양의 상관관계, 점들이 왼쪽 위 방향으로 일직선으로 분포되어 있으면 음의 상관관계, 무작위로 퍼져있으면 무상관 관계라고 말한다.
점들이 더 밀집된 곳은 상관관계가 높다는 것을 나타낼 수 있으며 일직선에 가까운 분포일수록 상관관계가 강할 가능성이 높다.
- 피어슨 상관계수
두 변수 간의 선형적인 관계를 측정하기 위한 통계적인 방법 중 하니이다. 주로 연속형 변수들 간 상관관계를 평가하는 데 사용된다.
-1 에서 1 사이의 값을 가져 1에 가까울수록 양의 상관관계, -1에 가까울수록 음의 선형관계, 0에 가가울수록 선형관계가 거의 없거나 약한 관계를 가진다.
피어슨 상관계수는 공분산을 각 변수의 표준편차로 나누어 정규화한 값으로, 두 변수 간의 성형적인 관계 정도를 측정한다.
- 표준편차
데이터의 분산 정도를 나타내는 측정 지표 중 하나이다. 데이터가 평균으로부터 얼마나 퍼져있는지를 보여준다. 데이터의 흩어진 정도를 알려주는 지표로 통계적 분석에서 널리 사용된다.
표준편차가 작을수록 데이터 포인트들이 평균 주변에 모여있는 것이고, 표준편차가 클수록 데이터 포인트들이 평균에서 멀리 퍼져있다고 해석할 수 있다.
- 공분산
두 변수 간의 관계를 나타내는 통계적 측정 지표이다. 두 변수의 변화 패턴이 함께 일어나는 정도를 측정하는 데 사용된다.
공분산이 양수인 경우 변수 x와 y는 함께 증가 또는 감소하는 경향이 있다. 반대로 음수인 경우 하나의 변수가 증가할 때 다른 변수는 감소하는 경향이 있다. 공분산의 값 자체만으로는 두 변수 간의 관계의 강도나 방향을 명확하게 알려주지 않기 때문에 표준화된 지표인 상관계수를 사용하여 두 변수 간의 관계를 더 명확하게 파악해야 한다.
- 정규화
데이터의 스케일을 조정하여 특정 범위나 규격에 맞추는 과정을 말한다.
1) 데이터 스케일 조정: 데이터의 값이 서로 다른 범위에 있을 때 일부 알고리즘에서는 이를 고려하여 데이터를 처리한다. 정규화를 통해 데이터를 특정 범위로 조정함으로써, 알고리즘이 데이터를 더 잘 처리할 수 있도록 돕는다.
2) 이상치 영향 완화: 이상치가 있는 데이터는 전체적인 분포를 왜곡시킬 수 있다. 이를 완화하기 위해 데이터를 정규화하여 이상치의 영향을 줄일 수 있다.
3) 알고리즘의 수렴성 향상: 몇몇 머신 러닝 알고리즘은 데이터가 정규화되어 있을 때 수렴하는 속도가 빨라질 수 있다. 특히 경사 하강법 등의 최적화 기법에서 이점을 볼 수 있다.
'Today I Learned (TIL) > Python' 카테고리의 다른 글
[TIL] Python 베이직 - 4회차 (0) | 2024.07.25 |
---|---|
[TIL] Python 베이직 - 3회차 (0) | 2024.07.23 |
[TIL] Python 챌린지 - 2회차 (0) | 2024.07.19 |
[TIL] Python 챌린지 - 1회차 (0) | 2024.07.17 |
[TIL] 데이터 전처리 - Pandas(3) (0) | 2024.07.17 |