tags:
- MovieLens 1M數據集
- 計算評分分歧
*更新了書中淘汰的方法
MovieLens 1M數據集
將常規分隔文件讀入DataFrame【來源】
首先看下數據集說明
文件中數據集是以”::“作為分割的。
pandas.read_table(filepath_or_buffer, sep='\t', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True,
skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
通過pandas.read_table將各表分別讀到一個pandas DataFrame對象中:
import pandas as pd
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('D:/臨時/ml-1m/users.dat',sep='::',header=None,names=unames)
rnames=['user_id','movie_id','rating','timestamp']
ratings=pd.read_table('D:/臨時/ml-1m/ratings.dat',sep='::',header=None,names=rnames)
mnames=['movie_id','title','generes']
movies=pd.read_table('D:/臨時/ml-1m/movies.dat',sep='::',header=None,names=mnames)
利用python切片語法插卡每個DataFrame前幾行:
為了根據三張表中多個屬性計算電影平均得分,所以先合并幾張表;
先用pandas的merge函數將ratings和users合并到一起,然后再將movies也合并進去。
data=pd.merge(pd.merge(ratings,users),movies)
DataFrame.loc?
通過標簽或布爾數組訪問一組行和列。
pandas.pivot_table(data,values = None,index = None,columns = None,aggfunc ='mean',fill_value = None,margin = False,dropna = True,_margins_name ='All' _)[source]
創建一個電子表格樣式的數據透視表作為DataFrame。數據透視表中的級別將存儲在結果DataFrame的索引和列上的MultiIndex對象(層次索引)中.
*注意書上的參數過舊,要按照當下查詢到的函數參數來
該操作產生了另一個DataFrame,其內容為電影平均得分,行標為電影名稱,列標為性別。
【目標】:過濾評分數據不夠250條的電影。
【方式】:先對title進行分組,然后利用size()得到一個含有各電影分組大小的Series對象:
【目標】:為了解女性觀眾最喜歡的電影
【方式】:對F列進行降序排列:
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)[source]
Sort object by labels (along an axis)
DataFrame.sort_values(by,axis = 0,ascending = True,inplace = False,_kind =' __quicksort _',_na_position ='last' _)[source] ?
按任一軸的值排序
計算評分分歧
【目標】:找出男性和女性觀眾分歧最大的電影
【方式】:給mean_ratings加上一個用于存放平均得分之差的列,并對其進行排序。
按diff排序得到女性更喜歡的電影:
對排序結果反序并去除前15行,得到男性觀眾更喜歡的電影:
【目標】:不考慮性別因素找出分歧最大的電影
【方式】:計算分數數據的方差或者標準差: