728x90
반응형
1. 데이터 로드
영화 데이터를 로드해본다. 데이터를 보면 "장르 (genres)" 컬럼의 값들이 | 구분자들로 나누어져 있는 것을 알 수 있다.
이 구분자를 쪼개서 다시 여러개의 행 데이터로 재구성을 하고자한다.
movies = pd.read_csv("movies.csv")
movies.head(10)
movieId | title | genres | |
---|---|---|---|
0 | 1 | Toy Story (1995) | Adventure|Animation|Children|Comedy|Fantasy |
1 | 2 | Jumanji (1995) | Adventure|Children|Fantasy |
2 | 3 | Grumpier Old Men (1995) | Comedy|Romance |
3 | 4 | Waiting to Exhale (1995) | Comedy|Drama|Romance |
4 | 5 | Father of the Bride Part II (1995) | Comedy |
5 | 6 | Heat (1995) | Action|Crime|Thriller |
6 | 7 | Sabrina (1995) | Comedy|Romance |
7 | 8 | Tom and Huck (1995) | Adventure|Children |
8 | 9 | Sudden Death (1995) | Action |
9 | 10 | GoldenEye (1995) | Action|Adventure|Thriller |
2. 행별 구분자 개수 구하기
"장르 (genres)" 컬럼의 데이터만 가지고 와서 | 구분자를 split 함수로 쪼갠다음에 map 함수를 호출하여 행별 길이를 구해주도록 한다. 출력을 해보면 0행에는 5개, 1행에는 3개 ... 식으로 구성되어 있는 것을 알 수 있다.
lens = movies['genres'].str.split('|').map(len)
lens
0 5
1 3
2 2
3 3
4 1
..
62418 1
62419 1
62420 2
62421 1
62422 3
Name: genres, Length: 62423, dtype: int64
3. String → List 변환 함수
String 타입으로 되어 있는 데이터를 List 타입으로 변환해주는 함수를 만들자.
from itertools import chain
def chainer(s):
return list(chain.from_iterable(s.str.split('|')))
# ex) 가|나 ==> ['가', '나']
4. 데이터 재생성
구분자가 없는 행들은 numpy의 repeat 함수와 lens (행별 구분자 개수)를 활용하여 특정 컬럼의 데이터를 반복 처리하여 컬럼을 재구성할 것이며 구분자가 있는 행들은 chainer 함수를 활용하여 데이터를 split 하여 여러행의 데이터로 재구성하도록 한다.
import numpy as np
new_movies = pd.DataFrame({'movieId': np.repeat(movies['movieId'], lens),
'title': np.repeat(movies['title'], lens),
'genres': chainer(movies['genres'])})
new_movies.head(20)
movieId | title | genres | |
---|---|---|---|
0 | 1 | Toy Story (1995) | Adventure |
0 | 1 | Toy Story (1995) | Animation |
0 | 1 | Toy Story (1995) | Children |
0 | 1 | Toy Story (1995) | Comedy |
0 | 1 | Toy Story (1995) | Fantasy |
1 | 2 | Jumanji (1995) | Adventure |
1 | 2 | Jumanji (1995) | Children |
1 | 2 | Jumanji (1995) | Fantasy |
2 | 3 | Grumpier Old Men (1995) | Comedy |
2 | 3 | Grumpier Old Men (1995) | Romance |
3 | 4 | Waiting to Exhale (1995) | Comedy |
3 | 4 | Waiting to Exhale (1995) | Drama |
3 | 4 | Waiting to Exhale (1995) | Romance |
4 | 5 | Father of the Bride Part II (1995) | Comedy |
5 | 6 | Heat (1995) | Action |
5 | 6 | Heat (1995) | Crime |
5 | 6 | Heat (1995) | Thriller |
6 | 7 | Sabrina (1995) | Comedy |
6 | 7 | Sabrina (1995) | Romance |
7 | 8 | Tom and Huck (1995) | Adventure |
728x90
반응형
'데이터 분석' 카테고리의 다른 글
python 파일 용량이 큰 파일을 읽을 경우 (0) | 2022.09.01 |
---|---|
pandas, pyplot로 데이터를 시각화해보자 (0) | 2022.03.09 |
Pandas 를 활용해보자 (0) | 2022.03.02 |