
오늘 최종 프로젝트 팀원 신청서를 제출했다. 흐아. 사실 기초 프로젝트가 끝날 무렵부터 막연히 '최종 프로젝트는 프로젝트를 하면서 만난 마음 맞는 사람들끼리 조를 꾸려서 하고 싶다'고 생각했고 심화 프로젝트를 할 때부터는 최종 프로젝트 팀을 어떻게 짜야 할지 고민이 항상 마음 한켠에 있었는데, 이번 달 초에 일찍이 좋은 분들이랑 팀을 꾸리게 돼서 너무 기쁘다. 진짜 잘해야지.
오늘 한 일은,
- 데이터 수집 공부하기
- 프로덕트 데이터분석 1회차 수강하기
데이터 수집 공부: 1~4회차 실습 과제 풀기
주말 동안 착실히 휴식만을 취했다고 한다.. 얼른 실습 풀러 가자!

1회차 - API를 활용한 데이터 수집
[과제 1] 네이버 트렌드 API를 활용한 데이터 수집

우선 검색어로 최근 갈까말까 고민 중인 '서울국제도서전'을 중심으로 함께 검색할 검색어들을 정해보기로 했다. 검색어의 트렌드를 분석하는 일은 작년에 마케팅팀에서 월별 캠페인을 기획할 때 많이 참고했다. 네이버 데이터랩이나 구글 트렌드, 블랙키위, 썸트렌드 등에서 이런 시기에 따른 검색어 추이를 확인해 다음달 캠페인 아이템을 발굴할 때 지금 이 소재가 적절한지를 판단하는 데 사용했다.
검색어 트렌드를 분석하는 데도 목적이 다양하다.
- 해당 검색어의 관심도 추이를 파악하기 위해서
- 비슷한 여러 검색어들을 비교하여 어떤 검색어가 통용되는지 파악하기 위해서
- 특정한 시기에 해당 키워드의 검색량이 폭증하는 경향을 파악하기 위해서 등
연령별로도 파악하기 위해서도 볼 수 있다. 어떤 연령층이 해당 키워드에 반응하는지, 같은 것에 대해서 연령별로 반응하는 키워드가 어떻게 다른지 등을 파악할 수도 있다.
아무튼, 나는 '서울국제도서전'을 분석의 중심 키워드로 설정하고, '국제도서전', '2024 서울국제도서전', '책 전시회', '출판' 이렇게 총 5개의 검색어에 대한 트렌드를 보기로 했다.
# 검색어 '서울국제도서전'의 최근 1년간 주간 검색 트렌드 데이터 수집하기
# 라이브러리 열기
import requests
import json
from datetime import datetime, timedelta
# 기간 설정: 최근 1년간
end_date = datetime.today()
start_date = end_date - timedelta(weeks=52)
start_date_str = start_date.strftime("%Y-%m-%d")
end_date_str = end_date.strftime("%Y-%m-%d")
# API 기본 URL
base_url = "https://openapi.naver.com/v1/datalab/search"
# API 요청 헤더 설정
headers = {
"X-Naver-Client-Id" : client_id,
"X-Naver-Client-Secret" : client_secret,
"Content-Type" : "application/json"
}
# 검색어 그룹 정의
data = {
"startDate" : start_date_str,
"endDate" : end_date_str,
"timeUnit" : "week",
"keywordGroups" : [
{"groupName": "서울국제도서전", "keywords": ["서울국제도서전"]},
{"groupName": "국제도서전", "keywords": ["국제도서전"]},
{"groupName": "2024 서울국제도서전", "keywords": ["2024 서울국제도서전"]},
{"groupName": "책 전시회", "keywords": ["책 전시회"]},
{"groupName": "출판", "keywords": ["출판"]}
]
}
# POST 요청
response = requests.post(base_url, headers=headers, data=json.dumps(data))
# 결과 저장
if response.status_code == 200:
result = response.json()
with open("SeoulInternationalBookFair_trends.json", "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=4)
print("✅ JSON 저장 완료: naver_bookfair_trends.json")
else:
print("❌ 오류 발생:", response.status_code)
print(response.text)

# JSON 파일 불러와서 데이터 분석하기
# 라이브러리 열기
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import matplotlib.dates as mdates
# 한글 서체 설정하기
plt.rcParams['font.family'] = 'AppleGothic'
plt.rcParams['axes.unicode_minus'] = False # 마이너스 부호 깨짐 방지
# JSON 파일 불러오기
with open ("SeoulInternationalBookFair_trends.json", "r", encoding="utf-8") as f:
data = json.load(f)
df_all = pd.DataFrame()
for group in data['results']:
keyword = group['title']
df = pd.DataFrame(group['data'])
df['keyword'] = keyword
df_all = pd.concat([df_all, df], ignore_index=True)
# 날짜 타입 변환
df_all['period'] = pd.to_datetime(df_all['period'])
print(f"데이터 형태: {df_all.shape}")
print("\ndf_all 확인하기:")
print(df_all.head())

json 파일을 데이터프레임에 담아서 확인하니 기간, 비율, 검색어가 담겨있는 모습을 확인해봤다.
# 선 그래프로 검색어 트렌드 시각화하기
plt.figure(figsize=(16,6))
for keyword in df_all['keyword'].unique():
sub_df = df_all[df_all['keyword'] == keyword]
plt.plot(sub_df['period'], sub_df['ratio'], label=keyword, marker='o')
# x축을 주 단위로 표시
plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator(byweekday=mdates.MO, interval=1)) # 매주 월요일
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
# 제목 날짜 자동 추출
start_date = df_all['period'].min().strftime("%Y-%m-%d")
end_date = df_all['period'].max().strftime("%Y-%m-%d")
plt.title(f"검색어별 검색량 추이 (기간: {start_date} ~ {end_date})")
plt.xlabel("날짜")
plt.ylabel("검색 비율")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

"서울국제도서전"을 포함한 5개의 검색어들의 최근 1년간 검색어 추이를 선 그래프로 시각화해봤다.
# 키워드별 최대 검색량 시점
max_search_times = (
df_all.loc[df_all.groupby("keyword")["ratio"].idxmax()]
.sort_values("keyword")[["keyword", "period", "ratio"]]
)
print("키워드별 최대 검색량 기록 시점:")
print(max_search_times)

그리고 각 검색어의 최대 검색량을 기록한 시기 역시 알아보았다.
[과제 2] 카카오맵 API를 활용한 할리스 카페 위치 정보 수집

'[내배캠] 데이터분석 6기 > 본캠프 기록' 카테고리의 다른 글
[본캠프 69일차] Spark 공부 (2) | 2025.05.27 |
---|---|
[본캠프 67일차] QCC ⑥, 네트워킹 데이, (0) | 2025.05.23 |
[본캠프 66일차] 실전 프로젝트 발표 (0) | 2025.05.22 |
[본캠프 57일차] 태블로 공부, 실전 프로젝트 준비 (0) | 2025.05.09 |
[본캠프 56일차] 태블로 공부 (0) | 2025.05.08 |