이번에 공부할 것은 'Netflix Dataset'을 가지고 데이터 전처리 및 시각화를 알아보는 과정이다.
지난 포스팅에서부터 계속 말하지만,
교재를 기준으로 공부를 하긴 하지만 개인적으로 처음하는 공부는 아니기에
개인적 취향에 맞춰 필요한 부분만 정리하고 있다.
이번 스터디는 아래와 같은 순서로 공부해보도록 하겠다.
⑴ 넷플릭스 데이터 분석 프로젝트 소개
⑵ 넷플릭스 데이터셋 파악하기
⑶ Missing Value Handling
⑷ Feature Engineering
⑸ Visualization
⑴ 넷플릭스 데이터 분석 프로젝트 소개
넷플릭스의 데이터를 빠르게 살펴보고, 전처리를 수행한 다음 다양한 시각으로 데이터 분석을 하여
여러 인사이트를 도출해보는 프로젝트를 수행해보겠다.
데이터 시각화를 할 때에는 분석하는 데이터와 관련된 색상을 활용하면 완성도를 더 올릴 수 있다.
- https://www.color-hex.com/color-palette/22942
⑵ 넷플릭스 데이터셋 다운로드
캐글에 등록되어 있는 넷플릭스의 영화 및 티비쇼 8000편 정보의 데이터셋을 활용하고자 한다.
- https://www.kaggle.com/datasets/shivamb/netflix-shows
캐글에서 공개된 데이터는 Python으로도 다운로드를 받을 수 있다.
이렇게 내려 받은 파일을 pandas로 간단하게 읽어올 수도 있다.
실제 데이터를 확인해보면 다음과 같다.
각 columns 의미는 교재에 너무 잘 정리되어 있다.
⑶ Missing Value Handling
▷ 결측치 비율 別 처리 가이드
- 결측치가 데이터의 5% 미만이라면 → 행 삭제
- 결측치가 데이터의 5~20% 사이라면 → 대체
- 결측치가 데이터의 20% 이상이라면 → 열 삭제 권장
".info()"를 통해 간략하게 결측치 현황을 파악할 수 있긴 하지만, 정확한 비율을 다시 한 번 확인해보자.
교재에서는 원본 데이터(df)를 직접 수정하는 것을 권고하지만, 개인적인 취향으로 .copy()하여 작업하도록 하겠다.
값 대체할 것 대체하고, 행 삭제할 것 삭제한 뒤의 현황을 보면 다음과 같다.
8807개였던 데이터가 8790개로 변한 것을 확인할 수 있다.
그리고, 결측치도 모두 처리된 것을 볼 수 있다.
⑷ Feature Engineering
'rating' column은 '넷플릭스 등급 표시'를 해주고 있다.
즉, 일반적인 string 데이터가 아니라 category 형태로 그룹핑을 할 수가 있는 것이다.
- https://www.primevideo.com/help/ref=atv_hp_nd_cnt?nodeId=GFGQU3WYEG6FSJFJ
미국의 등급 시스템을 기준으로 묶어주면 되는데, 'age_group' 명칭의 column으로 생성해보도록 하겠다.
매핑하기 위한 딕셔너리를 작성하고, map()을 돌리면 잘 분류되어 값이 추가된 것을 볼 수 있다.
지금까지 작업한 내역들을 CSV 파일로 저장까지 하면서 일단 마무리 해보자.
⑸ Visualization
Graph를 그릴 기본 준비를 해보자.
원하는 정보를 검색하는 것을 해보자.
이번에는 'type' column의 내역을 한 번 살펴보자.
해당 데이터를 가지고 파이 차트를 그려보자.
이번에는 장르 정보를 담고 있는 'listed_in' column을 살펴보자.
여러 장르에 속하는 경우 ", "로 여러 항목이 나열되어 있는 것을 볼 수 있다.
", "로 split을 하는데 'expand=True' 옵션이기에 column을 확장한다.
그런다음 다시 'stack()'으로 세로 방향으로 변환(column 하나로 합치기)해서 value_counts() 한다.
이제 막대 그래프로 그려보자.
이 그래프를 보고 얻을 수 있는 인사이트는 다음과 같다고 한다.
"넷플릭스는 드라마와 국제 영화에 집중하고 있습니다. 글로벌한 콘텐츠 제공과 깊이 있는 스토리 라인으로 시청자들의 다양한 취향을 만족시키려 하려는 것 같습니다. 또한, 다양한 영화 장르의 제공을 통해 시청자들에게 보다 풍부한 선택지를 제공합니다. 정리하자면, 넷플릭스의 전략은 장르 다양성과 글로벌 사용자들의 요구를 동시에 충족시키기 위한 방향으로 나아가고 있음을 알 수 있습니다."
이번에는 나이 그룹별 국가별 콘텐츠를 살펴보자.
'country' column의 경우에도 ', '로 구분된 여러 나라가 입력되어 있음을 알 수 있다.
일단, split() 해보자.
pandas의 옵션을 설정하는 기능을 활용해서 출력 값의 개수 제한을 풀어봤다. (유용해 보이지는 않는다)
list 형태로 되어있는 'country' column을 기준으로 row를 분리해보자.
7번 index를 보면 row가 분리된 것을 확인할 수 있다.
더 자세히 살펴보자.
각 연령대별로 국가의 개수를 count하고 이를 표 형태로 살펴보자.
'.groupby('age_group')' 연령대로 그룹핑을 하고, '['country'].value_counts()' 국가의 개수를 센 뒤, '.unstack()'를 통해 세로로 정리된 데이터를 가로 형태로 변환을 했다.
우리가 사용할 항목들만 선별해서 정리해보자.
결측치 값이 보인다. 0으로 채우자.
지금 보이는 값으로는 서로간의 값 비교를 하기가 쉽지 않다.
비율로 값들을 변경해보자.
'.sum(axis=0)'을 통해 각 열의 합을 계산함 → 국가별 sum() 값을 구함
'.div(..., axis=1)'을 통해 각 연령대듸 값들을 국가(column)의 총합으로 나누어 비율을 계산
지금까지 진행한 내용을 가지고 히트맵을 그려보자.
위 그래프를 보고 얻을 수 있는 인사트는 다음과 같다고 한다.
"United States/Canada는 모든 나이 그룹에서 골고루 이용자를 가지고 있기에 넷플릭스가 다양한 연령층에 걸쳐 널리 사용되고 있음을 나타내고 있다. 그리고 모든 국가에서 성인 이용자가 가장 많은데, 이는 넷플릭스의 콘텐츠가 성인들의 관심사와 취향을 충족시키는 데 중점을 두고 있다는 것을 보여준다. 성인층의 높은 비율은 넷플릭스의 다양한 장르와 깊이 있는 콘텐츠가 성인 이용자들에게 특히 매력적임을 시사한다. 한편 India/Japan은 Older Kids의 비율이 꽤 높은데 이는 해당 국가들에서 넷플릭스가 어린이와 가족 단위의 콘텐츠를 많이 제공하고 있음을 나타낸다. 이러한 결과는 각국의 문화적 특성과 콘텐츠 선호도가 넷플릭스 이용 패턴에 영향을 미친다는 것을 시사한다. 이러한 분석을 통해 넷플릭스는 각 국가별로 이용자의 연령대에 맞춘 컨텐츠와 교육적인 프로그램을 강화할 수 있으며, 성인 비율이 높은 국가에서는 성인 대상의 드라마/영화/다큐멘터리 등을 더욱 강조할 수 있다."
이번에는 워드 클라우드를 한 번 그려보도록 하자.
일단 넷플릭스 로그 이미지를 확보하자.
- https://en.m.wikipedia.org/wiki/File:Netflix_2015_logo.svg
사이트에서 보이는 저 로고를 다운로드 받아봤다.
PNG 파일을 JPG 파일로 변환을 했고,
투명한 배경을 검은색이 아닌 하얀색으로 나오도록 하기 위해서 중간에 하얀색 그림을 그려서 합치도록 했다.
저 글씨 모양으로 wordcloud가 나오도록 하려는 것이다.
이제 본격적으로 wordcloud를 그려보자.
정보를 보기에 좋은 방식은 아니지만, 재미있게 표현한 결과는 다음과 같다.
지금까지 CSV 데이터 파일을 읽어들여서 결측치 값들을 적절히 처리하고
category화 할 수 있는 것들을 가공하면서 feature engineering을 한 뒤에
이를 여러 Graph로 visualization해서 인사이트를 살펴보는 과정을 해봤다.
'Books' 카테고리의 다른 글
[파이썬 데이터 분석가 되기] 05 - BeautifulSoup (0) | 2025.02.16 |
---|---|
[파이썬 데이터 분석가 되기] 04 - Seaborn (0) | 2025.02.08 |
[한빛미디어] '나는리뷰어다2025' 선정 (0) | 2025.02.01 |
[파이썬 데이터 분석가 되기] 03 - Matplotlib (0) | 2025.02.01 |
[파이썬 데이터 분석가 되기] 02 - Pandas (0) | 2025.01.25 |