rubus0304 님의 블로그

[데이터 전처리 4주차] 강의요약 (H.W_예정) 본문

강의/데이터전처리(Pandas)

[데이터 전처리 4주차] 강의요약 (H.W_예정)

rubus0304 2024. 10. 24. 16:11

https://teamsparta.notion.site/Matplotlib-b9098f5265944004b38d8583040ea502

 

데이터 시각화 (Matplotlib) | Notion

[수업 목표]

teamsparta.notion.site

 

 

 

☑️ Matplotlib.pyplot 에서 plot() 를 활용하는 법을 알아봅시다.

 

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()

 

아래처럼 data 안 쓰고 바로 해도 되지만, 나중에 활용을 위해 data 라이브러리로 묶는게 좋

import matplotlib.pyplot as plt
 
x = [1,2,3,4,5]
y = [2,4,6,8,10]

plt.plot(x, y)
plt.xlable('X-axis')
plt.ylable('Y-axis')
plt.title('Example Plot')
plt.show()
 
 

 

그래프가 나오긴 나오는데 AttributeError 가 뜬다 모듈이름에 xlable 이 없다는데 뭐지 튜터님들 부재로 질문 Keep!

 

헐 아니네. 제목이랑 , x,y축 값이 안 나온거네? 뭘 잘못 쓴겨  홀리쉿.... 옆에 나오는 콤보상자에서 선택을 해야함..!! 단순히 글자 똑같이 쓰는게 아님  xlabel, ylabel 도 포함되어있나봄. matplotlib.pyplot 즉 plt 에! 선택되면 노란색글씨로 바뀜! 그럼 잘 된거!

 

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()

 

 

 

 

☑️ 스타일 설정하기

 

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

 

 

 

☑️ 범례 추가하기

 

#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()

 

 

 

☑️ 축 , 제목 입력하기

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

ax.set_xlabel('X-axis Label')
ax.set_ylabel('Y-axis Label')
ax.set_title('Title of the Plot')

plt.show()

 

☑️ 텍스트 추가하기

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

ax.set_xlabel('X-axis Label')
ax.set_ylabel('Y-axis Label')
ax.set_title('Title of the Plot')
ax.text(3, 3, 'Some Text', fontsize = 12)

ax.text(4, 2, 'Some Text', fontsize = 10)
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()

 

 

 

☑️ 너무 작다… → 그래프를 크게 만들어보자!

 

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

 

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

plt.plot(x, y)  # 그래프 그리기
plt.show()

 

원래 그려놓은 그래프 사이즈를 바꾸려면!

 

fig, ax = plt.subplots (figsize = (18,6))

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

ax.set_xlabel('X-axis Label')
ax.set_ylabel('Y-axis Label')
ax.set_title('Title of the Plot')
ax.text(3, 3, 'Some Text', fontsize = 12)

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

 

 

 

그래프 그리기 - 차트

 

참고) 그래프 자료유형

 

 

☑️ 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()

 

(예시)

 

1.우선 데이터 불러오기

 
import seaborn as sns

data = sns.load_dataset('flights')
data

 

2.데이터 그룹만들기

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

 

3.데이터그룹을 그래프로 만들어주기

plt.plot(data_grouped['year'], data_grouped['passengers'])
plt.xlabel('year')
plt.ylabel('passengers')
 
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()

 

matplotlib 에서한글 깨짐 문제 해결하기

 

 

 

 

☑️ Histogram (히스토그램)

  • 자료 유형: 연속형 데이터의 분포를 보여줄 때 사용됩니다.
  • 활용: 데이터의 빈도나 분포, 패턴을 이해하고자 할 때 유용합니다.

 

import matplotlib.pyplot as plt
import numpy as np

# 데이터 생성 (랜덤 데이터)
data = np.random.randn(1000)

 

cf. data.shape 


# 히스토그램 그리기
plt.hist(data, bins=30)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()

 

 

 

☑️ 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()

 

 

(예시)

iris = sns.load_dataset("iris")
iris
 

 

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

 

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

sepal_length_list
 

 

len (list) ->  list 값이 총 몇 가지 로 구성되어있는지   여기선 3가지로 구성되있나봄

len(sepal_length_list)
 

 

list 옆에 [ ] 로 0,1,2 등 넣어주면 각 list 별로 몇 개씩 들어있는지 알 수 있음   여기선 50개씩 들어있음.

len(sepal_length_list[0])
 

 

 

plt.boxplot(sepal_length_list, labels=species)
plt.xlabel('Sepal Length')
plt.ylabel('Species')
plt.title('Box plot')
plt.show()
 

 

 

Box plot 상자 (25~75% 구간)

윗 부분 - 75%

노란색 - 중앙 값

아래 부분 - 25%

 

길게 뻗어 나온 위 - 최대값

길게 뻗어 나온 아래 - 최소값

 

o   -  아웃라이어 최소 최댓값 벗어나있는 값  이므로 보통은 제거하고 만듦.

 

 

강의 예시 중 seaborn  예시 에러남.  sepal_length 없는데.. 

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

 

 

훔 에러 

 

☑️ 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()

 

 

 

(예시)

plt.scatter(iris['petal_length'], iris['petal_width'])
plt.xlabel('petal len')
plt.ylabel('petal wid')
plt.show()
 

 

 

petal -> sepal 로 값을 변경했을 경우

plt.scatter(iris['sepal_length'], iris['sepal_width'])
plt.xlabel('sepal len')
plt.ylabel('sepal wid')
plt.show()
 

 

강의에선 에러난다고 했는데.이건 또 왜 나옴  (에러나는 이유는 값 중 string  (문자) 값이 들어있어서 그렇다함)

iris.corr
 

 

숫자형태의 변수들만 가지고 활용하겠다.

iris.corr(numeric_only=True)
 

 

sepal length 와 petal length 관계성

 

plt.scatter(iris['sepal_length'], iris['petal_length'])
plt.xlabel('sepal len')
plt.ylabel('petal len')
plt.show()
 

 

 

 

 

 

⁉️ 상관관계란?

  • 상관관계 확인하기
    1. 양의 상관관계: 산점도에서 점들이 오른쪽 위 방향으로 일직선으로 분포되어 있을 때를 말합니다. 즉, 하나의 변수가 증가할 때 다른 변수도 증가하는 경향이 있습니다.
    2. 음의 상관관계: 산점도에서 점들이 왼쪽 위 방향으로 일직선으로 분포되어 있을 때를 말합니다. 하나의 변수가 증가할 때 다른 변수는 감소하는 경향이 있습니다.
    3. 무상관 관계: 산점도에서 점들이 어떤 방향으로도 일직선으로 분포하지 않고 무작위로 퍼져 있을 때를 말합니다. 즉, 두 변수 간에는 상관관계가 거의 없는 것으로 보입니다.
  • 상관관계의 강도 확인하기
    1. 점들의 모임: 점들이 더 밀집된 곳은 상관관계가 높다는 것을 나타낼 수 있습니다.
    2. 점들의 방향성: 일직선에 가까운 분포일수록 상관관계가 강할 가능성이 높습니다.
    3. 상관계수 계산: 피어슨 상관계수와 같은 통계적 방법을 사용하여 상관관계의 정도를 수치적으로 계산할 수 있습니다.

 

⁉️ 피어슨 상관계수란?

  • 피어슨 상관계수(Pearson correlation coefficient)는 두 변수 간의 선형적인 관계를 측정하기 위한 통계적인 방법 중 하나입니다. 주로 연속형 변수들 (숫자값) 간의 상관관계를 평가하는 데 사용됩니다.
  • 피어슨 상관계수의 특징:
    • 범위: -1에서 1 사이의 값을 가집니다.
    • 양의 상관관계: 1에 가까울수록 강한 양의 선형관계를 나타냅니다.
    • 음의 상관관계: -1에 가까울수록 강한 음의 선형관계를 나타냅니다.
    • 무상관 관계: 0에 가까울수록 선형관계가 거의 없거나 약한 관계를 가집니다.
    • ** 다만 양이든 음이든 선형관계는 인과관계와는 별도의 것임. (꼭 x가 증가해서 y가 증가한 것이 인과관계로 볼 수 없음 주의!!!)

 

 

 

3주차 숙제

 

1) 문제 살펴보기

☑️ flights 데이터셋을 활용해서 그래프를 그려봅시다

 

 

import seaborn as sns
import matplotlib.pyplot as plt

# Seaborn의 내장 데이터셋 'flights' 불러오기
flights_data = sns.load_dataset('flights')

 

  1. 연도별 총 승객 수
  2. 연도별 평균 승객 수
  3. 승객 수 분포
  4. 연도별 승객 수와 월간 승객 수
  5. 월별 승객 수 분포

 

 

☑️ tips 데이터셋을 활용해서 그래프를 그려봅시다

 

import seaborn as sns
import matplotlib.pyplot as plt

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

 

  1. 요일별 팁 금액의 평균
    1. 제목 : Average Tips by Day
    2. X축 : Day of the Week
    3. Y축 : Average Tip Amount
  2. 요일별 총 팁 금액
    1. 제목 : Total Tips by Day
    2. X축 : Day of the Week
    3. Y축 : Total Tip Amount
  3. 식사 금액 분포
    1. 제목 : Distribution of Total Bill
    2. X축 : Total Bill Amount
    3. Y축 : Frequency
  4. 식사 금액과 팁 금액의 관계
    1. 제목 : Tip Amount vs Total Bill
    2. X축 : Total Bill Amount
    3. Y축 : Tip Amount
  5. 요일별 식사 금액 분포
    1. 제목 : Total Bill Distribution by Day
    2. X축 : Day of the Week
    3. Y축 : Total Bill Amount

 

정답 

https://teamsparta.notion.site/Matplotlib-b9098f5265944004b38d8583040ea502