컬럼명 | 설명 | 비고 |
review | 고객 리뷰 본문 | 핵심 분석 대상 (Text) |
rating | 별점 (1~5) | 정량 지표 (Score) |
너는 지금부터 이커머스 비즈니스 인사이트를 도출하는 **'수석 데이터 분석가'**야.
첨부한 파일은 네이버 쇼핑에서 수집된 1,000건의 고객 리뷰 데이터야.
데이터를 로드해서 데이터를 파악해보고, 이 데이터로 어떤 분석이 가능한지 요약해줘
컬럼명 | 설명 | 데이터 타입 | 결측치 |
review | 고객 리뷰 텍스트 | object | 0개 |
ratings | 별점(정수 1~5) | int64 | 0개 |
전체 리뷰 텍스트를 분석해서 주요 주제(Topic)를 5가지 카테고리로 분류해줘.
(예: 배송, 상품 품질, 디자인, 가격, 고객응대).
그리고 각 주제별 리뷰 개수와 비율을 막대그래프로 그려줘
토픽 번호 | 상위 키워드 | 해석된 주제(추정) |
0 | 많이, 너무, 좋아요, 재구매, 좋습니다… | 상품 품질 |
1 | 생각보다, 가성비, 조금, 정말, 좋고… | 가격/가성비 |
2 | 맘에, 엄청, 정말, 구매했는데… | 만족도(긍정감정) |
3 | 배송이, 바로, 배송, 배송은… | 배송 |
4 | 사이즈, 이뻐요, 마음에, 만족합니다… | 디자인/사이즈 |
주제 | 리뷰 수 | 비율 |
상품 품질 | 251 | 25.1% |
가격/가성비 | 189 | 18.9% |
만족도(긍정감정) | 206 | 20.6% |
배송 | 204 | 20.4% |
디자인/사이즈 | 149 | 14.9% |
=ai("모든 리뷰의 뉘앙스를 분석해서 '긍정', '부정', '중립' 중 하나로 감성 상태를 태깅해줘", A2)/************************************
* 0. OpenAI API 설정 (모델명 등)
************************************/
const OPENAI_MODEL = "gpt-4.1-mini"; // 필요에 따라 gpt-4.1 등으로 모델 변경 가능
/************************************
* 1. 스크립트 속성에 API 키 저장 (최초 1회만 실행)
*
* - Apps Script 편집기에서 이 함수를 한 번 수동 실행해서
* API 키를 저장하세요.
************************************/
function setOpenAIApiKey() {
const apiKey = "여기에 개인 GPT_API_Key 입력하기"; // ← 직접 입력
PropertiesService.getScriptProperties().setProperty("OPENAI_API_KEY", apiKey);
}
/************************************
* 2. 시트에서 사용할 사용자 정의 함수
*
* 사용 예시:
* =GPT("이 텍스트를 요약해줘", A2:A10)
* =GPT("아래 데이터를 분석해서 한 줄 인사이트로 말해줘", B2:D20)
************************************/
function myGPT(prompt, range) {
if (!prompt) {
return "프롬프트를 입력하세요.";
}
const apiKey = PropertiesService.getScriptProperties().getProperty("OPENAI_API_KEY");
if (!apiKey) {
return "API 키가 설정되지 않았습니다. setOpenAIApiKey()를 먼저 실행하세요.";
}
// range가 주어졌다면, 셀들의 값을 하나의 문자열로 합치기
let rangeText = "";
if (range) {
// range는 2차원 배열 형태일 수 있으므로 평탄화 후 줄바꿈으로 이어 붙임
if (Array.isArray(range)) {
const flat = range.flat();
rangeText = flat.join("\n");
} else {
rangeText = String(range);
}
}
// 최종 프롬프트 구성
let finalPrompt = prompt;
if (rangeText && rangeText.trim() !== "") {
finalPrompt += "\n\n---\n아래는 참고할 데이터입니다:\n" + rangeText;
}
// OpenAI Chat Completions API 호출
const url = "https://api.openai.com/v1/chat/completions";
const payload = {
model: OPENAI_MODEL,
messages: [
{
role: "system",
content: "당신은 구글 스프레드시트 안에서 동작하는 도움이 되는 어시스턴트입니다. 가능하면 간결하게 답변하세요."
},
{
role: "user",
content: finalPrompt
}
]
};
const options = {
method: "post",
contentType: "application/json",
headers: {
Authorization: "Bearer " + apiKey
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
const code = response.getResponseCode();
if (code !== 200) {
return "API 오류: HTTP " + code + " - " + response.getContentText();
}
const data = JSON.parse(response.getContentText());
const answer = data.choices[0].message.content;
// 시트 셀에 들어갈 수 있게 문자열만 반환
return answer;
} catch (e) {
return "예외 발생: " + e;
}
}첨부의 네이버 쇼핑몰 리뷰 파일에서
A열의 리뷰의 뉘앙스를 분석해서 '긍정', '부정', '중립' 중 하나로 감성 상태를 분석해서 C열에 태깅하는 파이썬 코드를 만들어줘.
Colab에서 돌릴거야모든 리뷰의 뉘앙스를 분석해서 '긍정', '부정', '중립' 중 하나로 감성 상태를 C열에 분류했어
**[주제별 감성 분포]를 100% 누적 막대그래프(Stacked Bar Chart)**로 시각화해줘.
(X축: 주제, Y축: 감성 비율)
마지막으로, '부정' 비율이 가장 높은 주제가 무엇인지 알려주고, 그 주제의 부정 리뷰 개수는 몇 개인지 요약해줘
주제 | 긍정 | 부정 | 중립 |
가격/가성비 | 73 | 92 | 15 |
디자인/사이즈 | 80 | 65 | 21 |
만족도 | 69 | 77 | 13 |
배송 | 135 | 102 | 20 |
상품 품질 | 102 | 109 | 20 |
데이터에서 '배송' 관련 리뷰 중 감성 상태가 '부정'인 리뷰만 골라 분석해줘.
1) 각 리뷰에서 배송 관련 문장만 추출해줘.
- 문장 안에 배송, 택배, 출고, 도착, 배달, 기사, 문앞, 물류 등 배송 관련 단어가 포함된 문장만 선택해줘.
2) 추출된 배송 관련 부정 문장들을 의미적으로 유사한 것끼리 자동으로 군집화해줘.
- 의미 기준으로 자연스럽게 묶이는 그룹을 생성하고,
- 그룹 수는 미리 정하지 말고 문장 패턴을 보고 자동으로 판단해줘.
- 군집화 시 문장 내 핵심 불만 요소(지연, 누락, 훼손, 응대 문제 등)를 중심으로 의미 기반으로 묶어줘.
3) 이렇게 생성된 각 의미 그룹에 대해:
- 그룹 이름을 모델이 직접 붙여줘 (예: "배송 지연 관련 불만", "택배 기사 응대 문제", "포장 파손 문제" 등)
- 해당 그룹에 속한 문장 수와 전체 대비 비율(%)을 계산해줘.
- 그룹을 대표하는 핵심 키워드 또는 문장 패턴을 3~5개 추출해줘.
4) 의미 그룹별 비율을 표로 정리해줘.
- 그룹명 / 문장 수 / 비율 / 대표 키워드
5) 마지막으로, 의미 그룹별 비율을 시각화한 막대그래프를 만들어줘.
- X축은 자동 생성된 의미 그룹
- Y축은 비율(%)
- 한글 폰트 적용해서 글자가 깨지지 않게 해줘.
분석 목적은 ‘배송 불만이 어떤 유형으로 나뉘는지 자동으로 발견하는 것’이므로,
사전에 특정 그룹을 정하지 말고 의미적으로 자연스럽게 묶이는 패턴을 기반으로 그룹을 생성해줘.
자동 그룹 | 의미 요약 | 문장 수 | 비율 |
그룹 1 | 배송 경험 대비 실망/기대 불일치 | 3 | 5.6% |
그룹 2 | 복합 불만(배송 + 기타 문제 동시 발생) | 11 | 20.4% |
그룹 3 | 배송 전반 불만·서비스 문제 | 28 | 51.9% |
그룹 4 | 배송 지연(Delay) | 9 | 16.7% |
그룹 5 | 택배 취급/기사 문제 | 3 | 5.6% |
의미 그룹명 | 문장 수 | ||
