Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

나의 기록

[Python] 데이터 시각화 본문

개발일지/Python

[Python] 데이터 시각화

리베린 2024. 1. 25. 20:16

1. matplotlib.pyplot

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 pandas as pd

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

 

  • 선 그래프 그리기 
df.plot(x='A', y='B')
plt.show()

 

 

 

 

  • 스타일 설정하기 
ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')


plt.show()

 

  • 라벨(범례) 붙여주기 
범례 붙이기 
ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o', label='Data Series')

# 범례 붙이는 또 다른 방법 .legend
ax = df.plot(x='A', y='B', color='green', linestyle='--', marker='o')
ax.legend(['Data Series'])

 

  • 축 , 제목 입력하기
#1 label
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()

  • 텍스트 추가하기
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()

 

ax.text(2, 2, 'Some Text 2', fontsize = 10)

 

이거 추가하면, 

 

이렇게 나옴 

 

 

  • 그래프를 크게 만들어보자!
plt.figure(figsize = (8,6))

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

plt.plot(x, y)
plt.show


  • 그래프 그리기 - 차트

     Line Plot (선 그래프)

  • 선 그래프는 데이터 간의 연속적인 관계를 시각화하는 데에 적합합니다.
  • 주로 시간의 흐름에 따른 데이터의 변화를 보여줍니다.
    • 자료 유형: 연속적인 데이터의 추이를 보여줄 때 사용됩니다.
    • 활용: 시간에 따른 데이터의 변화, 추세를 보여줄 때 효과적입니다.
import pandas as pd
import matplotlib.pyplot as plt

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

df = pd.DataFrame({'date': ['2023-01-01', '2023-01-02', '2023-01-03'],
      'value': [10, 15, 8]})

df['date'] = pd.to_datetime(df['date'])

plt.plot(df['date'], df['value'])
plt.xlabel('date')
plt.ylabel('valute')
plt.title('Example')

plt.show()

 

=> 한글 글자가 깨져서 일단 영어로 기입했음. 

표 너무 작아서 figure함수 작성해줌 

 

 


  • Line 그래프 다른 예시 
import seaborn as sns
data = sns.load_dataset('flights')

 

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

data_grouped

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


Bar Plot (막대 그래프)

  • 막대 그래프는 범주형 데이터를 나타내며, 각각의 막대로 값의 크기를 비교하는 데에 사용됩니다.
    • 자료 유형: 범주형 데이터 간의 비교를 나타낼 때 주로 사용됩니다.
    • 활용: 카테고리 별로 값의 크기나 빈도를 시각적으로 비교할 때 유용합니다.
df = pd.DataFrame({
    '도시': ['서울', '부산', '대구', '인천'],
    '인구': [990, 250, 250, 290]
})

df

 

plt.bar(df['도시'], df['인구'])
plt.xlabel('City')
plt.ylabel('Population')
plt.title('Population by city')

plt.show()

아놔 한글이 깨져서 나오는데 모르겠다 

 


Histogram (히스토그램)

  • 히스토그램은 연속된 데이터의 분포를 보여줍니다. 주로 데이터의 빈도를 시각화하여 해당 데이터의 분포를 이해하는 데 사용됩니다.
    • 자료 유형: 연속형 데이터의 분포를 보여줄 때 사용됩니다.
    • 활용: 데이터의 빈도나 분포, 패턴을 이해하고자 할 때 유용합니다.
  •  
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()

여기서 bins => 몇 개의 구간을 둬서 표현을 할건지 

데이터가 분포될 구간들이 존재할건데 그 구간을 어떻게 설정할지에 대한 값 

 


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% 위치의 값), 최소값, 최대값, 이상치를 한눈에 파악할 수 있습니다.

1. 실습해보기 

iris = sns.load_dataset("iris")
iris

 

2.

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

 

plt.boxplot(sepal_lengths_list, labels = species)
plt.xlabel('Species')
plt.ylabel('Sepal Length')
plt.title("Box Plot")
plt.show()

 

스파르타 코딩 클럽

 

스파르타 코딩 클럽

 

또 다른 방법 

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

 

 


 

Scatter Plot (산점도)

  • 산점도는 두 변수 간의 관계를 점으로 표시하여 보여주는 그래프입니다.
  • 두 변수 간의 상관 관계를 보여주고, 각 점이 데이터 포인트를 나타내며, 그 점들이 어떻게 분포되어 있는지 시각적으로 확인할 수 있습니다.
    • 자료 유형: 두 변수 간의 관계 및 상관관계를 보여줄 때 사용됩니다.
    • 활용: 변수 간의 관계, 군집, 이상치를 확인하고자 할 때 유용합니다.
plt.scatter(iris['petal_length'], iris['petal_width'])
plt.xlabel('Petal length')
plt.ylabel('Petal width')
plt.show()

 

 

  • 상관관계 확인하기
    1. 양의 상관관계: 산점도에서 점들이 오른쪽 위 방향으로 일직선으로 분포되어 있을 때를 말합니다. 즉, 하나의 변수가 증가할 때 다른 변수도 증가하는 경향이 있습니다.
    2. 음의 상관관계: 산점도에서 점들이 왼쪽 위 방향으로 일직선으로 분포되어 있을 때를 말합니다. 하나의 변수가 증가할 때 다른 변수는 감소하는 경향이 있습니다.
    3. 무상관 관계: 산점도에서 점들이 어떤 방향으로도 일직선으로 분포하지 않고 무작위로 퍼져 있을 때를 말합니다. 즉, 두 변수 간에는 상관관계가 거의 없는 것으로 보입니다.
  • 상관관계의 강도 확인하기
    1. 점들의 모임: 점들이 더 밀집된 곳은 상관관계가 높다는 것을 나타낼 수 있습니다.
    2. 점들의 방향성: 일직선에 가까운 분포일수록 상관관계가 강할 가능성이 높습니다.
    3. 상관계수 계산: 피어슨 상관계수와 같은 통계적 방법을 사용하여 상관관계의 정도를 수치적으로 계산할 수 있습니다.
  • 피어슨 상관계수(Pearson correlation coefficient)는 두 변수 간의 선형적인 관계를 측정하기 위한 통계적인 방법 중 하나입니다. 주로 연속형 변수들 간의 상관관계를 평가하는 데 사용됩니다.
  • 피어슨 상관계수의 특징:
    • 범위: -1에서 1 사이의 값을 가집니다.
    • 양의 상관관계: 1에 가까울수록 강한 양의 선형관계를 나타냅니다.
    • 음의 상관관계: -1에 가까울수록 강한 음의 선형관계를 나타냅니다.
    • 무상관 관계: 0에 가까울수록 선형관계가 거의 없거나 약한 관계를 가집니다.
그래프 유형 자료 유형 특징
Line Plot 연속형 데이터 데이터의 변화 및 추이를 시각화
Bar Plot 범주형 데이터 카테고리 별 값의 크기를 시각적으로 비교
Histogram 연속형 데이터  데이터 분포, 빈도, 패턴 등을 이해 
Pie Chart 범주형 데이터의 비율 범주별 상대적 비율을 부채꼴 모양으로 시각화
Box Plot  연속형 데이터의 분포 중앙값, 사분위수, 최소값, 최대값, 이상치 확인
Scatter Plot 두 변수 간 관계 변수 간의 관계, 군집, 이상치 등 확인