APP下载

基于Python的数据分析与可视化平台研究

2019-10-21宋永生黄蓉美王军

现代信息科技 2019年21期
关键词:可视化

宋永生 黄蓉美 王军

摘  要:数据分析与可视化有助于人们从繁杂的数据中快速获取有用的信息。利用Python中的Pandas对结构化数据进行分析,采用Matplotlib进行图表展示;从非结构化数据中提取文本,利用Jieba对文本进行分词处理,利用Wordcloud进行词云展示。利用Flask对上述图表及词云进行Web发布,构建数据分析与可视化平台,成本较低,简便易用。

关键词:可视化;Pandas;Matplotlib;Jieba;Wordcloud;

中图分类号:TP312.1      文献标识码:A 文章编号:2096-4706(2019)21-0007-03

Abstract:Data analysis and visualization can help people get useful information from complex data quickly. We use Pandas in Python to analyze the structured data,and use Matplotlib to display the charts;we extract the text from the unstructured data,use Jieba to segment the text,and use Wordcloud to display the word cloud. Flask is used to publish the above charts and word cloud on the Web and build a data analysis and visualization platform,which is low cost and easy to use.

Keywords:visualization;Pandas;Matplotlib;Jieba;Wordcloud

0  引  言

近年来,随着信息技术的飞速发展,各种应用系统如雨后春笋般涌现。高校中的软件系统主要有教务系统、办公系统及学工系统等,这些系统的数据主要是存储于数据库中的结构化数据。电脑或服务器上则存放着大量的视频、PPT课件、PDF文档、Word文档等非结构化数据。随着时间的推移,各类非结构化数据及结构化数据越来越多。非结构化数据以文件的形式进行存储,比较零碎,不便于检索。这些数据中蕴含的有用信息得不到充分利用,数据分析的需求越来越大。数据分析是指采用一定的方法对收集到的数据进行分析,提取其中有用信息的过程。数据可视化是采用图表等方式对数据进行展示,有助于人们进行决策。

目前数据分析商用软件有Matlab、SPSS和SAS,然而这些软件费用高昂,安装包较大,安装过程复杂[1]。Python是一种面向对象的跨平台解释型高级程序设计语言,Python语言简洁明了、便于扩展,具有庞大的标准库和第三方库,生态极为丰富。越来越多的研究人员开始使用Python进行数据分析,Python也逐渐成为数据分析领域的首选工具[2]。

本文尝试采用Python中的数据分析及可视化库,以较小的成本构建数据分析与可视化平台。Pandas是一种基于NumPy的高效结构化数据分析工具,它在NumPy的基础上提供了DataFrame数据结构,并以此为核心提供了大量的数据的输入输出、清洗、处理和分析函数。结构化数据的可视化可以借助Matplotlib实现。非结构化数据主要有视频、PPT课件、PDF文档及Word文档等。为了便于分析,本文尝试对视频、PPT课件、PDF文檔、Word文档这些非结构化数据进行转换,提取其中的文本,借助Jieba对文本首先进行分词处理,然后借助Wordcloud以词云的方式进行展示。Matplotlib生成的图表及Wordcloud生成的词云都为本地文件,需要借助于Flask进行发布,便于在浏览器上进行展示。

1  平台总体架构

数据分析与可视化平台分为数据采集模块、数据分析模块及分析结果展示模块三个部分。平台采用Python 3.5进行开发,Web开发框架选用Flask,数据库选用MySQL。结构化数据的分析采用Pandas,可视化选用Matplotlib;非结构化数据的分词处理采用Jieba,词云展示采用Wordcloud。集成开发环境选用PyCharm 2018。

2  数据处理流程

数据分析与可视化平台中的数据处理流程如图1所示。

3  结构化数据处理

3.1  数据采集及预处理

在数据分析之前,首先需要采集数据,可以使用Pandas中的read_sql函数从数据库中读取数据。Pandas中的DataFrame有行索引和列索引,使用DataFrame来存储数据库表中的数据十分方便。常用的数据库有Oracle、SQL Server及MySQL等,Pandas可以通过相应的数据库驱动直接连接这些数据库,将数据读入DataFrame中。为了便于数据分析,可以将业务系统数据库的连接字符串存入数据分析与可视化平台的数据库中,并在业务系统的数据库中创建相应的视图。此外,Pandas可以通过read_excel函数读取Excel文件中的数据。

采集来的数据经常存在一些问题,比如数据缺失、数据重复及数据异常。在正式的数据分析之前,需要对这些存在问题的数据进行预处理。对于数据缺失常采用删除或填充操作,数据重复一般做删除操作。分析数据异常值出现原因,然后对其删除、填充或校正。

3.2  数据分析

数据分析先要熟悉数据,可以通过Pandas中的head预览前几行,利用shape获取数据表大小,利用info获取数据类型,利用describe获取数值分布情况。把需要分析的数据筛选出来,进行数据运算、数据分组及联合查询等操作。利用Pandas的to_sql函数可以将分析结果写入数据分析与可视化平台的数据库中,便于在浏览器上展示。

3.3  数据可视化

Matplotlib是Python中最著名的绘图库,可以绘制各种精美的图表,以硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。Matplotlib提供了一整套和Matlab相似的命令API,文档相当完备,十分适合交互式绘图,可以快速生成柱状图、散点图、饼状图、折线图、等值线图和三角网格等。Matplotlib可以将Pandas的分析结果直接可视化,也可以从数据分析与可视化平台的数据库中读取数据进行可视化。

4  非结构化数据处理

4.1  非结构化数据的采集及预处理

视频、PDF文档、Word文档、PPT文档等非结构化数据多以文件的形式存储,文件繁多琐碎,检索非常麻烦。对于非结构化数据,为了便于分析,可以提取其文本内容,然后对文本内容进行分析处理。对视频文件,可以利用Python中的MoviePy库,从视频文件中抽取音频,然后调用讯飞开放平台的语音转写功能,将语音转为文本;对于PDF文件,可以利用Python中的pdfminer3k库,提取PDF文件中的文本内容;对于Word文档文件,可以利用Python中的python-docx库提取Word文档中的文本内容;对于PPT课件,可以利用Python中的python-pptx库提取PPT中的文本内容。

4.2  词频统计并进行可视化

汉语以字为基本书写单位,词语之间没有明显的区分标记。中文文本的词频统计,首先需要进行分词处理,自动地对中文文本进行词语的切分[3]。Jieba是Python中一个常用的中文分词库,利用词库将需要分词的内容与词库进行对比,找到最大概率的词组。Jieba支持精确模式、全模式及搜索引擎模式等三种中文分词模式,支持繁体分词及自定义词典,以便包含Jieba词库里没有的词。虽然Jieba有新词识别能力,但自行添加新詞可以保证更高的正确率。

词云,也叫文字云,以词语为单位,对文本中出现频率较高的关键词予以视觉上的突出展现,对关键词进行渲染,形成类似云的彩色图片。词云可以过滤掉大量低频低质的文本信息,使得浏览者只要一眼扫过就可领略文本的主旨。词云已成为文本数据可视化的一种常用方式[4]。Wordcloud是Python中一个根据文本生成词云的库。通过词云图,一眼扫过便知道视频、PDF、Word、PPT等非结构化数据的主要内容是什么。为了便于对非结构化数据进行管理,将非结构化数据文件、对应文本、词云图等文件的路径信息,出现频率较高的关键词存入数据分析与可视化平台的数据库中。

5  将图像进行Web发布

由于Matplotlib生成的图表及Wordcloud生成的词云图都是本地图像,不便于用户在远程通过浏览器查看,因此需要将已生成的图表及词云图进行Web发布。Flask是一个小而精的轻量级Web框架,其WSGI工具箱采用Werkzeug,模板引擎使用Jinja2。Flask不包含数据库的抽象访问层。Flask-SQLAlchemy是一个Flask扩展,在SQLAlchemy基础上,简化了在Flask程序中使用SQLAlchemy的操作。通过Flask-SQLAlchemy,可以方便地对数据分析与可视化平台的数据库中的数据进行操作。

对于结构化数据,为了便于客户端浏览器的交互,客户端选择图表类型、参数及待可视化的数据,服务器端根据参数等生成相应的图表。由于图表随着客户端的参数等的变化而变化,所以图表不宜保存在服务器磁盘上,而是在内存中直接将Matplotlib生成的图表经过Base64编码,传输到Web页面中,减少服务器的IO操作,提高了系统的响应速度。

# 写入内存,使用BytesIO对象将png图像的内容保存在内存中

buf =BytesIO()

plt.savefig(buf , format='png')

# 内存中的图像buf转换为base64编码

save_file_base64 = base64.b64encode(buf.getvalue()).decode('utf8')

data = base64.encodebytes(buf.getvalue()).decode('utf-8')

plt.close()

buf.close()

return html.format(data)

对于非结构化数据,用户可以通过浏览器上传或指定服务器上待分析的非结构化数据。服务器端首先从非结构化数据中提取文本信息,然后对文本进行词频统计并生成词云。由于非结构化数据对应文本的词云是固定的,所以将词云图保存在服务器端。浏览器端发起请求后,在Flask的Web页面中直接加载这些生成好的词云图返回给浏览器。此外还需利用Flask实现服务器上的非结构化数据的Web检索功能。

6  实验分析

本文服务器选用华为云服务器,配置为8核CPU,32GB内存,1TB SSD磁盘,100Mbps带宽,操作系统选用CentOS7.5 64位,安装MySQL 5.6、Python 3.5、Pip9.0、Pandas 0.22、Matplotlib 2.2、Jieba 0.39、Wordcloud 1.5、Flask1.0、Flask-SQLAlchemy 2.0、各种非结构化数据的文本提取库及数据库驱动等,采用Gunicorn 19.8做WSGI容器来部署Flask程序,Web服务器选用Nginx 1.12。

在结构化数据分析中,用户可以选择待可视化的数据及图表类型,比如用柱状图展示招生数据,然后选择生源地、起始年份及结束年份,即可获得不同年份的招生人数柱状图,如图2所示。

在非结构化数据分析中,用户可以上传非结构化数据或选择服务器上的非结构化数据,比如上传《2019年政府工作报告》PDF文档,服务器端提取该PDF文档的文本内容,对文本内容分词处理之后进行词频统计,以词云的方式对其展示,如图3所示。用户还可以通过关键词检索服务器上的非结构化数据。

7  结  论

面对越来越多的结构化数据及非结构化数据,数据分析和可视化变得非常必要。本文利用Python构建了数据分析与可视化平台。可由专业数据分析人员利用Pandas对结构化数据进行预处理并分析,分析结果存入数据分析与可视化平台的数据库中,利用Matplotlib进行数据的可视化,并将图表通过Flask发布。用户在浏览器上选择待可视化的结构化数据、图表类型及参数,即可在浏览器中查看该结构化数据的图表。用户上传待分析的非结构化数据,服务器端自动将其转换文本,对文本进行词频统计,以词云的方式对其进行展示,在浏览器中可以查看词云图。为了便于对非结构化数据的管理,将非结构化数据、对应的文本、词云图的路径信息及出现频率较高的关键词存入数据库,利用Flask实现非结构化数据检索功能。

本文只提取视频的音频部分对应的文本内容,可能会丢弃很多有用的信息,未来可以利用深度学习技术对视频等非结构化数据进行深入的分析与挖掘。

参考文献:

[1] 宋永生,吴新华.基于Python的Moodle学习平台日志分析 [J].计算机时代,2018(10):19-21+25.

[2] 张若愚.Python科学计算:第2版 [M].北京:清华大学出版社,2016.

[3] 祝永志,荆静.基于Python语言的中文分词技术的研究 [J].通信技术,2019,52(7):1612-1619.

[4] 严明,郑昌兴.Python环境下的文本分词与词云制作 [J].现代计算机(专业版),2018(34):86-89.

作者简介:宋永生(1984-),男,汉族,江苏徐州人,就职于图文信息中心,教师,工程师,硕士,研究方向:机器学习及物联网技术研究。

猜你喜欢

可视化
数据可视化设计在美妆类APP中的应用
地理可视化作业设计研究
基于文献可视化的国内港口建设研究综述
画图:数学思维可视化的有效工具
思维可视化
基于GeoGebra的高中物理可视化教学研究
基于物联网的IT运维可视化管理系统设计与实现
复变函数级数展开的可视化实验教学
复变函数级数展开的可视化实验教学
复变函数共形映射的可视化实验教学