R语言对NASA元数据进行文本挖掘的主题建模分析

摘要:
获取并整理NASA元数据Make DocumentTermMatrixLDA主题建模探索建模每个文档属于哪个主题?NASA拥有32000多个数据集,将主题建模与关键词联系起来,NASA有兴趣了解这些数据集与NASA以外的其他政府组织中的其他重要数据集之间的关系。关于NASA数据集的元数据以JSON格式在线提供。该方法将每个文档建模为主题的混合,将每个主题建模为单词的混合。我们将看看是否可以将这些描述性文本建模为主题。

原文链接:http://tecdat.cn/?p=9424


目录

什么是主题建模?

获取和整理NASA元数据

制作DocumentTermMatrix

LDA主题建模

探索建模

每个文档都属于哪个主题?

将主题建模连接到关键字


NASA有32,000多个数据集,并且NASA有兴趣了解这些数据集之间的联系,以及与NASA以外其他政府组织中其他重要数据集的联系。有关NASA数据集的元数据有JSON格式在线获得。让我们使用主题建模对描述字段进行分类,然后将其连接到关键字。

什么是主题建模?

主题建模是一种无监督的文档分类方法。此方法将每个文档建模为主题的混合,将每个主题建模为单词的混合。我将在这里用于主题建模的方法称为潜在Dirichlet分配(LDA),但还有其他适合主题模型的可能性。在本文中,每个数据集描述都是一个文档。我们将看看是否可以将这些描述文本作为主题进行建模。

获取和整理NASA元数据

让我们下载32,000多个NASA数据集的元数据。

library(jsonlite)
library(dplyr)
library(tidyr)
names(metadata$dataset)
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
##  [1] "_id"                "@type"              "accessLevel"        "accrualPeriodicity"
##  [5] "bureauCode"         "contactPoint"       "description"        "distribution"      
##  [9] "identifier"         "issued"             "keyword"            "landingPage"       
## [13] "language"           "modified"           "programCode"        "publisher"         
## [17] "spatial"            "temporal"           "theme"              "title"             
## [21] "license"            "isPartOf"           "references"         "rights"            
## [25] "describedBy"
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
nasadesc <- data_frame(id = metadata$dataset$`_id`$`$oid`, desc = metadata$dataset$description)
nasakeyword <- data_frame(id = metadata$dataset$`_id`$`$oid`, 
                          keyword = metadata$dataset$keyword) %>%
        unnest(keyword)
nasakeyword <- nasakeyword %>% mutate(keyword = toupper(keyword))
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

检查一下,最常用的关键字是什么?

nasakeyword %>% group_by(keyword) %>% count(sort = TRUE)
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
## # A tibble: 1,616 x 2
##                    keyword     n
##                      <chr> <int>
## 1            EARTH SCIENCE 14386
## 2                   OCEANS 10033
## 3                  PROJECT  7463
## 4             OCEAN OPTICS  7324
## 5               ATMOSPHERE  7323
## 6              OCEAN COLOR  7270
## 7                COMPLETED  6452
## 8  ATMOSPHERIC WATER VAPOR  3142
## 9             LAND SURFACE  2720
## 10               BIOSPHERE  2449
## # ... with 1,606 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

制作DocumentTermMatrix

要进行主题建模,我们需要从tm包中创建一种特殊的矩阵(当然,“文档矩阵”只是一个通用概念)。行对应于文档(在本例中为描述文字),列对应于术语(即单词);它是一个稀疏矩阵。

让我们使用停用词来清理一下文本,以除去HTML或其他字符编码中残留的一些废话“词”。

## # A tibble: 1,909,215 x 3
##                          id     word     n
##                       <chr>    <chr> <int>
## 1  55942a8ec63a7fe59b4986ef     suit    82
## 2  55942a8ec63a7fe59b4986ef    space    69
## 3  56cf5b00a759fdadc44e564a     data    41
## 4  56cf5b00a759fdadc44e564a     leak    40
## 5  56cf5b00a759fdadc44e564a     tree    39
## 6  55942a8ec63a7fe59b4986ef pressure    34
## 7  55942a8ec63a7fe59b4986ef   system    34
## 8  55942a89c63a7fe59b4982d9       em    32
## 9  55942a8ec63a7fe59b4986ef       al    32
## 10 55942a8ec63a7fe59b4986ef    human    31
## # ... with 1,909,205 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

现在让我们来制作DocumentTermMatrix

## <<DocumentTermMatrix (documents: 32003, terms: 35911)>>
## Non-/sparse entries: 1909215/1147350518
## Sparsity           : 100%
## Maximal term length: 166
## Weighting          : term frequency (tf)
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

LDA主题建模

现在,让我们使用topicmodels包创建一个LDA模型。我们将告诉算法进行多少个主题?这个问题很像k-means聚类中的问题;我们不提前知道。我们可以尝试一些不同的值,查看模型如何拟合文本。让我们从8个主题开始。

## A LDA_VEM topic model with 8 topics.
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

这是一种随机算法,根据算法的起始位置,其结果可能会有所不同。

探索建模

让我们整理模型,看看我们能找到什么。

## # A tibble: 287,288 x 3
##    topic  term         beta
##    <int> <chr>        <dbl>
## 1      1  suit 2.591273e-40
## 2      2  suit 9.085227e-61
## 3      3  suit 1.620165e-61
## 4      4  suit 2.081683e-64
## 5      5  suit 9.507092e-05
## 6      6  suit 5.747629e-04
## 7      7  suit 1.808279e-63
## 8      8  suit 4.545037e-40
## 9      1 space 2.332248e-05
## 10     2 space 2.641815e-40
## # ... with 287,278 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

β列告诉我们从该主题的文档中生成该术语的可能性。

每个主题的前5个词是什么?
top_terms

## # A tibble: 80 x 3
##    topic         term        beta
##    <int>        <chr>       <dbl>
## 1      1         data 0.047596842
## 2      1          set 0.014857522
## 3      1         soil 0.013231077
## 4      1         land 0.007874196
## 5      1        files 0.007835032
## 6      1     moisture 0.007799017
## 7      1      surface 0.006913904
## 8      1         file 0.006495391
## 9      1    collected 0.006350559
## 10     1 measurements 0.005521037
## # ... with 70 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

让我们看一下。

ggplot(top_terms, aes(beta, term, fill = as.factor(topic))) +
        geom_barh(stat = "identity", show.legend = FALSE, alpha = 0.8) +
        labs(title = "Top 10 Terms in Each LDA Topic",
             subtitle = "Topic modeling of NASA metadata description field texts",
             caption = "NASA metadata from https://data.nasa.gov/data.json",
             y = NULL, x = "beta") +
        facet_wrap(~topic, ncol = 2, scales = "free") +
        theme_tufte(base_family = "Arial", base_size = 13, ticks = FALSE) +
        scale_x_continuous(expand=c(0,0)) +
        theme(strip.text=element_text(hjust=0)) +
        theme(plot.caption=element_text(size=9))
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

R语言对NASA元数据进行文本挖掘的主题建模分析第12张R语言对NASA元数据进行文本挖掘的主题建模分析第1张

我们可以看到在这些描述文本中占主导地位的词“数据”是什么。从关于土地和土地的术语到关于设计,系统和技术的术语,这些术语集合之间确实存在着有意义的差异。绝对需要进一步探索,以找到合适数量的主题并在这里做得更好。另外,标题和描述词是否可以结合用于主题建模?

每个文档都属于哪个主题?

让我们找出哪些主题与哪些描述字段(即文档)相关联。

lda_gamma
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
## # A tibble: 256,024 x 3
##                    document topic        gamma
##                       <chr> <int>        <dbl>
## 1  55942a8ec63a7fe59b4986ef     1 7.315366e-02
## 2  56cf5b00a759fdadc44e564a     1 9.933126e-02
## 3  55942a89c63a7fe59b4982d9     1 1.707524e-02
## 4  56cf5b00a759fdadc44e55cd     1 4.273013e-05
## 5  55942a89c63a7fe59b4982c6     1 1.257880e-04
## 6  55942a86c63a7fe59b498077     1 1.078338e-04
## 7  56cf5b00a759fdadc44e56f8     1 4.208647e-02
## 8  55942a8bc63a7fe59b4984b5     1 8.198155e-05
## 9  55942a6ec63a7fe59b496bf7     1 1.042996e-01
## 10 55942a8ec63a7fe59b4986f6     1 5.475847e-05
## # ... with 256,014 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

此处的γ列是每个文档属于每个主题的概率。请注意,有些非常低,有些更高。概率如何分布?

ggplot(lda_gamma, aes(gamma, fill = as.factor(topic))) +
        geom_histogram(alpha = 0.8, show.legend = FALSE) +
        facet_wrap(~topic, ncol = 4) +
        scale_y_log10() +
        labs(title = "Distribution of Probability for Each Topic",
             subtitle = "Topic modeling of NASA metadata description field texts",
             caption = "NASA metadata from https://data.nasa.gov/data.json",
             y = NULL, x = "gamma") +
        theme_minimal(base_family = "Arial", base_size = 13) +
        theme(strip.text=element_text(hjust=0)) +
        theme(plot.caption=element_text(size=9))
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

R语言对NASA元数据进行文本挖掘的主题建模分析第17张R语言对NASA元数据进行文本挖掘的主题建模分析第1张

y轴在此处以对数刻度绘制,因此我们可以看到一些东西。大多数文档都被归类为以下主题之一:许多文档被归类为主题2,而文档被归类为主题1和5则较不明确。一些主题的文档较少。对于任何单个文档,我们都可以找到它具有最高归属概率的主题。

将主题建模连接到关键字

让我们将这些主题模型与关键字联系起来,看看会发生什么。让我们将此数据框添加到关键字,然后查看哪些关键字与哪个主题相关联。

lda_gamma
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
## # A tibble: 1,012,727 x 4
##                    document topic        gamma                     keyword
##                       <chr> <int>        <dbl>                       <chr>
## 1  55942a8ec63a7fe59b4986ef     1 7.315366e-02        JOHNSON SPACE CENTER
## 2  55942a8ec63a7fe59b4986ef     1 7.315366e-02                     PROJECT
## 3  55942a8ec63a7fe59b4986ef     1 7.315366e-02                   COMPLETED
## 4  56cf5b00a759fdadc44e564a     1 9.933126e-02                    DASHLINK
## 5  56cf5b00a759fdadc44e564a     1 9.933126e-02                        AMES
## 6  56cf5b00a759fdadc44e564a     1 9.933126e-02                        NASA
## 7  55942a89c63a7fe59b4982d9     1 1.707524e-02 GODDARD SPACE FLIGHT CENTER
## 8  55942a89c63a7fe59b4982d9     1 1.707524e-02                     PROJECT
## 9  55942a89c63a7fe59b4982d9     1 1.707524e-02                   COMPLETED
## 10 56cf5b00a759fdadc44e55cd     1 4.273013e-05                    DASHLINK
## # ... with 1,012,717 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

让我们保留属于某个主题的文档(概率> 0.9),然后为每个主题找到最重要的关键字。

top_keywords
R语言对NASA元数据进行文本挖掘的主题建模分析第1张
## Source: local data frame [1,240 x 3]
## Groups: topic [8]
## 
##    topic       keyword     n
##    <int>         <chr> <int>
## 1      2   OCEAN COLOR  4480
## 2      2  OCEAN OPTICS  4480
## 3      2        OCEANS  4480
## 4      1 EARTH SCIENCE  3469
## 5      5       PROJECT  3464
## 6      5     COMPLETED  3057
## 7      8 EARTH SCIENCE  2229
## 8      3   OCEAN COLOR  1968
## 9      3  OCEAN OPTICS  1968
## 10     3        OCEANS  1968
## # ... with 1,230 more rows
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

我们也对它们进行可视化。

ggplot(top_keywords, aes(n, keyword, fill = as.factor(topic))) +
        geom_barh(stat = "identity", show.legend = FALSE, alpha = 0.8) +
        labs(title = "Top 10 Keywords for Each LDA Topic",
             subtitle = "Topic modeling of NASA metadata description field texts",
             caption = "NASA metadata from https://data.nasa.gov/data.json",
             y = NULL, x = "Number of documents") +
        facet_wrap(~topic, ncol = 2, scales = "free") +
        theme_tufte(base_family = "Arial", base_size = 13, ticks = FALSE) +
        scale_x_continuous(expand=c(0,0)) +
        theme(strip.text=element_text(hjust=0)) +
        theme(plot.caption=element_text(size=9))
R语言对NASA元数据进行文本挖掘的主题建模分析第1张

R语言对NASA元数据进行文本挖掘的主题建模分析第24张R语言对NASA元数据进行文本挖掘的主题建模分析第1张

如果您有任何疑问,请在下面发表评论。

免责声明:文章转载自《R语言对NASA元数据进行文本挖掘的主题建模分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇网路编程(网站源码查看器)安装tensorflow下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长

原文链接:http://tecdat.cn/?p=12292  预测GDP增长 我们复制了Ghysels(2013)中提供的示例。我们进行了MIDAS回归分析,以预测季度GDP增长以及每月非农就业人数的增长。预测公式如下 ​ 其中yt是按季度季节性调整后的实际美国GDP的对数增长,x3t是月度总就业非农业工资的对数增长。 首先,我们加载数据并执行必要的转...

RocketMQ双主双从集群搭建

1 各角色介绍 Producer:消息的发送者;举例:发信者 Consumer:消息接收者;举例:收信者 Broker:暂存和传输消息;举例:邮局 NameServer:管理Broker;举例:各个邮局的管理机构 Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息 M...

R语言-混合型数据聚类

利用聚类分析,我们可以很容易地看清数据集中样本的分布情况。以往介绍聚类分析的文章中通常只介绍如何处理连续型变量,这些文字并没有过多地介绍如何处理混合型数据(如同时包含连续型变量、名义型变量和顺序型变量的数据)。本文将利用 Gower 距离、PAM(partitioning around medoids)算法和轮廓系数来介绍如何对混合型数据做聚类分析。 --...

C# ------ C# 和 .NET

C#  一个支持面向对象的编程语言,由微软开发,对就是windows 系统的微软,既然提到微软那你应该会了解到 .NET 框架。    .Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。 一个软件不是由一...

Hadoop学习之路(十二)分布式集群中HDFS系统的各种角色

NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”、“namenode”故障问题的分析解决能力 问题场景 1、Namenode 服务器的磁盘故障导致 namenode 宕机,如何挽救集群及数据? 2、Namenode 是否可以有多个?name...

Oracle 12c 容器讲解

Oracle 12c一个重要新特性是插接式数据库。 插接式数据库由一个使用 CDB(Container Database)选项创建的容器数据库和一个或多个 PDB(Pluggable Database)组成,CDB 作为容器容纳 PDB,而 PDB 彼此隔离,就像一个独立的数据库般在 CDB 中存在。PDB 是一组 Schema 的集合,在 CDB 中作为...