#pandas 패키지를 이용한 시각화.
'''
line: 선 그래프
bar: 막대 그래프
barh: 수평 막대 그래프
hist: 히스토그램
box: 박스 플롯
kde: 커널 밀도 그래프
area: 면적 그래프
pie: 파이 그래프
scatter: 산점도 그래프
hexbin: 고밀도 산점도 그래프
'''
import seaborn as sns
df = sns.load_dataset('diamonds')
#다이아몬드, 무게(carat)와 가격(price)의 관계
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
df.plot.scatter(x='carat', y='price', figsize=(10, 6), title='캐럿과 가격 간의 관계')
plt.show()
#커팅의 가치(cut)별로 점 색을 다르게 표현하기(예쁨)
df.plot.scatter(x='carat', y='price', c='cut', cmap='Set2', figsize=(10, 6))
plt.show()
#다이아몬드 가격(price)을 히스토그램으로 표현하기
import seaborn as sns
df = sns.load_dataset('diamonds')
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
df['price'].plot.hist(figsize=(10, 6), bins=20) # price열만 표현하고 싶다고 선택.
plt.show()
# 다이아몬드 색(color) 별로 무게(carat)의 평균을 막대 그래프로 나타내기. (분석&시각화를 동시에 함)
import seaborn as sns
df = sns.load_dataset('diamonds')
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
df.groupby('color')['carat'].mean().plot.bar(figsize=(10, 6))
#그룹바이 컬러, 그다음 carat의 평균을 구하고, 구해진 값에 바로 plot.bar() 메서드 적용해서 막대 그래프로 표현한다.
plt.show()
#seaborn 패키지는 matplotlib보다 좀 더 화려하고 복잡한 그래프
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
#나이와 운임의 관계, 산점도 그래프
sns.scatterplot(data=df, x='age', y='fare')
plt.show()
#각 그룹별로 점의 색, 모양을 다르게 표시하기
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
sns.scatterplot(data=df, x='age', y='fare', hue='class', style='class') #hue는 색이고 style은 점 모양인데 둘 다 클래스에 따라서 달라지도록 설정함.
plt.show() # 자동으로 다 설정해 줌.
# matplotlib나 pandas로 못하는 것. 히트맵? 과 같은 복잡한 그림? (완전 좋음.)
#1. 각 클래스와 성별에 따른 생존율을 계산해 보자.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
df_pivot = df.pivot_table(index='class', #행인덱스(맨 왼쪽 세로 줄로 표시)
columns= 'sex', #열 인덱스(맨 위 가로 줄로 표시)
values='survived', #넣을 값.
aggfunc='mean') #aggfunc(==집계함수)는 평균을 사용.(survived열에서 1은 생존, 0은 사망을 의미하므로 평균==생존율이다.)
print(df_pivot)
#위 결과를 히트맵으로 나타내면?
sns.heatmap(df_pivot, annot=True, cmap='BrBG')
#heatmap()함수 안에 df_pivot테이블 넣음.
#annot은 데이터 값을 표시할지 여부, cmap은 팔레트 종류로, coolwarm은 값이 높을수록 붉은색, 낮을수록 푸른 색이다.
plt.show()
#한 번에 여러 개의 그래프 나타내기
'''
1. figure-level: (뭔가 그래프를 그리는 캔버스 자체, 그림판 레벨이라는 뜻)
matplotlib와 별개로 seaborn의 figure를 만들어 그곳에 그래프를 나타낸다.
여러 개의 그래프를 나타낼 때, facetgrid(seaborn의 figure)를 통해 레이아웃을 변경해야 함.
함수 이름: replot, displot, catplot
2. axes-level: (그래프 레벨에서 조정한다는 뜻)
그냥 matplotlib의 axes에 그래프를 나타냄.
'''
#figure-level의 예제. class별 나이 분포
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
sns.displot(data=df, x='age', hue='class', kind='hist', alpha=0.3)
#kind(그래프 종류)=히스토그램, hue(색 구분)=class별로 구분하겠다. alpha(투명도 조절)=0.3)
plt.show()
#위의 그래프를 각각 개별 그래프로 표현해 보자. (histplot()은 axes-level이라서 여러 그래프 못 나타냄.)
sns.displot(data=df, x='age', col='class', kind='hist') #col인자에 특정 열을 입력하면 해당 열을 기준으로 그래프가 각각 분할됨.
plt.show() #클래스 1그래프, 클래스2 그래프, 클래스 3 그래프 이렇게 세 개가 가로로!(열 분할했으니까) 쭉 나온다.
sns.displot(data=df, x='age', col='class', row='sex', kind='hist')
#행으로는 sex, 열로는 class별로 구분되었다. 위에는 male- class 1, 2, 3 그래프가, 아래는 female- 1, 2, 3그래프가 나온다.
plt.show()
#axes-level의 예제. class별 나이 분포와 평균 나이
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
plt.rc('font', family='malgun Gothic')
g, axes = plt.subplots(2, 1, figsize=(8, 6))
sns.histplot(data=df, x='age', hue='class', ax=axes[0]) #히스토그램을 그린 다음에 ax=axes[0]을 쓰면 첫 번째 axes에 해당 그래프가 출력된다.
sns.barplot(data=df, x='class', y='age', ax=axes[1]) #두 번째 axes에 해당 그래프를 출력
axes[0].set_title('클래스별 나이 분포도') #제목 변경하는 법.
axes[1].set_title('클래스별 평균 나이')
g.tight_layout() #여백이 조정된다.
plt.show()
'파이썬 입문 > 데이터 분석 기초' 카테고리의 다른 글
파이썬 데이터시각화 연습(1) - matplotlib 패키지 이용 (0) | 2023.12.17 |
---|---|
파이썬 데이터 분석(6) 데이터프레임에 함수 적용하기 (1) | 2023.12.05 |
파이썬 데이터 분석(5) 데이터 재구조화 (1) | 2023.12.05 |
파이썬 데이터 분석(4) 데이터프레임 합치기 (1) | 2023.12.05 |
파이썬 데이터 분석(3) 인덱스 (1) | 2023.12.05 |