Python Pandas

Pandas 웹에서 데이터 불러오기

PyExplorer 2025. 2. 6. 10:42

Pandas 웹에서 데이터 불러오기

데이터 분석을 수행할 때, 웹에서 데이터를 직접 불러오는 것은 매우 유용한 기능입니다. Pandas는 웹에서 데이터를 가져와 DataFrame으로 변환하는 다양한 방법을 제공합니다. 이번 포스팅에서는 웹 데이터를 불러오는 방법과 이를 활용하는 실전 예제를 다룹니다.

1. 웹에서 데이터 불러오는 방법

Pandas에서는 웹에서 데이터를 불러올 수 있는 여러 함수들을 제공합니다. 가장 많이 사용되는 방법은 read_html(), read_csv()read_json()을 활용하는 것입니다.

1.1 read_html(): HTML 테이블 가져오기

웹페이지에는 종종 표 형식의 데이터가 포함되어 있습니다. Pandas의 read_html() 함수를 사용하면 HTML 페이지에서 테이블 데이터를 직접 가져올 수 있습니다.

import pandas as pd

url = "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)"
tables = pd.read_html(url)

# 가져온 테이블 개수 확인
print(f"총 {len(tables)}개의 테이블을 찾았습니다.")

# 첫 번째 테이블 확인
df = tables[0]
print(df.head())

이 함수는 지정한 URL에서 HTML 테이블을 찾아 리스트 형태로 반환합니다. 가져온 테이블이 여러 개일 수 있으므로, 원하는 테이블을 선택하여 활용해야 합니다.

1.2 read_csv(): 웹에서 CSV 파일 읽기

CSV 파일은 웹에서 가장 많이 제공되는 데이터 형식 중 하나입니다. Pandas의 read_csv() 함수는 웹상의 CSV 파일을 바로 DataFrame으로 로드할 수 있습니다.

url = "https://people.sc.fsu.edu/~jburkardt/data/csv/hw_200.csv"
df = pd.read_csv(url)
print(df.head())

CSV 파일의 구분자가 콤마(,)가 아닐 경우 sep 파라미터를 설정해야 하며, 인코딩 문제가 발생하면 encoding 옵션을 활용하여 해결할 수 있습니다.

url = "https://example.com/data.tsv"
df = pd.read_csv(url, sep='\t', encoding='utf-8')
print(df.head())

1.3 read_json(): 웹에서 JSON 데이터 불러오기

JSON 형식의 데이터는 웹 API에서 많이 사용됩니다. Pandas의 read_json() 함수를 사용하면 JSON 데이터를 바로 DataFrame으로 변환할 수 있습니다.

url = "https://api.exchangerate-api.com/v4/latest/USD"
df = pd.read_json(url)
print(df.head())

웹 API에서 JSON 데이터가 복잡한 구조를 가질 경우, json_normalize()를 활용하여 원하는 데이터만 추출할 수 있습니다.

import requests
from pandas import json_normalize

url = "https://api.exchangerate-api.com/v4/latest/USD"
response = requests.get(url)
data = response.json()

# 환율 정보만 가져오기
df = json_normalize(data, record_path=['rates'])
print(df.head())

2. 웹에서 데이터 가져올 때 고려해야 할 사항

웹에서 데이터를 불러올 때는 몇 가지 주의해야 할 점이 있습니다.

2.1 웹사이트 접근 제한

일부 웹사이트는 자동화된 데이터 수집(스크래핑)을 방지하기 위해 robots.txt를 설정하거나, 특정 요청을 차단할 수 있습니다. 이를 우회하려면 requests 라이브러리를 사용하여 User-Agent 값을 설정하는 방법이 있습니다.

headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
data = response.text

2.2 API 키 필요 여부 확인

많은 웹 API는 데이터 요청 시 API 키를 요구합니다. 이러한 경우 API 제공자의 문서를 참고하여 올바른 인증 방식을 적용해야 합니다.

api_key = "your_api_key"
url = f"https://api.example.com/data?apikey={api_key}"
df = pd.read_json(url)
print(df.head())

2.3 데이터 구조 확인

웹에서 제공하는 데이터는 구조가 일정하지 않을 수 있습니다. 데이터를 로드한 후 head(), info(), describe() 등의 함수를 활용하여 구조를 먼저 확인하는 것이 중요합니다.

print(df.head())
print(df.info())
print(df.describe())

3. 실전 예제: 웹에서 경제 지표 데이터 가져오기

아래는 세계 경제 지표 데이터를 웹에서 가져와 분석하는 예제입니다.

import pandas as pd

# 세계 GDP 데이터 가져오기
url = "https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)"
tables = pd.read_html(url)

df = tables[0]
print(df.head())

데이터를 정제하고 분석하는 과정은 다음과 같습니다.

# 컬럼명 정리
df.columns = ['Rank', 'Country', 'GDP_USD_millions']

# 불필요한 행 제거
df = df.dropna()

# GDP 값을 숫자로 변환
df['GDP_USD_millions'] = df['GDP_USD_millions'].replace({',': ''}, regex=True).astype(float)

# 상위 10개 국가 출력
print(df.head(10))

4. 마무리

Pandas를 사용하면 웹에서 데이터를 손쉽게 가져와 분석할 수 있습니다. read_html(), read_csv(), read_json() 등의 함수를 활용하면 다양한 포맷의 데이터를 손쉽게 다룰 수 있으며, API를 이용하면 실시간 데이터를 활용한 분석도 가능합니다.

다만, 웹사이트 접근 제한, API 인증, 데이터 구조 확인 등의 문제를 고려하여 적절한 전처리 과정을 수행해야 합니다.