作者|木下瞳 來源|木下學(xué)Python 前言 這次小編帶大家制作實(shí)時(shí)更新的可視化儀表盤。 可視化儀表盤一般以 web 形式展現(xiàn)是比較好的,源數(shù)據(jù)存儲(chǔ)在類似 MySQL 的數(shù)據(jù)庫中的,但為了簡(jiǎn)化問題,怕讀者安裝 MySQL 就耗費(fèi)大量時(shí)間,及不懂 web,所以數(shù)據(jù)源采用 csv,沒有使用 web。 開門見山 實(shí)時(shí)更新的可視化儀表盤 數(shù)據(jù)生成 我們假設(shè)目標(biāo)背景是某西餐廳想通過可視化儀表盤實(shí)時(shí)監(jiān)控餐廳的狀況,便于做出相應(yīng)的人力物力等資源配置。 創(chuàng)建一個(gè) data 文件夾專門用來保存數(shù)據(jù),需要寫一個(gè)實(shí)時(shí)更新插入新數(shù)據(jù)的腳本,用來達(dá)到數(shù)據(jù)實(shí)時(shí)更新的效果。 insert.py 為小編創(chuàng)建的腳本,此腳本先創(chuàng)建 3 張表: food_sale.csv 菜品銷量表,字段:菜品名,單價(jià),銷量(銷量初始值為 0); people.csv 人數(shù)狀況表,字段:就餐人數(shù),排隊(duì)人數(shù),座位數(shù); comment.csv 評(píng)論表,字段:評(píng)分,評(píng)論內(nèi)容(評(píng)論內(nèi)容每次從 comment.txt 中隨機(jī)抽取內(nèi)容作為評(píng)論,comment.txt 為小編隨便復(fù)制的評(píng)論) 創(chuàng)建三張表并插入初始數(shù)據(jù): 創(chuàng)建好以后,就開始插入數(shù)據(jù),數(shù)據(jù)是一直插入的,小編設(shè)置的是間隔 1.5 秒插入一次,這里就用死循環(huán)就可以了,這樣腳本就一直在運(yùn)行插入新的數(shù)據(jù)。 先來插入菜品銷量表的銷量,銷量初始為 0,numpy 隨機(jī)生成和菜品數(shù)量一樣長(zhǎng)范圍在 0-3 之間的數(shù)組,上一次的銷量加上生成的數(shù)組成為新的銷量,更新數(shù)據(jù): 再來插入人數(shù)狀況表,總座位數(shù)設(shè)置為 50,就餐人數(shù)在 0-100 之間隨機(jī)生成,大于 50,那就餐人數(shù)就為 50,排隊(duì)人數(shù)就隨機(jī)生成 10-30 之間的整數(shù),如小于 50,排隊(duì)人數(shù)就為 0,插入數(shù)據(jù): 最后評(píng)論表,評(píng)分 1-5 分隨機(jī)生成,評(píng)論從小編準(zhǔn)備好的 txt 里面隨機(jī)抽取,插入數(shù)據(jù): 好,運(yùn)行此腳本就會(huì)在 data 文件夾生成數(shù)據(jù),且腳本一直運(yùn)行,數(shù)據(jù)一直更新。 可視化儀表盤 先來看看可視化儀表盤由哪些圖構(gòu)成,實(shí)現(xiàn)的代碼獲取源代碼查看,這些圖表都設(shè)置了 id。 菜品銷量排行條形圖: 銷售額完成情況儀表盤: 就餐人數(shù)占總座位數(shù)的比重的水球圖: 評(píng)分占比玫瑰圖: ![]() 評(píng)論詞云: ![]() 人數(shù)座位分布: ![]() 這些生成代碼全都封裝成函數(shù),創(chuàng)建 page 對(duì)象調(diào)用它們,生成的可視化全部在 page.html 中,布局排版,保存 json文件,不明白的看文章開頭鏈接的文章。 打開 json 文件可以看到有 cid 字段,這就是每張圖表的 id,我們?cè)诓季趾煤?,選中一張圖表,右鍵【檢查】,可以查看它的 id,此 id 在 json 中對(duì)應(yīng)的地方找到,重新設(shè)置 id,假如此時(shí)右鍵后看到的 id 為 123,那在json 中找到 uid 為 123 的值,修改 uid 為1,在代碼中找到此圖的代碼,設(shè)置 chart_id 為 1,依次把所有圖表的都修改: ![]() ![]() ![]() id 全部修改好后,調(diào)用就可以生成儀表盤了,page.html 為生成的初始可視化圖表,chart_config.json 布局文件,my_charts.html 最終可視化儀表盤。 最后需要實(shí)現(xiàn)實(shí)時(shí)刷新的功能,在最終可視化儀表盤中的 html 文件中添加一行刷新功能 html 代碼即可,最后死循環(huán)讀取,生成,刷新: ![]() 最后運(yùn)行先運(yùn)行 insert.py,再運(yùn)行 visual.py,打開 my_charts.html 就可以看到每隔 3 秒自動(dòng)刷新一次,就如“開門見山”所示。 源碼獲取 |
|