Flask和pyecharts實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)可視化
1:數(shù)據(jù)源
Hollywood Movie Dataset: 好萊塢2006-2011數(shù)據(jù)集
實(shí)驗(yàn)?zāi)康? 實(shí)現(xiàn) 統(tǒng)計(jì)2006-2011的數(shù)據(jù)綜合統(tǒng)計(jì)情況,進(jìn)行數(shù)據(jù)可視化
gitee地址:https://gitee.com/dgwcode/an_example_of_py_learning/tree/master/MovieViwer
1.數(shù)據(jù)例子:
Film ,Major Studio,Budget 300,Warner Bros, 300,Warner Bros.,65 3:10 to Yuma,Lionsgate,48 Days of Night,Independent,32 Across the Universe,Independent,45 Alien vs. Predator -- Requiem,Fox,40 Alvin and the Chipmunks,Fox,70 American Gangster,Universal,10 Bee Movie,Paramount,15 Beowulf,Paramount,15 Blades of Glory,Paramount,61
2: 環(huán)境pycharm新建Flask項(xiàng)目
3 數(shù)據(jù)處理:
Film ,Major Studio,Budget 為數(shù)據(jù)的三個(gè)標(biāo)題 截?cái)噙@三個(gè)數(shù)據(jù)就行
import pandas as pd from threading import Timer import math # coding=utf-8 def getTotalData(): data1 = pd.read_csv('static/1.csv'); data2 = pd.read_csv('static/2.csv'); data3 = pd.read_csv('static/3.csv'); data4 = pd.read_csv('static/4.csv'); data5 = pd.read_csv('static/5.csv'); datadic1 = []; datadic2 = []; datadic3 = []; datadic4 = []; datadic5 = []; # 處理數(shù)據(jù).csv for x, y in zip(data1['Major Studio'], data1['Budget']): datadic1.append((x, y)) for x, y in zip(data2['Major Studio'], data2['Budget']): datadic2.append((x, y)) for x, y in zip(data3['Lead Studio'], data3['Budget']): datadic3.append((x, y)) for x, y in zip(data4['Lead Studio'], data4['Budget']): datadic4.append((x, y)) for x, y in zip(data5['Lead Studio'], data5['Budget']): datadic5.append((x, y)) totaldata = []; totaldata.append(datadic1); totaldata.append(datadic2); totaldata.append(datadic3); totaldata.append(datadic4); totaldata.append(datadic5); return totaldata; indexx = 0; curindex = 0; end = 5; returnData = dict(); # 定時(shí)處理數(shù)據(jù) def dataPre(): global indexx, end, curindex, flag, returnData; totalData = getTotalData(); # list[map] # x = len(totalData[0]) + totalData[1].len() + totalData[2].len() + totalData[3].len() + totalData[4].len(); data = totalData[indexx]; # init # print(curindex, end, indexx) # print(len(data)) for k, v in data[curindex:end]: if v == "nan" or math.isnan(v):# 截?cái)?k v中 nan continue; if returnData.get(k, -1) == -1: print(k, v); returnData[k] = v; else: returnData[k] = returnData[k] + v; print(len(returnData)) if end < len(data) - 20: curindex = end; end = end + 20; if end >= len(data) - 20: indexx += 1; curindex = 0; end = 20; t = Timer(2, dataPre) t.start() print(returnData.keys(), end='\n') return returnData; if __name__ == "__main__": dataPre();
4:實(shí)際程序入口
from flask import Flask, render_template from pyecharts.charts import Bar from pyecharts import options as opts import math import dealdata from threading import Timer from pyecharts.globals import ThemeType app = Flask(__name__, static_folder="templates") @app.route('/') def hello_world(): dataPre();# 數(shù)據(jù)入口 return render_template("index.html") # 定義全局索引 indexx = 0; curindex = 0; end = 5; returnData = dict(); # 定時(shí)處理數(shù)據(jù) def dataPre(): global indexx, end, curindex, flag, returnData; totalData = dealdata.getTotalData(); # list[map] # x = len(totalData[0]) + totalData[1].len() + totalData[2].len() + totalData[3].len() + totalData[4].len(); data = totalData[indexx]; #print(totalData) # init # print(curindex, end, indexx) # print(len(data)) for k, v in data[curindex:end]: if v == "nan" or math.isnan(v): # 截?cái)?k v中 nan continue; if returnData.get(k, -1) == -1: returnData[k] = v; else: returnData[k] = returnData[k] + v; print(len(returnData)) # 反應(yīng)長(zhǎng)度關(guān)系 if end < len(data) - 15: # 參數(shù)為截?cái)嗟捻?xiàng)數(shù) 與前端時(shí)間要對(duì)應(yīng) curindex = end; end = end + 15; if end >= len(data) - 15: indexx += 1; curindex = 0; end = 15; t = Timer(1, dataPre) t.start() #print(returnData, end='\n') def bar_reversal_axis() -> Bar: global returnData; #print(sorted(returnData.items(), key=lambda x: x[1])) sorted(returnData.items(), key=lambda x: x[1],reverse=False) #print(returnData.keys()) c = ( Bar({"theme": ThemeType.MACARONS}) .add_xaxis(list(returnData.keys())) .add_yaxis("電影公司名稱:",list(returnData.values()),color="#BF3EFF") .reversal_axis() .set_series_opts(label_opts=opts.LabelOpts(position="right",color="#BF3EFF", font_size=12)) .set_global_opts(title_opts=opts.TitleOpts(title="2007-2011好萊塢電影最受歡迎公司", pos_left='60%',subtitle="當(dāng)前"+str(2006+indexx)+"年")) ) return c; @app.route("/barChart") def index(): c = bar_reversal_axis(); return c.dump_options_with_quotes(); if __name__ == '__main__': app.run();
5: 前端
<html> <head> <meta charset="UTF-8"> <title>Awesome-pyecharts</title> <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script> <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script> <style> div{ padding-left: 100px; } </style> </head> <body> <div id="bar" style="width:1024px; height:1024px;"></div> <script> var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'}); $( function () { fetchData(chart); setInterval(fetchData, 500); } ); function fetchData() { $.ajax({ type: "GET", url: "http://127.0.0.1:5000/barChart", dataType: 'json', success: function (result) { chart.setOption(result); } }); } </script> </body> </html>
6: 擴(kuò)展資料
https://github.com/pyecharts/pyecharts/tree/master/pyecharts/render/templates
{% import 'macro' as macro %} <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{{ chart.page_title }}</title> {{ macro.render_chart_dependencies(chart) }} </head> <body> <div id="{{ chart.chart_id }}" style="width:{{ chart.width }}; height:{{ chart.height }};"></div> <script> var canvas_{{ chart.chart_id }} = document.createElement('canvas'); var mapChart_{{ chart.chart_id }} = echarts.init( canvas_{{ chart.chart_id }}, '{{ chart.theme }}', {width: 4096, height: 2048, renderer: '{{ chart.renderer }}'}); {% for js in chart.js_functions.items %} {{ js }} {% endfor %} var mapOption_{{ chart.chart_id }} = {{ chart.json_contents }}; mapChart_{{ chart.chart_id }}.setOption(mapOption_{{ chart.chart_id }}); var chart_{{ chart.chart_id }} = echarts.init( document.getElementById('{{ chart.chart_id }}'), '{{ chart.theme }}', {renderer: '{{ chart.renderer }}'}); var options_{{ chart.chart_id }} = { "globe": { "show": true, "baseTexture": mapChart_{{ chart.chart_id }}, shading: 'lambert', light: { ambient: { intensity: 0.6 }, main: { intensity: 0.2 } } }}; chart_{{ chart.chart_id }}.setOption(options_{{ chart.chart_id }}); </script> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python爬蟲動(dòng)態(tài)IP代理使用及防止被封的方法
在進(jìn)行網(wǎng)絡(luò)爬蟲時(shí),經(jīng)常會(huì)遇到網(wǎng)站的反爬機(jī)制,其中之一就是通過(guò)IP封禁來(lái)限制爬蟲的訪問(wèn),為了規(guī)避這種限制,使用動(dòng)態(tài)IP代理是一種有效的方法,本文將介紹在Python爬蟲中如何使用動(dòng)態(tài)IP代理,以及一些防止被封的方法,文中有詳細(xì)的代碼講解,需要的朋友可以參考下2023-11-11基于python requests庫(kù)中的代理實(shí)例講解
今天小編就為大家分享一篇基于python requests庫(kù)中的代理實(shí)例講解,具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python實(shí)現(xiàn)某考試系統(tǒng)生成word試卷
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)某考試系統(tǒng)生成word試卷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Sublime?Text4?配置?Python3?環(huán)境、代碼提示、編譯報(bào)錯(cuò)的解決方案
這篇文章主要介紹了Sublime?Text4?配置?Python3?環(huán)境、代碼提示、編譯報(bào)錯(cuò)教程,通過(guò)圖文并茂的形式給大家介紹了配置自動(dòng)代碼提示的方法,需要的朋友可以參考下2022-01-01基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明
這篇文章主要介紹了基于Keras中Conv1D和Conv2D的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python中的相關(guān)分析correlation analysis的實(shí)現(xiàn)
這篇文章主要介紹了Python中的相關(guān)分析correlation analysis的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08