그래프 종류
1 : 선 그래프 (line plot)
시계열 데이터와 같이 연속적인 값의 변화와 패턴을 파악하는데 적합하다.
그래프 꾸미기 옵션
'o' = : 선 아닌 점그래프로 표현
marker = 'o' : 마커 모양 ('o' , '+', '*' 등등)
markerfacecolor='green' : 마커 배경색
markersize=10 : 마커 크기
color='olive' : 선의 색
linewidth = 2 : 선의 두께
label= : 라벨 지정
그래프 여러개 그리기
fig = plt.figure( figsize= ( x, y))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
sns.stripplot(~, ~, data=df, ax1)
2 : 면적 그래프
선 그래프와 같지만 그래프 아래 색이 입혀진다.
색의 투명도 alpha= num 으로 투명도 설정 가능
stacked = True / False 로 누적할지 여부 설정 가능 (default= True)
3 : 막대 그래프
막대 그래프 : 각 변수 사이 값의 크기 차이를 설명하는데 적합하다.
kind=barh로 하면 수직 / 수평 역전가능 !
4 : 히스토그램
변수 하나인 단변수 데이터의 빈도수를 그래프로 표현한다.
x축을 같은 크기의 여러 구간으로 나누고 각 구간에 속하는 데이터 값의 개수를 y축에 표시함.!
5: 산점도
서로 다른 두 변수 사이의 관계를 나타낸다.
mpg 데이터로 산점도 그래프를 그려보자.
# cylinders 개수의 상대적 비율을 계산하여 시리즈 생성
cylinders_size = df.cylinders/df.cylinders.max() * 300
# 3개의 변수로 산점도 그리기
df.plot(kind='scatter',x = 'weight', y = 'mpg', marker='+', figsize=(10,5),
cmap = 'viridis', c=cylinders_size, s=50, alpha=0.3) # 실린더 사이즈 값
plt.title('Scatter Plot : mpg-weight-cylinders')
plt.show()
plt.savefig('C:\\Users\\woghk\\OneDrive\\바탕 화면\\스터디\\판다스 자료실\\part3\/저장파일.png')
plt.savefig('C:\\Users\\woghk\\OneDrive\\바탕 화면\\스터디\\판다스 자료실\\part3\/저장파일(투명).png', transparent=True)
plt.show()
cmap = 컬러 설정 ( 종류가 엄청 많지만 cmap = 'viridis' 만 쓰자.)
5: 파이 차트
원을 파이처럼 나눠서 표현.
비율을 한눈에 볼 수 있다는 장점
6: 박스 플롯
범주형 데이터의 분포를 파악하는데 적합하다
# 박스 플롯
df = pd.read_csv("C:\\Users\\woghk\\OneDrive\\바탕 화면\\스터디\\판다스 자료실\\part3\/auto-mpg.csv",header=None)
print(df.head())
#열 이름 지정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
'acceleration','model year','origin','name']
from matplotlib import font_manager, rc
font_path = "C:\\Users\\woghk\\Downloads\\nanum-all\\나눔 글꼴\\나눔고딕\\NanumFontSetup_TTF_GOTHIC\/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family = font_name)
plt.style.use('seaborn-poster')
plt.rcParams['axes.unicode_minus']=False
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
ax1.boxplot(x=[df[df['origin']==1]['mpg'], # 위에 origin = 1 미국, 2: 영국, 3: 일본
df[df['origin']==2]['mpg'], # 미국[연비]....
df[df['origin']==3]['mpg']],
labels = ['USA','EU','JAPAN'])
ax2.boxplot(x=[df[df['origin']==1]['mpg'],
df[df['origin']==2]['mpg'],
df[df['origin']==3]['mpg']],
labels = ['USA','EU','JAPAN'],
vert=False)
ax1.set_title('제조국가별 연비 분포(수직 박스 플롯)')
ax2.set_title('제조국가별 연비 분포(수평 박스 플롯)')
plt.show()
# 박스플롯에서 평균을 볼 수 없다. 주황색은 중간값
# 동그라미는 이상값??
주황색 중간값
맨 위 맨 아래 : 최소, 최대값
박스의 끝 : 1분위, 3분위 값
고급 그래프 ( seaborn 활용 )
seaborn = matlpot의 기능 스타일 확장 버전이다.
회귀선이 있는 산점도
regplot() 서로 다른 2개의 연속 변수 사이의 산점도를 그리고 선형회귀분석에 의한 회귀선을 함께 나타낸다.
fit_reg = False 옵션을 설정하면 회귀선을 안 보이게 할 수 있다.
## regplot() 함수 = 서로 다른 2개의 연속 변수 사이의 산점도를 그리고 선형회귀 분석에 의한 회귀선을 나타냄.
# fig_reg = False 하면 회귀선 안보이게 할 수 있다.
import matplotlib.pyplot as plt
import seaborn as sns
# 스타일 테마 ( darkgrid, whitegrid, dark, white, ticks)
sns.set_style('darkgrid')
# 그래프 객체 생성
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
# 그래프 = 선형회귀선 표시 (fit_reg = True)
sns.regplot(x='age',
y='fare',
data = titanic,
ax= ax1)
# 그래프 = 선형회귀선 표시 X (fit_reg = False)
sns.regplot(x = 'age',
y = 'fare',
data = titanic,
ax = ax2,
fit_reg = False)
plt.show()
히트맵
히트맵으로 상관관계를 표현하기도 좋음!
table = titanic.pivot_table(index=['sex'], columns = ['class'], aggfunc = 'size')
#히트맵 그리기
sns.heatmap(table,
annot = True, fmt = 'd',
cmap = 'YlGnBu',
linewidth = .5,
cbar = False)
plt.show()
범주형 데이터의 산점도
stripplot() 과 swarmplot()이용
기존에 범주형 데이터면 stripplot을 애용했지만
분산까지 보여주는 swarmplot()을 쓰도록 하자!!!
조인트 그래프
jointplot() => 산점도를 기본으로 표시하고, 히스토그램을 동시에 보여줌