본문 바로가기
Code/혼공단-9기

혼공단 9기 - 혼공분석 - 5주차

by Beyonder 2023. 2. 11.

혼자 공부하는 데이터 분석 with 파이썬

#혼공학습단 #혼공 #혼공분석

# 진도 기본 미션 선택 미션
5주차
(2/6 ~ 2/12)
Chapter 05     p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기 p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기

Chapter 05 데이터 시각화하기

 

05-1 맷플롯립 기본 요소 알아보기

__Figure 객체

__rcParams 객체

__여러 개의 서브플롯 출력하기

[5가지 키워드로 정리하는 핵심 포인트]

[표로 정리하는 핵심 함수와 메서드]

[확인 문제]

 

05-2 선 그래프와 막대 그래프 그리기

__연도별 발행 도서 개수 구하기

__주제별 도서 개수 구하기

__선 그래프 그리기

__막대 그래프 그리기

__[문제 해결 과정] 맷플롯립으로 선 그래프와 막대 그래프 그리기

[좀 더 알아보기(1)] 이미지 출력하고 저장하기

[좀 더 알아보기(2)] 그래프를 이미지로 저장하기

[2가지 키워드로 정리하는 핵심 포인트]

[표로 정리하는 핵심 함수와 메서드]

[확인 문제]

 

I. 미션

1. 기본 미션 - p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기

2. 선택 미션 - p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기

II. 손코딩

5-1 맷플로립 기본 요소 알아보기

# p.283
import gdown
gdown.download('https://bit.ly/3pK7iuu', 'ns_book7.csv', quiet=False)

 

# p.283
import pandas as pd
ns_book7 = pd.read_csv('ns_book7.csv', low_memory=False)
ns_book7.head()

 

# p.284
import matplotlib.pyplot as plt

plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

 

 

# p.285
plt.figure(figsize=(9,6))
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

 

# p.285
print(plt.rcParams['figure.figsize'])

 

# p.287
print(plt.rcParams['figure.dpi'])

 

# p. 287
plt.figure(figsize=(900/72, 600/72))
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

 

# p.289
%config InlineBckend.print_figure_kwars = {'bbox_inches': None}
plt.figure(figsize=(900/72, 600/72))
plt.scatter(ns_book7['도서권수'],ns_book7['대출건수'], alpha=0.1)
plt.show()

 

# p.290
%config Inlinebackend.print_figure_kwargs = {'bbox_inches': 'tight'}

 

# p.290
plt.figure(dpi=144)
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

 

# p.291
plt.rcParams['figure.dpi']=100
# p.291
plt.rcParams['scatter.marker']

 

# p.292
plt.rcParams['scatter.marker']='*'

 

# p.292
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()

 

# p.293
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1, marker='+')
plt.show()

 

# p.295
fig, axs = plt.subplots(2)

axs[0].scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
axs[1].Shist(ns_book7['대출건수'], bins=100)
axs[1].set_yscale('log')

fig.show()

fig, axs = plt.subplots(2, figsize=(6,8))

axs[0].scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
axs[0].set_title('scatter plot')

axs[1].hist(ns_book7['대출건수'], bins=100)
axs[1].set_title('histogram')
axs[1].set_yscale('log')

fig.show()

 

# p.297
fix, axs = plt.subplots(1, 2, figsize=(10, 4))

axs[0].scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
axs[0].set_title('scatter plat')
axs[0].set_xlabel('number of books')
axs[0].set_ylabel('borrow count')

axs[1].hist(ns_book7['대출건수'], bins=100)
axs[1].set_title('histogram')
axs[1].set_yscale('log')
axs[1].set_xlabel('borrow count')
axs[1].set_ylabel('frequency')

fig.show()

 

5-2 선 그래프와 막대 그래프 그리기

# p.303
import gdown

gdown.download('https://bit.ly/3pK7iuu', 'ns_book7.csv', quiet=False)

 

# p.303
import pandas as pd

ns_book7 = pd.read_csv('ns_book7.csv', low_memory=False)
ns_book7.head()

 

# p.304
count_by_year = ns_book7['발행년도'].value_counts()
count_by_year

 

# p.304
count_by_year = count_by_year.sort_index()
count_by_year

 

count_by_year = count_by_year[count_by_year.index <= 2030]
count_by_year

 

# p.306
import numpy as np

def hdc_1st_char(no):
  if no is np.nan:
    return '-1'
  else:
    return no[0]
  
count_by_subject = ns_book7['주제분류번호'].apply(hdc_1st_char).value_counts()
count_by_subject 

 

# p.308
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 100

 

plt.plot(count_by_year.index, count_by_year.values)
plt.title('Books by Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.show()

 

# p.309
plt.plot(count_by_year, marker='.', linestyle=':', color='red')
plt.title('Books by Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.show()

 

# p.310
plt.plot(count_by_year, '.:r')

 

plt.plot(count_by_year, '*-g')
plt.title('Books By Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.show()

# p.312
plt.plot(count_by_year, '*-g')
plt.title('Books by Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks(range(1947, 2030, 10))
for idx, val in count_by_year[::5].items():
  plt.annotate(val, (idx, val))
plt.show()

 

# p.313
plt.plot(count_by_year, '*-g')
plt.title('Books by Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks(range(1947, 2030, 10))
for idx, val in count_by_year[::5].items():
  plt.annotate(val, (idx, val), xytext=(idx+1, val+10))
plt.show()

 

# p.314
plt.plot(count_by_year, '*-g')
plt.title('Books by Year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks(range(1947, 2030, 10))
for idx, val in count_by_year[::5].items():
  plt.annotate(val, (idx, val), xytext=(2, 2), textcoords='offset points')
plt.show()

 

plt.bar(count_by_subject.index, count_by_subject.values)
plt.title('Books by Subject')
plt.xlabel('subject')
plt.ylabel('number of books')
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points')
plt.show()

 

# p.316
plt.bar(count_by_subject.index, count_by_subject.values, width=0.7, color='blue')
plt.title('Books by Subject')
plt.xlabel('subject')
plt.ylabel('number of books')
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points', fontsize=8, ha='center', color='green')
plt.show()

 

# p.317
plt.barh(count_by_subject.index, count_by_subject.values, height=0.7, color='blue')
plt.title('Book by Subject')
plt.xlabel('number of books')
plt.ylabel('subject')
for idx, val in count_by_subject.items():
  plt.annotate(val, (val, idx), xytext=(2, 0), textcoords='offset points', fontsize=8, va='center', color='green')
plt.show()

# p.319
import sys
if 'google.colab' in sys.modules:
  !wget https://bit.ly/3wrj4xf -O jupiter.png

 

 

# p.319
img = plt.imread('jupiter.png')
img.shape

 

# p.320
plt.imshow(img)
plt.show()

 

# p.320
plt.figure(figsize=(8, 6))
plt.imshow(img)
plt.axis('off')
plt.show()

 

# p.321
from PIL import Image
pil_img = Image.open('jupiter.png')
plt.figure(figsize=(8, 6))
plt.imshow(pil_img)
plt.axis('off')
plt.show()

 

# p.321
plt.rcParams['savefig.dpi'

 

# p.322
plt.barh(count_by_subject.index, count_by_subject.values, height=0.7, color='blue')
plt.title('Books by Subject')
plt.xlabel('number of books')
plt.ylabel('subject')
for idx, val in count_by_subject.items():
  plt.annotate(val, (val, idx), xytext=(2, 0), textcoords='offset points', fontsize=8, va='center', color='green')
plt.savefig('books_by_subject.png')
plt.show()

 

 

# p.323
pil_img = Image.open('books_by_subject.png')
plt.figure(figsize=(8, 6))
plt.imshow(pil_img)
plt.axis('off')
plt.show()