-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path004_kb_fetch_publisher.Rmd
192 lines (155 loc) · 8.95 KB
/
004_kb_fetch_publisher.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
---
title: "Publisher League Global"
output: github_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
warning = FALSE,
message = FALSE)
```
## About
This executable report describes how data about the global market shares of publishers were retrieved from the Web of Science (WoS) in-house database hosted by the [German Competence Center for Bibliometrics (KB)](http://www.bibliometrie.info/). This document is written in R Markdown. If you have access to WoS-KB data infrastructure, you will be able to replicate the methods used by calling
```r
require(rmarkdown)
require(tidyverse)
require(RJDBC)
require(rJava)
require(writexl)
rmarkdown::render("004_kb_fetch_publisher_global.Rmd")
```
## Workflow
### Obtain publication data from the Web of Science database hosted by the German Competence Centre for Bibliometrics
#### Connect to database
```{r}
# deal with rJava memory allocation
# https://stackoverflow.com/questions/34624002/r-error-java-lang-outofmemoryerror-java-heap-space
options(java.parameters = "-Xmx1024m")
require(tidyverse)
require(RJDBC)
require(rJava)
.jinit()
jdbcDriver <-
JDBC(driverClass = "oracle.jdbc.OracleDriver", classPath = "../inst/jdbc_driver/ojdbc8.jar") # you may need to change the path to your db driver
jdbcConnection <-
dbConnect(
jdbcDriver,
"jdbc:oracle:thin:@//biblio-p-db01:1521/bibliodb01.fiz.karlsruhe",
# login credentials are stored in the .Rprofile file
Sys.getenv("kb_user"),
Sys.getenv("kb_pwd")
)
```
#### Query
```{sql connection=jdbcConnection, output.var="rp_publisher"}
select
wos_b_2019.items.pubyear,
wos_b_2019.issues.issn,
count(distinct(ut_eid)) as pubs
from
wos_b_2019.items
inner join
wos_b_2019.databasecollection
on wos_b_2019.databasecollection.fk_items = wos_b_2019.items.pk_items
inner join
wos_b_2019.issues
on wos_b_2019.issues.pk_issues = wos_b_2019.items.fk_issues
where
wos_b_2019.databasecollection.edition_value in (
'WOS.SCI', 'WOS.SSCI', 'WOS.AHCI'
)
and wos_b_2019.items.doctype in (
'Article', 'Review'
)
and wos_b_2019.items.pubyear in (
2014, 2015, 2016, 2017, 2018
)
group by
wos_b_2019.items.pubyear,
wos_b_2019.issues.issn
```
```{r}
head(rp_publisher) %>%
knitr::kable()
# dump
write_csv(rp_publisher, "../data/publisher_league_14_18.csv")
```
### Get most frequent publisher and journal names from Crossref
Publisher names used in the Web of Science are ambigue, and sometimes journals can change the publisher. To obtain most frequent publisher and journals names, Crossref was queried for every distinct journal by ISSN as described in [`fetch_data.R`](fetch_data.R).
As a result, a [matching table between Crossref and the Web of Science journals](data/cr_wos.csv) was created. In the following, this table is joined with the WoS data.
```{r}
cr_journals <- readr::read_csv("../data/cr_wos.csv") %>%
# merge springer nature brands
mutate(publisher = ifelse(grepl("Springer", publisher, fixed = FALSE), "Springer Nature", publisher))
issn_l <- readr::read_tsv("../data/20190818.ISSN-to-ISSN-L.txt") %>%
# manual fix Journal - American Water Works
add_row(ISSN = "2164-4535", `ISSN-L` = "0003-150X")
rp_df <- rp_publisher %>%
left_join(issn_l, by = "ISSN") %>%
left_join(cr_journals, by = c(ISSN = "issn")) %>%
distinct()
```
Crossref indexed `r rp_df %>% filter(!is.na(publisher)) %>% distinct(ISSN) %>% nrow() / rp_df %>% distinct(ISSN) %>% nrow() * 100` % of Web of Science journals.
The following table shows the number of journals per publisher.
```{r}
rp_df %>%
distinct(ISSN, publisher) %>%
count(publisher, sort = TRUE) %>%
mutate(prop = n /sum(n) * 100)
```
Next, the number and proportion of original articles and reviews published per publisher is presented:
```{r}
rp_df %>%
group_by(publisher) %>%
summarise(n = sum(PUBS)) %>%
mutate(prop = n /sum(n) * 100) %>%
arrange(desc(prop))
```
### 3. Obtain open access status information
Bruns et al. provide a matching table for fully open access journals, joining multiple sources into one dataset.
Bruns, A., Lenke, C., Schmidt, C., & Taubert, N. C. (2019). ISSN-Matching of Gold OA Journals (ISSN-GOLD-OA) 3.0. Bielefeld University. doi:[10.4119/unibi/2934907](https://doi.org/10.4119/unibi/2934907)
The linking ISSN is used for matching.
```{r}
u <- "https://pub.uni-bielefeld.de/download/2934907/2934908/ISSN_Gold-OA_3.0.csv"
bie_oa <- readr::read_csv(u) %>%
# remove missing entries with missing ISSN_L
filter(!is.na(ISSN_L))
# add info to rp_df
rp_df_oa <- rp_df %>%
mutate(oa_journal = `ISSN-L` %in% bie_oa$`ISSN_L`)
```
The following table shows the number and proportion of open access journals
```{r}
rp_df_oa %>%
distinct(`ISSN-L`, oa_journal) %>%
count(oa_journal) %>%
mutate(prop = n / sum(n))
```
### 4. Data coding and dump
`CSV`-based dump
```{r}
rp_df_oa %>%
select(
issn_wos = ISSN,
publication_year = PUBYEAR,
articles = PUBS,
journal_title, publisher, oa_journal,
issn_l = `ISSN-L`
) %>%
write_csv("../data/journal_publisher_14_18.csv")
```
Dump to Excel
```{r}
readr::read_csv("../data/journal_publisher_14_18.csv") %>%
writexl::write_xlsx("../data/journal_publisher_14_18.xlsx")
```
Data Schema:
Data Schema:
|Variable |Description |Source |
|:------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------|
|`issn_wos` |ISSN, a standardized journal id. |KB Web of Science: `wos_b_2019.issues.issn` |
|`publication_year` |Year of publication, obtained from KB Web of Science |KB Web of Science: `wos_b_2019.items.pubyear` |
|`articles` |Number of original articles and reviews published. |KB Web of Science: Grouped counts over `wos_b_2019.issues.issn` and `wos_b_2019.items.pubyear` |
|`journal_title` |Most frequently used journal title in terms of articles published between 2014 - 2018. If missing, the journal was not indexed in Crossref |Crossref |
|`publisher` |Most frequently used publisher name in terms of articles published between 2014 - 2018. If missing, the journal was not indexed in Crossref |Crossref |
|`oa_journal` |Is the journal publishing all articles open access without delay (full open access)? |Bielefeld GOLD OA List V3 |
|`issn_l` |Linking ISSN, a journal id that groups the different media of the same serial publication, e.g. ISSN for print with electronic issn. |CIEPS |