BASHA TECH

Ch04. 그래프 그리기 본문

Computer/Pandas

Ch04. 그래프 그리기

Basha 2022. 9. 27. 11:17
728x90

4-1. 데이터 시각화가 필요한 이유

- 앤스콤 4분할 그래프 살펴보기

- 앤스콤 데이터 집합 모두 사용해 그래프 만들기

4-2. matplotlib 라이브러리 자유자재로 사용하기

- 기초 그래프 그리기

- 다변량 그래프 그리기

4-3. seaborn 라이브러리 자유자재로 사용하기

4-4. 데이터프레임과 시리즈로 그래프 그리기

4-5. seaborn 라이브러리로 그래프 스타일 설정하기

 

ch04.ipynb
0.72MB

# anscombe dataset load
import seaborn as sns

anscombe = sns.load_dataset('anscombe')
anscombe
# 데이터 확인
anscombe.head()
anscombe.info()
anscombe['dataset']
# I 그룹 추출 
# 데이터 프레임에 대괄호 [] 들어가면 추출
dataset_1 = anscombe[anscombe['dataset'] == 'I']
dataset_1
# dataset_1 => 데이터 시각화
import matplotlib.pyplot as plt
# plt.plot(x축에 들어갈 값 지정, y축에 들어갈 값 지정, **option) : 선그래프
# dataset_1['x']: x 컬럼 추출
plt.plot(dataset_1['x'], dataset_1['y'],'o') 
plt.show()

# plt.plot(x축에 들어갈 값 지정, y축에 들어갈 값 지정, **option) : 선그래프
# dataset_1['x']: x 컬럼 추출
plt.plot(dataset_1['x'], dataset_1['y'],'^') 
plt.show()

# 그래프 작성시 
# 데이터 추출
dataset_2 = anscombe[anscombe['dataset'] == 'II']
dataset_3 = anscombe[anscombe['dataset'] == 'III']
dataset_4 = anscombe[anscombe['dataset'] == 'IV']
#ctrl+shift+'-' : 셀이 잘림
# 1. 도화지 한 장을 준비 => figure(figsize=(행크기,열크기)) function
%matplotlib inline 
fig = plt.figure(figsize=(6,6))

# 2. 도화지 분할 => 2 x 2, 1 x 4, 4 x 1 => add_subplot(행,열,위치값) => 축 생성
ax1 = fig.add_subplot(2,2,1) #2x2로 분할하고 1 행렬에 들어가라 => 축이 return된다
ax2 = fig.add_subplot(2,2,2) #add_subplot => 축이 만들어짐
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# 3. 분할된 영역 그래프 작성 => plot(x,y,option) : 선그래프 작성
ax1.plot(dataset_1['x'],dataset_1['y'],'o')
ax2.plot(dataset_2['x'],dataset_2['y'],'o')
ax3.plot(dataset_3['x'],dataset_3['y'],'o')
ax4.plot(dataset_4['x'],dataset_4['y'],'o')

# title
fig.suptitle('Anscombe Data') # 타이틀 부여
fig.tight_layout() # 레이아웃을 겹쳐 보이게 처리

# 4. show()
plt.show()

# matplotlib 기본
# 1. hist
# 데이터 추출 => tips
tips = sns.load_dataset('tips')
tips.head()

tips.info() 
# category data => 범주형 데이터

히스토그램 (Histogram)

# 히스토그램 : 연속값이여야 함.
# 1. 도화지 생성
fig = plt.figure()
axes1 = fig.add_subplot(1,1,1)
axes1.hist(tips['total_bill'], bins=10) # bins: 등분할 수 (분리할 칸수. 옆칸으로 분리해라)
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('Freq')
axes1.set_ylabel('Total Bill')
plt.show()

# 히스토그램 : 연속값이여야 함.
# 1. 도화지 생성
fig = plt.figure()
axes1 = fig.add_subplot(1,1,1)
axes1.hist(tips['sex'], bins=10) # 성별 : 연속된 값이 아님 
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('Freq')
axes1.set_ylabel('Total Bill')
plt.show()

산점도 (Scatter)

# 산점도 => scatter(x축, y축) (분포를 말한다, 축이 2개여야함.)
# total_bill, tips와의 관계 확인
scatter_fig = plt.figure()
axes1 = scatter_fig.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
plt.show()

# 산점도 => scatter(x축, y축) (분포를 말한다, 축이 2개여야함.)
# total_bill, tips와의 관계 확인
scatter_fig = plt.figure()
axes1 = scatter_fig.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
axes1.set_title('Scatterplot of Total Bill vs Tip')
axes1.set_xlabel('Total Bill')
axes1.set_ylabel('Tip')
plt.show()

박스 그래프 (Box Plot)

tips[tips['sex'] == 'Female']

tips[tips['sex'] == 'Female']['tip']

tips['time'].value_counts()

tips[tips['time'] == 'Dinner']['tip']

 

# Box Plot
# 성별 tip
boxplot_fig = plt.figure()
axes1 = boxplot_fig.add_subplot(1,1,1) 
axes1.boxplot(
    [
          tips[tips['sex'] == 'Female']['tip']
        , tips[tips['sex'] == 'Male']['tip']
    ]
)
plt.show()

# Box Plot
# 성별 tip
boxplot_fig = plt.figure()
axes1 = boxplot_fig.add_subplot(1,1,1) 
axes1.boxplot(
    [
          tips[tips['sex'] == 'Female']['tip']
        , tips[tips['sex'] == 'Male']['tip']
    ]
)
axes1.set_xlabel('Sex')
axes1.set_ylabel('Tip')
plt.show()

다변량 그래프 : 3개 이상의 변수를 사용한 그래프

일변량 그래프 : 1개의 변수를 사용한 그래프

이변량 그래프 : 2개의 변수를 사용한 그래프

# 다변량 처리
# 성별, 전체 금액에 대한 팁의 분포
def recode_sex(sex):
    if sex == 'Female':
        return 0
    else:
        return 1
# 위 함수를 적용해서 sex_color 컬럼 생성
tips['sex'] # Series 나옴
# 위 함수를 적용해서 sex_color 컬럼 생성
# sex 컬럼의 각 값을 recode_sex 함수에 각각 적용해서 처리
tips['sex'].apply(recode_sex) # New Series return
tips['sex'] # 성별의 값이 변경되지 않았다. 새로운 시리즈를 만들어야함.

 

 

tips['sex_color'] = tips['sex'].apply(recode_sex) # Series return
tips.head()

 

scatter_fig = plt.figure()
# axes1 = scatter_fig.add_subplot(1,1,1)
# axes1 = set.title()
plt.scatter(
      x=tips['total_bill']
    , y=tips['tip']
    , s=tips['size'] * 50
    , c=tips['sex_color']
    , alpha=0.5
)
plt.title('total bill vs tip')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

 

scatter_fig = plt.figure()
# axes1 = scatter_fig.add_subplot(1,1,1)
# axes1 = set.title()
plt.scatter(
      x=tips['total_bill']
    , y=tips['tip']
    , s=tips['tip'] * 30
    , c=tips['sex_color']
    , alpha=0.5
)
plt.title('total bill vs tip')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

sns.lmplot(
      x='total_bill'
    , y='tip'
    , data=tips #dataframe
    , fit_reg=False
    , hue='sex' 
    , scatter_kws={'s':tips.size*1}
    # , scatter_kws={'s':tips['size']*1}
    , markers=['*','p']
    # marker 종류 https://matplotlib.org/stable/api/markers_api.html 
)
plt.show()

sns.lmplot(
      x='x'
    , y='y'
    , data=anscombe  
    , fit_reg=False
    , col='dataset'
    , col_wrap=2
    , size=3
)

tips['total_bill'].plot.hist() #plot은 선그래프

tips['total_bill'].hist() #빈도수
tips['total_bill'].plot.hist()
plt.show() # 그림만 그려라.
# 다변량으로 처리 => fancy index 사용
tips[['total_bill', 'tip']].plot.hist(alpha=0.5,bins=20)
plt.show()
tips['tip'].plot #object가 있다는 tip라는 데이터가 들어있고 도화지 있고 축이 만들어져있다는 뜻
tips['tip'].plot.kde() #밀도로 그려라
#산점도는 x,y값을 지정해야함.
tips.plot.scatter(
      x='total_bill'
    , y='tip'
    # , data=tips #tips로 지정하고 있기 때문에 이건 안해도 됨.
)

tips.plot.hexbin(
      x='total_bill'
    , y= 'tip'
)

tips.plot.box()

sns.set_style('ticks') #dark, darkgrid, white, whitegrid / default=>ticks
sns.violinplot(
      x='time'
    , y='total_bill'
    , data=tips
    , hue='sex'
    , split=True
)
plt.show()

 

 

728x90
반응형

'Computer > Pandas' 카테고리의 다른 글

Ch06. 누락값 처리하기  (0) 2022.09.28
Ch05. 데이터 연결하기  (0) 2022.09.27
Ch03. 판다스 데이터 프레임과 시리즈  (0) 2022.09.26
판다스 정리  (0) 2022.09.26
Ch02. 판다스 시작하기  (0) 2022.09.23
Comments