```JavaScript
// 영상별 그룹화 객체
const videoGroups = {};
// 언어 그룹 매핑
const languageGroupMap = {
'korean': 'korean',
'japanese': 'japanese',
'chinese': 'chinese',
'southeast_asian': 'asean',
'western': 'western',
'latin': 'latin'
};
// 모든 댓글 순회
for (const item of $input.all()) {
const videoId = item.json.videoId;
const videoTitle = item.json.title;
// 영상 그룹 초기화 (한 번만)
if (!videoGroups[videoId]) {
videoGroups[videoId] = {
videoId: videoId,
title: videoTitle,
totalComments: 0,
byLanguage: {
korean: [],
japanese: [],
chinese: [],
asean: [],
western: [],
latin: [],
others: []
}
};
}
// 🔥 댓글 데이터 추출 (all_comments 배열 처리)
const comments = item.json.all_comments;
// all_comments가 배열인 경우
if (Array.isArray(comments)) {
for (const comment of comments) {
videoGroups[videoId].totalComments++;
let languageGroup = languageGroupMap[comment.language_group] || 'others';
videoGroups[videoId].byLanguage[languageGroup].push({
author: comment.author,
text: comment.text,
like_count: comment.like_count,
language: comment.language
});
}
}
// all_comments가 단일 객체인 경우
else if (comments && typeof comments === 'object') {
videoGroups[videoId].totalComments++;
let languageGroup = languageGroupMap[comments.language_group] || 'others';
videoGroups[videoId].byLanguage[languageGroup].push({
author: comments.author,
text: comments.text,
like_count: comments.like_count,
language: comments.language
});
}
// 🔥 all_comments가 없고 댓글 정보가 item.json 최상위에 있는 경우
else if (item.json.language && item.json.author) {
videoGroups[videoId].totalComments++;
let languageGroup = languageGroupMap[item.json.language_group] || 'others';
videoGroups[videoId].byLanguage[languageGroup].push({
author: item.json.author,
text: item.json.text,
like_count: item.json.like_count,
language: item.json.language
});
}
}
// 각 영상의 각 언어별 댓글을 좋아요순 정렬 및 통계 계산
for (const videoId in videoGroups) {
const video = videoGroups[videoId];
video.stats = {};
for (const lang in video.byLanguage) {
// 좋아요순 정렬
video.byLanguage[lang].sort((a, b) => b.like_count - a.like_count);
// 통계 계산
const count = video.byLanguage[lang].length;
const percentage = video.totalComments > 0
? ((count / video.totalComments) * 100).toFixed(1) + '%'
: '0.0%';
video.stats[lang] = {
count: count,
percentage: percentage
};
}
}
// 영상별로 반환
return Object.values(videoGroups).map(video => ({ json: video }));
```
### 관련 노트
[[2025년 상반기 미국 고위험 민감 피부 시장 변화 및 브랜드 분석]] - [[2025년 상반기 미국 고위험 민감 피부 케어 시장 심층 분석 보고서]] - [[2025년 테슬라(TSLA) 주가 영향요인 심층 분석]] - [[2025년 하반기 부동산 정책 분석]] - [[AI 기반 식물 유래 활성 복합체의 아시아 민감성 피부 자극 및 홍반 완화 효능 이론, 실증, 임상 통합 분석]] - [[COVID-19 팬데믹 속 MZ세대의 K-코스메틱 선한 소비 열정의 동인 분석]] - [[K-POP 데몬 헌터스 글로벌 팬덤 문화·참여 패턴 완전 분석]] - [[K-POP 데몬 헌터스 유튜브 생태계 분석 문화적 파급력 총정리]] - [[데이터 클래스 Chapter 10-2]]
## 🧠 Connected Insights
> 📅 Last analyzed: 2026. 3. 14. 오후 7:05:20
> 💰 Analysis cost: $0.0175
### 🔗 Related Notes
- ✅ [[유저 프롬프트/유튜브 분석 노션 블록 유저 메시지.md]]
- supports: 분석 노트의 스크립트는 유튜브 댓글을 언어별로 분류하고 통계를 산출하는 기능을 제공하며, 해당 프롬프트는 이 데이터를 받아 요약 및 통계 메시지를 생성하는 데 활용된다. 즉, 스크립트가 데이터 가공을, 프롬프트가 데이터 활용을 담당한다.
- Confidence: █████ (90%)
- ✅ [[유저 프롬프트/유튜브 분석 옵시디언 노트 유저 메시지.md]]
- supports: 유사하게, 옵시디언용 프롬프트도 본 스크립트의 출력 구조(언어별 댓글, 통계 등)를 활용하여 요약 메시지를 생성한다. 데이터 구조와 통계 산출 방식이 직접적으로 연동된다.
- Confidence: ████░ (85%)
- 🔗 [[자동화 스크립트/유튜브 데이터 통합 및 토큰 최적화 스크립트.md]]
- related: 두 스크립트 모두 유튜브 데이터(댓글, 메타데이터 등)를 자동화 처리하며, 본 노트는 댓글 분류와 통계에 집중하고, 통합/토큰 최적화 스크립트는 데이터 통합 및 용량 최적화에 중점을 둔다. 데이터 흐름상 연계가 가능하다.
- Confidence: ████░ (80%)
- 🔼 [[자동화 스크립트/유튜브 댓글 데이터 추출 및 변환 스크립트.md]]
- extends: 분석 노트의 결과(언어별 분류, 통계 등)를 바탕으로, 해당 스크립트는 댓글 데이터를 추출·가공(예: 텍스트 추출, 좋아요수 표시 등)하여 2차 활용(예: 보고서, 프롬프트 입력)에 사용한다.
- Confidence: ████░ (85%)
- ✅ [[시스템 프롬프트/Notion 유튜브 글로벌 팬덤 분석 프롬프트.md]]
- supports: 글로벌 팬덤 분석 프롬프트는 언어별 댓글 통계, 트렌드 등 데이터 기반 인사이트를 요구하며, 본 스크립트가 그 기초 데이터를 제공한다. 즉, 데이터 가공과 인사이트 도출의 역할 분담이 있다.
- Confidence: ████░ (75%)
### 📚 Knowledge Gaps
- 🔴 **언어 분류 기준 및 자동 감지의 정확도**
- 스크립트는 'language_group' 필드를 기반으로 언어를 분류하지만, 이 값의 생성 방식(자동 감지 알고리즘, 신뢰도 등)에 대한 설명이나 품질 평가가 없다. 언어 분류의 정확도는 통계 신뢰성에 직접적 영향을 미치므로, 기준 및 한계 분석이 필요하다.
- Suggested resources: Google Cloud Natural Language API: Language Detection, YouTube Data API 공식 문서, 논문: Automatic Language Identification in Texts
- 🟡 **댓글 데이터의 품질 및 노이즈(스팸, 중복 등) 처리**
- 스크립트는 댓글을 모두 집계하지만, 스팸, 중복, 비정상 데이터(예: 삭제된 댓글, 봇 댓글 등)에 대한 필터링 로직이 없다. 데이터 품질 저하는 통계 왜곡을 초래할 수 있으므로, 전처리 및 품질 관리가 필요하다.
- Suggested resources: YouTube Spam Detection 연구, 데이터 전처리 실무 가이드, OpenAI: Data Cleaning Best Practices
- 🟡 **통계 결과의 시각화 및 인사이트 도출**
- 스크립트는 통계(비율, 개수)만 산출하고, 이를 시각화하거나 인사이트(예: 언어별 트렌드, 팬덤 분포 등)로 연결하는 단계가 없다. 실질적 의사결정 지원을 위해 시각화 및 해석 프레임이 필요하다.
- Suggested resources: D3.js Data Visualization, Tableau Public 사례, 유튜브 데이터 분석 시각화 사례
- 🟢 **감정 분석, 키워드 추출 등 2차 가공**
- 현재는 언어별 분류 및 통계에 그치고 있으나, 감정 분석, 주요 키워드 추출, 토픽 모델링 등 추가 가공이 이뤄지면 더 깊은 인사이트 도출이 가능하다.
- Suggested resources: NLTK Sentiment Analysis, spaCy Keyword Extraction, YouTube 댓글 감정 분석 논문
### 💡 AI Insights
이 노트는 유튜브 댓글 데이터를 영상별·언어별로 분류하고, 각 그룹의 통계(비율, 개수)를 산출하는 자동화 스크립트를 제공한다. 관련 노트들과의 연결을 통해 데이터 추출, 통합, 저장, 자막 처리 등 유튜브 데이터 파이프라인의 다양한 단계를 포괄하고 있다. 그러나 언어 분류의 신뢰성, 데이터 품질 관리, 결과 시각화 및 2차 가공(감정 분석 등) 측면에서 추가적인 심화 연구와 구현이 필요하다. 전체적으로 데이터 파이프라인 내 중요한 중간 단계로서, 상위 분석 및 활용을 위한 기반을 제공하지만, 실질적 인사이트 도출을 위해서는 후속 연구가 요구된다.