python/data analysis

[Pandas] apply 함수를 사용한 데이터 분석

danuri 2021. 8. 25. 21:00

 

사용 데이터

MovieLens 영화 데이터 -> ml-latest-small.zip -> movies.csv

https://grouplens.org/datasets/movielens/

 

import pandas as pd

movies = pd.read_csv('[파일 경로]/movies.csv', index_col='movieId')

 

+) year 컬럼은 title에서 추출하여 따로 추가해둔 상태

 

genre 분석

apply 함수를 사용해 movies 데이터의 장르를 분석해보자.

 

apply

apply 함수는 특정 데이터 컬럼에 특정 함수를 반복적으로 적용시킬 수 있는 함수이다.

예시를 보면 이해가 빠를  것이다.

 

sample_genre = movies['genres'][1]
sample_genre.split("|")

 

<결과>

['Adventure', 'Animation', 'Children', 'Comedy', 'Fantasy']

 

이렇게 각 movie들의 genre를 '|'를 기준으로 split 하고  싶다고 가정하자.

이러한 split 함수를 movie['genre'] 전체에 반복적으로 적용시켜 주는 것이 apply 함수의 핵심이다.

 

movies['genres'].apply(lambda x : x.split("|"))

람다를 사용하였지만 def로 지정한 함수도 사용 가능하다.

 

<결과>

 

각 genre에 대해 split함수가 적용된 것을 볼 수 있다.

 

flat list

지금까지는 각 movie별 genre 정보를 파악했다.

이를 조금 응용해서 movies 데이터 전체에는 어떤 장르들이 있는지 파악해보자.

 

genres_list = list(movies['genres'].apply(lambda x : x.split("|")))
genres_list[:3]

우선 apply를 적용한 데이터를 list로 감싼다.

 

<결과>

[['Adventure', 'Animation', 'Children', 'Comedy', 'Fantasy'],
 ['Adventure', 'Children', 'Fantasy'],
 ['Comedy', 'Romance']]

 

list of list의 형태를 unique한 값들로 하나의 리스트를 만들었을 때 ,이를 flat list라고 한다.

 

flat_list=[]
for sublist in genres_list:
  for item in sublist:
    flat_list.append(item)
    
genres_unique = list(set(flat_list))
genres_unique

 

<결과>

['Comedy',
 'Documentary',
 'Horror',
 '(no genres listed)',
 'Children',
 'Sci-Fi',
 'Crime',
 'Thriller',
 'Adventure',
 'Film-Noir',
 'Drama',
 'Musical',
 'Western',
 'Romance',
 'Fantasy',
 'IMAX',
 'Action',
 'Animation',
 'War',
 'Mystery']

이렇게 전체 genre를 하나의 리스트로 파악할 수 있다.