Pandas 웹에서 데이터 불러오기
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 인증, 데이터 구조 확인 등의 문제를 고려하여 적절한 전처리 과정을 수행해야 합니다.