[혼공분석 6주차] 혼자공부하는 데이터 분석 with 파이썬

@[혼공스터디] 혼자공부하는 데이터분석 with 파이썬

[혼공분석 6주차] 혼자공부하는 데이터 분석 with 파이썬



'혼자공부하는 데이터 분석 with 파이썬' 교재를 가지고 6주간의 온라인 스터디가 벌써 이번주를 끝으로 학습을 마무리 하고, 교재에 마지막 챕터7 부분을 제외하고 혼공스터디 덕분에 끝까지 학습할수 있었던거 같습니다. 이번주인 6주차에서는 맷플롯립을 가지고 더욱더 다양하고 사용하는 방법을 학습했습니다.



@[혼공스터디] 혼자공부하는 데이터분석 with 파이썬


맷플롯립 마커 옵션 : https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers

맷플롯립 컬러맵 : https://matplotlib.org/stable/gallery/color/colormap_reference.html


구글코랩에 폰트를 설치하는 방법도 배워서 그래프를 그릴때 원하는 한글 폰트등을 사용할수도 있었으며, 여러 개의 선과 막대 그래프를 그리는 방법등도 배웠습니다. 이를 통해 데이터 분석에 필요한 다양한 그래프를 그리는 방법을 습득할 수 있었으며, 데이터를 시각화 하여 더욱 효과적으로 분석할수 있었습니다.



  • 기본미션 : p. 344의 손코딩(맷플롯립의 컬러맵으로 산점도 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기


@[혼공스터디] 혼자공부하는 데이터분석 with 파이썬

fig, ax = plt.subplots(figsize=(10, 8))
sc = ax.scatter(ns_book8['발행년도'], ns_book8['출판사'], linewidths=0.5, edgecolors='k', alpha=0.3, s=ns_book8['대출건수']**1.3, c=ns_book8['대출건수'], cmap='jet')
ax.set_title('출판사별 발행 도서')
fig.colorbar(sc)
fig.show()



  • 선택미션 : p. 356 ~ 359의 스택 영역 그래프를 그리는 과정을 정리하기


스택 영역 그래프(stacked area graph)를 그리는 과정을 교재에서 처럼 3단계로 정리해 봅니다.


1. pivot_table() 메서드로 각 '발행년도' 열의 값을 열로 바꿔줍니다.

판다스의 pivot_table() 메서드를 사용하면 엑셀의 피벗 테이블(pivot table)처럼 원본 데이터프레임의 열을 지정하여 열의 고유한 값이 피벗 테이블로 변환이 됩니다.

ns_book10 = ns_book9.pivot_table(index='출판사', columns='발행년도')
ns_book10.head()


2. '발행년도'열을 리스트 형태로 바꿔줍니다.

판다스 인덱스 객체의 get_level_values() 메서드를 사용하여 다단으로 구성된 열 이름에서 선택한 항목을 가져옵니다.

top10_pubs = top30_pubs.index[:10]
year_cols = ns_book10.columns.get_level_values(1)


3. stackplot() 메서드로 스택 영역 그리프를 그려줍니다.

stackplot() 메서드에 x축 값으로는 연도 리스트를, y축 값으로는 상위 10개 출판사에 해당하는 행을 전달하며, 범례는 출판사 이름으로 지정하고, legend() 메서드의 loc매개변수로 범례의 위치를 지정합니다.

fig, ax = plt.subplots(figsize=(8, 6))
ax.stackplot(year_cols, ns_book10.loc[top10_pubs].fillna(0), labels=top10_pubs)
ax.set_title('연도별 대출건수')
ax.legend(loc='upper left')
ax.set_xlim(1985, 2025)
fig.show()



  • 응용 : 국내 영화관 관람 관객수에 대한 순위를 막대 그래프로 출력해 봤습니다


@[혼공스터디] 혼자공부하는 데이터분석 with 파이썬


import sys
import requests
import matplotlib.pyplot as plt

# 노트북이 코랩에서 실행 중인지 체크
if 'google.colab' in sys.modules:
  !echo 'debconf debconf/frontend select Nointeractive' | \
  debconf-set-selections
  # 나눔 폰트를 설치합니다.
  !sudo apt-get -qq -y install fonts-nanum
  import matplotlib.font_manager as fm
  font_files = fm.findSystemFonts(fontpaths=['/usr/share/fonts/truetype/nanum'])

  for fpath in font_files:
      fm.fontManager.addfont(fpath)


# 나눔고딕 폰트 사용
plt.rc('font', family='NanumBarunGothic')

url = "http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?key=[서비스키]&targetDt=20240202"
r = requests.get(url)
data = r.json()

# 그래프 데이터 추출
movies = data['boxOfficeResult']['weeklyBoxOfficeList']
movie_names = [movie['movieNm'] for movie in movies]
movie_audiences = [int(movie['audiCnt']) for movie in movies]

# 그래프 그리기
plt.bar(movie_names, movie_audiences)
plt.xticks(rotation=45, fontsize=6)
plt.xlabel('영화 제목')
plt.ylabel('관객 수')
plt.title('주간 박스오피스')
plt.show()


영화진흥위원회(kofic)에서 제공해주는 API 정보를 가지고 최근인 2024년도 2월 첫째주에 해당하는 주간 박스오피스를 막대그래프로 출력해 보았습니다.


이번 주에 배운 산점도, 컬러맵 등을 활용하여 원하는 데이터를 시각화해보고 싶었지만, 특정일(targetDt)에 대한 JSON 파일만을 요청할 수 있어서 원하는 기간의 데이터를 요청하는 방법이 제공되지 않았습니다. 따라서 for문 등을 사용하여 하루씩 몇 년치 데이터를 불러오거나, 데이터를 별도의 데이터베이스(DB)에 저장하여 관리하는 방법을 고려하고 있습니다. 이후에는 React나 Kotlin을 활용하여 작은 웹이나 앱 프로젝트를 진행하여 영화 박스오피스 정보를 시각적으로 보여줄 수 있는 페이지도 만들어 보면 어떨까 고민도 생기네요...



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

댓글 쓰기

0 댓글