넷플릭스 데이터를 분석하자

mare-solis·2022년 2월 7일
9

지난번에 넷플릭스에서 어떤 데이터를 수집하고 제공하는지 알아봤었는데요, 저에 대해 많은 데이터를 수집한다는 것에 흠칫한 한편, 그걸 제가 다운로드 받을 수 있게끔 한 점은 흡족했습니다. 그럼 넷플릭스에서 줬으니까 제 데이터를 한번 잘 써보겠습니다!


1. 데이터 가공

먼저 데이터를 로드해줍니다. csv 파일을 데이터프레임으로 변환하겠습니다.

import pandas as pd

df = pd.read_csv('ViewingActivity.csv')
df.head()


기본적으로 해줄 건 해줘야겠죠? 문자열로 되어 있는 Start Time을 datetime 형식으로 바꿔줍니다.

df['Start Time'] = pd.to_datetime(df['Start Time'])
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7015 entries, 0 to 7014
Data columns (total 11 columns):
 #   Column                   Non-Null Count  Dtype         
---  ------                   --------------  -----         
 0   index                    7015 non-null   int64         
 1   Profile Name             7015 non-null   object        
 2   Start Time               7015 non-null   datetime64[ns]
 3   Duration                 7015 non-null   object        
 4   Attributes               2332 non-null   object        
 5   Title                    7015 non-null   object        
 6   Supplemental Video Type  1898 non-null   object        
 7   Device Type              7015 non-null   object        
 8   Bookmark                 7015 non-null   object        
 9   Latest Bookmark          7015 non-null   object        
 10  Country                  7015 non-null   object        
dtypes: datetime64[ns](1), int64(1), object(9)
memory usage: 603.0+ KB

그리고 지표에 따르면 이 시간은 UTC 기준입니다. 따라서 이 시간을 한국 시간대로 변환한 열을 kst_time이라는 이름으로 만들겠습니다.

df['kst_time'] = (
    df['Start Time'].dt.tz_localize("UTC") 
                 .dt.tz_convert("Asia/Seoul") 
)
df.head()


본편은 supplemental Video Type가 널 값인 반면, 예고편이나 부가 영상에는 표시가 되어있습니다. 이번에는 본편을 본 것만 분석할 것이기 때문에 부가 영상들은 필요없을 것 같습니다. supplemental Video Type가 널 값인 것만 뽑아내겠습니다.

import numpy as np

df_main = df.loc[df['Supplemental Video Type'].isnull()]
df_main.head()


그리고 제가 하나 더 추가하고 싶은 변수가 있는데요, 작품이 영화인지 시리즈인지 구분하는 변수입니다. 나중에 분석할 때 영화/시리즈도 같이 보면 좋을 것 같습니다. 영화인지 시리즈인지는 제목으로 파악할 수 있습니다. 시리즈의 경우 제목에 시즌과 회차 정보가 같이 있기 때문이죠. 따라서 제목에 시즌 또는 시리즈라는 단어가 들어있으면 시리즈로 코딩해주겠습니다.

df_main['Movie or Series'] = np.nan
df_main['Movie or Series'] = df_main['Movie or Series'].loc[df_main['Title'].str.contains('시즌|시리즈')].replace(np.nan, "Series")
df_main['Movie or Series'] = df_main['Movie or Series'].replace(np.nan, 'Movie')
df_main.head()


2. 데이터 분석 (EDA)

이 정도면 분석에 필요한 데이터 가공은 끝난 것 같습니다! 바로 분석에 들어가 보도록 하겠습니다.

- 기기 종류/타입에 따른 세션 수

첫번째로 제 눈에 띈 것은 기기 타입입니다. 데이터가 2019년부터 2022년 1월까지 있는데, 제가 이 기간에 기기를 자주 교체했고, 새로 구비도 많이 했거든요. 과연 제가 가장 많이 사용한 기기는 무엇일까요?

import matplotlib.pyplot as plt

df_main['Device Type'].value_counts().plot(kind="bar", color = '#42f5a7')
plt.ylabel("No. of Sessions")
plt.title("No. of Sessions by Device Type")
plt.xticks(rotation=90)
plt.show()

가장 많이 사용한 것은 아이폰 6, 그리고 이후 교체한 아이폰 SE 순이네요. 저는 모바일 기기를 주로 사용하고, PC를 부가적으로 사용하는 사람인 것 같습니다. 그렇다면 기기 타입별로도 한번 보죠! 기간별로도 차이가 있을테니 히스토그램으로 그려보겠습니다.

import seaborn as sns

sns.histplot(df_main[df_main['Device Type'].str.contains('iPhone')]['year'], label="Mobile", color = '#003f5c')
sns.histplot(df_main[df_main['Device Type'].str.contains('MAC|PC')]['year'], label="PC", color = '#7a5195')
sns.histplot(df_main[df_main['Device Type'].str.contains('iPad|Tablet')]['year'], label="Tablet PC", color = '#ef5675')
sns.histplot(df_main[df_main['Device Type'].str.contains('Chromecast')]['year'], label="TV", color = '#ffa600')

plt.title("Distributions of Device Types Over Years")
plt.legend()
plt.show()

저는 모바일 기기를 사용해서 영상을 많이 시청했습니다. 다음은 PC네요. 2020년 하반기부터 PC 사용이 급증한 것을 알 수 있는데, 제가 PC를 바꾸면서 그렇게 된 것 같습니다. 2021년 하반기부터는 TV와 태블릿 PC 사용이 생겼는데요, 제가 이무렵 크롬캐스트와 아이패드를 장만했기 때문입니다. 저는 타 기기 사용이 늘면서 모바일 사용이 감소할 것이라고 생각했는데, 꼭 그런 건 아닌 것 같습니다. 모바일 사용이 줄었을 때는 PC 사용도 줄었고, 모바일 사용이 증가했을 때는 PC 사용도 증가했네요. 하지만 전반적으로 봤을 때 모바일 사용이 감소할 것 같긴 합니다.

📌 주의사항: 여기에서는 duration이 아니라 세션수로만 보기 때문에 모바일이 다른 기기보다 사용량이 많아보일 수 있습니다. 하지만 duration으로 보면 결과가 다를 수도 있겠죠..!

- 기기 타입에 따른 시청 시간대 분포

다음은 시간대 분포를 보겠습니다. 체감상 항상 넷플릭스를 끼고 사는 것 같긴 합니다만, 그래도 실제 데이터로 보면 다를 것이라고 믿습니다. 보통 식사 시간이나 멀티 태스킹할 때는 모바일 기기를 사용하고, 집중을 할 때는 좀 더 큰 기기를 사용하는데, 데이터는 뭐라고 말할까요?

sns.histplot(df_main[df_main['Device Type'].str.contains('iPhone')]['hour'], label="Mobile", color = '#003f5c')
sns.histplot(df_main[df_main['Device Type'].str.contains('MAC|PC')]['hour'], label="PC", color = '#7a5195')
sns.histplot(df_main[df_main['Device Type'].str.contains('iPad|Tablet')]['hour'], label="Tablet PC", color = '#ef5675')
sns.histplot(df_main[df_main['Device Type'].str.contains('Chromecast')]['hour'], label="TV", color = '#ffa600')
plt.title("Distributions of Viewing Hour for Different Device Types")
plt.legend()
plt.show()

온종일 넷플릭스를 끼고 산다는 제 체감이 틀리지 않았네요. 이렇게 또 반성을 하게 됩니다. 모바일 기기의 경우, 자는 시간 빼고는 거의 계속 넷플릭스를 틀어놓고 있었네요. 심지어 심야에 사용량이 가장 많습니다. 반면, PC는 확실히 저녁 시간에 사용이 많은 것을 볼 수 있습니다. TV도 저녁 때 사용이 증가합니다. 태블릿 PC는 딱 모바일 기기와 PC를 섞어놓은 패턴이네요. 흥미롭습니다.

- 영화 VS. 시리즈

그렇다면 영화/시리즈로 구분했을 때 저의 시청 패턴도 한번 분석해보겠습니다 저는 나름 둘 다 많이 본다고 자신하는데, 아무래도 시리즈는 배경처럼 계속 켜놓고 있는 경우가 많아 차이가 많이 날 것 같긴 합니다.

sns.histplot(df_main[df_main['Movie or Series'] == 'Series']['year'], label="Series", color = '#003f5c')
sns.histplot(df_main[df_main['Movie or Series'] == 'Movie']['year'], label="Movie", color = '#ffa600')

plt.title("Movie Or Series Over Years")
plt.legend()
plt.show()

영화와 시리즈의 차이는 생각보다 더 많이 납니다. 나름 열심히 산다고 살았는데 이것만 보면 저는 무척이나 한가한 사람인 것 같네요. 2021년 중순에는 인턴을 해서 드라마를 볼 시간이 많이 없었습니다만, 그때를 제외하면 아주 하늘을 찌릅니다.

반면 영화는 상반기보다는 하반기에 많이 봤군요. 또 재밌는 건, 저한테 있어서 영화와 시리즈는 대체 관계가 아닌가 봅니다. 영화를 더 많이 본다고 시리즈를 덜 보지 않고, 시리즈를 덜 본다고 영화를 더 보지 않네요. 오히려 콘텐츠를 많이 소비할 때는 둘 다 많이 소비하는 패턴을 보입니다.

- 영화/시리즈 시간대 분포

영화, 시리즈 별로 언제 많이 봤는지 시간대 분포도 살펴보겠습니다.

sns.histplot(df_main[df_main['Movie or Series'] == 'Series']['hour'], label="Series", color = '#003f5c')
sns.histplot(df_main[df_main['Movie or Series'] == 'Movie']['hour'], label="Movie", color = '#ffa600')
plt.title("Distributions of Viewing Hour for Different Content Types")
plt.legend()
plt.show()

예상대로 영화는 저녁부터 밤 시간에 많이 시청한 것을 알 수 있습니다. 반면 시리즈는 꾸준히 사용량이 있긴 하지만, 밥 먹는 시간 두번에 튀고, 저녁 시간에는 잠깐 감소했다가 밤에 다시 증가합니다. 제가 넷플릭스라면, 밥 먹을 시간에는 기벼운 시리즈를, 밤에는 영화를 추천하겠습니다.

- 영화/시리즈 기기별 시간대 분포

영화와 시리즈를 따로 보며 조금 더 깊이 들어가보겠습니다. 먼저 제가 아주 팬인 것으로 보이는 시리즈부터!

sns.histplot(df_main[(df_main['Device Type'].str.contains('iPhone')) & (df_main['Movie or Series'] == 'Series')]['hour'], label="Mobile", color = '#003f5c')
sns.histplot(df_main[(df_main['Device Type'].str.contains('MAC|PC')) & (df_main['Movie or Series'] == 'Series')]['hour'], label="PC", color = '#7a5195')
sns.histplot(df_main[(df_main['Device Type'].str.contains('iPad|Tablet')) & (df_main['Movie or Series'] == 'Series')]['hour'], label="Tablet PC", color = '#ef5675')
sns.histplot(df_main[(df_main['Device Type'].str.contains('Chromecast')) & (df_main['Movie or Series'] == 'Series')]['hour'], label="TV", color = '#ffa600')
plt.title("Viewing Activity for Series")
plt.legend()
plt.show()

시리즈는 예상대로 모바일로 많이 봤지만, 생각보다 PC의 비중도 낮지 않습니다. 역시 TV로는 많이 시청하지 않았네요.


sns.histplot(df_main[(df_main['Device Type'].str.contains('iPhone')) & (df_main['Movie or Series'] == 'Movie')]['hour'], label="Mobile", color = '#003f5c')
sns.histplot(df_main[(df_main['Device Type'].str.contains('MAC|PC')) & (df_main['Movie or Series'] == 'Movie')]['hour'], label="PC", color = '#7a5195')
sns.histplot(df_main[(df_main['Device Type'].str.contains('iPad|Tablet')) & (df_main['Movie or Series'] == 'Movie')]['hour'], label="Tablet PC", color = '#ef5675')
sns.histplot(df_main[(df_main['Device Type'].str.contains('Chromecast')) & (df_main['Movie or Series'] == 'Movie')]['hour'], label="TV", color = '#ffa600')
plt.title("Viewing Activity for Movies")
plt.legend()
plt.show()

영화는 확연히 다릅니다. 모바일의 비중이 낮고 PC 비중이 압도적으로 가장 높습니다. 심지어 저녁 시간에는 TV 사용량이 모바일 사용량을 넘어서네요. 영화는 좀 더 집중해서 큰 화면으로 봐야한다는 게 제 지론인가봅니다. 참고로 화면 크기는 TV > PC > 태블릿 PC > 모바일 순입니다.


오늘은 여기까지입니다! 넷플릭스 데이터를 분석해보니 재미는 있지만 반성을 좀 해야겠네요. (심지어 글을 쓰고 있는 지금도 넷플릭스 틀어놓고 있습니다.) 다음에는 영화/시리즈를 타이틀로도 좀 더 자세히 살펴보도록 하겠습니다!

profile
콘텐츠 전문가가 되고 싶은 방구석 연구인 🧐

8개의 댓글

comment-user-thumbnail
2022년 2월 11일

너무 재밌게 봤어요! 저도 넷플릭스에 개인정보 요청했습니다 ㅎㅎ

1개의 답글
comment-user-thumbnail
2022년 2월 15일

저 그거 할래요!! 1호 팬!!!!!!!😁

1개의 답글
comment-user-thumbnail
2022년 2월 16일

통계청보다 정확하네요 ㅋㅋㅋㅋ 재밌어용
예전에 파이썬으로 코인 시세 분석한게 떠올랐네요 😂

1개의 답글
comment-user-thumbnail
2022년 2월 16일

너무 재밌게 봤어요 ㅎㅎ! 저도 도전해봐야겠습니다 ~~

1개의 답글