# FlaskVisualizing **Repository Path**: laity-champion/flask-visualizing ## Basic Information - **Project Name**: FlaskVisualizing - **Description**: 应用Python爬虫、Flask、Echarts、WordCloud,可视化 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2022-01-06 - **Last Updated**: 2024-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: Flask, Sqlite, Echarts ## README # 数据可视化 ## 商业无罪,健康万岁,大家好!我是Laity ## 1.Flask入门 ### 1.1 关于Flask #### 1.1.1 了解框架 Flask作为Web框架,它的作用主要是为了开发Web应用程序。 Flask框架的核心就是 **Werkzeug** 和 **Jinja2** 。 Flask诞生于2010年,是**Armin ronacher**(人名)用Python语言基于**Werkzeug**工具箱编写的轻量级Web开发框架。 Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。 其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架的核心。 Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。 - 与Django对比 ```python django提供了: django-admin快速创建项目工程目录 manage.py 管理项目工程 orm模型(数据库抽象层) admin后台管理站点 缓存机制 文件存储系统 用户认证系统 而这些,flask都没有,都需要扩展包来提供。 ``` - Flask扩展包 ```python Flask-SQLalchemy:操作数据库; Flask-migrate:管理迁移数据库; Flask-Mail:邮件; Flask-WTF:表单; Flask-script:插入脚本; Flask-Login:认证用户状态; Flask-RESTful:开发REST API的工具; Flask-Bootstrap:集成前端Twitter Bootstrap框架; Flask-Moment:本地化日期和时间; ``` - 安装使用Flask ```python 1. 安装flaskpip3 install flask 2. 第一个Flask程序 Flask程序运行过程: 所有Flask程序必须有一个程序实例。 1.Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。此时,Web服务器使用WSGI(Web Server Gateway Interface)协议, 把来自客户端的所有请求都交给Flask程序实例。WSGI是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口, 它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。 2.程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。 在Flask程序中,路由的实现一般是通过程序实例的route装饰器实现。route装饰器内部会调用add_url_route()方法实现路由注册。 3.调用视图函数,获取响应数据后,把数据传入HTML模板文件中,模板引擎负责渲染响应数据,然后由Flask返回响应数据给浏览器, 最后浏览器处理返回的结果显示给客户端。 ``` ##### 创建一个flask项目,然后创建app.py文件。# 导入Flask类 ```python from flask import Flask from flask import render_template # 渲染模板 # Flask类接收一个参数__name__ app = Flask(__name__) # 装饰器的作用是将路由映射到视图函数index @app.route('/') def hello_world(): return 'Hello World!' @app.route("/index") def Laity(): return "Laity" # 通过访问路径,获取用户的字符串参数 @app.route("/user/") def welcome1(name): return '你好!%s' % name # 通过访问路径,获取用户的整形参数 @app.route("/user/") def welcome2(id): return '你好!%s号会员' % id # 返回给用户渲染后的网页文件 @app.route("/login/") def login(): return render_template("login.html") # Flask应用程序实例的run方法启动WEB服务器 if __name__ == '__main__': app.run() ``` ```python # 向页面传递变量 @app.route("/time/") def index2(): time = datetime.date.today() # 普通变量 names = ["Laity", "Jge", "lily"] # 列表类型 dic = {"任务": "做项目", "时间": "24小时"} return render_template("login.html", var=time, names=names, dic=dic) ``` ```python html模板 https://github.com/technext/Flusk/archive/master.zip https://themewagon.com/themes/flusk-responsive-multi-purpose-website-template/ ``` ## 2.Echarts应用 ​ 官网中文地址:https://echarts.apache.org/zh/index.html ### 2.1 Echarts示例 ​ 学习地址:https://echarts.apache.org/handbook/zh/get-started/ #### 2.1.1 引入Echarts ```html ``` ## 3.WordCloud应用 ​ 作用:当我们手中有一篇文档,比如书籍、小说、电影剧本,若想快速了解其主要内容是什么,则可以采用绘制 WordCloud [词云图](https://so.csdn.net/so/search?q=词云图),显示主要的关键词(高频词)这种方式,非常方便。本文将介绍常见的英文和中文文本的词云图绘制,以及 Frequency 频词频词云图。 ### 3.1WordCloud库下载 ```python pip install wordcloud ``` 学习文档:http://amueller.github.io/word_cloud/auto_examples/simple.html ### 3.2WordCloud库使用 ```python # -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt # 打开文本 text = open('xyj.txt').read() # 生成对象 wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 保存到文件 wc.to_file('wordcloud.png') # 生成图像是透明的 ``` 我们发现生成的词云有的不是词语,故我们增加jieba分词 ```python # -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 wc = WordCloud(font_path='Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 保存到文件 wc.to_file('wordcloud3.png') ``` 生成图像形式 ```python # -*- coding: utf-8 -*- from wordcloud import WordCloud from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 mask = np.array(Image.open("black_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud4.png') ``` ```python # -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba # 打开文本 text = open('xyj.txt').read() # 中文分词 text = ' '.join(jieba.cut(text)) print(text[:100]) # 生成对象 mask = np.array(Image.open("color_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate(text) # 从图片中生成颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud5.png') ``` ```python # -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba.analyse # 打开文本 text = open('xyj.txt').read() # 提取关键词和权重 freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True) print(freq[:20]) freq = {i[0]: i[1] for i in freq} # 生成对象 mask = np.array(Image.open("color_mask.png")) wc = WordCloud(mask=mask, font_path='Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq) # 从图片中生成颜色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) # 显示词云 plt.imshow(wc, interpolation='bilinear') plt.axis("off") plt.show() # 保存到文件 wc.to_file('wordcloud7.png') ```