[Python]TIL 19일차

Cherta·2024년 5월 10일
0

[TIL]

목록 보기
20/30

데이터 시각화

  • 데이터 시각화 : 데이터 분석 결과를 쉽게 이해할 수 있도록 시각적으로 표현하고 전달되는 과정
  • 데이터 시각화의 목적
    • 패턴 발견 및 이해
      • 그래프나 차트를 통해 데이터의 특징을 시각적으로 파악 가능
    • 의사 결정 지원
      • 시각화를 통해 정보를 명확하게 전달하여 의사 결정 과정을 지원
    • 효과적인 커뮤니케이션
      • 데이터를 시각적으로 보여주면 이해하기 쉽고 기억하기 쉬운 형태로 전달 가능
  • Matplotlib
    • 파이썬에서 시각화를 위해 다양한 종류의 그래프를 생성하기 위한 도구를 제공하는 라이브러리
import matplotlib.pyplot as plt

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 선 그래프 그리기
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Example Plot')
plt.show()

  • 그래프 그리기(도구)
import matplotlib.pyplot as plt

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 그래프 그리기
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()

  • 그래프 그리기(차트)

  • 그래프 자료유형

그래프 유형자료 유형특징
Line Plot연속형 데이터데이터의 변화 및 추이를 시각화
Bar Plot범주형 데이터카테고리 별 값의 크기를 시각적으로 비교
Histogram연속형 데이터데이터 분포, 빈도, 패턴 등을 이해
Pie Chart범주형 데이터의 비율범주별 상대적 비율을 부채꼴 모양으로 시각화
Box Plot연속형 데이터의 분포중앙값, 사분위수, 최소값, 최대값, 이상치 확인
Scatter Plot두 변수 간 관계변수 간의 관계, 군집, 이상치 등 확인
  • Line Plot (선 그래프)
    • 데이터 간의 연속적인 관계를 시각화하는 데 적합함(주로 시간의 흐름에 따른 데이터의 변화를 보여줌)
      • 자료 유형 : 연속적인 데이터의 추이를 보여줄 때 사용
      • 활용 : 시간에 따른 데이터의 변화, 추세를 보여줄 때 효과적
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 Plot (막대 그래프)
    • 막대 그래프는 범주형 데이터를 나타내며, 각각의 막대로 값의 크기를 비교하는 데에 사용
      • 자료 유형 : 범주형 데이터 간의 비교를 나타낼 때 주로 사용
      • 활용 : 카테고리 별로 값의 크기나 빈도를 시각적으로 비교할 때 유용
# 데이터프레임 생성
data = {'도시': ['서울', '부산', '대구', '인천'],
        '인구': [990, 350, 250, 290]}
df = pd.DataFrame(data)

# 막대 그래프 작성
plt.bar(df['도시'], df['인구'])
plt.xlabel('도시')
plt.ylabel('인구')
plt.title('막대 그래프 예시')
plt.show()

  • Histogram (히스토그램)
    - 히스토그램은 연속된 데이터의 분포를 보여줌(주로 데이터의 빈도를 시각화하여 해당 데이터의 분포를 이해하는 데 사용)
    - 자료 유형 : 연속형 데이터의 분포를 보여줄 때 사용
    - 활용 : 데이터의 빈도나 분포, 패턴을 이해하고자 할 때 유용

  • Bar vs Histogram 의 차이

구분막대 그래프히스토그램
데이터 유형범주형 데이터 비교연속적 데이터 분포
막대 형태수직 or 수평 막대 (크기)막대가 붙어있는 형태 (빈도)
시각화 유형해당 범주의 크기를 나타냄X축은 데이터 값의 범위를,
Y축은 해당 범위에서의 빈도를 나타냄
예시팀별 판매량, 국가별 GDP 등을 비교시험 점수 분포, 온도 변화 등 연속적인 데이터의 분포
  • Pie Chart (원 그래프)
    • 원 그래프는 전체에서 각 부분의 비율을 보여줌(주로 카테고리별 비율을 비교할 때 사용)
      • 자료 유형 : 범주형 데이터의 상대적 비율을 시각화하는 데 사용
      • 활용 : 전체에 대한 각 범주의 비율을 보여줄 때 유용하며, 주로 비율을 비교하는 데 사용
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()

  • 박스 플롯의 구성 요소

    • 상자(Box) : 상자의 아래쪽 끝은 25%의 값(1사분위수), 상자의 윗쪽 끝은 75%의 값(3사분위수)을 나타냄
      상자의 중앙에 위치한 선은 중앙값을 나타냄

    • 수염(Whisker): 상자의 위 아래로 연장되는 선으로, 일반적으로 1.5배의 사분위 범위로 계산되는데, 이 범위를 넘어가는 값은 이상치(outlier)로 간주
      수염의 끝은 최솟값과 최댓값을 나타냄

    • 이상치(Outliers): 수염 부분을 벗어나는 개별 데이터 포인트로, 일반적인 범위를 벗어나는 값들을 의미

  • Scatter Plot (산점도)

    • 산점도는 두 변수 간의 관계를 점으로 표시하여 보여주는 그래프 두 변수 간의 상관 관계를 보여주고, 각 점이 데이터 포인트를 나타내며, 그 점들이 어떻게 분포되어 있는지 시각적으로 확인가능
      • 자료 유형 : 두 변수 간의 관계 및 상관관계를 보여줄 때 사용
      • 활용 : 변수 간의 관계, 군집, 이상치를 확인하고자 할 때 유용
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()

0개의 댓글