### pandas에서 시각화
import pandas as pd
df = pd.read_excel\
('./남북한발전전력량.xlsx',engine='openpyxl')
# .은 현재폴더 의미 없어도 됨
print(df.head())
# 0행과 5행의 정보만 1990년 이후 데이터만 가져오기 2열 이후 정보만 저장
ndf = df.iloc[[0,5],2:]
print(ndf)
# 인덱스 변경하기 [0,5] -> ['South','North']
ndf.index=["South","North"]
print(ndf)
# 열의 이름을 정수형으로 변경하기
ndf.columns = ndf.columns.map(int)
print(ndf.head())
# 선그래프 출력하기
ndf.plot()
# 열별로 선 그래프가 작성됨 => 전치행렬 (행열바꾸기)
ndf2 = ndf.T
print(ndf2)
ndf2.plot()
# 막대그래프
ndf2.plot(kind="bar")
# 히스토그램
ndf2.plot(kind="hist")
# 산점도
# auto-mpg.csv 파일을 읽기
df = pd.read_csv("auto-mpg.csv",header=None)
df
df.columns = ['mpg','cylinders','displacement',
'horsepower','weight','acceleration',
'modelyear','origin','name']
print(df)
print(df.head())
print(df.corr())
print(df[['mpg','weight']].corr())
df.plot(x='weight',y='mpg',kind='scatter')
df.plot(x='mpg',y='weight',kind='scatter')
df[['mpg','cylinders']].plot(kind='box')
##############################
# matplot 모듈을 사용하여 그래프 작성하기
##############################
#시도별 전출입 인구수.xlsx 파일을 읽어서 df 저장하기
df = pd.read_excel\
("시도별 전출입 인구수.xlsx",engine='openpyxl')
print(df.head())
# 누락값(NaN)을 앞 데이터로 채움.
# fillna() : 누락값 채움
df = df.fillna(method='ffill')
print(df.head())
print(df.info())
# 전출지가 서울에서 다른 지역으로 이동한 데이터만 추출하기
mask = (df['전출지별'] =='서울특별시') & \
(df['전입지별'] != '서울특별시')
print(mask)
# mask 값이 true인 레코드만 선택하여 df_seoul 데이터 저장
df_seoul = df[mask]
print(df_seoul)
# df_seoul 데이터에서 전출지별 컬럼의 값은 모두 서울특별시임
# 전출지별 컬럼을 제거하기
df_seoul.drop(["전출지별"],axis=1,inplace=True)
# 전입지별 컬럼의 이름을 전입지로 변경하기
df_seoul = df_seoul.rename(columns={"전입지별":"전입지"},inplace=True)
df_seoul
# 전입지 컬럼으로 index 설정하기
df_seoul.set_index('전입지',inplace=True)
print(df_seoul.head())
# 경기도로 이동한 인구 데이터만 선택하여 sr1 저장하기
sr1 = df_seoul.loc["경기도"]
print(sr1)
sr1.plot()
# matplot 라이브러리로 시각화하기 #한글 폰트 추가하기
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties\
(fname="c:/Windows/Fonts/malgun.ttf").get_name()
print(font_name)
rc('font',family=font_name)
plt.plot(sr1.index,sr1.values)
print(type(sr1))
plt.plot(sr1)
# 차트 제목 추가
plt.title("서울->경기 인구 이동")
plt.xlabel('기간')
plt.ylabel('이동 인구수')
# 그래프 크기 지정
plt.figure(figsize=(14,5))
plt.xticks(rotation='vertical')
plt.plot(sr1.index,sr1.values)
plt.title("서울->경기 인구 이동")
plt.xlabel('기간')
plt.ylabel('이동 인구수')
plt.legend(labels=['서울 -> 경기'],loc='best')
# 스타일 서식 지정
plt.style.use('ggplot')
plt.figure(figsize=(14,5))
plt.xticks(rotation='vertical',size=10)
plt.plot(sr1.index,sr1.values,marker='o',markersize=10)
plt.title("서울->경기 인구 이동")
plt.xlabel('기간')
plt.ylabel('이동 인구수')
plt.legend(labels=['서울 -> 경기'],loc='best',fontsize=15)
# 그래프에 설명 추가하기
plt.style.use('ggplot')
plt.figure(figsize=(14,5))
plt.xticks(rotation='vertical',size=20)
plt.plot(sr1.index,sr1.values,marker='o',markersize=10)
plt.title("서울->경기 인구 이동")
plt.xlabel('기간')
plt.ylabel('이동 인구수')
plt.legend(labels=['서울 -> 경기'],loc='best',fontsize=15)
# y축 범위 지정 (최소값,최대값)
plt.ylim(50000,800000)
# 주석 표시 - 화살표
plt.annotate('',
xy=(20,620000),
xytext=(2,290000),
xycoords='data',
arrowprops=dict(arrowstyle='->', \
color='skyblue',lw=5),
)
plt.annotate('',
xy=(47,450000),
xytext=(30,580000),
xycoords='data',
arrowprops=dict(arrowstyle='->',color='olive',lw=5),
)
# 문자 주석 추가 (위의 ggplot부터 한번에 실행해야함)
plt.annotate('인구 이동 증가(1970-1995)',
xy=(10,450000),
rotation=25,
va='baseline',
ha='center',
fontsize=15,
)
plt.annotate('인구 이동 감소(1995-2017)',
xy=(40,560000),
rotation=-11,
va='baseline',
ha='center',
fontsize=15,
)
# 한번에 2개의 그래프를 작성하기
fig = plt.figure(figsize=(10,10))
# 그래프가 그려지는 영역
ax1 = fig.add_subplot(2,1,1) #2행 1열 1번째
ax2 = fig.add_subplot(2,1,2) #2행 1열 2번째
ax1.plot(sr1,'o',markersize=10)
ax2.plot(sr1,'o',markersize=10,\
markerfacecolor='green',color='olive',\
linewidth=2,label='서울->경기')
ax2.legend(loc='best')
ax1.set_ylim(50000,800000)
ax2.set_ylim(50000,800000)
ax1.set_xticklabels(sr1.index,rotation=75)
ax2.set_xticklabels(sr1.index,rotation=75)
# 서울에서 '충청남도', '경상북도', '강원도'로 이동한
# 인구 데이터
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
rc('font',family="Malgun Gothic")
df = pd.read_excel("시도별 전출입 인구수.xlsx",engine="openpyxl",header=0)
df = df.fillna(method='ffill')
mask = (df['전출지별']=='서울특별시')
df_seoul = df[mask]
df_seoul = df_seoul.drop(["전출지별"], axis=1)
df_seoul.rename({'전입지별':'전입지'},axis=1,inplace=True)
df_seoul.set_index('전입지',inplace=True)
print(df_seoul.info())
print(df_seoul.head())
# 서울에서 '충청남도','경상북도','강원도'로 이동한
# 인구 데이터 값만 선택.
# sr1 데이터에 저장하기
# 1970년대 데이터만 조회하기
# range(1970,1980) : 1970 ~ 1979년 까지의 숫자를 저장한 리스트
col_years = list(map(str,range(1970,1980)))
sr1 = df_seoul.loc[["충청남도","경상북도","강원도"],col_years]
print(col_years)
print(sr1)
#
plt.style.use("ggplot")
fig = plt.figure(figsize=(20,5))
ax = fig.add_subplot(1,1,1) #1행 #1열 1번째 그림판
# ax 객체에 plot 함수로 그래프 출력
# col_years : x축의 값
# sr1.loc["충청남도",:] : y축의 값
ax.plot(col_years, sr1.loc["충청남도",:], marker='o', \
markerfacecolor = 'green', \
markersize = 10, color = 'olive', linewidth=2, \
label='서울 -> 충남')
ax.plot(col_years, sr1.loc["경상북도",:], marker='o', \
markerfacecolor = 'blue', \
markersize = 10, color = 'skyblue', linewidth=2, \
label='서울 -> 경북')
ax.plot(col_years, sr1.loc["강원도",:], marker='o', \
markerfacecolor = 'red', \
markersize = 10, color = 'magenta', linewidth=2, \
label='서울 -> 강원')
ax.legend(loc='best')
ax.set_title('서울->충남,경북,강원 인구 이동',size=20)
ax.set_xlabel('기간',size=12)
ax.set_ylabel('이동 인구수',size=12)
ax.set_xtickslabels(col_years,rotation=90)
ax.tick_params(axis='x',labelsize=10)
ax.tick_params(axis='y',labelsize=10)
plt.show()
### 2000년 이후에 서울에서 경기도, 부산광역시로 전출한 인구를
### 그래프로 작성하기
col_years = list(map(str,range(2000,2018)))
sr2 = df_seoul.loc[["경기도","부산광역시"],col_years]
print(col_years)
print(sr1)
#
plt.style.use("ggplot")
fig = plt.figure(figsize=(20,5))
ax = fig.add_subplot(1,1,1) #1행 #1열 1번째 그림판
# ax 객체에 plot 함수로 그래프 출력
# col_years : x축의 값
# sr1.loc["충청남도",:] : y축의 값
ax.plot(col_years, sr2.loc["경기도",:], marker='o', \
markerfacecolor = 'green', \
markersize = 10, color = 'olive', linewidth=2, \
label='서울 -> 경기도')
ax.plot(col_years, sr2.loc["부산광역시",:], marker='o', \
markerfacecolor = 'blue', \
markersize = 10, color = 'skyblue', linewidth=2, \
label='서울 -> 부산광역시')
ax.legend(loc='best') #가장 좋은 위치 알아서 찾아줌
ax.set_title('서울->경기도,부산광역시 인구 이동',size=20)
ax.set_xlabel('기간',size=12)
ax.set_ylabel('이동 인구수',size=12)
ax.set_xtickslabels(col_years, rotation=90)
ax.tick_params(axis='x',labelsize=10)
ax.tick_params(axis='y',labelsize=10)
plt.show()
# 하나의 그림판에 여러개의 그래프 작성
# 서울에서 '충청남도', '경상북도', '강원도', '전라남도'
# 이동한 인구 데이터 값만 선택
col_years = list(map(str,range(2000,2018)))
sr2 = df_seoul.loc[["충청남도","경상북도","강원도","전라남도"],col_years]
plt.style.use("ggplot")
fig = plt.figure(figsize=(20,10))
ax1 = fig.add_subplot(2,2,1) #2행 #2열 1번째 그림판
ax2 = fig.add_subplot(2,2,2) #2행 #2열 2번째 그림판
ax3 = fig.add_subplot(2,2,3) #2행 #2열 3번째 그림판
ax4 = fig.add_subplot(2,2,4) #2행 #2열 4번째 그림판
ax1.plot(col_years, sr2.loc["충청남도",:], marker='o', \
markerfacecolor = 'green', \
markersize = 10, color = 'olive', linewidth=2, \
label='서울 -> 충청남도')
ax2.plot(col_years, sr2.loc["경상북도",:], marker='o', \
markerfacecolor = 'blue', \
markersize = 10, color = 'skyblue', linewidth=2, \
label='서울 -> 경상북도')
ax3.plot(col_years, sr2.loc["강원도",:], marker='o', \
markerfacecolor = 'red', \
markersize = 10, color = 'magenta', linewidth=2, \
label='서울 -> 강원도')
ax4.plot(col_years, sr2.loc["전라남도",:], marker='o', \
markerfacecolor = 'orange', \
markersize = 10, color = 'yellow', linewidth=2, \
label='서울 -> 전라남도')
# 범례
ax1.legend(loc="best")
ax2.legend(loc="best")
ax3.legend(loc="best")
ax4.legend(loc="best")
#차트 제목
ax1.set_title("서울->충남 인구이동",size=15)
ax2.set_title("서울->경북 인구이동",size=15)
ax3.set_title("서울->강원 인구이동",size=15)
ax4.set_title("서울->전남 인구이동",size=15)
ax1.set_xtickslabels(col_years,rotation=90)
ax2.set_xtickslabels(col_years,rotation=90)
ax3.set_xtickslabels(col_years,rotation=90)
ax4.set_xtickslabels(col_years,rotation=90)
plt.show()
# 면적 그래프(area)
# 선 그래프 작성시 선과 x 축 사이의 공간을 색으로 표시하는
sr3 = sr2.T # 행과 열 바꾸기
plt.style.use("ggplot")
sr3.index = sr3.index.map(int) # 년도 -> 정수형으로 변환
# 데이터 프레임의 그래프로 그래프 작성하기
# stacked = True / False 겹치는지 쌓아가는지
# alpha = 0.2 : 투명도 / 0.5 디폴트
sr3.plot(kind="area", stacked=False, \
alpha=0.2, figsize=(20,10))
plt.title("서울->타시도 인구이동")
plt.ylabel("인구 이동수",size=20)
plt.xlabel("기간",size=20)
plt.legend(loc="best",fontsize=15)
plt.show()
# 막대 그래프 작성하기
# 2000년 이후 서울에서 '충청남도', '경상북도', '강원도', '전라남도'로
# 이동한 인구수
col_years = list(map(str,range(2000,2018)))
sr2 = df_seoul.loc[["충청남도","경상북도","강원도","전라남도"],col_years]
sr3 = sr2.T
plt.style.use("ggplot")
sr3.index = sr3.index.map(int)
sr3.plot(kind='bar', figsize=(20,10), width=0.7,
color=['orange','green','skyblue','blue'])
plt.title('서울 -> 타시도 인구 이동', size=30)
plt.ylabel('이동 인구 수', size = 20)
plt.xlabel('기간', size = 20)
plt.ylim(5000,60000)
plt.legend(loc='best', fontsize=15)
plt.show()
# 가로로 막대그래프 작성하기
# 서울에서 '충청남도', '경상북도', '강원도', '전라남도'로 이동한 인구수
# 합계 컬럼 생성하기
print(sr2.sum(axis=1))
sr2["합계"] = sr2.sum(axis=1)
print(sr2)
# 합계 내림차순 정렬하기
sr2.tot = sr2[["합계"]].sort_values(by="합계",ascending=True)
print(sr2.tot)
plt.style.use('ggplot')
sr2.tot.plot(kind='barh',color='cornflowerblue',width=0.5,figsize=(10,5))
plt.title('서울 -> 타시도 인구 이동')
plt.ylabel('전입지')
plt.xlabel('이동 인구 수')
plt.show()
# kind = 'barh' : 수평 막대 그래프
# 서울에서 '충청남도', '경상북도', '강원도', '전라남도'로 이동한 인구수
# 단 2010 이후에 이동한 합계를 수평 막대 그래프로 작성하기
col_years = list(map(str,range(2000,2018)))
sr2 = df_seoul.loc[["충청남도","경상북도","강원도","전라남도"],col_years]
sr2["합계"] = sr2.sum(axis=1)
sr2.tot = sr2[["합계"]].sort_values(by="합계",ascending=True)
plt.style.use('ggplot')
sr2.plot(kind='barh',color='cornflowerblue',width=0.5,figsize=(10,5))
plt.title('서울 -> 타시도 인구 이동')
plt.ylabel('전입지')
plt.xlabel('이동 인구 수')
plt.show()
# 리스트 데이터를 막대그래프로 출력하기
import matplotlib.pyplot as plt
plt.style.use("ggplot")
# x축의 레벨
subjects = ["Oracle","R","Python","Sklearn","Tensorflow"]
# y축의 값
scores = [65,90,85,60,95]
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# ax1.bar : 막대 그래프
# range(len()) : x축의 구분선들
ax1.bar(range(len(subjects)), scores, align="center",color="darkblue")
# x축의 위치 아래쪽
ax1.xaxis.set_ticks_position("bottom")
# y축의 위치 왼쪽
ax1.yaxis.set_ticks_position("left")
# x축의 레벨 부분을 설정
plt.xticks(range(len(subjects)),subjects,rotation=0,fontsize="small")
plt.xlabel("Subjects")
plt.ylabel("Score")
plt.title("Class Score")
# 현재 plt 내용을 bar_plot.png 파일로 저장한다.
plt.savefig("bar_plot.png", dpi=400, bbox_inches="tight")
plt.show()
# 연합 막대그래프 그리기
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rcParams['axes.unicode_minus'] = False
# Excel 데이터를 데이터프레임 변환
df = pd.read_excel('남북한발전전력량.xlsx', engine = 'openpyxl')
df = df.loc[5:9]
df.drop('전력량 (억㎾h)',axis='columns',inplace=True)
df.set_index('발전 전력별',inplace=True)
df = df.T
print(df.head())
# 증감율(변동률) 계산
# '합계' 컬럼명을 '총발전량' 컬럼명으로 변경
df = df.rename(columns={'합계':'총발전량'})
print(df.head())
# 총발전량 - 1년 컬럼 추가하기
# df['총발전량'].shift(1) : 앞의 레코드 값을 가져오기
df['총발전량 - 1년'] = df['총발전량'].shift(1)
# 100 / 90 => 1.1 - 1 +> 0.1 * 100 = 10.11 (증감율 계산)
df['증감율'] = ((df['총발전량'] / df['총발전량 - 1년']) -1) * 100
# 2축 그래프 그리기
# stacked=True : 두개의 그래프를 쌓아서 출력하기
ax1 = df[['수력','화력']].plot(kind='bar', figsize=(20,10), \
width=0.7, stacked=True)
#ax1 도화지를 복사해서 ax2를 생성하기
ax2 = ax1.twinx()
# 선 그래프 작성하기
# ls = '--' : 선의 종류
# marker : 마커 종류 (동그라미)
# markersize : 마커 사이즈
# color : 색상
ax2.plot(df.index, df.증감율, ls ='--', marker='o',markersize=20,
color='green', label='전년대비 증감율(%)')
ax1.set_ylim(0,500)
ax2.set_ylim(-50,50)
ax1.set_xlabel('연도',size=20)
ax1.set_ylabel('전력량 (억㎾h)')
ax2.set_ylabel('전년대비 증감율(%)')
plt.title('북한 전력 발전량 (1990 ~ 2016)', size=30)
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
plt.show()
########### 히스토그램 ###########
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('classic')
df = pd.read_csv("auto-mpg.csv", header=None)
# df.columns : 컬럼명 설정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
'acceleration','model year','origin','name']
# df['mpg'] : 시리즈
# kind='hist' : 그래프의 종류가 히스토그램이다
# kind='area' : 그래프 종류 선 그래프(면적)
# kind='bar' : 막대 그래프
# kind='barh' : 수평 막대 그래프
# bins=10 : 데이터 구간을 10칸으로 설정
df['mpg'].plot(kind='hist',bins=10,color='coral',figsize=(10,5))
plt.title("Histogram")
plt.xlabel('mpg')
plt.show()
### 산점도 그래프 작성하기
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 'ggplot' 또는 'default'로 실행 가능
# read_csv() 함수로 df 생성
df = pd.read_csv('auto-mpg.csv', header = None)
# 열 이름 작성하기
df.columns = ['mpg','cylinders','displacement','horsepwoer',\
'weight','acceleration','model year','origin','name']
# 연비(mpg)와 차중(weight) 열에 대한 산점도 그리기
# s : 점의 크기 지정
df.plot(kind='scatter',x='weight',y='mpg',c='coral', s=20,\
figsize=(10,5))
plt.title('Scatter Plot - mpg vs. weight')
plt.show()
### 버블 그래프 작성하기 : 산점도
### 3개의 변수로 지정.
### x축, y축, 점의 크기(cylinders)
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('default') # 'ggplot' 또는 'default'로 실행 가능
# read_csv() 함수로 df 생성
df = pd.read_csv('auto-mpg.csv', header = None)
# 열 이름 작성하기
df.columns = ['mpg','cylinders','displacement','horsepwoer',\
'weight','acceleration','model year','origin','name']
# 연비(mpg)와 차중(weight) 열에 대한 산점도 그리기
# s : 점의 크기 지정
# cylinders 개수의 상대적 비율을 계산하여 시리즈 생성
cylinders_size = df.cylinders / df.cylinders.max() * 300
df.plot(kind='scatter',x='weight',y='mpg',c='coral',\
figsize=(10,5), s = cylinders_size,alpha=0.3)
plt.title('Scatter Plot - mpg vs. weight')
# 색상으로 설정하기
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.savefig("./scatter.png")
plt.savefig("./scatter_transparent.png",transparent=True)
plt.show()
# 파이그래프
# 데이터 개수 카운트를 위해 값1을 가진 열을 추가
df['count'] = 1
print(df.head())
print(df.info())
# origin 컬럼의 값 : 1(USA),2(EU),3(JAPAN)
df_origin = df.groupby('origin').sum() # origin 열을 기준으로
# df_origin["count"] : 국가별 자동차의 갯수
print(df_origin.head()) # 그룹 연산 결과 출력
print(df_origin)
# 제조국가(origin) 값을 실제 지역명으로 변경
df_origin.index = ['USA','EU','JAPAN']
# 제조국가(origin) 열에 대한 파이 차트 그리기 - count 열 데이터 사용
df_origin['count'].plot(kind='pie',
figsize=(7,5),
autopct='%1.1f%%', # 퍼센트 % 표시
startangle=10, #파이 조각을 나누는 시작점(각도 표시)
colors=['chocolate','bisque','cadetblue'] #색상표시
)
plt.title('Model Origin', size=20)
plt.axis('equal') # 파이 차트의 비율을 같게 (원에 가깝게) 조정
plt.legend(labels=df_origin.index, loc='upper right') # 범례
plt.show()
### 박스 그래프 (한 화면에 두 개의 그래프 작성)
### 세로 박스 그래프, 가로 박스 그래프
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
rc('font',family='Malgun Gothic')
plt.style.use("seaborn-poster")
plt.rcParams['axes.unicode_minus'] = False
# read_csv() 함수로 df 생성
df = pd.read_csv('auto-mpg.csv',header=None)
# 열 이름을 지정
df.columns = ['mpg','cylinders','displacement','horsepwoer',\
'weight','acceleration','model year','origin','name']
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
print(df[df['origin']==3]['mpg'])
# vert = 가로 or 세로
ax1.boxplot(x=[df[df['origin']==1]['mpg'],
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()
# 선형 회귀 그래프 : 산점도 선형회귀선 표시
sns.set_style('darkgrid')
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
sns.regplot(x='age', #x축 변수
y='fare', #y축 변수
data=titanic, #데이터
ax=ax1) #axe 객체 - 1번째 그래프
sns.regplot(x='age',
y='fare',
data=titanic,
ax=ax2, #axe 객체 - 2번째 그래프
fit_reg=False) #회귀선 미표시
plt.show()
## 히스토그램 그래프 작성하기
## 그래프 객체 생성 (figure)
## kde : 커널 밀도 그래프
## hist : 히스토그램 그래프
## 그래프 객체 생성 (figure)
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)
# distplot
sns.distplot(titanic['fare'], ax=ax1)
# kdeplot
sns.kdeplot(x='fare',data=titanic,ax=ax2)
# histplot
sns.histplot(x='fare',data=titanic,ax=ax3)
# 차트 제목
ax1.set_title('titanic fare - distplot')
ax2.set_title('titanic fare - kdeplot')
ax3.set_title('titanic fare - histplot')
plt.show()
# 히트맵
sns.heatmap(table, # 데이터프레임
annot=True, fmt='d', # 데이터 값 표시 여부, 정수형 포맷
cmap='YlGnBu', # 컬러 맵
linewidth=.5, # 구분 선
cbar=False) # 컬러 바 표시
plt.show()
sns.heatmap(table, # 데이터프레임
annot=True, fmt='d', # 데이터 값 표시 여부, 정수형 포맷
cmap='YlGnBu', # 컬러 맵
linewidth=.5, # 구분 선
cbar=True) # 컬러 바 표시
plt.show()
# 산점도
import pandas as pd
import numpy as np
import seaborn as sns
sns.set_style('whitegrid')
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
sns.stripplot(x='class', #x축 변수
y='age', #y축 변수
data=titanic, #데이터
hue="sex", #구분 컬럼
ax=ax1) #1번째 그래프
sns.swarmplot(x='class',
y='age',
data=titanic,
hue="sex",
ax=ax2
)
# 차트 제목 표시
ax1.set_title('Strip Plot')
ax2.set_title('Swarm Plot')
plt.show()
# 막대 그래프
fig = plt.figure(figsize=(15,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)
sns.barplot(x='sex',y='survived',hue='class',\
data=titanic,ax=ax2)
sns.barplot(x='sex',y='survived',hue='class',dodge=False,\
data=titanic,ax=ax3)
# 차트 제목 표시
ax1.set_title("titanic survived - sex")
ax2.set_title("titanic survived - sex/class")
ax3.set_title("titanic survived - sex/class(stacked)")
# countplot : 막대 그래프 건수 출력
# 그래프 객체 생성(figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)
print(titanic["who"].head())
# 기본값
sns.countplot(x='class',palette='Set1',data=titanic,ax=ax1)
# hue 옵션에 'who' 추가
sns.countplot(x='class',hue='who',palette='Set2',\
data=titanic, ax=ax2)
# dodge = False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력)
sns.countplot(x='class',hue='who',palette='Set3',\
dodge=False,data=titanic,ax=ax3)
# 차트 제목 표시
ax1.set_title('titanic class')
ax2.set_title('titanic class - who')
ax3.set_title('titanic class - who(stacked)')
plt.show()
# 박스 & 바이올린 그래프
# 박스플롯 : 값의 범위
# 바이올린 : 값의 범위 + 분포
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(2,3,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)
# 박스 그래프 - hue 추가
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)
ax2.legend(loc='upper center')
ax4.legend(loc='upper center')
plt.show()
# 조인트 그래프 - 산점도 (기본값) x,y축 데이터의 히스토그램
j1 = sns.jointplot(x="fare",y="age",data=titanic)
# 조인트 그래프 - 회귀선
# kind='reg' : 회귀선
j2 = sns.jointplot(x="fare",y="age",kind='reg',\
data=titanic)
# 조인트 그래프 - 육각그래프
j3 = sns.jointplot(x="fare",y="age",kind='hex',\
data=titanic)
# 조인트 그래프 - 산점도 (기본값
j4 = sns.jointplot(x="fare",y="age",kind='kde',\
data=titanic)
# 차트 제목 표시 (각각 그래프 함수 밑에 함께 입력해주면 된다.)
j1.fig.suptitle('titanic fare - scatter', size=15)
j2.fig.suptitle('titanic fare - reg', size=15)
j3.fig.suptitle('titanic fare - hex', size=15)
j4.fig.suptitle('titanic fare - kde', size=15)
plt.show()
### FacetGrid
# 조건에 따라 그리드 나누기
# who : man,woman,child
# survived : 0 : 구조X, 1 : 구조O
g = sns.FacetGrid(data=titanic,col='who',row='survived')
# 그래프 적용하기
# 나이 컬럼을 기준으로 히스토그램을 표시하기
g = g.map(plt.hist, 'age')
plt.show()
### pairplot : 이변수 데이터 분포 그리기
### 대각선 위치 그래프는 히스토그램으로 표시
### 각 변수들의 산점도 출력,
### pairplot
### titanic 데이터셋 중에서 분석 데이터 분석하기
titanic_pair = titanic[['age','pclass','fare']]
print(titanic)
# 조건에 따라 그리드 나누기
g = sns.pairplot(titanic_pair)
'Python' 카테고리의 다른 글
Python - 지도 시각화(folium) (0) | 2021.06.29 |
---|---|
Python - 연습문제 [엑셀 파일 불러오고 그래프 그리기 ] (0) | 2021.06.24 |
Python - json 파일 읽기 (0) | 2021.06.22 |
Python - 판다스 xlsx 불러오기, 저장하기 연습문제 (infile,outfile) (0) | 2021.06.22 |
Python - 판다스 기초, 데이터프레임(대표값, 데이터프레임복사, 행/열 삭제) (0) | 2021.06.21 |