第十四章 數(shù)據(jù)分析示例
注:本章示例數(shù)據(jù)集可在附帶的GitHub倉庫(http://github.com/wesm/pydata-book)中找到
14.2 MovieLens 1M數(shù)據(jù)集
?????? GroupLens實驗室(http://www.grouplens.org/node/73)提供了一些從MovieLens用戶那里收集的20世紀90年代末和21世紀初的電影評分數(shù)據(jù)的集合。這些數(shù)據(jù)提供了電影的評分唬渗、電影的元數(shù)據(jù)(流派和年份)以及觀眾數(shù)據(jù)(年齡扩然、郵編闸英、性別、職業(yè))彩倚。這些數(shù)據(jù)通常會用于基于機器學(xué)習(xí)算法的推薦系統(tǒng)開發(fā)滩援,雖然我們不會在本書中詳細探討機器學(xué)習(xí)技術(shù),但我會向你展示如何將這些數(shù)據(jù)集切片并切成你需要的確切形式辉懒。
?????? MovieLens 1M數(shù)據(jù)集包含6,000個用戶對4,000部電影的100萬個評分。數(shù)據(jù)分布在三個表格中:評分谍失,用戶信息和電影信息眶俩。
1.從ZIP文件中提取數(shù)據(jù)后,我們可以使用pandas.read_table將每個表加載到一個pandas DataFrame對象中快鱼。(見圖14-1)
2.通過使用Python的切片語法來查看每個DataFrame的前幾行來驗證一切是否成功(見圖14-2颠印、14-3)
注:年齡和職業(yè)被編碼為整數(shù),這些表示了數(shù)據(jù)集的README文件所描述的分組抹竹。
3.合并數(shù)據(jù)集
?????? 跨越三個表格分析數(shù)據(jù)并不是一件簡單的事情线罕,例如,假設(shè)你想按性別和年齡計算某個電影的平均評分窃判。正如你將看到的钞楼,將所有表格合并到單個表中會更容易。使用pandas的合并功能袄琳,我們首先將ratings表與users表合并窿凤,然后將該結(jié)果與movies表數(shù)據(jù)合并。pandas根據(jù)重疊名稱推斷哪些列用作合并的(或連接)鍵位(見圖14-4)
4.為了獲得按性別分級的每部電影的平均電影評分跨蟹,我們可以使用pivot_table方法(見圖14-5)
注:上面的代碼產(chǎn)生了另一個DataFrame,其中包含電影標題作為行標簽(“索引”)和性別作為列標簽的平均評分橘沥。
5.首先過濾掉少于250(完全隨意定的數(shù)字)個評分的電影
?????? 為此窗轩,我接著按標題對數(shù)據(jù)進行分組,并使用size()為每個標題獲取一個元素是各分組大小的Series(見圖14-6)
6.評分多于250個的電影標題的索引之后可以用于從mean_ratings中選出所需的行(見圖14-8)
7.看女性觀眾的top電影座咆,我們可以按F列降序排序(見圖14-9)
14.2.1 測量評價分歧
?1.找到男性和女性觀眾之間最具分歧性的電影痢艺。
一種方法是添加一列到含有均值差的mean_ratings中仓洼,然后按以下方式排序(見圖14-9、14-10)
2.假設(shè)你想要的是不依賴于性別標識而在觀眾中引起最大異議的電影堤舒。異議可以通過評分的方差或標準差來衡量(見圖14-11)
注:電影流派是以管道分隔(|)字符串的形式給出的色建。如果你想按流派做一些分析,需要做更多的工作來將流派信息轉(zhuǎn)化為更有用的形式