R语言文本挖掘NASA数据网络分析,tf-idf和主题建模

NASA托管和/或维护了超过32,000个数据集; 这些数据集涵盖了从地球科学到航空航天工程到NASA本身管理的主题。

由Kaizong Ye,Sherry Deng撰写

我们可以使用这些数据集的元数据来理解它们之间的联系。


1 NASA如何组织数据

首先,让我们下载JSON文件,并查看元数据中存储的名称。

metadata <- fromJSON("https://data.nasa.gov/data.json")
names(metadata$dataset)

我们在这里看到,我们可以从发布每个数据集的人那里获取信息,以获取他们发布的许可证。

class(metadata$dataset$title)

1.1 整理数据

让我们为标题,描述和关键字设置单独的数据框,保留每个数据集的数据集ID,以便我们可以在后面的分析中将它们连接起来 。

1.2 初步的简单探索

NASA数据集中最常见的单词是什么? 

×

主题模型

1.1 齐波夫定律(Zipf’s Law)

在正式介绍TF-IDF之前,先看看什么是齐波夫定律,因为这样子有助于理解TF-IDF的含义。下面是关于英文的介绍:

Zipf’s Law describes that given some corpus of natural language utterances, the frequency of any word is inversely proportional to its rank in the frequency table.

上面这段话表述的是:给定一个文档,任何一个单词出现的频次是与其在频次表(很多地方用的频率,这里用频次是为了做一定的区分,频率想表述的是一种占比关系,频次则说明次数的问题)上的位置(排名)成反比的。比如说一个单词出现在频次表上的第一位,那么它出现的次数基本(非严格意义)是排在第二位的单词出现的次数的2倍,第三位的3倍,以此推断下去。上面有说非严格意义的意思是说,并不是精准的两倍三倍的差距,而是说在一个文本足够大的情况下是如此。

1.2 主题模型(Topic Modelling)

知道一个文本各个单词的出现的频次可以提供给机器学习算法一些初步的特征,但是单单知道单词的频次并不能赋予我们做更多的事,也无从得知某个单词对于该文档的重要性。这里正式引入逆文本频率指数(IDF:Inverse Doccument Frequency),通过了解IDF来引出最终所需要的TF-IDF整个计算公式和运用。TF-IDF的意思是:如果一个单词(文本标识符)出现在一个文档中的次数越多,但是却很少出现在其他文档中,那么就可以假设这个单词在这个特定的文本中的分量是很重要的。具体的计算公式如下:

IDF = total number of documents (文本集含有的文本总数) / the number of documents contain a term (含有特定单词的文本数)

举个例子,假设我们现在有一个文本集,这个文本集一共含有5个不同的文本内容,其中3个文本含有‘China’这个单词,那么IDF(‘China’) = 5 / 3 = 1.67。但是直接拿IDF来衡量一个单词在一个文本中的重要性,那样子显然会碰到一个问题,那就是数量级问题。比如我们有一个文本集,该文本集有100万个文档,在这100个文档中寻找apple这个单词,已知只有一个文本含有apple这个单词,又已知有10个文档含有orange这单词,那么可以得到这两个单词的IDF分别为:100万和10万,通过这个例子可以看到量级差别太巨大,并不适合比较,所以在处理这样子情况下建议引入log()和exp()函数来让单词的出现的频次和文档频次处于统一水平,这样子做的好处是后期计算得到的TF-IDF值会是均匀分布(uniformly distributed)。通过引入log,这个时候之前关于查找apple和orange的例子就会变成:

IDF(‘apple’) = log(1000000/1) = 6

IDF(‘orange’) = log(1000000/10) = 5

综上,假设一个标识符 t 出现在一个文本集 D 中的特定文档 d 的频率可以定义为:

TF(t, d) = number of t appears in document /total tokens in document d

IDF(t, D) = log(number of documents / number of documents containing t)

TF-IDF(t, d, D) = TF * IDF

从上述公式可以看出,如果一个单词出现在特定文档的次数越多,那么IDF的值也会相应的增大,紧接着TF-IDF的权重也会变大。这也就是说明了TF-IDF的值可以帮助理解一个文档想要表达的或者帮助理解主题模型,因为按照之前的假设,一个单词出现次数越多越能表达一个文档想要表达的意思(注意停顿词等的影响要去除)



nasa_title %>%
  count(word, sort = TRUE)




最常见的关键字是什么?


nasa_keyword %>% 
  group_by(keyword) %>% 
  count(sort = TRUE)
## # A tibble: 1,774 x 2
## # Groups:   keyword [1,774]
##    keyword                     n
##    <chr>                   <int>
##  1 EARTH SCIENCE           14362
##  2 Project                  7452
##  3 ATMOSPHERE               7321
##  4 Ocean Color              7268
##  5 Ocean Optics             7268
##  6 Oceans                   7268
##  7 completed                6452




自适应网页宽度的 Bilibili 视频

视频

文本挖掘:主题模型(LDA)及R语言实现分析游记数据

探索见解

去bilibili观看

探索更多视频


2.1描述和标题词的网络

我们可以使用pairwise_count 来计算每对单词在标题或描述字段中出现的次数。

这些是最常出现在descripton字段中的单词对。 

我们在这个标题词网络中看到了一些清晰的聚类; 国家航空航天局数据集标题中的单词大部分被组织成几个词汇系列,这些词汇聚类一起。

此排序顶部的这些关键字的相关系数等于1; 他们总是一起出现。

让我们可视化关键字相关性网络,也就是关键字共现网络。


python主题建模可视化LDA和T-SNE交互式可视化

阅读文章


3计算描述字段的tf-idf

 网络图向我们展示了描述字段由一些常用词来控制,如“数据”,“全局”; 可以使用tf-idf作为统计数据来查找各个描述字段的特征词。


随时关注您喜欢的主题


4主题建模

使用tf-idf作为统计数据已经让我们深入了解NASA描述字段的内容,但让我们尝试另外一种方法来解决NASA描述字段的内容。

每个主题是关于什么的?让我们来看看每个主题的前10个关键词。

## # A tibble: 240 x 3
##    topic term          beta
##    <int> <chr>        <dbl>
##  1     1 data        0.0449
##  2     1 soil        0.0368
##  3     1 moisture    0.0295
##  4     1 amsr        0.0244

##  5     1 sst         0.0168
##  6     1 validation  0.0132
##  7     1 temperature 0.0132
##  8     1 surface     0.0129
##  9     1 accuracy    0.0123
## 10     1 set         0.0116


首先注意y轴是以对数刻度绘制的; 否则很难弄清楚图中的细节。

该分布表明文档被很好地区分为属于某个主题。我们还可以看看每个主题中概率的分布情况。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds