4. Numpy를 이용한 데이터 분석
Python
2017. 8. 3. 13:25
1. 준비
- Movielens 자료 받기
https://grouplens.org/datasets/movielens/
recommended for education and development
이 부분의 Readme.txt와 ml-latest-small.zip을 받았다.
Readme를 읽어보면 알겠지만 들어있는 파일의 설명들이 나와있다.
내가 다룰것은 ratings.csv 파일이기때문에 그 부분만 읽고 빠져나왔다.
2. 파일 불러오기
import numpy as np import pandas as pd #CSV는 Comma Separated Value의 약자로, 콤마로 구분된 값이라는 뜻이다. # Pandas의 csv를 읽어들이는 함수가 있는데, 첫 인자는 '파일의 위치', sep= '구분자' 이다. CSV파일을 읽기때문에 sep=','를 주었다. data = pd.read_csv('data/ratings.csv', sep=',') #그 후 넘파이의 함수를 사용해서 분석할것이기때문에 다시 넘파이 배열로 바꿔준다. 이 때 dtype=np.int64를 주어 정수형으로 바꾸어준다. data = np.array(data, dtype=np.int64) # 이때 불러온 파일이 어떻게 생겼는지 알기 위해 몇 행만 보고, 몇 행 몇 열인지 봐주는것이 좋다. data[:5, ] # 5행까지의 값을 출력 data.shape # 몇행 몇열인지 알려줌
읽어오는 부분에서 또 문제가 생겼는데
invalid literal for int() with base 10: b'2.5'
이런 오류를 발생한다. 마땅한 방법을 찾지 못해 pandas로 데이터를 읽어드린 후 그것을 다시 Numpy로 받아왔다.
이 후 CSV 파일의 ReadMe를 살펴보면
userId,movieId,rating,timestamp
이렇게 되어있다고 나와있다. 이걸 이용해서 몇열만 뽑아 평균을 구하고, 합을구하고 하기 편할 것 같다.
3. 불러온 값을 이용하여 의미있는 값 추출해보기
#전체 Rating의 평균 구하기 mean_rating_total = data[:, 2].mean() #개별 ID의 Rating 평균 구하기 #순서를 잘 생각해보면 Unique한 ID를 생성한 뒤, 그 ID에 맞는 Rating들을 모아 평균을 구하여한다 user_rating_mean = [] for id in user_id_list: user_mean_rating_total = data[data[:, 0] == id, 2].mean() user_rating_mean,append([id, user_mean_rating_total]) user_rating_mean_array = np.array(user_rating_mean, dtype=np.float32) user_rating_mean_array[:5] # 출력 array([[ 1. , 2.45000005], # [ 2. , 3.48684216], # [ 3. , 3.41176462], # [ 4. , 4.34803915], # [ 5. , 3.66000009]], dtype=float32) #저장 np.savetxt('user_rating_mean_array.csv', user_rating_mean_array, fmt='%.3f', delimiter=',')
위처럼 한줄한줄 해석해보면서 읽어보고 써보면 다른것도 금방응용할 수 있더라
'Python' 카테고리의 다른 글
6. DataFrame 인덱싱 (0) | 2017.08.07 |
---|---|
5. Pandas 자료구조 (0) | 2017.08.03 |
3. Numpy 함수 (0) | 2017.08.02 |
2. Numpy 배열 인덱싱 (0) | 2017.08.01 |
1. Numpy 배열의 생성과 연산 (0) | 2017.08.01 |