基於 Flask 與 MySQL 實現番劇推薦系統

一、項目簡介

1.1 介紹

本項目是基於 Python 的 Flask 框架和 MySQL 實現的簡單的番劇推薦系統。在課程中我們將學到如何用 Python 連接 MySQL 資料庫,如何查詢和展示數據及設計推薦演算法等知識。

課程由AlbertWY發布在實驗樓,完整教程及在線練習地址:基於 Flask 與 MySQL 實現番劇推薦系統。

1.2 知識點

本實驗中我們將學習並實踐以下知識點:

  • Python 語言基礎
  • SQL 語言基礎
  • HTML 與 CSS 基礎
  • 資料庫表的拆分與設計
  • Flask 框架的使用
  • MySQL 的 Python 介面的使用
  • 複雜查詢語句的使用
  • 推薦演算法的簡易設計

1.3 效果圖

本課程將最終將實現下面的效果,輸入 User Number,這裡使用數字代替,頁面輸出為番劇名稱和描述,使用字母代替:

二、基礎知識

2.1 認識Flask框架

Flask 是一個 Python 語言的微型網路開發框架。微框架中的 「微」 意味著 Flask 旨在保持核心簡單而易於擴展。Flask 不會替你做出太多決策——比如使用何種資料庫。而那些 Flask 所選擇的——比如使用何種模板引擎則很容易替換。

Flask 基於 WerkzeugWSGI 工具箱和 Jinja2 模板引擎。實驗中你將會知道 Jinja2 給予我們極大的方便,比如可以傳遞變數參數等。讓我們的表示層動態的展示你想展示的信息,更詳細的說明可參考 Python Flask Web框架。

2.2 認識 MySQL 和簡單的 SQL 語句

MySQL 作為一種關係型資料庫,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。並且實驗樓已經安裝好 MySQL,故實驗時只需使用即可。

我們要用到的 SQL 語句包括 select 語句,insert into 語句,create 語句,order by 子句, Limit限制語法,natural join 語法。由於會涉及到較複雜查詢,對於上述 SQL 用法不太熟悉或不會的同學,建議去學習一下實驗樓的 SQL 課程。

三、模塊設計及環境部署

3.1 代碼設計

本課程中我們將代碼設計為 app.py與recommend.py 兩個模塊:

  • app.py 用於根據不同請求來調用不同功能,即 Flask 的主體。
  • recommend.py 用於完成推薦功能,其中包含了推薦演算法的實現,以及與資料庫進行交互。

3.2 資料庫表設計

由業務邏輯出發,可發現實體類 user(用戶) 和 anime(番劇),弱實體類 style,聯繫集 user_anime(記錄用戶喜歡的番劇),anime_style(番劇的標籤)。

3.3 環境部署及測試

本節內容為實驗完成環境的部署,以及對環境進行了簡單的測試。並且在 MySQL 中建立了表,插入了相關的測試數據。詳細的部署和測試步驟可以在實驗一中查看並在線實踐。

四、簡單推薦演算法實現

本節實驗中我們實現的推薦演算法比較簡單,基本思路:

  1. 找到用戶所喜愛的番劇
  2. 分析這些番劇的類別(一個番劇可能有多個標籤),進行統計排序
  3. 找到前三個標籤,從資料庫中找到同時具有這三個標籤的番劇(喜歡的不能再推薦)
  4. 將番劇相關信息(name,brief)進行展示

SQL 資料庫操作的實現上述的思路1 和 思路2:

下面代碼實現得到用戶所喜歡top3類型n sql=n select style_id fromn (select user_id,style_id from n (select user_id,anime_id as id from user_anime where user_id=%s) as s n natural join anime natural join n (select anime_id as id,style_id from anime_style) as nn )as temp group by style_id order by count(user_id) desc limit 3;%usern

其中下圖所划去的一行內容對應思路1,即從 user_anime 表中查詢用戶和喜歡的番劇數據對:

(select user_id,anime_id as id from user_anime where user_id=%s) as sn

剩下的兩個 select 操作由以下代碼共同完成:

上圖中的紅線部分較重要,其中第二個紅線部分用了 Python 的 Set 數據結構以取交集。love 是喜歡番劇的列表,choice() 函數是隨機取一個。while 循環中保證不取與喜歡的重複的,這裡還考慮一個問題,就是你得到的交集是喜歡集合的子集,如果不加判斷將會導致死循環,所以這種情況拿出來判斷,如果出現這種情況就從用戶最喜歡類別中拿出一個番劇。

本項目的完整代碼及實現步驟可以在實驗樓查看並在線完成:基於 Flask 與 MySQL 實現番劇推薦系統

更多Python經典項目:Python全部 - 課程


推薦閱讀:

使用Python計算文章中的字詞頻率丨學習筆記和反思
PyQt5系列教程(8):標準輸入對話框

TAG:Python | 编程 | Python入门 |