[한컴AI 아카데미 | 2026.06.17 | Day 79] 데이터 분석 ③ - Pandas로 포켓몬 데이터 분석하기

2026. 6. 17. 17:49·부트캠프

1. Pandas(판다스)란?

Pandas는 파이썬 환경에서 가볍고 직관적인 데이터 구조를 제공하여 정형 데이터를 효과적으로 처리할 수 있게 돕는 최고의 라이브러리이다. 엑셀 스프레드시트나 SQL 테이블과 유사한 구조를 다루며, 데이터 분석, 정제, 탐색, 가공 등의 전 과정을 지원한다.

  • 핵심 활용 기능:
    • CSV, Excel, SQL, JSON 등 다양한 데이터 포맷 연동
    • 결측치(Missing Data) 및 중복 데이터의 효율적인 처리
    • 조건 검색, 그룹화(Grouping), 통계치 분석 자동화
    • 시각화 라이브러리(Matplotlib)와의 유기적 결합

2. DataFrame과 인덱싱 (loc vs iloc) 핵심 정리

Pandas의 핵심 자료구조는 2차원 테이블 형태의 데이터인 DataFrame입니다. 데이터를 자유자재로 추출하기 위해서는 두 가지 강력한 인덱서인 loc와 iloc의 차이를 완벽히 이해해야 합니다.

① loc (Label-based Indexing)

loc는 행과 열의 레이블(이름)을 기준으로 데이터를 조회한다. 문자를 기반으로 작동하며, 슬라이싱 시 마지막 범위를 포함하는 특징이 있다. 조건 검색(필터링) 시 필수적으로 활용된다.

# 기본 사용 예시
df.loc[0]                         # 인덱스 레이블이 0인 행 조회
df.loc[[0]]                       # DataFrame 형태로 0번 행 반환
df.loc[0:3]                       # 레이블 0부터 3까지 포함 (3 포함!)

# 행과 열 지정 조회
df.loc[0, "Name"]                 # 0번 행의 'Name' 컬럼 값
df.loc[0:3, ["Name", "Attack"]]   # 0~3번 행의 Name, Attack 컬럼 추출

# ★ 조건 검색 (조건 필터링)
df.loc[df["Attack"] >= 100]       # 공격력이 100 이상인 데이터만 추출

② iloc (Integer position-based Indexing)

iloc는 행과 열의 정수 위치(인덱스 번호)를 기준으로 데이터를 조회한다. 파이썬 기본 리스트의 슬라이싱 규칙을 그대로 따르기 때문에 마지막 인덱스는 범위에서 제외된다.

비교 항목 loc iloc
접근 기준 인덱스 레이블 (명칭, 이름) 정수 위치 인덱스 (0부터 시작하는 번호)
슬라이싱 종료 시점 종료 레이블 포함 (0:3 ➡️ 0,1,2,3) 종료 위치 미포함 (0:3 ➡️ 0,1,2)
주요 용도 조건문 필터링, 특정 컬럼명 데이터 선택 순서 기반 추출, 랜덤 샘플 추출 후 행 접근

③ 파생 변수 생성

데이터 분석에서는 기존의 컬럼을 조합하여 분석 목적에 맞는 새로운 컬럼(파생 변수)을 자주 만든다.

loc를 활용하면 조건부 파생 변수 생성이 매우 직관적이다.

# 기본값 채우기
df["체질량"] = "일반"

# loc를 활용한 조건별 파생 변수 할당
df.loc[df["몸무게"] >= 80, "체질량"] = "관리대상"

3. 실습 프로젝트: 포켓몬 전투력 데이터 분석

어제에 이어 포켓몬 데이터를 활용해 데이터 탐색부터 파생 변수 가공, 그룹 분석, 시각화까지의 일련의 데이터 분석 흐름을 실습해 보려고 한다.


⚡ 데이터 불러오기

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 데이터 불러오기
url = "https://raw.githubusercontent.com/KeithGalli/pandas/master/pokemon_data.csv"
df = pd.read_csv(url)

데이터 구조 안에는 각 포켓몬의 이름, 타입(Type 1, Type 2), 기본 능력치(HP, Attack, Defense, Speed 등) 및 전설 여부(Legendary)가 포함되어 있다.


⚡파생 변수: 총 능력치(Total) 및 BattleScore 생성

단순 능력치 합산 외에도, 공격력과 스피드 가중치를 조금 더 부여하여 독자적인 종합 전투력 지표인 BattleScore를 정의한다.

# 1. 단순 능력치 합계 컬럼 생성
df["Total"] = df["HP"] + df["Attack"] + df["Defense"] + df["Sp. Atk"] + df["Sp. Def"] + df["Speed"]

# 2. 가중치를 반영한 신규 전투력 지표 BattleScore 생성
df["BattleScore"] = (
    df["HP"] * 0.2 +
    df["Attack"] * 0.3 +
    df["Defense"] * 0.1 +
    df["Sp. Atk"] * 0.2 +
    df["Speed"] * 0.2
)

⚡가장 강한 포켓몬 정렬 확인

df.sort_values("BattleScore", ascending=False).head(10)

결과를 보면 예상대로 스탯 분포가 높은 전설의 포켓몬들이 최상위권을 대거 독점하고 있음을 확인할 수 있다.


⚡타입별 평균 BattleScore 분석 및 시각화

포켓몬의 속성을 나타내는 Type 1 컬럼을 기준으로 그룹화(groupby)를 수행하여 평균 전투력을 산출하고 이를 막대그래프로 시각화한다.

import matplotlib.pyplot as plt

# 타입별 평균 BattleScore 계산 및 정렬
type_avg = df.groupby("Type 1")["BattleScore"].mean().sort_values(ascending=False)

# 시각화 설정
plt.figure(figsize=(10, 5))
type_avg.plot(kind="bar", color="#3498DB")
plt.title("Average BattleScore by Type")
plt.ylabel("BattleScore")
plt.xticks(rotation=45)
plt.show()

그래프를 통해 특정 속성(예: 드래곤 등)이 평균적으로 높은 전투력을 가진다는 점을 시각적으로 쉽게 확인할 수 있다.


⚡전설 포켓몬 제외 및 일반 포켓몬 TOP 10 분석

전설 포켓몬을 제외하고, 순수 loc 조건 검색을 통해 일반 포켓몬끼리 비교해보고자 한다.

# 전설 포켓몬 필터링 제거 (조건 검색)
normal_df = df.loc[df["Legendary"] == False]

# 일반 포켓몬 중 최상위 10개 추출
top10_normal = normal_df.sort_values("BattleScore", ascending=False).head(10)
top10_normal[["Name", "Type 1", "BattleScore"]]

일반 포켓몬 TOP 10을 가독성 좋은 수평 막대그래프(barh)로 시각화한다.

plt.figure(figsize=(10, 5))
plt.barh(top10_normal["Name"], top10_normal["BattleScore"], color="#2ECC71")
plt.title("Top 10 Non-Legendary Pokemon")
plt.xlabel("Battle Score")
plt.gca().invert_yaxis()  # 높은 순위가 위에 오도록 정렬 뒤집기
plt.show()


⚡TOP 10 포켓몬의 타입 분포 분석

# 타입 빈도 집계 및 시각화
top10_normal["Type 1"].value_counts().plot(kind="bar", color="#E67E22")
plt.title("Type Distribution in Top 10")
plt.xlabel("Type")
plt.ylabel("Count")
plt.show()

분석 데이터 결과 드래곤(Dragon) 타입과 같은 특정 타입이 상위권에 많이 분포해 있음을 알 수 있다.


4. 랜덤 배틀 시뮬레이션 및 결과 시각화

데이터 분석에 재미를 더하기 위해, 앞서 선정한 일반 포켓몬 TOP 10 리스트에서 임의로 두 마리를 추출하여 가상 배틀을 진행하고 승패 결과를 Pandas 코드로 구현해 보았다.

# TOP 10 데이터셋에서 랜덤 무작위 2개 샘플 추출
battle = top10_normal.sample(2)

# iloc 정수 인덱싱을 활용해 첫 번째 포켓몬과 두 번째 포켓몬 할당
p1 = battle.iloc[0]
p2 = battle.iloc[1]

print(f"[배틀 대진표] {p1['Name']} VS {p2['Name']}")

# 승자 결정 조건 로직
if p1["BattleScore"] > p2["BattleScore"]:
    winner = p1
else:
    winner = p2

print(f"🏆 승리 포켓몬: {winner['Name']} 🏆")
[배틀 대진표] BlazikenMega Blaziken VS GarchompMega Garchomp
🏆 승리 포켓몬: GarchompMega Garchomp 🏆

추출된 두 포켓몬의 BattleScore 수치를 비교 바 차트로 그려서 우열을 한눈에 식별한다.


💭메무아

이번 실습에서는 Pandas의 loc, iloc, sort_values, groupby, value_counts 등의 기능을 실제 데이터에 적용해보았다. 또한 단순히 데이터를 조회하는 것에서 끝나는 것이 아니라 BattleScore라는 파생 변수를 생성하고, 이를 기반으로 포켓몬들의 전투력을 분석하고 시각화해보았다.

특히 데이터를 분석하는 과정에서 조건 검색, 그룹화, 정렬, 시각화가 어떻게 연결되는지 경험할 수 있었으며, Pandas와 Matplotlib를 활용한 데이터 분석의 기본 흐름을 이해할 수 있는 좋은 실습이었다.

 

 

 

 

더보기

————————————————————————————————————————————————————— 

 

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리]

한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.

'부트캠프' 카테고리의 다른 글

[한컴AI 아카데미 | 2026.06.18 | Day 80] 데이터 분석 ④ - Pandas로 KBO MVP, 신인상 선수 데이터 분석  (0) 2026.06.19
[한컴AI 아카데미 | 2026.06.16 | Day 78] 데이터 분석 ② - Matplotlib로 포켓몬 데이터 시각화해보기  (0) 2026.06.17
[한컴AI 아카데미 | 2026.06.15 | Day 77] 데이터 분석 ① - Numpy  (0) 2026.06.16
[한컴AI 아카데미 | 2026.06.11 | Day 73] FastAPI ② - Cookie, Session, JWT 인증 구현 및 비교  (0) 2026.06.11
[한컴AI 아카데미 | 2026.06.09 | Day 71] 크롤링 ③ - BeautifulSoup으로 안 되던 데이터, Selenium 없이 수집할 수 있었던 이유  (0) 2026.06.09
'부트캠프' 카테고리의 다른 글
  • [한컴AI 아카데미 | 2026.06.18 | Day 80] 데이터 분석 ④ - Pandas로 KBO MVP, 신인상 선수 데이터 분석
  • [한컴AI 아카데미 | 2026.06.16 | Day 78] 데이터 분석 ② - Matplotlib로 포켓몬 데이터 시각화해보기
  • [한컴AI 아카데미 | 2026.06.15 | Day 77] 데이터 분석 ① - Numpy
  • [한컴AI 아카데미 | 2026.06.11 | Day 73] FastAPI ② - Cookie, Session, JWT 인증 구현 및 비교
NGC463l
NGC463l
무한한 우주에서 헤엄치는 고래 한 마리
  • NGC463l
    고래별
    NGC463l
  • 전체
    오늘
    어제
    • 🚀 (66)
      • 부트캠프 (56)
      • CS (3)
      • 코딩 테스트 (2)
        • 백준 (1)
      • 프로젝트 (4)
        • 크보패스 (4)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AI아카데미
    이것이코딩테스트다
    코딩테스트
    LLM
    크롤링
    개발자교육
    ai전문가양성
    부트캠프
    이코테
    PYTHON
    AI개발자
    위치기반서비스
    프로젝트
    BFS
    kakaoapi
    알고리즘
    데이터전처리
    selenium
    개발자취업
    fastapi
    한컴ai아카데미
    스나이퍼팩토리
    TCP
    ai개발자교육
    한글과컴퓨터
    한국생산성본부
    컴퓨터네트워크
    백엔드
    API연동
    UDP
  • hELLO· Designed By정상우.v4.10.6
NGC463l
[한컴AI 아카데미 | 2026.06.17 | Day 79] 데이터 분석 ③ - Pandas로 포켓몬 데이터 분석하기
상단으로

티스토리툴바