import seaborn as sns
+ 한글 폰트 설치
# 한글 폰트 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
# 메뉴 - 런타임 - 런타임 다시 시작
1. 산점도
sns.regplot(x, y, data, ax, fig_reg)
ax = axe 객체 설정 = 위치 설정
fig_reg 회귀선 = False / True
import matplotlib.pyplot as plt
# 그래프 객체
fig = plt.figure(figsize = (12, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
# 산점도
# 회귀선이 없는 산점도
sns.regplot(x = 'age', y = 'fare', # 변수 설정
data = titanic, # 데이터 설정
ax = ax1, # axe 객체 설정 = 위치 설정
fit_reg = False)
# 회귀선이 있는 산점도
sns.regplot(x = 'age', y = 'fare', # 변수 설정
data = titanic, # 데이터 설정
ax = ax2, # axe 객체 설정 = 위치 설정
fit_reg = True)
plt.show()
2. 히스토그램, 밀도 함수 그래프
sns.displot(data, ax) 히스토그램 + 밀도함수 그래프
sns.kdeplot(data, ax) 밀도함수 그래프
sns.histplot(data, ax) 히스토그램
# 그래프 객체
fig = plt.figure(figsize = (18, 5))
ax1 = fig.add_subplot(1, 3, 1)
ax2 = fig.add_subplot(1, 3, 2)
ax3 = fig.add_subplot(1, 3, 3)
# 히스토그램 + 밀도함수 그래프
sns.distplot(titanic['fare'], ax = ax1)
# 밀도함수 그래프
sns.kdeplot(titanic['fare'], ax = ax2)
# 히스토그램
sns.histplot(titanic['fare'], ax = ax3)
# 제목 추가
ax1.set_title("fare 에 대한 히스토그램 & 밀도 함수")
ax2.set_title("fare 에 대한 밀도 함수")
ax3.set_title("fare 에 대한 히스토그램")
plt.show()
3. 히트맵
sns.heatmap(피봇테이블명, annot, fmt, cmap, linewidth, cbar)
annot = True/False 데이터 값 표시 여부
fmt = 숫자 표현 방식 지정 d=정수
cmap = 컬러맵
linewidth = 구분선
cbar = True/False 컬러바 표시 여부
# 스타일 적용
# darkgrid, whitegrid, dark, white, ticks
sns.set_style('darkgrid')
# 피봇 테이블
table = titanic.pivot_table(index = 'sex', columns = 'class', aggfunc = 'size')
# 히트맵
sns.heatmap(table,
annot = True, # 데이터 값 표시 여부
fmt = 'd', # 숫자 표현 방식 지정, d = 정수
cmap = 'plasma', # 컬러맵
linewidth = 1, # 구분선
cbar = True) # 컬러바 표시 여부
plt.show()
4. 범주형 변수 산점도
sns.stripplot(x, y, data, ax) 분산 고려하지 않은 경우
sns.swarmplot(x, y, data, ax) 분산 고려한 경우
# 그래프 객체
fig = plt.figure(figsize = (12, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
# 범주형 변수 산점도
# 1) 분산 고려하지 않은 경우
sns.stripplot(x = 'class', y = 'age', data = titanic, ax = ax1)
# 2) 분산 고려한 경우
sns.swarmplot(x = 'class', y = 'age', data = titanic, ax = ax2)
# 제목 추가
ax1.set_title('클래스에 따른 연령의 분포 - 분산 고려하지 않음')
ax2.set_title('클래스에 따른 연령의 분포 - 분산 고려')
plt.show()
5. 막대 그래프
비율 막대 그래프
sns.barplot(x, y, data, ax, errorbar)
errorbar = None (에러바 있는 게 디폴트임)
# 그래프 객체 생성
fig = plt.figure(figsize = (12, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)
# 막대 그래프 & 에러바 없이
sns.barplot(x = 'sex', y = 'survived', data = titanic, ax = ax1, errorbar = None)
sns.barplot(x = 'sex', y = 'survived', hue = 'class',
data = titanic, ax = ax2, errorbar = None)
sns.barplot(x = 'sex', y = 'survived', hue = 'class', dodge = False,
data = titanic, ax = ax3, errorbar = None)
# 줄 같이 생긴 것 = 에러바 (표준편차, 표준오차, 신뢰구간 등)
plt.show()
빈도 막대 그래프
sns.countplot(x, hue, dodge, data, ax)
# 그래프 객체 생성
fig = plt.figure(figsize = (12, 5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)
# 막대 그래프
sns.countplot(x = 'class', data = titanic, ax = ax1)
sns.countplot(x = 'class', hue = 'who',
data = titanic, ax = ax2)
sns.countplot(x = 'class', hue = 'who', dodge = False,
data = titanic, ax = ax3) # 그래프만 누적
#
plt.show()
6. 상자그림 & 바이올린 그림
sns.boxplot(x, y, hue, data, ax)
sns.violinplot(x, y, hue, data, ax)
# 그래프 객체 생성
fig = plt.figure(figsize = (14, 10))
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.boxplot(x = 'alive', y = 'age', data = titanic, ax = ax1)
sns.boxplot(x = 'alive', y = 'age', hue = 'sex',
data = titanic, ax = ax2)
# 바이올린 그림
sns.violinplot(x = 'alive', y = 'age', data = titanic, ax = ax3)
sns.violinplot(x = 'alive', y = 'age', hue = 'sex',
data = titanic, ax = ax4)
#
plt.show()
7. 조인트 그림
sns.jointplot(x, y, kind, data)
# 한글 폰트 설정
plt.rc("font", family = "NanumGothic")
# 조인트 그림 - 산점도(기본값)
jp1 = sns.jointplot(x = 'age', y = 'fare', data = titanic)
# 조인트 그림 - 산점도 + 회귀선
jp2 = sns.jointplot(x = 'age', y = 'fare', kind = 'reg', data = titanic)
# 조인트 그림 - 육각 산점도
jp3 = sns.jointplot(x = 'age', y = 'fare', kind = 'hex', data = titanic)
# 조인트 그림 - 밀도 함수
jp4 = sns.jointplot(x = 'age', y = 'fare', kind = 'kde', data = titanic)
# 제목
jp1.fig.suptitle("산점도")
jp2.fig.suptitle("산점도 + 회귀선")
jp3.fig.suptitle("육각 산점도")
jp4.fig.suptitle("밀도 함수")
#
plt.show()
8. 그리드 분할
sns.FacetGrid(data, row, col)
# 그리드 분할 = 빈도표를 만들듯이 화면을 분할해서 시각화
grid = sns.FacetGrid(data = titanic,
row = 'survived',
col = 'who')
# 그래프 넣기
grid.map(plt.hist, 'age')
#
plt.show()
9. pairplot
sns.pairplot(데이터)
# 변수들을 2개씩 짝을 지어서 시각화
pair_data = titanic[['age', 'pclass', 'fare']]
sns.pairplot(pair_data)
plt.show()
지도 시각화
# 라이브러리 불러오기
import folium
# 서울 지도 만들기 - 스타일 적용
seoul_map = folium.Map(location = [37.55, 126.98], zoom_start = 12,
tiles = 'Stamen Terrain')
# 파일로 저장
seoul_map.save('./seoul_map.html')
'Daily > 디지털하나로' 카테고리의 다른 글
데이터 분석 관련 필수 라이브러리 : pandas, matplotlib (0) | 2023.06.15 |
---|---|
SQL 이론&실습 (2) (0) | 2023.06.13 |
SQL 이론&실습 (1) | 2023.06.13 |
데이터 분석 기초 이론 (1) | 2023.06.08 |
파이썬 기초 실습 (1) | 2023.06.07 |
댓글