数据可视化

  1. Flask入门
  2. Echarts应用
  3. WorldCloud应用

Flask框架的核心就是Werkzeug和Jinjia2

from flask import Flask

app = Flask(__name__)

#路由解析,通过用户访问的路径匹配相应的函数
 @app.route('/')
 def hello_world():
     return 'Hello World!'
'''
#debug模式开启
@app.route('/index')
def hello():
    return '你好'
#通过访问路径,获取用户的字符串参数
@app.route("/user/<name>")
def welcom(name):
    return '你好,%s'%name
#通过访问路径,获取用户的数字类型参数     此外还有float类型
@app.route("/user/<int:id>")
def welcom1(id):
    return '你好,%d号的会员'%id
'''

#路由路径不能重复,用户通过唯一路径访问特定函数

if __name__ == '__main__':
    app.run()

jinjia2返回渲染文件

from flask import Flask
from flask import render_template
import datetime

#-------------------
@app.route('/')
# @app.route('/index')
def index():
    time = datetime.date.today()  # 普通变量
    user = {'nickname': 'Rosie'} # fake user
    task = {'任务':"打扫","限时":"三小时"}
    return render_template("index.html",
        title = 'Home',
        name=list1,
        user = user,
        time=time,
        task = task)
#------------------
if __name__ == '__main__':
    app.run()

在对应的html文件中,var变量用{{var}}表示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
  <body>
      <h1>Hello, {{user.nickname}}!</h1>
      <a>现在是{{ time }}</a>
      <a>今天值班的有:</a>
  {% for data in name %}    <!--用大括号和百分号控制起来是控制结构-->
     <li>{{ data }}</li>
  {% endfor %}
  <a>任务:</a><br/>
  <!--了解如何在页面打印表格以及如何迭代-->
  <table border="1">
      <!--[(key,value),(key,value),(key,value)]-->
      {% for key,value in task.items() %}
      <tr>
          <td>{{ key }}</td>
          <td>{{ value }}</td>
      </tr>
      {% endfor %}
  </table>

  </body>
</html>

表单的提交,可以通过路径跳转

from flask import Flask
from flask import render_template,request
import datetime

app = Flask(__name__)
#------------------------
#表单提交
@app.route('/test/register')
def register():
    return render_template("register.html")
#接收表单提交的路由,需要指定methods为POST
@app.route('/result',methods = ['POST','GET'])
def result():       #函数不能重名
    if request.method == 'POST':
        result = request.form #表单内容
    return render_template("test/result.html",result=result)
    #跳转到result.html,并且将表单内容传给result

#---------------------
if __name__ == '__main__':
    app.run(debug=True)

register.html

表单提交的方法是"POST"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="{{ url_for('result') }}" method="post">
<!--url_for('文件'),动态寻找路径,不用写死-->
#<form action="http://localhost:5000/result" method="post">
    <p>姓名:  <input type="text" name="姓名"></p>
    <p>年龄:  <input type="text" name="年龄"></p>
    <p>性别:  <input type="text" name="性别"></p>
    <p>地址:  <input type="text" name="地址"></p>
    <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

 result.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a>表单内容</a>
<table border="1">
      <!--[(key,value),(key,value),(key,value)]-->
      {% for key,value in result.items() %}
      <tr>
          <th>{{ key }}</th>
          <td>{{ value }}</td>
      </tr>
      {% endfor %}
  </table>
</body>
</html>

右图分别为:

register.html

result.html

将数据库的数据传入:app.py代码

from flask import Flask,render_template

app = Flask(__name__)

@app.route('/movie')
def movie():
    datalist = []
    conn = sqlite3.connect("movie.db")#同目录下的数据库
    cur = conn.cursor()
    sql = "select * from movie250"
    data = cur.execute(sql)
    for item in data:
        datalist.append(item)
    cur.close()
    conn.close()
    return render_template("movie.html",movies = datalist)


if __name__ == '__main__':
    app.run()

循环写入列表

            {% for movie in movies %}

                <tr>
                    <td>{{ movie[0] }}</td>
                     <td>
                    <a href="{{ movie[1] }}",target_="_blank">
                        {{ movie[3] }}
                    </a>
                    </td>
                    <td>{{ movie[4] }}</td>
                    <td>{{ movie[5] }}</td>
                    <td>{{ movie[6] }}</td>
                    <td>{{ movie[7] }}</td>
                    <td>{{ movie[8] }}</td>
                </tr>
                 {% endfor %}

Echarts应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- 引入 ECharts 文件 -->
    <script src="../static/assets/js/echarts.min.js"></script>
<!--1,引入js文件-->
</head>
<body>
    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM,图标显示的位置 -->
    <div id="main1" style="width: 600px;height:400px;"></div>

    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main1'));
        //中间代码省略
        //
        //
    </script>
</body>
</html>

WordCloud应用

生成指定样式的图文

import jieba                        #分词
from matplotlib import pyplot as plt    #绘图,数据可视化
from wordcloud import WordCloud     #词云
from PIL import Image               #图片处理
import numpy as np                  #矩阵运算
import sqlite3                      #数据库


text = " "
con = sqlite3.connect("movie.db")
cur = con.cursor()
sql = 'select introduction from movie250'
data = cur.execute(sql)
for item in data:
    text = text+item[0]
print(text)
cur.close()
con.close()

#分词
cut = jieba.cut(text)
string = ' '.join(cut)
print(string)

#绘图
img = Image.open(r'../static/assets/images/bear.jpg')#打开遮罩图片
img_array = np.array(img)#图片转换为数组
wc = WordCloud(
    background_color='white',
    mask=img_array,
    font_path="msyh.ttc" )    #字体所在位置:C:\windows\Fonts
wc.generate_from_text(string)

#绘制图片
fig = plt.figure()
plt.imshow(wc)
plt.axis('off')#是否显示坐标轴
#plt.show()显示生成的词云图片

#输出词云图片的文件
plt.savefig(r'../static/assets',dpi = 500)#dpi指的是清晰度


此间sqlite出现not such table的问题,查看默认路径会发现他自动生成了新的空白数据库,可以将目的数据库替换空白数据库解决问题。

效果:

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值