实训日记 | Day 11. 数据的可视化
总述
2020年8月3日。到了实训的第三周的第一天。
今天主要讲了如何用echarts实现数据的可视化。
主要的活动有:
- 数据打包
- echarts远程包
- echarts本地包(重点)
数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息。但是,这并不就意味着数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味,或者是为了看上去绚丽多彩而显得极端复杂。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。然而,设计人员往往并不能很好地把握设计与功能之间的平衡,从而创造出华而不实的数据可视化形式,无法达到其主要目的,也就是传达与沟通信息。
因此,我们不仅要掌握数据可视化的办法,也更要懂得如何让组织形式使得传达与沟通的效益最大化。
今天圆满地完成了主要工作,不仅完成了一边听课一边记录笔记,而且课中也没有遇到什么疑难杂症而纠结良久。
今天的操作流程,一言以蔽之。对于本地存在的Excel数据、CSV数据等等,可以使用pandas或xlrd来进行提取,而后用echarts把它绘制在网页上。
pandas&xlrd
安装流程
在Terminal中键入pip install pandas即可完成pandas的安装(如果没装过numpy和dateutil也会一并装了)。
出现了以下字样的安装成功信息。
1 | Successfully installed numpy-1.19.1 pandas-1.1.0 python-dateutil-2.8.1 |
再在Terminal中键入pip install xlrd即可完成xlrd的安装。
数据的获取
除了可以用爬虫自己获取网页上的数据外,还可以上阿里云-天池来获取数据。
为了方便练习,选择一些数据量不大的数据集。这里老师选择了NBA数据中的球员勒布朗-詹姆斯的数据。
将网页表格复制到Excel中,得到如下结果。

应用伊始
键入python manage.py startapp echarts新建一个应用。
将james.xlsx复制到该应用的文件夹下。

在 tests.py 文件中,键入如下代码以进行测试。
1 | from django.test import TestCase |
可以看到输出结果为如下所示。

DataFrame
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。[1]
将刚刚的测试代码修改为:
1 | from django.test import TestCase |
输出结果为:

个人觉得用不用DataFrame,区别仅在于会不会去掉NaN数据。
views的配置
按照之前的实训经验,完成views的配置。
为了使列表的数据以赛季递增,在列表后加入[::-1]完成倒装。
上课时,我以为用
list.reverse(),但是reverse()方法是没有返回值的。
这意味着,不能直接将这个方法写在
所以为使代码简短,使用[::-1]确实是最佳解。
1 | from django.shortcuts import render |
为解决这个错误,将代码更改为:
1 | from django.shortcuts import render |
这样就可以成功获取数据了。
os.path.abspath(__file__)
功能:获取当前运行文件的绝对路径
语法:os.path.dirname(path)
功能:去掉文件名,返回目录

完成后,为了和下文的HTML文件对接,还需要在view.py中加入:
1 | def echarts_page(request): |
urls的配置
在项目的路由配置里,加入:
1 | path('echarts/',include('echarts.urls')), |
在echarts应用的路由里,加入:
1 | path('api_echarts/',api_echarts), |
echarts远程包
在templates文件夹下新建一个echarts.html

在头部,添加对jQuery和echarts的引用。
1 | <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
接下来,再在body部分建一个容器来使用echarts。
1 | <div id="box" style="width:900px;height:500px;background: rgba(106,11,233,0.4)"></div> |
然后,新建一个script标签,在其中键入以下代码。
1 | var mycharts = echarts.init(document.getElementById('box')); //mycharts的内容放在box容器里 |
打开echarts官网获取一个实例的代码。


复制左边的代码,到script标签的funtion(res)中,修改数据部分为项目的内容。
1 | option = { |
然后在之后加入以下代码来绘制图形。结果如下图所示。
1 | mycharts.setOption(option); |

绘制表格
在HTML的body部分加入以下代码:
1 | <!--table是表格标签--> |
<thead>标签定义表格的表头。该标签用于组合 HTML 表格的表头内容。- thead 元素应该与 tbody 和 tfoot 元素结合起来使用。
- tbody 元素用于对 HTML 表格中的主体内容进行分组,而 tfoot 元素用于对 HTML 表格中的表注(页脚)内容进行分组。
- tr 代表一行;td 代表一列。
- table的属性中有一个
border,默认border=“0”,为无边框。这里就是无边框。
在Script标签中加入以下代码:
1 | for(var i=0;i<res.score.length;i++){ |
结果如图所示。

echarts本地包
重点。
调用本地资源,不需要网络。
拓展-静态文件的展示、图片或者文件的上传
调用本地图片
如果直接在网页中写以下代码时,浏览器并不能找到该资源。因此需进行路由配置。
1 | <img src="/bg1.jpg"> |
注意到settings.py里有如下内容。因此在项目的根目录新建一个static文件夹。

然后在这句代码的下面,加入下面的代码:
1 | STATICFILES_DIRS=[ |
对于这段代码,援引一段来自Django官方文档的解释。
提供文件/Serving the files
In addition to these configuration steps, you’ll also need to actually serve the static files. During development, if you use django.contrib.staticfiles, this will be done automatically by runserver when DEBUG is set to True (see django.contrib.staticfiles.views.serve()). This method is grossly inefficient and probably insecure, so it is unsuitable for production. See Deploying static files for proper strategies to serve static files in production environments.除了这些配置步骤之外,您还需要实际提供静态文件。
在开发过程中,如果使用django.contrib.staticfiles,这将是自动完成的runserver,当DEBUG设置为True(见django.contrib.staticfiles.views.serve())。
此方法效率极低,并且可能不安全,因此不适合生产。
有关在生产环境中提供静态文件的正确策略,请参阅部署静态文件。
然后在urls.py中配置static文件夹资源的路由。
先引入下面这几个包并获取项目绝对路径。
1 | from django.urls import re_path #正则表达式路径 |
然后配置下面这条路由。
1 | path(r'^static/(?<path>.*)$',static.serve,{'document_root':os.path.join(BASE_DIR,'static')}), |
完成后,图片就可以正常的访问了。


调用本地JS或CSS
在配置完毕上面的路由之后。也可以调用本地的JS或CSS资源。
以jQuery为例,直接打开其CDN链接。复制其中的内容到一个本地的js文件中放在static文件夹下即可。
1 | <script src="/static/js/jquery.min.js"></script> |
echarts增加细节
更多的细节可以查询echarts的API手册。
1 | option = { |







