文本挖掘、分析与数据可视化应用指南
1. 文本挖掘与分析
1.1 文本挖掘的应用领域
文本挖掘在众多领域有着广泛应用,如实体识别、抄袭检测、主题识别、翻译、欺诈检测、垃圾邮件过滤等。它能够从大量文本数据中提取有价值的信息,为决策提供支持。
1.2 文本挖掘工具
- NLTK :Python 的自然语言工具包,适合初学者学习和探索文本挖掘的基本技巧。
- Scikit - learn :在实际应用中更具“生产就绪性”,在之前的很多场景中被广泛使用。
1.3 文本数据预处理技术
文本数据的预处理比数值数据更为复杂,涉及以下几种主要技术:
| 技术名称 | 描述 |
| — | — |
| 词干提取(Stemming) | 智能地截取单词的结尾,以便与该单词的某些变位或复数形式匹配。 |
| 词形还原(Lemmatization) | 与词干提取类似,旨在消除重复,但会考虑单词的含义。 |
| 停用词过滤(Stop word filtering) | 过滤掉那些出现过于频繁而无实际用途的单词,可显著提升模型性能,停用词通常因语料库而异。 |
| 分词(Tokenization) | 将文本切割成片段,这些片段可以是单个单词、单词组合(n - 元语法)甚至是完整的句子。 |
| 词性标注(POS Tagging) | 为单词标注词性,有助于更好地理解句子中单词的功能。 |
1.4 案例研究:区分 Reddit 帖子
在案例研究中,尝试区分关于“权力的游戏”和“数据科学”的 Reddit 帖子,使用了朴素贝叶斯和决策树分类器:
-
朴素贝叶斯分类器
:假设所有特征相互独立。
-
决策树分类器
:假设特征之间存在依赖关系,允许构建不同的模型。
在该例子中,朴素贝叶斯分类器得到了更好的模型,但通常在数据量更多时,决策树分类器表现更佳。通过在新的(已标注)数据上应用这两个模型,并计算混淆矩阵来确定它们的性能差异。
1.5 结果展示
在向他人展示研究结果时,有趣的数据可视化能够以令人难忘的方式传达结果,这对项目的成功至关重要。
2. 数据可视化交付方式
2.1 交付结果的方式
数据科学家通常通过以下几种方式将新见解交付给最终用户:
-
一次性演示
:适用于那些基于研究问题做出的商业决策会影响组织多年发展的情况,如公司投资决策。决策做出后,该分析可能在很长时间内不会重复进行。结果通常以报告形式呈现,并辅以演示。
-
数据新视角
:以客户细分为例,细分结果通过报告和演示传达,但本质上它们是工具而非最终结果。清晰且相关的客户细分信息可作为新维度反馈到数据库,供人们自行生成报告。
-
实时仪表盘
:当发现新信息后,数据科学家可将信息反馈到数据库。但为避免他人误解和生成无意义的报告,数据科学家应创建第一个可刷新的报告,为他人树立榜样,缩短向最终用户交付见解的时间。
2.2 影响交付方式的因素
- 决策类型 :战略决策通常只需进行一次分析和报告,而运营决策则需要定期刷新报告。
- 组织规模 :小型组织中,数据科学家可能负责从数据收集到报告的整个流程;大型组织中,可能有专门的报告团队负责制作仪表盘,但交付原型仪表盘仍有助于缩短交付时间。
3. 数据可视化选项
3.1 案例背景
以医院药房为例,政府要求所有药房检查药品对光的敏感性,并将药品存放在特殊容器中,但未提供光敏感药品的具体列表。数据科学家可通过文本挖掘从药品的患者信息手册中提取相关信息,并为每种药品标记“光敏感”或“非光敏感”,然后将这些信息上传到中央数据库。同时,药房需要了解所需容器的数量,因此提供了药房库存数据。
3.2 数据特点
该数据是一年的库存移动时间序列数据,每种药品在数据集中有 365 条记录。虽然数据集中的药品是真实的,但其他变量的值是随机生成的,且数据集仅包含 29 种药品,约 10,000 多行数据。不建议将整个数据库加载到用户浏览器中,通常数据会在服务器上预先计算,并通过 REST 服务请求部分数据。
3.3 可视化工具选择
在众多可视化工具中,选择了 dc.js,它是 JavaScript MapReduce 库 Crossfilter 和数据可视化库 d3.js 的结合体:
-
Crossfilter
:由 Square Register 开发,用于处理支付交易,能让用户快速对支付历史进行切片和切块操作。它是开源的、免费使用的,且由知名公司维护。替代库有 Map.js、Meguro 和 Underscore.js。
-
d3.js
:功能强大的 JavaScript 数据可视化库,许多 JavaScript 库基于它构建。NVD3、C3.js、xCharts 和 Dimple 为其提供了抽象层,便于绘制简单图形,它们在支持的图形类型和默认设计上有所不同。
-
选择 dc.js 的原因
:与它所实现的交互式仪表盘(点击一个图形会在相关图形上创建过滤视图)相比,dc.js 的设置非常简单,数据科学家在完成实际分析后,易于实现的仪表盘是一个不错的选择。
3.4 工具使用准备
3.4.1 应用所需组件
构建 dc.js 应用需要以下组件:
- JQuery:用于处理交互性。
- Crossfilter.js:MapReduce 库,是 dc.js 的前提条件。
- d3.js:流行的数据可视化库,是 dc.js 的前提条件。
- dc.js:用于创建交互式仪表盘的可视化库。
- Bootstrap:广泛使用的布局库,使界面更美观。
3.4.2 编写文件
只需编写三个文件:
-
index.html
:包含应用的 HTML 页面。
-
application.js
:存放所有编写的 JavaScript 代码。
-
application.css
:自定义 CSS。
3.4.3 运行代码
需要在 HTTP 服务器上运行代码,为了简化操作,可使用 Python 命令启动服务器:
- Python 2:
python -m SimpleHTTPServer
- Python 3.4:
python -m http.server 8000
启动后,在浏览器中访问“localhost:8000”。同时,要确保所有所需文件与 index.html 在同一文件夹中,可从相关网站下载:
- dc.css 和 dc.min.js:https://dc - js.github.io/dc.js/
- d3.v3.min.js:http://d3js.org/
- crossfilter.min.js:http://square.github.io/crossfilter/
3.4.4 index.html 页面设置
<html>
<head>
<title>Chapter 10. Data Science Application</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="dc.css">
<link rel="stylesheet" href="application.css">
</head>
<body>
<main class='container'>
<h1>Chapter 10: Data Science Application</h1>
<div class="row">
<div class='col-lg-12'>
<div id="inputtable" class="well well-sm"></div>
</div>
</div>
<div class="row">
<div class='col-lg-12'>
<div id="filteredtable" class="well well-sm"></div>
</div>
</div>
</main>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="crossfilter.min.js"></script>
<script src="d3.v3.min.js"></script>
<script src="dc.min.js"></script>
<script src="application.js"></script>
</body>
</html>
该页面的头部加载了所有 CSS 库,在 HTML 主体的末尾加载 JavaScript。使用 JQuery 的 onload 处理程序,确保页面其他部分准备好后再加载应用。页面开始有两个表格占位符,一个用于显示输入数据,另一个用于显示使用 Crossfilter 过滤后的表格。使用了一些 Bootstrap CSS 类使页面更美观。
3.4.5 application.js 文件设置
$(function() {
//All future code will end up in this wrapper
})
d3.csv('medicines.csv',function(data) {
main(data)
});
var tableTemplate = $([
"<table class='table table-hover table-condensed table-striped'>",
" <caption></caption>",
" <thead><tr/></thead>",
" <tbody></tbody>",
"</table>"
].join('\n'));
CreateTable = function(data,variablesInTable,title){
var table = tableTemplate.clone();
var ths = variablesInTable.map(function(v) { return $("<th>").text(v) });
$('caption', table).text(title);
$('thead tr', table).append(ths);
data.forEach(function(row) {
var tr = $("<tr>").appendTo($('tbody', table));
variablesInTable.forEach(function(varName) {
var val = row, keys = varName.split('.');
keys.forEach(function(key) { val = val[key] });
tr.append($("<td>").text(val));
});
});
return table;
}
main = function(inputdata){
var medicineData = inputdata ;
var dateFormat = d3.time.format("%d/%m/%Y");
medicineData.forEach(function (d) {
d.Day = dateFormat.parse(d.Date);
})
var variablesInTable = ['MedName','StockIn','StockOut','Stock','Date','LightSen']
var sample = medicineData.slice(0,5);
var inputTable = $("#inputtable");
}
在 application.js 文件中,首先使用 JQuery 的 onload 处理程序确保页面准备好后再加载应用。使用 d3.js 的 csv 函数从本地 .csv 文件加载数据,并将其传递给 main 函数。CreateTable 函数用于创建表格,它接受数据、要显示的变量和表格标题作为参数。main 函数将输入数据转换为合适的格式,并准备显示部分数据。
4. 详细代码解析与操作流程
4.1
CreateTable
函数解析
CreateTable
函数是用于创建表格的核心函数,下面详细解析其代码逻辑:
var tableTemplate = $([
"<table class='table table-hover table-condensed table-striped'>",
" <caption></caption>",
" <thead><tr/></thead>",
" <tbody></tbody>",
"</table>"
].join('\n'));
CreateTable = function(data,variablesInTable,title){
var table = tableTemplate.clone();
var ths = variablesInTable.map(function(v) { return $("<th>").text(v) });
$('caption', table).text(title);
$('thead tr', table).append(ths);
data.forEach(function(row) {
var tr = $("<tr>").appendTo($('tbody', table));
variablesInTable.forEach(function(varName) {
var val = row, keys = varName.split('.');
keys.forEach(function(key) { val = val[key] });
tr.append($("<td>").text(val));
});
});
return table;
}
-
tableTemplate:定义了表格的基本结构,包含表头、表体和标题。 -
CreateTable函数参数 : -
data:需要展示的数据。 -
variablesInTable:需要显示的变量。 -
title:表格的标题。 -
函数执行流程
:
1. 克隆tableTemplate得到一个新的表格对象。
2. 根据variablesInTable创建表头。
3. 设置表格标题。
4. 遍历数据,为每一行数据创建表格行,并根据variablesInTable填充表格单元格。
5. 返回创建好的表格对象。
4.2
main
函数解析
main = function(inputdata){
var medicineData = inputdata ;
var dateFormat = d3.time.format("%d/%m/%Y");
medicineData.forEach(function (d) {
d.Day = dateFormat.parse(d.Date);
})
var variablesInTable = ['MedName','StockIn','StockOut','Stock','Date','LightSen']
var sample = medicineData.slice(0,5);
var inputTable = $("#inputtable");
}
- 数据处理 :
-
将输入数据赋值给
medicineData。 -
定义日期格式,将
Date字段转换为Day字段,以便 Crossfilter 能够识别日期变量。 -
变量选择
:选择需要在表格中显示的变量,存储在
variablesInTable中。 -
数据采样
:从
medicineData中截取前 5 条数据作为样本。 -
表格占位符
:获取 HTML 中用于显示输入数据的表格占位符
inputTable。
4.3 操作流程总结
下面通过一个 mermaid 流程图来展示整个操作流程:
graph LR
A[启动 Python HTTP 服务器] --> B[加载 index.html 页面]
B --> C[加载 CSS 和 JavaScript 库]
C --> D[使用 d3.js 加载数据]
D --> E[调用 main 函数处理数据]
E --> F[调用 CreateTable 函数创建表格]
F --> G[显示输入数据表格]
具体操作步骤如下:
1.
启动服务器
:在命令行中使用 Python 命令启动 HTTP 服务器。
2.
加载页面
:在浏览器中访问“localhost:8000”,加载
index.html
页面。
3.
加载资源
:页面加载所需的 CSS 和 JavaScript 库。
4.
数据加载
:使用 d3.js 从本地 .csv 文件加载数据。
5.
数据处理
:调用
main
函数对数据进行处理,包括日期格式转换等。
6.
表格创建
:调用
CreateTable
函数创建表格。
7.
结果展示
:将创建好的表格显示在页面上。
5. 总结与注意事项
5.1 总结
本文详细介绍了文本挖掘、分析以及数据可视化的相关内容,包括文本挖掘的应用领域、工具选择、数据预处理技术,数据可视化的交付方式、工具选择和具体实现步骤。通过医院药房的案例,展示了如何使用 dc.js 创建交互式仪表盘,以及相关代码的详细解析和操作流程。
5.2 注意事项
- 数据加载 :实际应用中,数据通常从服务器获取,而不是本地 .csv 文件。在使用时,需要根据实际情况修改数据加载方式。
- 服务器选择 :为了简化操作,本文使用 Python 命令启动 HTTP 服务器。在生产环境中,建议使用更专业的服务器,如 LAMP、WAMP 或 XAMPP 服务器。
- 代码优化 :可以根据实际需求对代码进行优化,例如添加错误处理、提高性能等。
通过本文的学习,你可以掌握文本挖掘和数据可视化的基本方法和技巧,为实际项目的开发提供参考。
超级会员免费看

被折叠的 条评论
为什么被折叠?



