終極算法 豆瓣是一款Python工具包,通過爬取豆瓣圖書數據和深度學習算法推薦系統,幫助用戶更好地發現、篩選、推薦符合自己喜好的圖書。下面將分別從數據爬取、算法模型和推薦系統三個方面進行詳細闡述。
一、數據爬取
1、使用requests和BeautifulSoup庫進行頁面解析。
import requests
from bs4 import BeautifulSoup
url = 'https://book.douban.com/top250'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
2、使用正則表達式獲取圖書信息。
pattern = re.compile(r'([0-9]+)\.(.*?).*?author">(.*?).*?year">(.*?).*?star">(.*?).*?span> \((.*?)\)', re.S)
items = re.findall(pattern, r.text)
3、將獲取的數據寫入CSV文件。
import csv
with open('books.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['排名', '書名', '作者', '出版日期', '評分', '評價人數', '書籍鏈接'])
for item in items:
writer.writerow([item[0], item[2], item[3], item[4], item[5], item[6], item[1]])
二、算法模型
1、使用Keras庫構建神經網絡模型。
from keras.models import Sequential
from keras.layers import Embedding, Dense, Flatten
model = Sequential()
model.add(Embedding(input_dim=num_words, output_dim=32))
model.add(Flatten())
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
2、訓練模型並保存。
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))
model.save('recommendation_model.h5')
3、在應用程序中加載模型並做出預測。
from keras.models import load_model
model = load_model('recommendation_model.h5')
prediction = model.predict(X_test)
三、推薦系統
1、使用Pandas庫對圖書數據進行處理。
import pandas as pd
df = pd.read_csv('books.csv')
df['評分'] = df['評分'].apply(lambda x: float(x))
df['評價人數'] = df['評價人數'].apply(lambda x: int(re.sub('\D', '', x)))
2、將用戶對圖書的評分轉換為二進制向量。
import numpy as np
def get_binary_vector(user_rating):
binary_vector = np.zeros(len(df), dtype=int)
for i, isbn in enumerate(df.ISBN):
if isbn in user_rating:
binary_vector[i] = user_rating[isbn]
return binary_vector
user_rating = {'0394800133': 5, '1416909427': 4, '059035342X': 3}
user_vector = get_binary_vector(user_rating)
3、計算用戶向量與所有圖書向量的相似度,並選出最相似的n本圖書。
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarities = cosine_similarity(df_matrix, user_vector.reshape(1,-1)).flatten()
related_indexes = cosine_similarities.argsort()[:-n-1:-1]
4、輸出推薦結果。
for i in range(n):
related_index = related_indexes[i]
print(f"推薦圖書{i+1}:{df.iloc[related_index]['書名']},作者:{df.iloc[related_index]['作者']},評分:{df.iloc[related_index]['評分']},評價人數:{df.iloc[related_index]['評價人數']}")
原創文章,作者:GOKGU,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374844.html