任夏荔
(山西职业技术学院 山西省太原市 030006)
众所周知,中国传统文化博大精深,源远流长, 古诗词是中华民族传统文化重要的文化载体,并且以其独特的形态,传递给人们不同的人文内涵,从而形成了我国文化史上一道靓丽的风景线。
随着大数据技术的发展,大数据分析技术也已开始运用于行业中。那么,传统文化中的古诗词与新兴的大数据分析技术发生碰撞,会擦出怎样的火花呢?
本文利用爬虫技术和可视化技术,使用Python 语言,借助其丰富的第三方库,实现了古诗文数据的爬取和可视化,并对可视化结果进行了简要的分析。
Python 是数据科学与数据分析领域的优先选择,丰富的第三方库、开源社区、及不断优化的使用文档,为许多非计算机领域的学习者提供了广阔的入门与精通渠道。
网络爬虫也被形象地称为网络蜘蛛、网络机器人,是一个可以自动下载网易的计算机程序或自动化脚本。网络爬虫就像一只蜘蛛一样在互联网上爬行,它以一个被称为种子集的URL 集合为起点,沿着URL 的丝线爬行,下载每一个URL 所指向的网页,分析页面内容,提取每个URL 并记录下每个已经爬行过的URL,如此往复,直到URL 队列为空或满足设定的终止条件为止,最终达到遍历Web 的目的。
关于网络爬虫的实现,通常有两种方式,一种是使用专门的爬虫软件,另一种则是使用编程语言。就第二种方式而言,有很多语言可以用于实现爬虫,如Python、Java、PHP、C++等。Python 中有许多可用于爬虫开发的库,包括urlib、urlib3、Requests、Scrapy、Beautiful Soup、Selenium 等。本文采用Python 语言结合Selenium 库来完成数据的爬取。
Selenium 是一个Web 应用程序的自动测试工具,支持多种浏览器,模拟人工使用浏览器的操作。
数据可视化分析是大数据时代的重要研究方向,“一图胜千言”,当数据以生动的可视化图表的形式展示出来时,分析人员往往能够便捷地洞察隐藏在数据背后的有效信息,并据此作出相应决策。
用于实现数据可视化的工具有很多,诸如Tableau、PowerBI、Zeppelin、Python 等。就Python 可视化而言,有许多可用于可视化的库,包括Matplotlib、PyEcharts、Plotly等。本文采用Python 语言结合PyEcharts 库来完成数据的可视化。
PyEcharts 是一个用于生成Echarts 图表的JS 类库,Echarts 是百度开源的一个数据可视化工具包。利用PyEcharts,通过编写少量代码就可方便快捷地生成Echarts风格的各种图表,是大数据时代进行数据可视化的常用方案。
本文的数据来自于古诗文网(https://www.gushiwen.cn/),本文沿着爬取数据、清洗数据、存储数据、可视化数据的技术路线,技术路线图如图1 所示,着重从以下几个角度对关于思乡类的古诗文展开分析:
图1 :技术路线
(1)古诗文作者更青睐于用哪些词抒发思乡之情?
(2)关于思乡的古诗文中出现频率最高的前10 个词分别是什么?
(3)哪个朝代(或时代)的思乡类古诗文最多?
(4)各个朝代(或时代)的思乡类古诗文数量占比情况如何?
古诗文网收录了很多诗词曲赋、经典古文,资源全面,分类详细,方便获取古诗文相关资料。通过对古诗文网的分析,发现首页的右侧设有分类栏,“思乡”也在其中,点击“思乡”会跳转到新的页面,其中以链接的形式罗列了关于思乡的古诗名,点击各古诗名即可查看到相应的诗文内容、译文、注释、创作背景、赏析等。本文使用Python 语言结合Selenium 库爬取古诗文网中收录的关于“思乡”的古诗文。具体步骤如下:
(1)使用 web=webdriver.Chrome()打开古诗文网首页,调用web.get()方法传入网址获取页面内容。
(2)调用 web.find_element().click()方法,通过XPATH定位到首页右侧的“思乡”类别,并模拟点击操作,跳转页面。
(3)利用web.switch_to.window(web.window_handles[1])方法,定位到新的窗口,即“关于思乡的古诗”页面。
(4)调用 web.find_elements()[0],通过CLASS_NAME找到所有“思乡”类古诗文链接的
(5)通过for 循环,依次打开每首古诗文的详细页面,在每个页面中通过4 次调用find_element()方法逐个找到古诗文的诗名、作者、朝代、古诗内容,将其存放在字典类型的变量中,即每首古诗一个存储为一个字典。
(6)将代表古诗的所有字典存放到一个列表类型的变量中,最终形成列表中嵌套字典的数据结构。
具体代码如图2 所示。
图2 :爬虫代码
从古诗文网中爬取的古诗文都保留了网页上呈现的格式,且包含标点符号,这对于后续的数据可视化会产生干扰,因此需要先将数据进行清洗,确保数据的纯净。如:“唐代”表示为“(唐代)”;每首诗的每行之间有换行符“ ”;古诗内容中含有“,”“。”“、”“?”等标点符号。针对以上情况,本文去除了朝代中的“()”,去掉了古诗文内容中“ ”、“,”“。”“、”“?”等符号。
清洗后的数据,需存储下来以供后续使用。本文利用csv 库,调用csv 中的DictWriter 类,实例化一个csv 文件对象,然后用该对象调用writeheader()方法写入表头,再调用writerows()方法写入具体的数据,从而将清洗后的数据全部存储到csv 文件中。
经过前面的步骤,我们获取到了397 首关于思乡的古诗文,那么,古诗文作者更青睐于用哪些词抒发思乡之情?关于思乡的古诗文中出现频率最高的前10 个词是什么?哪个朝代(或时代)的思乡类古诗文最多,各个朝代(或时代)的思乡类古诗文数量占比情况又如何?
以上一连串的问题,我们很难直接从csv 文件中寻找到答案,在此,借助可视化工具,帮助我们更直观、清晰地呈现数据中隐藏的信息。本文针对上述3 个问题,分别选用词云图、柱状图、饼图进行数据的可视化。
4.4.1 词云图
词云图可以对文本中出现频率较高的“关键词”予以视觉化的展现,过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。
本文采用词云图突出展示“古诗内容”中出现频率较高的词汇,以此回答“古诗文作者更青睐于用哪些词抒发思乡之情?”的问题。实现方法是,借助jieba 中文词库对古诗文内容进行分词处理,并使用Counter()方法统计每个词出现的次数,按次数从高到低将结果存放在一个列表里面。取出词频排名前150 的词汇及其出现的次数,使用Python 语言PyEcharts 库的WordCloud 类实例化词云图图表对象,调用add()方法填充数据并设置字号和字体,以此绘制词云图。具体代码如图3 所示。
图3 :词云图代码
运行结果如图4 所示。
图4 :词云图
4.4.2 柱状图
柱状图由一系列宽度相等、长度不一的矩形条组成,利用矩形条的高度表示数值,以此反映不同分类数据之间的差异。
本文采用柱状图呈现词频靠前的词汇出现的次数,以此回答“关于思乡的古诗文中出现频率最高的前10 个词是什么?”的问题。实现方法是,取出词频排名前10 的词汇及其出现的次数,使用Python 语言 PyEcharts 库的Bar 类实例化柱状图图表对象并依次调用add_xaxis()、add_yaxis()方法填充数据。柱状图默认垂直显示,为了使其水平显示,此处调用reversal_axis()方法,使坐标轴翻转。再调用set_series_opts()方法进行系列项的配置,通过设置label_opts 参数的值,将标签显示在柱形的右侧。从而绘制词频排名前10 的词汇的柱状图。具体代码如图5 所示。
图5 :柱状图代码
运行结果如图6 所示。
图6 :柱状图
4.4.3 饼图
饼图由若干个面积大小不一、以条形或颜色填充的扇形或圆环组成,用于表示不同分类的占比情况,主要用于表现比例、份额之类的数据。饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块表示该分类占总体的比例大小,所有区块相加的和等于100%。
本文采用饼图呈现各个朝代(或时代)诗文所占的百分比,以此回答“哪个朝代(或时代)的思乡类古诗文最多,各个朝代(或时代)的思乡类古诗文数量占比情况又如何?”的问题。实现方法是,利用jieba 库的Counter()方法统计csv 文件中“朝代”列每个词出现的次数,按次数从高到低将结果存放在一个列表里面。使用Python 语言PyEcharts 库的Pie 类实例化饼图图表对象,调用add()方法填充数据并设置饼图的内外半径以及饼图中心的坐标。接着链式调用set_global_opts()方法进行全局配置项的设置,此处设置图例的类型、位置以及布局朝向。再调用set_series_opts()方法进行系列项的配置,通过设置label_opts 参数的值,设置标签显示的样式。具体代码如图7 所示。
图7 :饼图代码
运行结果如图8 所示。
图8 :饼图
一眼扫过图4 的词云图,首先被注意到是字号相对较大的“月”、“故乡”、“归”、“万里”等,说明在所有词汇中,这些词汇出现的频率较高,也验证了古人确实更喜欢用月亮来寄托“思乡之情”。除此之外,“何处”、“梦”、“天涯”、“故园”、“望”等词汇也常在思乡类的古诗文中出现。
从图6 的柱状图可以看出,“月”这个词在获取到的397 首古诗中出现了54 次,高居榜首。其它出现频率较高的词汇还有“归”、“不”、“万里”、“故乡”等。
由图8 的饼图可知,唐代、宋代关于思乡的古诗文最多,分别达到了46.6%和27.71%,两个朝代之和超过了总数的70%,不知是唐、宋两个朝代盛产古诗呢?还是唐、宋诗人更思乡呢?
本文沿着“爬取数据-清洗数据-存储数据-可视化数据”的技术路线,对古诗文网中收录的关于思乡的古诗文资源进行了爬取、清洗、存储、可视化及分析。首先对古诗文网页面进行分析,采用Python 结合Selenium 库的方案爬取了古诗文网收录的关于思乡的古诗文397 首,然后使用python 语言中字符串的相关函数做了数据清洗,接着用Python 结合csv 库将清洗后的数据存储在csv 文件中,最后通过Python 的Jieba 库进行中文分词处理,用PyEcharts 库对数据可视化,绘制了词云图、柱状图、饼图,并进行了简要分析。除了本文的视角之外,对古诗文的数据分析角度还有很多,还需要进一步的探索和研究。