웹에서 데이터 불러오기 (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 인증, 데이터 구조 확인 등의 문제를 고려하여 적절한 전처리 과정을 수행해야 합니다.
'Python > Pandas' 카테고리의 다른 글
Pandas 결측치 처리 (isna(), fillna(), dropna()) (0) | 2025.10.02 |
---|---|
Pandas 데이터 미리보기: head(), tail(), info(), describe() (0) | 2025.10.01 |
Pandas SQL 파일 포맷 다루기 (0) | 2025.09.29 |
JSON 파일 포맷 다루기 (0) | 2025.09.28 |
Pandas로 Excel 파일 다루기 (0) | 2025.09.27 |