✨Today I Learned/Python

📊데이터 시각화 (Matplotilb)

임빵빵 2024. 7. 18. 17:27

20240718 TIL

01. Matplotlib 알아보기

▶Matplotlib 이란?

파이썬에서 시각화를 위한 라이브러리 중 하나로, 다양한 종류의 그래프를 생성하기 위한 도구 제공

  • matplotlib.pyplot
    • plot() 함수 : 2차원 데이터를 시각화하기 위해 사용
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 seaborn as sns

# 'tips' 데이터셋 불러오기
tips_data = sns.load_dataset('tips')

# 데이터셋 확인
print(tips_data.head())

 

02. 그래프 그리기 -도구편

① Matplotlib.pyplot 에서 plot()를 활용하는 법

-pandas의 plot() 메서드는 DataFrame 객체에서 데이터를 시각화하는데 사용

ex) 선 그래프를 그리기 위해서 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()

② 스타일 설정하기

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

-Color(색상): 문자열로 지정 가능, 기본 색상 이름 또는 RGB 값 직접 지정 가능

-Linestyle(선 스타일) : 의 스타일은 '-'(실선), '--'(대시선), ':'(점선), '-.'(점-대시선) 등으로 지정

-Marker(마커) : 데이터 포인트를 나타내는 기호, 'o'(원), '^'(삼각형), 's'(사각형), '+'(플러스), 'x'(엑스) 등 다양한 기호로 지정

③ 범례 추가하기 - 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()

⑥ 한꺼번에 설정하는 방법

import matplotlib.pyplot as plt

# Figure 객체 생성 및 사이즈 설정
plt.figure(figsize=(8, 6))  # 가로 8인치, 세로 6인치

# 데이터 생성
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()

 

03. 그래프 그리기 - 차트

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

① Line Plot (선 그래프) - 데이터 간의 연속적인 관계를 시각화하는 데에 적합, 주로 시간의 흐름에 따른 데이터 변환

#데이터 불러오기
import seaborn as sns
data = sns.load_dataset('flights')

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

plt.plot(data_grouped['year'], data_grouped['passengers'])
plt.xlabel('year')
plt.xlabel('passengers')
plt.show()
더보기

결과 값:

② Bar Plot (막대 그래프) - 범주형 데이터를 나타내며, 각각의 막대로 값의 크기를 비교하는 데에 사용

df = pd.DataFrame({
    '도시': ['서울', '부산', '대구', '인천'],
    '인구': [990, 250, 250, 290]  
})

plt.bar(df['도시'], df['인구'])
plt.xlabel('도시')
plt.ylabel('인구')
plt.title('도시 별 인구 수')
plt.show()
더보기

결과값: (한글이 깨졌는데 .... 그 이유는 찾아봐야 할 것 같다 ^^ ......)

③ Histogram(히스토그램) - 히스토그램은 연속된 데이터의 분포를 보여줌, 주로 데이터의 빈도를 시각화하여 해당 데이터의 분포를 이해하는 데 사용

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 vs Histogram 의 차이는?

구분 막대 그래프 히스토그램
데이터 유형 범주형 데이터 비교 연속적 데이터 분포
막대 형태 수직 또는 수평 막대(크기) 막대가 붙어있는 형태(빈도)
시각화 유형 해당 범주의 크기를 나타냄 X축은 데이터 값의 범위를, Y축은 해당 범위에서의 빈도를 나타냄
예시 팀별 판매량, 국가별 GDP 등을 비교 시험 점수 분포, 온도 변화 등 연속적인 데이터의 분포

④ Pie Chart(원 그래프) - 전체에서 각 부분의 비율을 보여줌, 주로 카테고리별 비율을 비교할 때 사용

# 데이터 생성
sizes = [30, 20, 25, 15, 10]
labels = ['A', 'B', 'C', 'D', 'E']

# 원 그래프 그리기
plt.pie(sizes, labels=labels)
plt.title('Pie Chart')
plt.show()
더보기

결과값:

⑤ Box Plot - 데이터의 분포와 이상치를 시각적으로 보여줌, 중앙값, 사분위수, 최솟값, 최댓값 등의 정보를 제공하여 데이터의 통계적 특성을 파악하는 데 사용

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 Plot(산점도) -두 변수 간의 관계를 점으로 표시하여 보여주는 그래프, 두 변수 간의 상관 관계를 보여주고, 각 점이 데이터 포인트를 나타내며, 그 점들이 어떻게 분포되어 있는지 시각적으로 확인

iris = sns.load_dataset("iris")

plt.scatter(iris['petal_length'], iris['petal_width'])
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.show()
더보기

결과값:

💡느낀점
코드를 입력하면 이렇게 시각자료가 나오는게 신기했다 근데 처음하는거다보니 좀 어렵게 느껴졌다.
아직 문제들은 풀어보진 못했는데 풀어보면서 감을 익혀야될 것 같다. 파이썬도 그렇고 시각화도 그렇고 배워야 할 게 엄청 많다..!
그래도 꾸준히 연습하다보면 늘겠지 ~~ 힘내보자 !! :)