1. Fandango의 표시된 점수와 실제 사용자 평점 비교

먼저 Fandango 평점을 탐색하여 우리의 분석이 기사의 결론과 부합하는지 확인해 봅시다.

 

# fandango_scrape.csv 파일 읽기
fandango = pd.read_csv("fandango_scrape.csv")

# head()하여 상위 5개 데이터 보기
fandango.head()

# info()사용하여 데이터 내용 확인하기
fandango.info()

# describe()사용하여 계산 결과 확인하기
fandango.describe()

해당 작업을 해본 결과 컬럼은 FILM, STARS, RATING, VOTES가 있는 것을 확인 하였으며, 총 504개의 행이 존재한다는 것을 알 수 있었으며 4개의 컬럼에서는 NaN값이 없는  것도 확인 되었습니다.


이번에는 영화의 VOTES와 RATING 사이의 관계를 탐색해 봅시다.

RATING과 VOTES 간의 관련을 보여주는 산점도를 만들어 볼 것입니다.

# seaborn 사용하여 산점도 그래프를 만들었습니다.
fig = plt.figure(figsize=(14,6))
sns.scatterplot(fandango,x='RATING',y='VOTES')

코드 결과

그림을 보면 VOTES가 많은 것이 몇 개 있는 것으로 보아 투표 평균 그래프가 치우쳐져 그려질 수도 있다는 생각을 하였습니다.( right-skewed )

그리고 저는 해당 그래프를 보면 투표 수가 많을 수록 RATING에 대한 결과는 신뢰성이 올라 갈 거라는 추측을 하겠습니다. 예시를 확인 하겠습니다..

ex) 영화에 4점 후반 평가를 한 투표 수가 높의면 해당 영화는 좋은 영화로 볼 수 있다.


이번에 할 것은 위에서 설명 했던 것처럼 컬럼 간 상관관계를 확인 해봐야 할 거 같아서 corr()함수를 사용해보겠습니다.

corr_columns = ['STARS','RATING','VOTES']
corr_fandango = fandango[corr_columns].corr()
corr_fandango

 

상관관계 1에 가까울 수록 양의 상관관계

여기서 확인 되는 것은 제가 위에서 VOTES와 RATING에 대한 상관관계가 높을 줄 알았으나, 0.1점대로 매우 낮게 측정되었습니다. 그럼 제가 추측한 결과는 틀린 것으로 확인되었습니다.

그리고 VOTES는 어떤 컬럼과도 큰 상관관계가 없는 거 같습니다.


현재 FILM의 값을 보면 TITLE_NAME(YEAR) 이런 형식으로 되어있습니다. 

그래서, 제목 문자열에서 연도를 제거하고, YEAR라는 새로운 열을 연도로 설정하겠습니다.

for idx, row in fandango.iterrows():
	# 제목에서 빈칸 있는 경우 연도 앞에서 짜르는 부분
    title_year = row['FILM'].split(' ')
	
    # 짤렸던 제목들 다시 합치기
    n = 0
    if len(row['FILM']) > 2:
        n = len(title_year) - 1
    else :
        n = 1
    title = ' '.join(title_year[:n])
    # 제목 바꾸기
    fandango.loc[idx, 'FILM'] = title

	# (year) -> 괄호 제거 후 year를 int형으로 변환
    year = title_year[len(title_year) - 1].replace('(','').replace(')','')
    fandango.loc[idx, 'year'] = year
    
fandango.head()

year컬럼 생성 후 추가

위의 사진과 같이 year컬럼을 생성하고 film에서의 연도는 제거하였습니다.

 

이번에는 연도별 영화 수를 이용한 그래프를 만들어 보겠습니다.

fig = plt.figure(figsize=(8, 6))

count.plot(kind='bar')
plt.ylabel('count')
plt.xticks(rotation=0)

plt.show()

연도별 평가된 영화 개수

사진과 같이 2015년의 평가된 영화의 수가 압도적으로 많은 것을 확인 할 수 있습니다.

아마도 제 추측상 해당 데이터는 2016년 초반에 만들어진 데이터셋인 거 같습니다.(제 추측이지 확실한 것은 아닙니다!!)


이번에는 투표수가 제일 많은 영화 10개를 뽑아내는 작업을 해보겠습니다.

fandango.sort_values(by='VOTES', ascending=False).head(10)

네 이런 식으로 VOTES를 기준으로 내림차순 정렬을 하게 되면 TOP10의 결과를 출력할 수 있습니다.


이번 작업은 투표수가 0인 영화의 개수를 출력해보겠습니다.

zero_vote = fandango[fandango['VOTES'] == 0]
len(zero_vote['FILM'].unique())

해당 코드 결과 68개가 나왔습니다. 

그렇다면 투표 수가 0인 영화들을 제거 한 후 데이터프레임을 만들면 데이터 행의 개수는 503 - 68 = 435개가 될 것입니다.

review_film = fandango.drop(fandango[fandango['FILM'].isin(zero_vote['FILM'])].index)

review_film.info()

위의 코드 처럼 drop을 활용하여 위에서 만든 zero_vote의 FILM값이 원래 데이터 프레임인 fandango의 FILM에 있다면 해당하는 row를 삭제하는 작업입니다.

코드 결과 435개 나온 것 확인


자료와 실습 도움을 준 강의입니다. (Udemy - Python for Machine Learning & Data Science Masterclass)

728x90
hmm06