Pandas로 데이터 수집 및 병합

JOOYEUN SEO·2024년 12월 19일

100 Days of Python

목록 보기
74/76
post-thumbnail

🗂️ Day74 프로젝트: 레고 데이터셋 분석

레고의 데이터셋을 분석하면서 판다스에서 데이터를 집계하고 병합하기

1. HTML 마크다운으로 꾸미기

🔍 유의 사항

  • 마크다운(텍스트) 셀 안에 셀 스타일을 지정하기
  • 이미지 추가
    • 구글 콜랩의 경우 이미지의 URL로 HTML <img> 태그 사용
    • 로컬에서 주피터 노트북을 실행하는 경우 assets 폴더의 이미지 파일 연결하기
  • <h1> 태그 또는 # 기호로 섹션 제목 추가 가능

2. 레고 블록 색상 탐색하기

🔍 유의 사항

  • colors.csv 파일을 읽고 고유한 색상의 총 개수를 찾기
    •  .nunique() 메소드로 'name' 열의 모든 항목이 고유한지 여부 확인
    • 데이터프레임의 행 개수와 .nunique()의 값이 일치하면 중복되는 항목이 없다는 의미
  • 불투명한 색상 개수 대비 투명한 색상 개수를 알아보는 방법 2가지
    • .groupby() 메소드와 .count() 메소드를 결합하여 특정 열로 그룹화하고 항목을 계산
    •  .value_counts() 메소드로 각 범주에 몇 개의 항목이 들어있는지 빠르게 찾을 수 있음

3. 가장 오래되고 가장 큰 레고 세트 찾기

🔍 유의 사항

  • sets.csv 파일 읽기
  • 최초의 레고 세트가 출시된 연도와 이 세트의 이름 찾기
  • 레고 운영 첫해에 판 제품의 개수
  • 부품 수가 가장 많은 레고 세트 상위 5개

4. 시간 변화에 따른 출시 세트 수를 시각화하기

🔍 유의 사항

  • 레고 회사가 매해 전년 대비 얼마나 많은 세트를 더 출시해왔는지 살펴보기
    • 연도를 인덱스로, 세트의 개수를 그 값으로 하는 새로운 시리즈 생성
  • 맷플롯립으로 결과를 시각화
    • 데이터의 최근 2년은 모든 월이 들어있지 않으므로 차트가 극적으로 하락세를 보임
    • 슬라이싱으로 최근 2년치를 없애기

5. 판다스 .agg() 함수 사용법

🔍 유의 사항

  • 연도별로 데이터를 그룹화한 다음, 해당 연도 고유 테마의 수를 계산하기
  • .groupby() 메소드에  .agg()를 연결하여 특정 데이터프레임 열에 기반한 작업 실행하기
    • .agg()는 인자에서 딕셔너리 역할을 수행
    • 그룹별로 theme_id를 추출해 Series로 만들기
    • Series 객체에 .nunique() 메소드로 theme_id 열에 있는 고유 항목 수를 계산
  • 맷플롯립으로 연도별로 출시된 테마 수를 꺾은선 차트로 표시
    (전체 달만 들어간 연도만 포함)

6. 축이 다른 선형 차트를 중첩하기

🔍 유의 사항

  • 한 차트에 테마의 수와 세트의 수를 함께 표시하기
    • 두 항목의 단위가 매우 다르기 때문에 그대로 합치면 안 됨
    • 동일한 차트 안에서 두 개의 개별 축으로 데이터를 구성하고 표시해야 함
  • 맷플롯립에서 두 개의 별도 축 만들기
    1. 현재 축 개체를 가져와서 변수 ax1에 저장
    2. 또 다른 축 개체 ax2 생성
      ( .twinx() 메소드로 ax1ax2가 동일한 x축을 사용하도록 만들기)
    3. 축 개체에 데이터 표시
    4. 선의 색 구분, 축의 색 구분, 레이블 추가로 두 데이터를 구분하기 쉽게 바꾸기

7. 산점도: 레고 세트당 평균 부품 수

🔍 유의 사항

  • 레고 세트당 평균 부품 개수 계산하기
  • 연도를 인덱스로 하고 해당 연도의 레고 세트당 평균 부품 수를 내용으로 하는 판다스 시리즈 생성
  • .groupby().agg() 메소드를 함께 사용
  • 맷플롯립으로 산점도 차트 생성하기
    •  .scatter() 메소드로 산점도 차트 호출
    • 마지막 두 연도 제외하기

8. 연관 데이터베이스 스키마: 기본키와 외래키

🔍 유의 사항

  • 레고 테마 당 세트의 수 분석하기
    • theme_id 열에 .value_counts() 메소드 사용하기
    • 테마의 이름은 themes.csv에 있기 때문에 알 수 없음
  • 스키마
    • 데이터베이스가 운영되는 방식
    • 개별 테이블로 쪼개진 데이터베이스는 테이블의 키를 통해 서로 연결되는 구조
    • sets.csv의 'theme_id' 열은 themes.csv의 'id' 열과 연결됨
      • 'theme_id'는 sets.csv에서 외래키
      • 'id'는 themes.csv에서 고유한 기본키
  • 'Star Wars'라는 이름의 테마에 해당하는 세트의 개수 검색하기
    • themes.csv에서 찾은 id로 sets.csv에서 제품 검색
    • 동일한 테마를 가진 레고 세트가 많음을 알 수 있음

9. 데이터프레임을 병합하여 막대 차트를 만드는 방법

🔍 유의 사항

  • set_theme_count 시리즈에 '테마 아이디'와 '테마별 세트 개수' 열의 이름 변경
    •  .DataFrame() 메소드로 판다스 시리즈를 판다스 데이터프레임으로 변환하기
    • 데이터프레임에 딕셔너리를 제공(키가 열 이름이 됨)
      • '테마 아이디' 열의 이름을 'id'로 바꿔서 통일시키기
      • '테마별 세트 개수' 열의 이름을 'set_count'로 바꾸기
  • 테마당 세트 수와 테마 이름 데이터를 결합하기
    •  .merge() 메소드로 별개의 두 데이터프레임을 하나로 결합
    • 두 데이터프레임 및 병합할 열 이름을 전달
    • 양쪽의 데이터프레임에서 같은 이름을 가진 열에 적용됨 (on='열 이름 옵션)
  • 맷플롯립으로 상위 10개 테마를 표시하는 막대 차트 생성하기
    • x축의 테마 이름이 길어서 겹치는 현상 발생
    • 범주 이름을 회전시켜서 겹치지 않도록 조정하기




▷ Angela Yu, [Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복], Udemy, https://www.udemy.com/course/best-100-days-python/?couponCode=ST3MT72524

0개의 댓글