1、協同過濾–找出電影的相似度
2、基於專案的協同過濾應用–向人們推薦電影
# 讀入資料
import pandas as pd
r_cols=['user_id','movie_id','rating']
ratings=pd.read_csv('./u.data',sep='\\t',names=r_cols,usecols=range(3),encoding="iso-8859-1") # 我們只使用檔案的前三列
ratings.head()
m_cols=['movie_id','title']
movies=pd.read_csv('./u.item',sep='|',names=m_cols,usecols=range(2),encoding="iso-8859-1") # 只用u.item檔案的前兩列
movies.head()
# 將上面的兩個資料框合併
ratings=pd.merge(movies,ratings)
ratings.head()
# 得到根據看了每部影片的使用者所得到的兩部影片之間的關係
movieratings=ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')
movieratings.head()
# 得到的結果既適用於基於使用者的協同過濾,也適用於基於專案的協同過濾
# 接下來,我們進行基於專案的協同過濾
starwarsratings=movieratings['star wars (1977)']
starwarsratings.head()
# 我們發現很多人都看過star wars 且評分也很高
similarmovies=movieratings.corrwith(starwarsratings) # 計算出星球大戰與其他電影之間的相關係數
similarmovies.dropna() # 刪除缺失值
df=pd.dataframe(similarmovies) # 新建乙個資料框
df.head()
# 對結果進行一下排序,看看那些相似度比較高
similarmovies.sort_values(ascending=false).head(10)
# 結果發現一些冷門電影也同樣被推薦了,這顯然不符合,所以需要找到那些只有少數人評分的電影,將其丟棄掉
import numpy as np
moviestats=ratings.groupby('title').agg()
moviestats.head()
# 然後我們將評分人數少於100的丟棄掉
popularmovies=moviestats['rating']['size']>=100
moviestats[popularmovies].sort_values([('rating','mean')],ascending=false)[:15]
df.sort_values(['similarity'],ascending=false)[:15]
# 最後我們得到乙個比較滿意的效果
# 接下來我們來建立乙個推薦電影的完整系統
ratings.head()
userratings=ratings.pivot_table(index=['user_id'],columns=['title'],values='rating')
userratings.head()
# 計算出整個矩陣中任意兩列之間的相關係數
corrmatrix=userratings.corr()
corrmatrix.head()
# 繼續將少於100人評分的給過濾掉
corrmtrix=userratings.corr(method='pearson',min_periods=100)
corrmatrix.head()
myratings=userratings.loc[0].dropna()
myratings
simcandidates = pd.series()
for i in range(0, len(myratings.index)):
print ("adding sims for " + myratings.index[i] + "...")
# 找出我評價過的電影
sims = corrmatrix[myratings.index[i]].dropna()
# 通過我對電影的評分放大相似度
sims = sims.map(lambda x: x * myratings[i])
# 將分數新增到相似度候選列表中
# 看一下目前的結果
print ("sorting...")
simcandidates.sort_values(inplace = true, ascending = false)
print (simcandidates.head(10))
simcandidates = simcandidates.groupby(simcandidates.index).sum()
simcandidates.sort_values(inplace = true, ascending = false)
simcandidates.head(10)
filteredsims = simcandidates.drop(myratings.index)
filteredsims.head(10)
# 好了,推薦系統完成
資料分析學習筆記
資料分析的常規步驟 1.確定問題 2.分解問題 3.評估問題 4.制定相應的決策 用一句話概括就是 現有的資料能否解決現在的問題,分析問題的瓶頸所在,評估分析的方式方法,找到最合理的資料分析方案進行實施。資料分析的模型沒有統一的模型,每乙個公司都有自己的業務線跟使用者群裡,使用者的屬性不同,行為軌跡...
資料分析學習筆記
row number over partition by col1 col2 order by col1 asc desc col2 asc desc 函式說明 可以用於開窗,排序,計數,返回當前視窗的排序值。引數說明 partition by col1 col2.指定開視窗的列。order by ...
資料分析 學習模組筆記
目錄 了解資料分析 業務理解與學習 分析基礎 統計學機器學習 資料庫技能 sqlhadoop hive 分析工具運用 python excel 筆試面試 業務理解與學習部落格 精益資料分析 書中筆記 本子筆記 區分定類 定序 定距 定比變數 假設檢驗 u檢驗 t檢驗 卡方檢驗 f檢驗 書 a4紙機器...