[데이터 전처리 & 시각화] 시각화

seonyoung·2024년 7월 19일
0

📁 matplotlib

  • 파이썬에서 시각화를 위한 라이브러리 중 하나로, 다양한 종류의 그래프를 생성하기 위한 도구를 제공
    • 2D 그래픽을 생성하는 데 주로 사용
    • 선 그래프, 막대 그래프, 히스토그램, 산점도, 파이 차트 등 다양한 시각화 방식을 지원
    • 그래프를 색상, 스타일, 레이블, 축 범위 등을 조절하여 원하는 형태로 시각화할 수 있음

<matplotlib를 활용해서 데이터 시각화하기>

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.xlablel('X-axis')
plt.ylabel('Y-axis')
plt.title('Example')
plt.show()

→ 그래프 생성

📁 데이터 시각화에 필요한 도구들

<plot()>

import pandas as pd

df = pd.DateFrame({
    'A' : [1, 2, 3, 4, 5],
    'B' : [5, 4, 3, 2, 1]
})
df

df.plot(x='A', y='B')
plt.show() 

→ 그래프 완성

📁 스타일 설정

df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
plt.show()

→ 초록색 점선과 점을 지정함

📁 범례 추가하기

df.plot(x='A', y='B', color='red', linestyle='--', marker='o', label='Data Series')
plt.show()

→ 빨간색 점선과 점 지정 그리고 Data Series라는 이름도 생성됨

ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
ax.legend('Data Series')
plt.show()

→ 위와 동일한 값을 얻을 수 있는 다른 코드

📁 축, 제목 입력하기

ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
ax.legend(['Data Series'])
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title('Title')
plt.show()

→ x축과 y축 생성 및 title 생성

📁 텍스트 추가

ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
ax.legend(['Data Series'])
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title('Title')
ax.text(3, 3, 'Some Text', fontsize=12)
plt.show()

→ x 3, y 3에 위치하는 곳에 Some Text 생성됨

📁 그래프에 대한 사이즈 변경

plt.figure(figsize=(8, 6))

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.show()

→ 'plt.figure(figsize=(8, 6))'에 지정되어 있는 것 처럼 8, 6만큼 사이즈가 지정됨

📁 그래프 그리기 - 차트

< Line >

import seaborn as sns

data = sns.load_dataset('flights')

→ line 그래프는 시간에 따른 데이터의 변화 추세를 보는데 좋은 시각화 그래프

data_grouped = data [['year', 'passengers']].groupby('year').sum().reset_index()
data_grouped

→ 년도 별로 group by 하기 위해 데이터 가공

plt.plot(data_grouped['year'], data_grouped['passengers'])
plt.xlabel('year')
plt.ylabel('passengers')
plt.show()

→ Line 그래프 생성됨(년도 별 총 승객수 변화를 그림)
→ Line 그래프를 가지고 시간에 따른 변화추세를 볼 때 사용하면 좋음

< Bar >

  • 막대그래프 : 범주형 데이터를 나타내고 각각의 막대로 값의 크기를 비교할 때 효과적
df = pd.DataFrame({
     '도시' : ['서울', '부산', '대구', '인천']
     '인구' : [990, 250, 250, 290]
})
df

→ 데이터 프레임 생성

plt.bar(df['도시'], df['인구'])
plt.xlabel('도시')
plt.ylebel('인구')
plt.title('도시별 인구 수')
plt.show()

→ 막대그래프 생성

<Histogram(히스토그램)>

  • 연속적인 데이터의 분포를 보여줌
  • 데이터의 빈도를 시각화해서 특정 정보를 얻을 때 유용함
    numpy : 여러가지 숫자 및 연상 등과 같은 기능을 제공하는 파이썬 패키지 같은 것
import numpy as np
data = np.random.randn(1000)
data.shape

→ 1000개의 데이터 생성

plt.hist(data, bins=30)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()

→ Histogram 그래프 생성
bins : 구간별로 여러 데이터가 있을 때 몇개의 구간을 둬서 표현할 것인지에 대한 값(구간들에 대한 범위를 어떻게 설정할 것인지)

< Pie >

  • 전체 데이터에서 각 비율을 보여주는 차트
  • ex) 카테고리 별 비율을 확인할 때 등
sizes = [30, 20, 25, 15, 10]
labels = ['A', 'B', 'C', 'D', 'E']

plt.pie(sizes, labels=labels)
plt.title('Pie Chart')
plt.show()

→ A, B, C, D, E의 각 비율이 어느 정도 차지하는지에 대한 그래프

< Box plot >

  • 데이터의 분포와 이상치를 시각적으로 보여주는 그래프
  • 중앙값, 사분위수, 최솟값, 최댓값 등의 정보를 제공하고, 데이터의 통계적 특성을 파악하는데 용이
  • ex) 특정 카테고리가 갖는 값을 보고 싶거나 이상치를 확인할 때 등 사용
iris = sns.load_dataset("iris")
iris

→ 꽃 잎, 꽃받임 길이, 넓이 나타냄

species = iris['species'].unique()

→ 변수에 할당함

sepal_lengths_list = [lris[iris['species'] == s] ['sepal_length'].tolist() for s in iris['species']]

len(sepal_lengths_list)

→ 총 3가지 값의 list가 구성됨

len(sepal_lengths_list[0])

→ 각각의 list 별로 몇 개가 구성되었는지 확인하면 50개가 있다고 확인됨

plt.boxplot(sepal_lengths_list, labels = species)
plt.xlabel('Species')
plt.ylabel('Box plot')
plt.show()

→ x축에서 카테고리가 나눠지고, y축으로는 해당하는 값의 분포들이 나오는 그래프 생성됨

--> 각각의 꽃의 종류에 따라 데이터가 50개씩 구성되어 있는 형태로 만든 것이고, 데이터의 분포가 어떻게 형성되고 있는지 박스플롯을 통해 그린 것

sns.boxplot(x='species', y='sepal_length', data=iris)
plt.show()

→ 위와 비슷한 그래프 생성됨

< Scatter >

  • 산점도 : 두 변수간의 관계를 점으로 표시해서 보여주는 그래프
  • 상관분석을 하거나 여러 변수들 간의 관계성을 확인할 때 이용
plt.scatter(iris['petal_length'], iris['petal_width'])
plt.xlabel('Petal length')
plt.ylabe('Petal width')
plt.show()

→ Scatter 차트가 그려짐
→ 점들이 여러개 찍혀있는데 선의 형태로 우측으로 증가하는 그래프
ㄴ 이것을 보고 어느정도 관계성이 있다는 것을 추측할 수 있음
→ 만약 분개성이 없다면 점들이 일정하지 않고 여러 곳으로 마구잡이로 펼쳐져있을 것임

plt.scatter(iris['sepal_length'], iris['sepal_width'])
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()

→ 관계성이 없게 여러 곳으로 분포되어 있음

↓ 관계성이 있는지 정확히 확인하기 어렵기 때문에 수치화하기

  • corr는 각각의 상관성을 수치화해서 각 변수마다 상관계수를 뽑아 서로 얼마나 관계가 있는지 확인할 수 있는 메서드
iris.corr(numeric_only=True)

→ 숫자 형태의 변수들만 가지고 상관성을 나타내는 것


💡 그래프 요약

그래프 유형자료 유형특징
Line Plot연속형 데이터데이터의 변화 및 추이를 시각화
Bar Plot범주형 데이터카테고리 별 값의 크기를 시각적으로 비교
Histogram연속형 데이터데이터 분포, 빈도, 패턴 등을 이해
Pie Chart범주형 데이터의 비율범주별 상대적 비율을 부채꼴 모양으로 시각화
Box Plot연속형 데이터의 분포중앙값, 사분위수, 최솟값, 최댓값, 이상치 확인
Scatter Plot두 변수 간 관계변수 간의 관계, 군집, 이상치 등 확인

<상관관계>

  • 피어슨 상관계수
    : 두 변수 간의 선형적인 관계를 측정하기 위한 통계적인 방법 중 하나.
    주로 연속형 변수(숫자)들 간의 상관관계를 평가하는 데 사용됨

  • 피어슨 상관계수의 특징 :

    • 범위 : -1에서 1사이의 값을 가짐
    • 양의 상관관계 : 1에 가까울수록 강한 양의 선형관계를 나타냄(a가 증가할 때 b도 같이 증가한다)
    • 음의 상관관계 : -1에 가까울수록 강한 음의 선형관계를 나타냄(a가 증가할 때 b가 감소한다)
    • 무상관 관계 : 0에 가까울 수록 선형관계가 약한 관계를 가짐

→ 상관성이 있다고 해서 꼭 그것이 인관관계가 있다는 것은 아님

profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글