▼오늘 배운 사항들
1. 유튜브 API 댓글 실습
2. MCP 연동하기
Part 1. 유튜브 API
- json.dumps() : 데이터의 구조 확인을 위한 코드 - 파이썬 딕셔너리 형태를 json형태의 문자열로 바꿔줘~
- ensure_ascii = 한국어 안깨지게 하는 코드
- ex.경쟁사 유튜브 댓글 확인, 내용 확인할 때 사용
#유튜브 API 데이터 확인
response = youtube.videos().list(
part="snippet, statistics",
id= VIDEO_ID
).execute() # eexecute하면 알아서 파이썬 딕셔너리 상태로 나옴 -> type(response) 하면 확인 가능
#indent 들여쓰기(계층구조 확인)
import json
print(json.dumps(response, indent=5, ensure_ascii=False))


- 딕셔너리 꺼내보기
- 위에서 추출한 데이터 위아래로 슥슥 훑어보면서 뽑을 정보명 확인 - statisitcs / snippet 값 확인할 때 : keys값 넣어서 리스트 뽑아보기 **▶ 엄청 유용하다
#채널명
video['snippet']['channelTitle'] #값 확인
#영상이름
title = video['snippet']['title']
#채널명
channel = video['snippet']['channelTitle']
#조회수
views = video['statistics']['viewCount']
#좋아요 수
likes = video['statistics']['likeCount']
#댓글 개수
n_comm = video['statistics']['commentCount']
print(f"제목: {title}")
print(f"채널명: {channel}")
print(f"조회수: {int(views):,}")
print(f"좋아요수: {int(likes):,}")
print(f"댓글수: {int(n_comm):,}")
#찾고자하는게 snippet에 있는지 statistics에 있는지 확인할 때
print(response['items'][0]['snippet'].keys())
print(response['items'][0]['statistics'].keys())





- 댓글 확인 : commentThreads()
- commentThreads()라는 함수에 정보담아서 response_comment에 담기
#유튜브 댓글 가져오기
#commentThreads()라는 함수에 정보담아서 response_comment에 담기
response_comment = youtube.commentThreads().list(
part="snippet",
videoId=VIDEO_ID,
maxResults = 3
).execute() #execute는 보낸다
#보기좋게 json.dump사용해서 계층구조 시각화
print(json.dumps(response_comment, indent=5, ensure_ascii=False))

- 데이터 찾아서 뽑는법
1. textDisplay 찾아내기 : items안에 snippet -> snippet 안에 channel id, videoid → topLevelcomment ...등

- 댓글에서 필요한 값 꺼내기
- response만들고, 변수지정해서 넣기
- 필요한 값들도 변수 지정해서 출력하기
- 오답노트) 변수지정안하고 바로 키값 넣어서 출력했는데 반복문하기에는 비효율적





- 유튜브 댓글 수집 : 댓글 여러개를 DataFrame에 넣기
1. 반복문 사용 - response_comment 정보들 넣기
2. append() 함수 사용 - 필요항목만 필터링 및 카테고리 설정
3. pandas 사용해서 새로운 pd.DataFrame 생성
#반복문 -> 꺼내서 -> 담기
rows = [] #담을곳 필요하니 빈 상자 만들고
for item in response_comment['items']:
#print(item) - 아이템 뽑아냈고
comment = item['snippet']['topLevelComment']['snippet']
# print(comment) #아이템에서 코멘트 뽑아냈고 - 우리가 보고 싶은 내용만 나눠서 출력됨
#필요한 항목만 넣는 함수 : rows.append()
rows.append({
'author' : comment['authorDisplayName'],
'text' : comment['textDisplay'],
'likes' : comment['likeCount'],
'date' : comment['publishedAt'][:10]
})



- 데이터 전처리
- yt에 html 태그 <br>같은 것들이 남아있어서 깨끗하게 처리해주기
#데이터 전처리
#<br>같은 html 태그가 있어서 데이터 전처리하기
yt['text_clean'] = yt['text'].str.replace('<br>', ' ')
#str.strip = 앞뒤 공백을 제거한다.
yt['text_clean'] = yt['text_clean'].str.strip()
#댓글 길이 추가
yt['text_len'] = yt['text_clean'].str.len()
yt[ yt['text_len'] <=5 ]
yt_filtered = yt[yt['text_len'] > 5].copy() #filtered라는 새로운 df만들어서 필요없는 데이터 삭제하기
yt_filtered


- 왜 추출하고 있는가? ▶ 월별로 나눠서 월단위 데이터를 보기 위해 ▶
- 문자타입을 날짜타입으로 변경 : object → date로 바꾸기 : 날짜별로 댓글 분류groupby하기 쉽도록
- 연/월로 분리 : year 컬럼 추가하기
yt_filtered.info() #date가 object라 날짜추출이 어려우니 날짜로 바꿔보기
yt_filtered['date'] = pd.to_datetime(yt_filtered['date'])
yt_filtered['year'] = yt_filtered['date'].dt.year #date중에 연으로 되어있는거 바로 추출, ytfiltered에 새컬럼으로 넣어두기
# 월별로 댓글 수 확인하기 - groupby 사용
yt_filtered.groupby('month')['text'].count() #month별로 text컬럼에 있는것만 카운트




[이탈/전환 패턴 분석]
1. 이탈 키워드
- 이탈/전환 패턴을 분석하고 싶거나 리스트업하고 싶을 때 활용
#특정 단어가 들어가면 이탈한 것으로 생각하게 필터링하는 이탈키워드
#이탈/전환 패턴 분석
churn_keywords = '옮겼|갔다|넘어|바꿨|관뒀|갈아탔'
#text clean 문자에 churnkeywords가 포함되어있다면 변수에 넣어라
df_churn = yt_filtered[yt_filtered['text_clean'].str.contains(churn_keywords, na=False)]
df_churn
* text clean 안보이는거 csv로 저장해서 볼 수 있음~
df_churn.to_csv('youtube_churn.csv', encoding='utf-8-sig')

[감성분류]
- 키워드 지정 후 컬럼 추가
- loc 사용해서 컬럼에 값 지정
- 컬럼 값 보고 text clean 크로스체크하기
- 두가지 키워드가 공존하면 부정으로 찍힐 수 있음 → 나중엔 머신러닝으로 처리함
- 부정키워드를 마지막에 입력해서 부정으로 인식됨
positive_kw = '좋아|최고|추천|편리|개꿀|짱'
negative_kw = '불편|별로|극혐|짜증|없는|막혀|관뒀'
yt_filtered['sentiment'] = '중립'
yt_filtered.loc[yt_filtered['text_clean'].str.contains(positive_kw, na=False), 'sentiment'] = '긍정'
yt_filtered.loc[yt_filtered['text_clean'].str.contains(negative_kw, na=False), 'sentiment'] = '부정'

- yt_filtered['sentiment'].unique() #yt filtered의 sentiment안의 고유값 알고싶을 때 unique!

[MCP]
- uv/uvx : python 실행 환경 관리로 MCP 서버를 실행하는 런처
- claude desktop : mcp host 앱
- mcp서버(mysql) : 외부 db 연결 브릿지 - 자연어 → sql 번역기
더보기
※ 기존 방식MCP + Claude 방식 차이
| 1. 마케터가 궁금한 것이 생김 | 1. 마케터가 궁금한 것이 생김 |
| 2. 데이터팀에 슬랙/지라로 요청 | 2. Claude에게 자연어로 바로 질문 |
| 3. 2~5일 대기 (다른 업무 우선순위) | 3. 30초~2분 내 결과 + 인사이트 |
| 4. 결과물 받음 → 맥락이 이미 사라짐 | 4. 바로 드릴다운 추가 질문 |
| 5. 추가 드릴다운 필요 → 다시 요청 | 5. 실시간 가설 검증 가능 |
| 6. 의사결정 지연, 기회비용 발생 | 6. 즉각적인 의사결정 가능 |
[프롬프트 엔지니어링]
- AI에게 원하는 결과를 정확하게 얻기 위한 입력(질문/지식)을 설계하는 기술
- 4가지 핵심 구성 요소 : 역할 / 맥락 / 작업 / 형식
[MCP 연동하기]
1. uv, uvx 설치 : 관리자 명령프롬프트에 명령 입력 및 version 설치 확인
2. db변환 : 디비버 - sqlite 생성 후 데이터 내보내기
3. 클로드 다운로드 및 개발자 구성편집 : claude_desktop_config.json 메모장으로 열고 설정파일&beatwave경로 복사해서 저장

sqlite 생성
데이터내보내기
생성한 sqlite 선택
proceed

더보기

클로드한테 그냥 물어봤는데 나온다 개쩐다
와 mcp연동해서 클로드로 말하는거 조금 충격인데
엄청 많은 db를 이러쿵저러쿵 생각생각생각대로 뽑을 수 있겠네 와 좋다

'Growth Marketing > GM4' 카테고리의 다른 글
| [TIL-260416] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day26 | 크롤링-xml, json (0) | 2026.04.16 |
|---|---|
| [TIL-260415] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day25 | 프롬프트 & RSS (1) | 2026.04.15 |
| [TIL-260413] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day23 | 데이터 이상치 및 결측치 처리 (0) | 2026.04.13 |
| [TIL-260410] 멋쟁이사자처럼 그로스마케팅 4기 - 데이터분석 개론 day22 | sql데이터로 파이썬 시각화 (0) | 2026.04.10 |
| [TIL-260409] 멋쟁이사자처럼 부트캠프 그로스마케팅 4기 - 데이터분석 개론 day21 (0) | 2026.04.09 |