728x90
🌟 해당 글은 이전 글과 이어지니 꼭! 이전글을 읽어주시기 바랍니다. 이전 글 링크는 아래 있습니다.
[넷플릭스 데이터 분석] - Feature Engineering (2)
[넷플릭스 데이터 분석] - Feature Engineering (2)
🌟 해당 글은 이전 글과 이어지니 꼭! 이전글을 읽어주시기 바랍니다. 이전 글 링크는 아래 있습니다. [넷플릭스 데이터 분석] - 결측치 처리 (1) [넷플릭스 데이터 분석] - 결측치 처리 (1)이번
yijoon009.tistory.com
넷플릭스 검색
넷플릭스에서 원하는 프로그램을 검색해 보자.
- 오징어 게임을 검색한 조건을 netflix 원본 데이터에 넣어서 True인 값만 출력
- str.contains( ) : 지정한 문자열이 포함되어 있으면 True 반환, 그 외에는 False 반환
- na = False : 값이 NA일 경우, False로 처리
- case = Fasle : 대소문자를 구분하지 않고 검색
# Squid Game(오징어 게임) 검색
netflix["title"].str.contains('squid game', na = False, case = False)
# 오징어 게임을 검색한 조건을 netflix 원본 데이터에 넣어서 True인 값만 출력
netflix[netflix["title"].str.contains('Squid Game', na = False, case = False)]
넷플릭스 시각화
- plt.pie( ) : 파이 플롯 시각화
- labels : 부채꼴 조각 이름
- autopct : 부채꼴 안에 표기될 숫자 형식 지정
- 문자열 % 포맷팅으로 %0.f 형태는 소수점 없이 정수처럼 인식
- 진짜 %를 표시하기 위해 %%로 작성
- startangle : 부채꼴이 그려지는 시작 각도 설정, 90이면 12시 방향
- explode : 부채꼴이 파이 플롯의 중심에서 벗어나는 정도 설정
- shadow : 그림자 효과 표시
- plt.suptitle( ) : 전체 플롯의 제목
- plt.title( ) : 서브플롯의 제목
# 넷플릭스 브랜드 상징 색깔 시각화
sns.palplot(['#221f1f', '#b20710', '#e50914','#f5f5f1'])
plt.title("Netflix brand palette ", loc='left', fontfamily='serif', fontsize=15, y=1.2)
plt.show()
Movies & TV shows의 각각 value_counts 출력
# .value_counts( ) : 값의 개수 출력
netflix['type'].value_counts()
# .T : 전치(Transpose) 변환
ratio = pd.DataFrame(netflix['type'].value_counts()).T
ratio
pie plot 통해 Movies & TV shows 각각 비율 시각화
plt.figure(figsize=(5, 5))
# 첫 번째 행을 1차원 배열로 추출
ratio_values = ratio.iloc[0]
plt.pie(ratio_values = ratio.iloc[0], labels=ratio.columns, autopct='%0.f%%', startangle=100,
explode=[0.05, 0.05], shadow=True, colors=['#b20710', '#221f1f'])
plt.suptitle('Movie & TV Show distribution', fontfamily='serif', fontsize=15, fontweight='bold')
plt.title('We see more movies than TV shows on Netflix.', fontfamily='serif', fontsize=12)
plt.show()
연도별 Movie & TV Show 수치 시각화
- countplot( ) : 각 범주에 속하는 데이터의 개수를 막대그래프 시각화
- data : 카운트 플롯에서 사용할 데이터 셋
- x : x축 설정
- hue : 특정 열 데이터로 색상을 구분하여 출력
항상 Movies가 TV shows보다 압도적인지 궁금!
plt.figure(figsize=(15, 5))
sns.countplot(data=netflix, x='year_added', hue='type', palette=['#b20710', '#221f1f'])
plt.suptitle('Movie & TV Show added by year', fontfamily='serif', fontsize=15, fontweight='bold')
plt.title('Regardless of the year, we always watch more movies than TV shows on Netflix. The most movies were added in 2019.', fontfamily='serif', fontsize=12)
plt.show()
월별 Movie & TV Show 수치 시각화
- unstack( ) : 인덱스를 컬럼으로 바꾸는 역할
- <-> stack( ) : 컬럼을 인덱스로 바꾸는 역할
- fill_between( ) : x축을 기준으로 그래프 영역을 채우는 함수
- <-> fill_betweenx( ) : y축을 기준으로 그래프 영역을 채우는 함수
- x : 곡선을 정의하는 노드의 x 좌표
- y1 : 첫 번째 곡선을 정의하는 노드의 y 좌표
- y2 : 두 번째 곡선을 정의하는 노드의 y 좌표
- label : 'Movie', 'TV Show' 문자열 입력
- alpha : 투명도
- xticks(x, month_name) : x축의 눈금 레이블에 month_name 값의 순서대로 설정
월별로 Movies & TV shows 수치 출력
# .groupby( ) : 그룹별 집계, 개봉한 월로 묶고 타입의 개수 구하기
# .value_counts( ) : 값의 개수 출력
# .unstack( ) : 인덱스를 컬럼으로 바꾸는 역할(wide 포맷)
netflix_month = netflix.groupby('month_added')['type'].value_counts()
netflix_month
.unstack()을 추가해 주면 index(Movie, TV Show)를 컬럼으로 추가해 준다.
netflix_month = netflix.groupby('month_added')['type'].value_counts().unstack()
월별로 Movies & TV shows 수치 시각화
# legend() 함수를 사용해서 그래프에 범례 표시
plt.figure(figsize=(15, 5))
plt.fill_between(x=netflix_month['Movie'].index, y1=0, y2=netflix_month['Movie'], color='#b20710', alpha=0.9, label = 'Movie')
plt.fill_between(x=netflix_month['TV Show'].index, y1=0, y2=netflix_month['TV Show'], color='#221f1f', alpha=0.9, label = 'TV Show')
plt.xticks([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'])
plt.legend()
plt.suptitle('Movie & TV Show added by month', fontfamily='serif', fontsize=15, fontweight='bold')
plt.title('The most movies were added in July and the most tv Show were added in December.', fontfamily='serif', fontsize=12)
plt.show()
나라별 타겟팅하는 연령 시각화
- heatmap( ) : 직사각형 데이터를 색으로 행렬을 표현하여 시각화 열을 뜻하는 heat와 지도를 뜻하는 map을 결합시켜 색상으로 다양한 정보를 제공
- cmp : 시각화시키는 컬러맵
- linewidth : 각 셀을 분할할 선의 너비
- annot : True라면 각 셀에 데이터 값 표시
- fmt : 문자열 형식화 코드
- .0% = X
- .1% = X.x
- .2% = X.xx
- plt.matplotlib.colors.LinearSegmentedColormap.from_list( ) : 컬러맵 생성
나라별 타겟팅하는 연령 수치화
# .groupby( ) : 그룹별 집계, 시청 등급으로 묶고 나라의 개수 구하기
# .value_counts( ) : 값의 개수 출력
# .unstack( ) : 인덱스를 컬럼으로 바꾸는 역할(wide 포맷)
netflix_age_country = netflix.groupby('age_group')['country'].value_counts().unstack()
netflix_age_country
특정 나라별 타겟팅하는 특정 연령 선택하여 수치화
# .loc[] : 행 이름과 열 이름을 사용하여 특정 행과 열 선택
# .fillna(0, inplace = True) : 결측치를 0으로 대체하여 원본 데이터에 저장
age_order = ['Kids','Older Kids','Teens','Adults']
country_order = ['United States', 'India', 'United Kingdom', 'Canada', 'Japan',
'France', 'South Korea', 'Spain', 'Mexico', 'Turkey']
netflix_age_country = netflix_age_country.loc[age_order, country_order]
netflix_age_country.fillna(0, inplace = True)
netflix_age_country
나라별 타겟팅하는 연령별 비율을 알고 싶기 때문에 열(나라)마다 총합을 구하여 각각 나누어주면 연령별 비율을 알 수 있음
# .sum(axis=0) : 열 기준으로 더하기
# .div(axis=1) : 행 기준으로 나누기
netflix_age_country = netflix_age_country.div(netflix_age_country.sum(axis=0), axis=1)
netflix_age_country
나라별 타겟팅하는 연령 시각화하여 인사이트 얻기
plt.figure(figsize=(15, 5))
cmap = plt.matplotlib.colors.LinearSegmentedColormap.from_list("", ['#221f1f', '#b20710','#f5f5f1'])
sns.heatmap(netflix_age_country, cmap = cmap, linewidth=2.5, annot=True, fmt='.0%')
plt.suptitle('Target ages proportion of total content by country', fontweight='bold', fontfamily='serif', fontsize=15)
plt.title('Here we see interesting differences between countries. Most shows in South Korea are targeted to adults, for instance.',fontsize=12,fontfamily='serif')
plt.show()
워드 클라우드
워드 클라우드란, 문서의 키워드, 개념 등을 직관적으로 파악할 수 있도록 핵심 단어를 시각화하는 기법이다.
- from wordcloud import WordCloud : 워드 클라우드 생성에 필요한 모듈
- from PIL import Image : 워드 클라우드를 원하는 형태로 그리기 위해 그림을 불러오는 패키지
- WordCloud( ).generate(text) : 선언해 준 text에서 wordcloud를 생성
- text 변환 : wordcolud에서 작동할 수 있도록 데이터프레임을 list로 1차 변환시키고 str(문자열)로 2차 변환
- mask : 단어를 그릴 위치 설정, 흰색(#FFFFFF) 항목은 마스킹된 것으로 간주
- plt.matplotlib.colors.LinearSegmentedColormap.from_list( ) : 컬러맵 생성
- plt.imshow( ) : array에 색을 채워서 이미지로 표시
- plt.axis('off') : 축 삭제
넷플릭스 데이터의 description 변수를 이용한 워드 클라우드 생성
from wordcloud import WordCloud
from PIL import Image
plt.figure(figsize=(15, 5))
text = str(list(netflix['description']))
mask = np.array(Image.open('/content/netflix_logo.jpg'))
cmap = plt.matplotlib.colors.LinearSegmentedColormap.from_list("", ['#221f1f', '#b20710'])
wordcloud = WordCloud(background_color = 'white', width = 1400, height = 1400, max_words = 170, mask = mask, colormap=cmap).generate(text)
plt.suptitle('Keywords in the description of Movies and TV shows', fontweight='bold', fontfamily='serif', fontsize=15)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
'EDA' 카테고리의 다른 글
사분위 범위 및 Boxplot으로 데이터 분포 분석 (2) (0) | 2024.08.26 |
---|---|
Pandas를 이용한 기초 통계 계산 (1) (0) | 2024.08.26 |
[넷플릭스 데이터 분석 - 2] Feature Engineering (0) | 2024.08.05 |
[넷플릭스 데이터 분석 - 1] 결측치 처리 (0) | 2024.08.05 |