pandas例項——MovieLens電影資料實戰分析
阿新 • • 發佈:2019-02-16
在上一篇文章中我介紹了pandas的基本用法,今天我就用pandas實戰操作,大家可以一起感受一下資料分析是如何從一堆數字中找到有價值的資訊的。下面我也附上了程式碼,我強烈推薦大家將資料下載下來,親自去實踐敲一遍,我相信收穫會更多。
廢話不多說! HERE WE GO!!!
一、資料集介紹
可以在連結中自行下載。其中有三個dat資料包,分別為:users.dat、ratings.dat、movies.dat。另外還可下載README檔案檢視資料具體介紹,我在下面就只進行簡短的介紹,想偷懶的同學不用看它的,看我的就夠啦!^_^我採用的資料是來自MovieLen的電影資料集(https://grouplens.org/datasets/movielens)中的MovieLens 1M Dataset。需要的同學
users.dat:UserID、Gender、Age、Occupation、Zip-code
movies.dat:MovieID、Title、Genres
ratings.dat:UserID、MovieID、Rating、Timestamp
注:dat檔案是資料儲存的一種格式,即Data縮寫。在pandas中用read_table即可開啟。
二、具體分析過程
1、匯入資料
ratings = pd.read_table('ratings.dat', header=None, names=['UserID', 'MovieID', 'Rating', 'Timestamp'], sep='::') users = pd.read_table('users.dat', header=None, names=['UserID','Gender','Age','Occupation','Zip-code'], sep='::') movies = pd.read_table('movies.dat', header=None, names=['MovieID', 'Title', 'Genres'], sep='::')
2、資料合併
在資料分析中,將不同的表合併起來匯聚成一張總表,會更加便於我們後面的處理與分析。
data = pd.merge(pd.merge(users, ratings), movies)
3、資料訪問
print data[data.UserID == 1]
打印出資料表中UserID為1的使用者所有的相關資料資訊。
4、不同性別對電影的平均評分
data_gender = data.pivot_table(values='Rating', index='Title', columns='Gender', aggfunc='mean')
採用資料透視,建立以Title為行索引,Gerder為列索引,mean為聚合方法來顯示Rating中的資料。這樣就獲得了一張我們自創的data_gender資料表,下面我們再對該資料表進行操作:
data_gender['difference'] = data_gender.F - data_gender.M data_gender_sorted = data_gender.sort_values(by='difference', ascending=False)
我們向data_gender資料表中新插入了一列difference,用來存放男女使用者評分的差值。 接下來我們對difference列降序排列(或者升序),即可看到不同性別使用者對相同電影評分差異最大的電影了。5、平均分較高的電影
data_mean_rating = data.pivot_table(values='Rating', index='Title', aggfunc='mean') data_mean_rating_sorted = data_mean_rating.sort_values(by='Rating', ascending=False)
依然是利用資料透視,對資料進行重新劃分後排序,只是此次不再指定列標籤,pandas會自動用Rating作為列標籤。
隨後對資料再進行排序,即可得到平均分較高的電影了,也就是好電影咯!!
6、評分次數最多熱門的電影
data_rating_num = data.groupby('Title').size() data_rating_num_sorted = data_rating_num.sort_values(ascending=False)
利用資料分組操作對Title進行分組,並用size()聚合函式即可統計出每個Title出現的次數,即評分次數。 再利用排序方法對值進行降序排列,即可獲得熱門電影的資料表啦!7、問題出現在哪裡????
推薦大家按照我上面的步驟,去體驗一下資料分析帶給我們的快樂!!如果你做了,你就會發現一個很奇怪的問題! 這個問題在上面第五項分析中最為明顯:為什麼那些平均分高的電影,我從來沒看過?甚至有些聽都沒聽過呢?這個問題是不符合常理的,畢竟國內外好電影大家按說都應該耳熟能詳的,所以這其中一定存在錯誤。
這個問題就在於:有些電影只有極少數的人(1-2人)看過,並且覺得很好看,給了很高的評分,這個時候我們去分析資料
的時候,得到的就是這種極小眾認為好看的電影。因此,我們應該對評分次數做出最小值限定,使資料更加合理:
加入評分次數限制的分析不同性別對電影的平均評分:
data_gender_hot = data_gender.loc[data_rating_num[data_rating_num > 1000].index] data_gender_hot.sort_values(by='diff', ascending=False)
加入評分次數限制的分析平均分高的電影:
data_mean_rating_number = data_mean_rating.loc[data_rating_num[data_rating_num > 1000].index] data_mean_rating_number_sorted = data_mean_rating_number.sort_values(by='Rating', ascending=False)
三、總結
在資料處理過程中,合併、透視、分組、排序這四大類操作是最經常用的,所以希望大家能夠熟練掌握這四種方法的用法。
以上內容就是我為大家帶來的運用pandas資料分析的全部內容啦!有問題想與我交流的直接留言即可咯! 拜了個拜~!
程式碼一定要親自敲一遍!程式碼一定要親自敲一遍!程式碼一定要親自敲一遍!