카테고리 없음

파이썬 데이터 분석 코드 북(제3장 EDA와 시각화 2)

pgh95319 2023. 1. 21. 01:56

제3장 EDA와 시각화 2

- 목 차

1. 막대그래프

2. 히스토그램

3. 상자그림

4. 산점도

5. 수평선 수직선 그래프

6. 함수식 그래프

7. 회귀선 그래프

8. 꺾은선 그래프

9. 산점도 행렬 + KDE그래프

10. 상관계수 행렬 그래프


5. 선 그래프

# 그래프에 한계점, 평균값 등을 표시하기 위한 보조 역할로 사용할 수 있다.
# 수평선 그래프
# plt.hlines(y, xmin, xmax, colors, linestyles=('solid','dashed',dashdot','dotted'))
# 수직선 그래프
# plt.vlines(x, ymin, ymax, colors, linestyles='solid')
import matplotlib.pyplot as plt
plt.hlines(-6,-10,10,colors='grey',linestyles='solid')
plt.vlines(2,-10,10,colors='blue', linestyles='dotted')
plt.show()


6. 함수식 그래프

# 함수식 그래프
# plt.plot(x축, 함수식, data=df, c='color')
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

iris = load_iris()
iris = pd.DataFrame(iris.data, columns = iris.feature_names)
iris['Class'] = load_iris().target
iris['Class'] = iris['Class'].map({0:'Setosa', 1: 'Versicolour', 2:'Virginica'})

X = iris['sepal length (cm)']

def linear_func(x):
    return 2*x+1

plt.plot(X, linear_func(X)) # plt.plot(X, X.map(lambda X:2*X+1)), plt.plot(X, X:2*X+1)도 가능하다.
plt.show()

 

plt.plot([1, 2, 3, 4]) # x=[0,1,2,3] 자동 설정
plt.show()

 

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()


7. 회귀선 그래프

# ... b3, b2, b1, b0 = numpy.polyfit(X, Y, 차수) 최소제곱 다항식에 적합. 회귀선의 높은 차원의 계수부터 출력

import numpy as np

X,Y = iris['sepal length (cm)'], iris['petal length (cm)']
b1,b0 = np.polyfit(X, Y, 1)

plt.scatter(X, Y, alpha = 0.5) # 산점도
plt.plot(X, b1*X+b0, color='red') # 함수식 그래프(회귀계수 구한 후 함수식 그래프 사용)
plt.show()

 

# 2차식을 그리는 경우에 주의사항으로 데이터를 X값에 대하여 정렬할 필요가 있다. 
# -> 왜? (x0, y0)좌표에서 (x1, y1)좌표로 연결되는 선이 무수히 많아 곡선처럼 보일 뿐. 순서대로 정렬되어 있지 않으면 선이 한방향으로 이어지지 않고 왔다 갔다함.
iris2 = iris.sort_values(by='sepal length (cm)')
X,Y = iris2['sepal length (cm)'], iris2['petal length (cm)']

b2, b1, b0 = np.polyfit(X, Y, 2)

plt.scatter(X, Y, alpha = 0.5) # 산점도
plt.plot(X, b2*X**2+b1*X+b0, color='red') # 함수식 그래프(회귀계수 구한 후 함수식 그래프 사용)
plt.show()


8. 꺾은선 그래프

# 꺾은선 그래프는 시간의 변화에 따라 값이 지속적으로 변화할 때 유용한 그래프다.
# 시점에 대한 변화를 보여주는 그래프이므로 X축 값에 대한 정렬이 필요하다.
iris2 = iris.sort_values(by='sepal length (cm)')
plt.plot(iris2['sepal length (cm)'], iris2['petal length (cm)']) # plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2)도 가능하다.
plt.show()

 

# 꺾은선 그래프도 카테고리에 따라 분리된 그래프를 그릴 수 있다. class에 따라 분리하여 그리고 범례를 표시해보자
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2[iris2['Class'] == 'Setosa'])
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2[iris2['Class'] == 'Versicolour'])
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2[iris2['Class'] == 'Virginica'])
plt.legend(iris2.Class.unique())
plt.show()

 

# 위와 같다. data의 표현 방식 달리 가능하다.
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2.loc[iris2['Class'] == 'Setosa']) # 본래 iris2.loc[iris2['Class'] == 'Setosa', 열(칼럼명)] -> 열 안적으면 전체 열 취급.
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2.loc[iris2['Class'] == 'Versicolour'])
plt.plot('sepal length (cm)', 'petal length (cm)', data=iris2.loc[iris2['Class'] == 'Virginica'])
plt.show()