728x90
SMALL
- 오늘은 Netflix 데이터를 가지고 변수들의 특징 파악, 전처리, Feature Engineering, 마지막으로 관련된 여러 시각화 작업을 진행했습니다.
🎥 Netflix Data Analysis Project
🍿 개요
- 데이터를 빠르게 파악하고, 전처리를 수행한 후 여러 인사이트 도출하는 것이 데이터 분석가가 해야할 일입니다.
- 이번 프로젝트의 데이터 전처리 과정에서는 결측치를 처리하고 피처 엔지니어링을 통해 파생 변수를 생성했습니다.
- 그리고 시각화 과정에서는 요청 기업의 브랜드 색상을 사용하여 여러 가지를 시각화 해보았습니다.
- 브랜드 색상
- 데이터를 시각화하기 전에 해당 요청 기업의 색상을 미리 정해주는 것이 중요합니다!!
- 색상을 데이터의 성격에 맞게 선택하고, 중요도에 따라서 강조 방법을 계획해 시각화 효과를 극대화시키는 것이 좋습니다.
- 파이 차트
- 파이 차트는 데이터의 카테고리별 비율을 시각화하기에 효과적이므로 비율을 쉽게 비교할 수 있습니다.
- 각 카테고리의 상대적 중요성을 파악할 수 있고, 이로써 넷플릭스에서 영화와 TV show의 비율을 시각화할 때 사용하게 됩니다.
- 막대 그래프
- 막대 그래프는 데이터의 항목 간 비교를 명확하게 시각화하는 데 유용한 차트로, 넷플릭스에서 어떤 장르가 가장 많이 등장하는지 파악할 때 사용됩니다.
- 히트맵
- 데이터의 밀도나 강도를 색상으로 시각화해 복잡한 데이터셋에서 패턴 및 트렌드를 파악하는 데 용이합니다.
- 넷플릭스에서 나이/국가별로 컨텐츠 비율을 시각화하여 각 국가가 어떤 나이의 그룹을 타겟으로 하는지 분석해보았고,
- 이 히트맵으로 각 컨텐츠를 통해 국가별 시청층을 이해하고, 각 국가의 시청 트렌드, 더 나아가 컨텐츠 기획에 대한 인사이트까지 도출할 수 있습니다.
- 워드클라우드
- 텍스트 데이터에서 빈도가 높은 단어를 시각적으로 강조하는 역할을 해주는 기법입니다.
- 데이터의 주요 주제, 키워드를 한 눈에 파악할 수 있고, 넷플릭스에서 컨텐츠 설명에 자주 등장하는 단어들을 시각화하게 됩니다.
- 어떤 주제나 키워드가 자주 나오는지, 컨텐츠의 주요 테마가 무엇인지 파악해 마케팅, 컨텐츠 기획, 국가별 전략, 사용자 분석 등 유용한 인사이트를 추출할 수 있습니다.
🍿 넷플릭스 데이터셋 파악
💡 사용할 변수 파악
변수명 | 변수 설명 |
show_id | 각 show의 고유 ID |
type | show의 카테고리(영화 or TV show) |
title | show의 이름 |
director | show의 감독 이름 |
cast | 배우의 이름 및 show의 다른 출연진 |
country | Netflix에서 프로그램을 시청할 수 있는 국가의 이름 |
date_added | Netflix에 프로그램이 추가된 날짜 |
release_year | show의 출시 연도 |
rating | Netflix 등급 표시 |
duration | show의 지속 시간 |
listed_in | show의 장르 |
description | show를 설명하는 텍스트 |
🍿 넷플릭스 데이터셋에서 결측치 처리하기
- 일반적으로 결측치 비율이 5% 미만일 경우 (date_added: 0.11%, rating: 0.05%, duration: 0.03%)
- 일부만 존재하기 때문에 해당 데이터들은 삭제를 권장합니다.
- 이로써 데이터 손실을 최소화할 수 있고, 분석의 신뢰성에는 그다지 영향을 미치지 않습니다.
- 비율이 5% ~ 20% 미만일 경우 (cast: 9.37%, country: 9.44%)
- 결측치 비중이 꽤 큰 편이므로 대체 방향을 모색해야 합니다.
- 평균값 / 중간값 / 최빈값 등으로 대체할 수 있습니다.
- 비율이 20% 이상인 경우 (director: 29.91%)
- 이때는 열 전체를 삭제해야하는데, 데이터 손실이 커지기 때문에 신중하게 판단해야 합니다.
- 특히, 데이터셋이 작거나, 해당 변수가 중요한 역할을 하는 경우에는 모델 기반 대체, 예측 모델을 통한 결측치의 보완이 필요합니다.
- 변수에 대한 중요성, 분석 목적, 데이터의 양을 종합적으로 고려해 삭제하거나 대체하는 방안으로 진행되어야 합니다.
- 데이터를 전반적으로 살펴본 결과, director 컬럼은 분석 목적을 고려했을 때 사용되지 않기 때문에 컬럼 전체를 제거하려고 했으나 추후에 분석 방향이나 데이터의 양을 고려했을 때 대체하는 것이 좋아보였습니다. (.replace()로 대체 완료)
- cast와 country는 fillna()로 대체했고,
- date_added, rating, duration은 해당 데이터를 제거했습니다. (.dropna(inplace=True))
🍿 Netflix Feature Engineering
- 피처 엔지니어링(feature engineering)이란, 데이터프레임의 기존 변수를 조합하거나 새로운 변수를 만드는 것을 의미합니다.
- 데이터 분석이나 머신러닝 모델을 학습할 때 매우 중요한 작업이고, 현업에서의 이 과정은 예측 모델이 데이터의 패턴을 잘 이해하고 학습할 수 있는 기준이 되어주기도 합니다.
- 명확하고 의미있는 변수를 만들어 사용하면, 모델의 결과를 쉽게 해석할 수 있고, 데이터의 다양한 측면을 고려해 더 정확한 분석을 할 수 있습니다.
💡 시청 등급 변수
- Prime Video 시청 등급 분류에 따라 Kids(All), Older Kids(7+), Teens(13+), Young Adults(16+), Adults(18+)로 기존 시청 등급을 분류해 변수(age_group)를 새로 생성하였습니다.
- 이 과정으로 데이터의 가독성과 효율성을 높일 수 있었습니다.
🍿 넷플릭스 시각화
🎨 넷플릭스 브랜드 색상
🎨 넷플릭스 카테고리 시각화
- 시각화하기 전, value_counts()로 카테고리의 빈도를 파악 후에 파이 차트로 시각화 작업을 진행했습니다.
🎨 넷플릭스 장르 시각화
- 'netflix['listed_in'].str.split(', ', expand=True).stack().value_counts()'로 다중 장르도 단일 장르로 모두 구분할 수 있습니다.
- expand=True라는 옵션은 분할된 결과를 확장해 여러 컬럼으로 변환하고, 분할된 문자가 개별적인 컬럼으로 설정되어 새로운 데이터프레임 생성할 때 쓰게 됩니다.
- stack() 함수는 생성된 데이터프레임의 컬럼을 인덱스로 가져와 쌓는 역할을 해줍니다.
🎨 넷플릭스 히트맵
- 히트맵은 국가별 넷플릭스 컨텐츠 수와 나이별 선호도를 시각화하여 마케팅 전략 및 컨텐츠 개발 방향을 도출하는 데 사용됩니다.
- 히트맵을 만들기 위한 과정이 조금은 까다로웠는데 차근차근 전처리와 시각화 과정을 정리해보며 설명드리겠습니다.
- contains() 함수로 특정 키워드('Sankofa')를 포함하는 데이터 필터링
- contains() 함수의 옵션 중 na=False는 np.nan 값을 제외시키고, case=False는 대소문자의 구분이 없게 합니다.
- 국가 컬럼 처리
- 국가 데이터가 'United States, Ghana, Burkina Faso, United Kin…'처럼 리스트 형태이므로 split(', ')을 사용하여 분리하였습니다.
- 그리고 explode() 함수로 이를 개별 행으로 변환해 분석 가능하도록 처리하였습니다.
- 국가별 콘텐츠 수 집계
- .groupby('age_group')['country'].value_counts().unstack()을 사용해 나이 그룹별 국가의 컨텐츠 개수를 집계하였습니다.
- 여기서 unstack() 함수는 그룹화된 데이터를 표(데이터프레임) 형태로 변환해주는 역할을 합니다.
- 데이터 필터링
- 모든 국가를 포함하면 데이터가 방대하므로 df.loc을 사용하여 특정 국가만 선택해주었습니다.
- 주요 국가(미국, 인도, 영국, 한국 등)와 특정 나이 그룹(All, Older Kids, Teens, Adults)으로 필터링하여 진행했습니다.
- 정규화
- .div(.sum(axis=0), axis=1)을 사용해 각 국가별 컨텐츠 비율을 계산하여 0~1 사이 값으로 변환했습니다.
- 이렇게 정규화를 해두면 국가별 콘텐츠 분포를 비교하기가 쉬워집니다.
- 시각화
- sns.heatmap()을 활용하여 국가별, 나이 그룹별 콘텐츠 소비 패턴을 직관적으로 표현할 수 있었습니다.
🎨 워드클라우드
- 먼저, 워드 클라우드 생성을 위한 모듈(wordcloud)과 패키지(PIL.Image)를 로드해줍니다. wordcloud 모듈은 설치가 안 되어있을 수도 있으니 설치부터!
- 워드 클라우드 생성을 위해 mask 작업을 진행해야 하는데, 이 작업은 단어를 그릴 위치를 설정하는 작업으로, 흰색 항목은 마스킹된 것으로 간주시킬 수도 있습니다.
- class wordcloud.WordCloud()에 들어가는 주요 항목(옵션) 몇 가지만 말씀드리겠습니다!
- width, height: 워드클라우드의 너비, 높이 설정(픽셀 단위)
- max_words: 최대로 나타날 단어의 개수 설정
- background_color: 배경색 설정
- colormap: 워드클라우드 자체 색상 설정
🤔 14일차 회고
- 데이터 하나를 가지고 이렇게 몰입한 때는 프로젝트나 공모전 이후로는 처음인 것 같습니다.
- 그만큼 제가 데이터에 손을 대지 않았던 것도 있고, 그저 익숙하다고만 생각해서 분석을 멀리했었는데, 교육을 받으면 받을수록 더 공부해야겠다는 생각 뿐입니다.
- 전에 복지 데이터나, Netflix 데이터를 가지고서도 분석을 진행했던 적이 있는데, '그 당시에 이런 집중도를 가지고 더 분석했으면 좋은 인사이트를 도출했겠다' 싶었습니다. 그만큼 요즘 공부하는 것이 재밌고, 열정을 쏟는 것에 흥미를 느끼고 있습니다.
- 다음 주에는 의료 데이터를 다룰 예정인데, 의료 분야 데이터도 프로젝트에서 한 번 다뤘던 적이 있어 기대감과 통찰력을 가지고서 다음 주 수업에 임해보겠습니다! 🔥
728x90
LIST
'Projects > LG U+' 카테고리의 다른 글
[Data Analysis] 한국복지패널 데이터 (13) | 2025.03.09 |
---|---|
[Data Analysis] 야후 파이낸스 주식 데이터 (4) | 2025.03.05 |
[Data Analysis] 미국 항공기 운항 데이터 (4) | 2025.03.02 |
[Data Analysis] 다나와 & 미세먼지 & 행복 지수 데이터 (2) | 2025.02.20 |
[Data Analysis] Starbucks & Mega Coffee 데이터 (4) | 2025.02.19 |