```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차 가공(감정 분석 등) 측면에서 추가적인 심화 연구와 구현이 필요하다. 전체적으로 데이터 파이프라인 내 중요한 중간 단계로서, 상위 분석 및 활용을 위한 기반을 제공하지만, 실질적 인사이트 도출을 위해서는 후속 연구가 요구된다.