R语言使用tf-idf描述NASA元数据的文字和关键字

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

NASA有32,000多个数据集,并且NASA有兴趣了解这些数据集之间的联系,以及与NASA以外其他政府组织中其他重要数据集的联系。有关NASA数据集的元数据  可以JSON格式在线获得。让我们使用tf-idf在描述字段中找到重要的单词,并将其与关键字联系起来。

获取和整理NASA元数据

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

library(jsonlite)
library(dplyr)
library(tidyr)
metadata <- fromJSON("data.json")
names(metadata$dataset)
##  [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"
nasadesc <- data_frame(id = metadata$dataset$`_id`$`$oid`, desc = metadata$dataset$description)
nasadesc
## # A tibble: 32,089 x 2
##                          id
##                       <chr>
## 1  55942a57c63a7fe59b495a77
## 2  55942a57c63a7fe59b495a78
## 3  55942a58c63a7fe59b495a79
## 4  55942a58c63a7fe59b495a7a
## 5  55942a58c63a7fe59b495a7b
## 6  55942a58c63a7fe59b495a7c
## 7  55942a58c63a7fe59b495a7d
## 8  55942a58c63a7fe59b495a7e
## 9  55942a58c63a7fe59b495a7f
## 10 55942a58c63a7fe59b495a80
## # ... with 32,079 more rows, and 1 more variables: desc <chr>

 

## # A tibble: 32,089 x 2
##                          id
##                       <chr>
## 1  55942a57c63a7fe59b495a77
## 2  55942a57c63a7fe59b495a78
## 3  55942a58c63a7fe59b495a79
## 4  55942a58c63a7fe59b495a7a
## 5  55942a58c63a7fe59b495a7b
## 6  55942a58c63a7fe59b495a7c
## 7  55942a58c63a7fe59b495a7d
## 8  55942a58c63a7fe59b495a7e
## 9  55942a58c63a7fe59b495a7f
## 10 55942a58c63a7fe59b495a80
## # ... with 32,079 more rows, and 1 more variables: desc <chr>

让我们打印出其中的一部分。

nasadesc %>% select(desc) %>% sample_n(5)
## # A tibble: 5 x 1
##                                                                                                                                                      desc
##                                                                                                                                                     <chr>
## 1  A Group for High Resolution Sea Surface Temperature (GHRSST) Level 4 sea surface temperature analysis produced as a retrospective dataset at the JPL P
## 2  ML2CO is the EOS Aura Microwave Limb Sounder (MLS) standard product for carbon monoxide derived from radiances measured by the 640 GHz radiometer. The
## 3                                                                                                              Crew lock bag. Polygons: 405 Vertices: 514
## 4  JEM Engineering proved the technical feasibility of the FlexScan array?a very low-cost, highly-efficient, wideband phased array antenna?in Phase I, an
## 5 MODIS (or Moderate Resolution Imaging Spectroradiometer) is a key instrument aboard the\nTerra (EOS AM) and Aqua (EOS PM) satellites. Terra‘s orbit aro

这是关键词。

nasakeyword <- data_frame(id = metadata$dataset$`_id`$`$oid`,
                          keyword = metadata$dataset$keyword) %>%
        unnest(keyword)
nasakeyword

## # A tibble: 126,814 x 2
##                          id       keyword
##                       <chr>         <chr>
## 1  55942a57c63a7fe59b495a77 EARTH SCIENCE
## 2  55942a57c63a7fe59b495a77   HYDROSPHERE
## 3  55942a57c63a7fe59b495a77 SURFACE WATER
## 4  55942a57c63a7fe59b495a78 EARTH SCIENCE
## 5  55942a57c63a7fe59b495a78   HYDROSPHERE
## 6  55942a57c63a7fe59b495a78 SURFACE WATER
## 7  55942a58c63a7fe59b495a79 EARTH SCIENCE
## 8  55942a58c63a7fe59b495a79   HYDROSPHERE
## 9  55942a58c63a7fe59b495a79 SURFACE WATER
## 10 55942a58c63a7fe59b495a7a EARTH SCIENCE
## # ... with 126,804 more rows

最常见的关键字是什么?

nasakeyword %>% group_by(keyword) %>% count(sort = TRUE)

## # A tibble: 1,774 x 2
##                    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
## 8  ATMOSPHERIC WATER VAPOR  3142
## 9                   OCEANS  2765
## 10            LAND SURFACE  2720
## # ... with 1,764 more rows

看起来“已完成项目”对于某些目的来说可能不是有用的关键字,我们可能希望将所有这些都更改为小写或大写,以消除诸如“ OCEANS”和“ Oceans”之类的重复项。

nasakeyword <- nasakeyword %>% mutate(keyword = toupper(keyword))

计算文字的tf-idf

什么是tf-idf?评估文档中单词的重要性的一种方法可能是其  术语频率  (tf),即单词在文档中出现的频率。但是,一些经常出现的单词并不重要。在英语中,这些词可能是“ the”,“ is”,“ of”等词。另一种方法是查看术语的  逆文档频率  (idf),这会降低常用单词的权重,而增加在文档集中很少使用的单词的权重。

library(tidytext)
descwords <- nasadesc %>% unnest_tokens(word, desc) %>%
        count(id, word, sort = TRUE) %>%
        ungroup()
descwords

## # A tibble: 2,728,224 x 3
##                          id  word     n
##                       <chr> <chr> <int>
## 1  55942a88c63a7fe59b498280   amp   679
## 2  55942a88c63a7fe59b498280  nbsp   655
## 3  55942a8ec63a7fe59b4986ef    gt   330
## 4  55942a8ec63a7fe59b4986ef    lt   330
## 5  55942a8ec63a7fe59b4986ef     p   327
## 6  55942a8ec63a7fe59b4986ef   the   231
## 7  55942a86c63a7fe59b49803b   amp   208
## 8  55942a86c63a7fe59b49803b  nbsp   204
## 9  56cf5b00a759fdadc44e564a   the   201
## 10 55942a86c63a7fe59b4980a2    gt   191
## # ... with 2,728,214 more rows

这些是NASA说明字段中最常见的“单词”,是词频最高的单词。让我们看一下第一个数据集,例如:

nasadesc %>% filter(id == "55942a88c63a7fe59b498280") %>% select(desc)

## # A tibble: 1 x 1
##                                                                                                                                                     desc
##                                                                                                                                                    <chr>
## 1 &lt;p&gt;The objective of the Variable Oxygen Regulator Element is to develop an oxygen-rated, contaminant-tolerant oxygen regulator to control suit p

tf-idf算法应该减少所有这些的权重,因为它们很常见,但是我们可以根据需要通过停用词将其删除。现在,让我们为描述字段中的所有单词计算tf-idf。

descwords <- descwords %>% bind_tf_idf(word, id, n)
descwords

## # A tibble: 2,728,224 x 6
##                          id  word     n         tf       idf      tf_idf
##                       <chr> <chr> <int>      <dbl>     <dbl>       <dbl>
## 1  55942a88c63a7fe59b498280   amp   679 0.35661765 3.1810813 1.134429711
## 2  55942a88c63a7fe59b498280  nbsp   655 0.34401261 4.2066578 1.447143322
## 3  55942a8ec63a7fe59b4986ef    gt   330 0.05722213 3.2263517 0.184618705
## 4  55942a8ec63a7fe59b4986ef    lt   330 0.05722213 3.2903671 0.188281801
## 5  55942a8ec63a7fe59b4986ef     p   327 0.05670192 3.3741126 0.191318680
## 6  55942a8ec63a7fe59b4986ef   the   231 0.04005549 0.1485621 0.005950728
## 7  55942a86c63a7fe59b49803b   amp   208 0.32911392 3.1810813 1.046938133
## 8  55942a86c63a7fe59b49803b  nbsp   204 0.32278481 4.2066578 1.357845252
## 9  56cf5b00a759fdadc44e564a   the   201 0.06962245 0.1485621 0.010343258
## 10 55942a86c63a7fe59b4980a2    gt   191 0.12290862 3.2263517 0.396546449
## # ... with 2,728,214 more rows

添加的列是tf,idf,这两个数量相乘在一起是tf-idf,这是我们感兴趣的东西。NASA描述字段中最高的tf-idf词是什么?

descwords %>% arrange(-tf_idf)

## # A tibble: 2,728,224 x 6
##                          id                                          word     n    tf       idf
##                       <chr>                                         <chr> <int> <dbl>     <dbl>
## 1  55942a7cc63a7fe59b49774a                                           rdr     1     1 10.376269
## 2  55942ac9c63a7fe59b49b688 palsar_radiometric_terrain_corrected_high_res     1     1 10.376269
## 3  55942ac9c63a7fe59b49b689  palsar_radiometric_terrain_corrected_low_res     1     1 10.376269
## 4  55942a7bc63a7fe59b4976ca                                          lgrs     1     1  8.766831
## 5  55942a7bc63a7fe59b4976d2                                          lgrs     1     1  8.766831
## 6  55942a7bc63a7fe59b4976e3                                          lgrs     1     1  8.766831
## 7  55942ad8c63a7fe59b49cf6c                      template_proddescription     1     1  8.296827
## 8  55942ad8c63a7fe59b49cf6d                      template_proddescription     1     1  8.296827
## 9  55942ad8c63a7fe59b49cf6e                      template_proddescription     1     1  8.296827
## 10 55942ad8c63a7fe59b49cf6f                      template_proddescription     1     1  8.296827
##       tf_idf
##        <dbl>
## 1  10.376269
## 2  10.376269
## 3  10.376269
## 4   8.766831
## 5   8.766831
## 6   8.766831
## 7   8.296827
## 8   8.296827
## 9   8.296827
## 10  8.296827
## # ... with 2,728,214 more rows

因此,这些是用tf-idf衡量的描述字段中最“重要”的词,这意味着它们很常见,但不太常用。

nasadesc %>% filter(id == "55942a7cc63a7fe59b49774a") %>% select(desc)

## # A tibble: 1 x 1
##    desc
##   <chr>
## 1   RDR

tf-idf算法将认为这是一个非常重要的词。

连接关键字和描述

因此,现在我们知道描述中的哪个词具有较高的tf-idf,并且在关键字中也有这些描述的标签。

descwords <- full_join(descwords, nasakeyword, by = "id")
descwords

## # A tibble: 11,013,838 x 7
##                          id  word     n         tf      idf    tf_idf              keyword
##                       <chr> <chr> <int>      <dbl>    <dbl>     <dbl>                <chr>
## 1  55942a88c63a7fe59b498280   amp   679 0.35661765 3.181081 1.1344297              ELEMENT
## 2  55942a88c63a7fe59b498280   amp   679 0.35661765 3.181081 1.1344297 JOHNSON SPACE CENTER
## 3  55942a88c63a7fe59b498280   amp   679 0.35661765 3.181081 1.1344297                  VOR
## 4  55942a88c63a7fe59b498280   amp   679 0.35661765 3.181081 1.1344297               ACTIVE
## 5  55942a88c63a7fe59b498280  nbsp   655 0.34401261 4.206658 1.4471433              ELEMENT
## 6  55942a88c63a7fe59b498280  nbsp   655 0.34401261 4.206658 1.4471433 JOHNSON SPACE CENTER
## 7  55942a88c63a7fe59b498280  nbsp   655 0.34401261 4.206658 1.4471433                  VOR
## 8  55942a88c63a7fe59b498280  nbsp   655 0.34401261 4.206658 1.4471433               ACTIVE
## 9  55942a8ec63a7fe59b4986ef    gt   330 0.05722213 3.226352 0.1846187 JOHNSON SPACE CENTER
## 10 55942a8ec63a7fe59b4986ef    gt   330 0.05722213 3.226352 0.1846187              PROJECT
## # ... with 11,013,828 more rows

可视化结果

让我们来看几个示例关键字中最重要的单词。

plot_words <- descwords %>% filter(!near(tf, 1)) %>%
        filter(keyword %in% c("SOLAR ACTIVITY", "CLOUDS",
                              "VEGETATION", "ASTROPHYSICS",
                              "HUMAN HEALTH", "BUDGET")) %>%
        arrange(desc(tf_idf)) %>%
        group_by(keyword) %>%
        distinct(word, keyword, .keep_all = TRUE) %>%
        top_n(20, tf_idf) %>% ungroup() %>%
        mutate(word = factor(word, levels = rev(unique(word))))
plot_words

## # A tibble: 122 x 7
##                          id      word     n        tf      idf   tf_idf    keyword
##                       <chr>    <fctr> <int>     <dbl>    <dbl>    <dbl>      <chr>
## 1  55942a60c63a7fe59b49612f estimates     1 0.5000000 3.172863 1.586432     CLOUDS
## 2  55942a76c63a7fe59b49728d      ncdc     1 0.1666667 7.603680 1.267280     CLOUDS
## 3  55942a60c63a7fe59b49612f     cloud     1 0.5000000 2.464212 1.232106     CLOUDS
## 4  55942a5ac63a7fe59b495bd8      fife     1 0.2000000 5.910360 1.182072     CLOUDS
## 5  55942a5cc63a7fe59b495deb allometry     1 0.1428571 7.891362 1.127337 VEGETATION
## 6  55942a5dc63a7fe59b495ede       tgb     3 0.1875000 5.945452 1.114772 VEGETATION
## 7  55942a5ac63a7fe59b495bd8      tovs     1 0.2000000 5.524238 1.104848     CLOUDS
## 8  55942a5ac63a7fe59b495bd8  received     1 0.2000000 5.332843 1.066569     CLOUDS
## 9  55942a5cc63a7fe59b495dfd       sap     1 0.1250000 8.430358 1.053795 VEGETATION
## 10 55942a60c63a7fe59b496131  abstract     1 0.3333333 3.118561 1.039520     CLOUDS
## # ... with 112 more rows

nasadesc %>% filter(id == "55942a60c63a7fe59b49612f") %>% select(desc)

## # A tibble: 1 x 1
##              desc
##             <chr>
## 1 Cloud estimates

tf-idf算法在仅2个字长的描述中无法很好地工作,或者至少它将对这些字进行非常重的加权。实际上,也许这是不合适的。

library(ggplot2)
library(ggstance)
library(ggthemes)
ggplot(plot_words, aes(tf_idf, word, fill = keyword, alpha = tf_idf)) +
        geom_barh(stat = "identity", show.legend = FALSE) +
        labs(title = "Highest tf-idf words in NASA Metadata Description Fields",
             subtitle = "Distribution of tf-idf for words from datasets labeled with various keywords",
             caption = "NASA metadata from https://data.nasa.gov/data.json",
             y = NULL, x = "tf-idf") +
        facet_wrap(~keyword, ncol = 3, scales = "free") +
        theme_tufte(base_family = "Arial", base_size = 13, ticks = FALSE) +
        scale_alpha_continuous(range = c(0.2, 1)) +
        scale_x_continuous(expand=c(0,0)) +
        theme(strip.text=element_text(hjust=0)) +
        theme(plot.caption=element_text(size=9))

?

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

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

?QQ:3025393450

?QQ交流群:186388004 

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询

欢迎关注微信公众号,了解更多数据干货资讯!

欢迎选修我们的R语言数据分析挖掘必知必会课程!

原文地址:https://www.cnblogs.com/tecdat/p/12036607.html

时间: 2024-10-14 01:51:37

R语言使用tf-idf描述NASA元数据的文字和关键字的相关文章

【数据分析 R语言实战】学习笔记 第四章 数据的图形描述

4.1 R绘图概述 以下两个函数,可以分别展示二维,三维图形的示例: >demo(graphics) >demo(persp) R提供了多种绘图相关的命令,可分成三类: 高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴.标签.标题等. 低级绘图命令:在一个己经存在的图形上加上更多的图形元素,如额外的点.线和标签. 交互式图形命令:允许交互式地用鼠标在一个已经存在的图形.上添加图形信息或者提取图形信息. 使用R语言作图,主要按照以下步骤进行: ①取原始数据,准备好绘图需要的变量. ②

几种经典排序算法的R语言描述

1.数据准备 # 测试数组 vector = c(5,34,65,36,67,3,6,43,69,59,25,785,10,11,14) vector ## [1] 5 34 65 36 67 3 6 43 69 59 25 785 10 11 14 2.R语言内置排序函数 在R中和排序相关的函数主要有三个:sort(),rank(),order(). sort(x)是对向量x进行排序,返回值排序后的数值向量; rank()是求秩的函数,它的返回值是这个向量中对应元素的“排名”; order()

R语言︱监督算法式的情感分析笔记

笔者寄语:本文大多内容来自未出版的<数据挖掘之道>的情感分析章节.本书中总结情感分析算法主要分为两种:词典型+监督算法型. 监督算法型主要分别以下几个步骤: 构建训练+测试集+特征提取(TFIDF指标)+算法模型+K层交叉验证.可与博客对着看:R语言︱词典型情感分析文本操作技巧汇总(打标签.词典与数据匹配等) ------------------------------------------------ 一.TFIDF算法指标的简介 监督式算法需要把非结构化的文本信息转化为结构化的一些指标,

R语言数据挖掘实战系列(2)

二.R语言简介 R语言是一种为统计计算和图形显示而设计的语言环境,具有免费.多平台支持,同时可以从各种类型的数据源中导入数据,具有较高的开放性以及高水准的制图功能.R是一个体系庞大的应用软件,主要包括核心的R标准包和各专业领域的其他包.R在数据分析.数据挖掘领域具有特别优势. R安装 R可在其主页(https://www.r-project.org/)上获得,根据所选择的平台进行下载安装.安装完成之后启动R.为了方便使用R,可使用免费的图形界面编辑器RStudio,可从https://www.r

R语言︱异常值检验、离群点分析、异常值处理

在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数据清洗:删除原始数据集中的无关数据.重复数据.平滑噪声数据.处理缺失值.异常值等 缺失值处理:删除记录.数据插补和不处理 主要用到VIM和mice包 install.packages(c("VIM","mice")) 1.处理缺失值的步骤 步骤: (1)识别缺失数据:

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

R语言基本备忘-统计分析

Part1 相关统计量说明 峰度系数Coefficientof kurtosis http://baike.baidu.com/link?url=gS_sgtNYSRdjLnadNWDDa357DIzJma-tdheAx5eKp0WzTvuH_PYg8hnMNIiP4-DRmewtftVQXXUbtIYzvz4bTq 峰度系数(Kurtosis)用来度量数据在中心聚集程度.在正态分布情况下,峰度系数值是3(但是SPSS等软件中将正态分布峰度值定为0,是因为已经减去3,这样比较起来方便).>3的峰

信用卡评分模型(R语言)

信用卡评分 一.数据准备 1. 问题的准备 ? 目标:要完成一个评分卡,通过预测某人在未来两年内将会经历财务危机的可能性来提高信用评分的效果,帮助贷款人做出最好的决策. ? 背景: – 银行在市场经济中起到至关重要的作用.他们决定谁在什么条件下可以得到融资,并且可以创造或打破投资决策.而市场.社会,以及个人和企业都需要获得贷款. – 信用评分算法,对默认可能性进行猜测,这是银行用来判断贷款是否应该被授予的方法. ? 准备: – 首先是基于个人借贷的场景,确定"违约"的定义: 根据新的B