사용자, 영화, 평점 데이터셋
http://files.grouplens.org/datasets/movielens/ml-100k.zip
실습 데이터 : 사용자들이 영화에 대해 매긴 점수와 관련된 100k 데이터 집합
[root@client_server ~]# vi $SPARK_HOME/conf/spark-env.sh
export PYSPARK_DRIVER_PYTHON=/root/anaconda3/envs/py35/bin/ipython3
[root@client_server ~]# $SPARK_HOME/bin/pyspark --master spark://master:7077
pyspark를 아이 파이썬 콘솔 기능으로 사용 가능!
[root@client_server ~]# cd dataset/ml-100k
[root@client_server ~]# ls
[root@client_server ~]# head -3 u.user #추출할 데이터 형태 확인
[root@client_server ~]# head -3 u.data #추출할 데이터 형태 확인
[root@client_server ~]# head -3 u.item #추출할 데이터 형태 확인
필요한 사용자, 영화, 평점 데이터프레임 형성하기
>> user=sc.textFile("u.user").map(lambda x:x.split("|")).map(lambda x:x[:4]).collect()
>> rating=sc.textFile("u.data").map(lambda x:x.split("\t")).map(lambda x:x[:3]).collect()
>> movie=sc.textFile("u.item").map(lambda x:x.split("|")).map(lambda x:x[:2]).collect()
>> import pandas as pd
>> colnames1=["user_id","age","gender","occupation"]
>> colnames2=["user_id","movie_id","rating"]
>> colnames3=["movie_id","movie_name"]
>> user_df=pd.DataFrame(user,columns=colnames1) ;user_df.head(3)
>> rating_df=pd.DataFrame(rating,columns=colnames2) ;rating_df.head(3)
>> movie_df=pd.DataFrame(movie,columns=colnames3) ;movie_df.head(3)
사용자, 영화, 평점 데이터셋 병합
>> merge_df=pd.merge(user_df,pd.merge(movie_df,rating_df,how="inner"),how="inner") #merge by "movie_id" and "user_id"
>> merge_df.columns
>> merge_df=merge_df.iloc[:,[0,1,2,3,6,4,5]] #iloc는 integer로 indexing /loc는 label로 indexing
>> merge_df.describe()
>> merge_df["rating"]=pd.to_numeric(merge_df["rating"]) #파생특징 추출 위해, 숫자로 형변환
파생 특징 추출(Feature Engineering)
#사용자별 성별 "평점 평균, 평점 분산(호불호 정도), 영화 관람 횟수(관심도)" 구하기
1. mean(평점 평균) : 관람객의 '영화에 대한 만족 정도 또는 그 기준'을 측정
2. var(평점 분산) : 관람객의 '영화에 대한 호불호 정도'를 측정
3. size(영화 평점부여 횟수) : '영화에 대한 관심도, 즉 라이프스타일'을 측정
>> group=merge_df.groupby(["user_id","gender"]).agg([np.mean,np.var,np.size])
>> group.columns=group.columns.get_level_values(1) #remove multi index
>> group=group.reset_index() #change multi index to be columns
이 포스트에서는 피처 엔지니어링의 한 예로써, 파생 특징을 들었지만 이 뿐만 아니라 숫자(관람자 연령), 카테고리(관람자 성별 및 직업, 영화 장르), 텍스트 특징(영화 제목, 리뷰 등) 또한 있습니다.