Aby móc przetwarzać dane bibliograficzne pobrane z serwisu Scopus, należy wpierw zaprojektować schemat komputerowej bazy danych, w której będą przechowywane informacje o źródłach (ang. sources), dokumentach (ang. do-cuments) i autorach (ang. authors).
Na rys. 6.1 przedstawiamy używany w pakiecie CITAN schemat tabel
LBS
i związków między nimi. Do stworzenia schematu takiej relacyjnej bazy da-nych, zwanej danej w skrócie LBS (ang. local bibliometric storage), używany jest kod SQL zamieszczony w listingach 6.1–6.5.
Ważną cechą LBS jest możliwość grupowania dokumentów w tzw. ba-dania (ang. surveys; niekoniecznie rozłączne) tak, że nie ma potrzeby two-rzenia oddzielnych baz w przypadku przeprowadzania analizy różnych prób.
Dzięki temu można w prosty sposób aktualizować informacje o dokumentach (np. o liczbie ich cytowań). Dane te będą dostępne we wszystkich badaniach.
Utwórzmy zatem LBS na potrzeby przeprowadzanej przez nas analizy.
Najpierw należy załadować bibliotekę CITAN w środowisku R.
> library("CITAN"); # ładowanie biblioteki Loading required package: DBI
Loading required package: RSQLite Loading required package: RGtk2 Loading required package: hash
hash-2.1.0 provided by Decision Patterns Loading required package: ADGofTest
Połączmy się z bazą danych SQLite, która będzie przechowywać wszelkie Połączenie
z bazą danych
informacje w pliku lokalnym Scopus-dr.db.
> conn <- lbsConnect("Scopus-dr.db"); # połączenie z bazą danych Od tej pory obiekt conn reprezentuje nawiązane połączenie i będzie służył do komunikacji z RDBMS.
Aby utworzyć omówiony wyżej schemat tabel oraz widoków pomocni- Tworzenie LBS
czych (ang. views), wywołujemy następującą funkcję.
> lbsCreate(conn); # tworzenie LBS
Creating table ’Biblio_Categories’... DONE.
ANALIZAEMPIRYCZNADANYCHBIBLIOMETRYCZNYCH6.2
Rysunek 6.1: Schemat bazy danych tworzonej przez funkcję lbsCreate().
Proces tworzenia LBS zakończył się powodzeniem. W następnym podroz-dziale omówimy próbę, na której przeprowadzimy przykładowe badanie bi-bliometryczne. Pokażemy także, jak w pakiecie CITAN zaimportować i wstęp-nie przetworzyć dane pobrane z serwisu Scopus.
6.3
Próba badawcza
Próba badawcza, którą poddamy analizie składa się z publikacji w dziedzinie naukometrii i webometrii. Badając taki zbiór prac, rzecz jasna, nie otrzy-mamy pełnego obrazu dorobku autorów, zwłaszcza gdy nie jest to ich pod-stawowy obszar badawczy. Załóżmy jednak, że naszym celem jest określenie grupy osób, które będą kandydatami do uzyskania nagrody za zasługi właśnie w tych dziedzinach. Innymi słowy, w naszym badaniu nie oceniamy całego dorobku osób, które mają jakikolwiek wkład w rozwój naukometrii, lecz tylko naukometryczny podzbiór tego dorobku.
Użyliśmy następujących zapytań (kwerend w wyszukiwarce Scopus): Zapytania
• TITLE(index quantify individual scientific research output)
— 3 publikacje, w tym praca [107],
• 795 publikacji cytujących pracę [107],
• TITLE-ABS-KEY(bibliometric*) OR TITLE-ABS-KEY(scientometric*)
OR TITLE-ABS-KEY(webometric*) — 6870 publikacji; wyszukiwanie na podstawie słów kluczowych,
• SRCTITLE(Scientometrics) OR SRCTITLE(Informetrics) OR SRCTITLE(Cybermetrics) OR SRCTITLE("Annual Review of Information Science and Technology")
OR SRCTITLE("Journal of the American Society
for Information Science") — 5969 publikacji; wyszukiwanie na podstawie źródeł, uwzględniające m.in. takie wiodące czasopisma, jak Scientometrics, Journal of Informetrics, Journal of the American So-ciety for Information Science and Technology.
Analizowane przez nas dane bibliograficzne zostały pobrane 27 marca 2011 r. w godz. 13:33–14:05. Dostęp do serwisu Scopus uzyskaliśmy z kom-putera Biblioteki Głównej Politechniki Warszawskiej.
Ze względu na to, iż nasza licencja ogranicza liczbę wyświetlanych re-kordów do 2000, zapytania musiały zostać podzielone na części za pomocą
dyrektywy PUBYEAR. Do eksportowania rezultatów używaliśmy następują-cych ustawień: Export format = "Comma separated file, .csv (e.g.
Excel)"i Output = "Complete format". W wyniku otrzymaliśmy 10 plików CSV o łącznym rozmiarze 77 MB. Zwróćmy uwagę, że powyższe zapytania nie zwracają rozłącznych zbiorów dokumentów. Nie jest to jednak dla nas przeszkodą, ponieważ biblioteka CITAN uwzględnia taką ewentualność.
6.3.1 Importowanie danych pobranych z bazy Scopus
Jako że nasze dane bibliograficzne pochodzą z serwisu Scopus, zaimportujmy
Importowanie źródeł indeksowanych przez Scopus
informacje o źródłach pokrywanych przez tę bazę. Następująca funkcja umieszcza je w LBS.
> Scopus_ImportSources(conn); # importowanie źródeł (Scopus)
Importing Scopus ASJC codes... OK, 334 records added.
Importing country list... OK, 112 records added.
Importing Scopus source list... OK, 29913 of 30017 records added;
53762 ASJC codes processed.
[1] TRUE
Niektóre tytuły (dotyczy to przede wszystkim materiałów konferencyjnych) nie zostały wprowadzone z powodu braku informacji o numerach ISSN. Je-steśmy gotowi do wczytania pobranych plików CSV oraz zaimportowania ich do LBS6.
Importowanie plików CSV
> data <- Scopus_ReadCSV("Hirsch.csv"); # wczytanie pliku (1)
> lbsImportDocuments(conn, data, "DR"); # importowanie do LBS
Importing documents and their authors...
OK, 3 of 3 records added to DR/Hirsch.csv.
Jak widzimy, powyższy plik zawierał dane o 3 dokumentach (wynik zwrócony przez pierwszą kwerendę na s. 183). Zaimportujmy kolejny z nich (druga kwerenda).
> data <- Scopus_ReadCSV("Hirsch_CITE.csv"); # wczytanie pliku (2)
> lbsImportDocuments(conn, data, "DR"); # importowanie do LBS
6W przypadku kilku dokumentów pojawiły się błędy parsera spowodowane nieprze-strzeganiem przez bazę Scopus standardu CSV. Wszystkie wyjątki zostały wychwycone przez funkcję Scopus_ReadCSV()(wraz ze wskazaniem numeru problematycznego wier-sza), dzięki czemu można je było poprawić za pomocą zwykłego edytora tekstowego. Więk-szość z nich dotyczyła niepoprawnie wstawionych cudzysłowów.
Importing documents and their authors...
OK, 794 of 795 records added to DR/Hirsch_CITE.csv.
Jeden z dokumentów nie został dodany, gdyż był już udostępniony przez plik Hirsch.csv. Informacje o nim (w tym liczba cytowań) zostały jednak zaktualizowane. Takie zachowanie jest ważne np. w przypadku pobierania danych bibliograficznych w większych odstępach czasowych.
Zaimportujmy pozostałe pliki.
> ... # ładowanie i importowanie pozostałych plików
Importing documents and their authors...
OK, 1933 of 1941 records added to DR/BibSciWeb_2002-2006.csv.
Importing documents and their authors...
OK, 1353 of 1452 records added to DR/BibSciWeb_2007_2008_2011.csv.
Importing documents and their authors...
OK, 1388 of 1574 records added to DR/BibSciWeb_2009_2010.csv.
Importing documents and their authors...
OK, 1903 of 1903 records added to DR/BibSciWeb_BEF2002.csv.
Importing documents and their authors...
OK, 1492 of 1804 records added to DR/5journals_1998-2005.csv.
Importing documents and their authors...
OK, 291 of 353 records added to DR/5journals_2006.csv.
Importing documents and their authors...
OK, 1355 of 1925 records added to DR/5journals_AFT2006.csv.
Importing documents and their authors...
OK, 1555 of 1887 records added to DR/5journals_BEF1998.csv.
Z powodu mało wydajnej komunikacji z bazą SQLite w środowisku R, w obecnej implementacji proces importowania powyższych danych zajął na referencyjnym komputerze około 21 minut.
6.3.2 Wstępne przetwarzanie i czyszczenie danych
Niestety, dane pobrane z serwisu Scopus, prócz braku ścisłej zgodności z formatem CSV, nie są pozbawione błędów jeszcze innego rodzaju. Czę-sto występuje tu niejednoznaczność reprezentacji przechowywanych obiek-tów. Wiele dokumentów i wielu autorów nie posiada unikalnych identyfika-torów. Na przykład prof. Janina Maria Kowalska-Malinowska może widnieć w bazie jako Kowalska J., Kowalska-Malinowska J.M. czy nawet Kowalska J.M.M.
W celu wykrycia tego typu przypadków zaimplementowaliśmy dwie funk-cje wskazujące użytkownikowi grupy dokumentów i autorów, które poten-cjalnie powinny zostać złączone. Wyniki wyszukiwania prezentowane są w okienku dialogowym, w którym można wybrać identyfikatory obiektów przeznaczone do poprawienia. Następnie, za pomocą innych funkcji, wpro-wadza się stosowne zmiany w LBS.
Uwaga: aktualna wersja biblioteki CITAN zawiera implementacje ekspery-mentalnych wersji algorytmów wyszukiwania niejednoznaczności. Sposób ich użycia został opisany w dokumentacji technicznej biblioteki. Udoskonalenie tych procedur pozostawiamy jako ciekawy temat do przyszłych badań. Jed-nakże, jak zobaczymy za chwilę, uzyskane wyniki już teraz zapowiadają się obiecująco.
Zajmijmy się najpierw wyszukiwaniem duplikatów dokumentów. Zaimple-mentowany przez nas algorytm stosuje w tym celu pewną miarę podobieństwa między tytułami.
Wywołajmy następującą funkcję.
Czyszczenie danych dot.
do-kumentów > ident <- lbsFindDuplicateTitles(conn, aggressiveness=2,
ignoreTitles=c("In this issue%", "%In this issue", "%Editorial",
"%Introduction", "Letter to %", "%Preface"));
Rys. 6.2 przedstawia przykładową, automatycznie wskazaną przez po-wyższą procedurę, grupę powtarzających się dokumentów. Zwróćmy uwagę na problem z polem Authors.
Rysunek 6.2: Jedna z grup powtarzających się dokumentów wskazana przez funkcję lbsFindDuplicateTitles().
Wybraliśmy do usunięcia (ręcznie) 43 dokumenty.
> lbsDeleteDocuments(conn, ident); # usuwanie wybranych dokumentów
> dbCommit(conn); # zatwierdzenie zmian
[1] TRUE
Podobną czynność należy przeprowadzić dla autorów. Możemy tego do- Czyszczenie danych dot.
autorów
konać, wywołując funkcję:
> ident <- lbsFindDuplicateAuthors(conn, aggressiveness=2)
Tym razem wybraliśmy 56 grup autorów (spośród kilkuset). Stosując od-powiednie parametry wejściowe powyższej procedury (zob. rozdz. B.4.2), roz-patrywaliśmy m.in. autorów o największej produktywności, największej łącz-nej liczbie cytowań oraz nazwiska występujące w zestawieniach zamieszczo-nych w rozdz. 6.4. Przykładowe dwa zrzuty ekranu przedstawiamy na rys. 6.3.
Na koniec należy wprowadzić zmiany do LBS:
> lbsMergeAuthors(conn, ident); # scalanie grup autorów
> dbCommit(conn); # zatwierdzenie zmian
Rysunek 6.3: Przykładowe grupy powtarzających się autorów wskazane przez funkcję lbsFindDuplicateAuthors().
6.3.3 Opis próby
Dokonajmy wstępnego opisu rozpatrywanej próby. Rys. 6.4–6.7 przedstawiają Statystyki
opisowe
wykresy wygenerowane przez funkcję lbsDescriptiveStats().
> lbsDescriptiveStats(conn, surveyDescription="DR"); # opis próby
Number of sources in the database: 29913.
Number of documents in the database: 12024.
Number of authors in the database: 16282.
Data set restrictions:
Survey: DR.
Document types: <ALL>.
Omówmy pokrótce uzyskane wyniki.
Na rys. 6.4 zamieściliśmy wykres słupkowy typów dokumentów
znajdu-Typy
dokumentów jących się w bazie. Do analizy autorów w następnym podrozdziale wykorzy-stamy tylko niektóre z nich: ar (Article; 8353 dokumentów), re (Review;
1110), no (Note; 194), sh (Short Survey; 90). Z dużą dozą prawdopodo-bieństwa oznaczają one bowiem prace recenzowane (razem 9747 dokumentów i 13953 autorów).
ar re ed cp le no sh ip er bk
02000400060008000
Typy dokumentow
Rysunek 6.4: Próba badawcza: typy dokumentów (which=1).
Przy założeniu, że wszystkie publikacje w ramach jednego czasopisma
Klasyfikacja tematyczna
dokumentów bądź materiałów konferencyjnych wpisują się we wspólną tematykę, możemy spróbować dokonać ich klasyfikacji na podstawie kodów ASJC. Stosowny wy-kres kołowy przedstawiamy na rys. 6.5. Jak widzimy, większość prac w na-szej próbie badawczej pochodzi z następujących dziedzin: informatyka, nauki społeczne, medycyna (gdzie badania bibliometryczne są bardzo popularne) i inżynieria. W naszym zbiorze jest też kilkaset prac w kategorii matematyka oraz wspomaganie podejmowania decyzji.
Mathematics
Social Sci.
Decision Sci.
Medicine Other Engineering
Biochem., Genetics, Molec. Biol.
Computer Sci.
Kategorie ASJC dokumentow
Rysunek 6.5: Próba badawcza: kategorie ASJC dokumentów (which=6).
Rys. 6.6 przedstawia wykresy skrzynkowe liczby stron w zależności od Liczba stron wg typu
typu dokumentu. Z kolei na rys. 6.7 pokazujemy histogram liczby publikacji przypadającej na jednego autora (histogram produktywności). Obserwujemy,
że ok. 78% autorów z naszej próby posiada w dorobku tylko jedną publikację Liczba
publikacji na autora
(rzecz jasna, w rozpatrywanych dziedzinach). Jednak proporcja ta z pew-nością w rzeczywistości jest mniejsza, ponieważ przejrzeliśmy tylko kilka-set potencjalnych duplikatów nazwisk zwróconych przez funkcję lbsFind-DuplicateAuthors().
Wykresy na rys. 6.8 przedstawiają liczbę opublikowanych dokumentów w zależności od roku ukazania się drukiem. Zgodnie z wynikami uzyskanymi przez innych badaczy [por. np. 103], obserwujemy wykładniczy wzrost liczby publikacji w czasie. Dopasowana za pomocą metody najmniejszych kwadra-tów krzywa wykładnicza dla lat 1973–2010 jest postaci
y = exp (0,0969x− 187,8) ,
gdzie x — rok, y — liczba publikacji (model nieliniowy sprowadzony do modelu liniowego; współczynnik determinacji R2 = 0,9456).
ar bk cp ed er ip le no re sh
125102050200500
Liczba stron
Rysunek 6.6: Próba badawcza: liczba stron dokumentów w zależności od typu (which=5).
1 3 5 7 9 12 15 18 21 24 27 31 36 41 48 59 81 98
02000600010000
Liczba dokumentow na autora
Rysunek 6.7: Próba badawcza: liczba publikacji przypadająca na autora (which=7).
1971 1975 1979 1983 1987 1991 1995 1999 2003 2007 2011
02004006008001000
Rok publikacji
1980 1990 2000 2010
02004006008001000
Bibliometria 1973−2010
Rok
Dokumenty
exp(0.0969x−187.8)
Rysunek 6.8: Próba badawcza: czas publikacji dokumentów (which=2; po-wyżej). Poniżej dopasowana za pomocą MNK krzywa wykładnicza postaci y = exp (0,0969x− 187,8).
Rys. 6.9 przedstawia empiryczny rozkład liczby cytowań wszystkich
roz-Liczba cytowań
patrywanych publikacji. W ostatnim podrozdziale postaramy się zweryfiko-wać hipotezę dotyczącą rozkładu liczby cytowań dla poszczególnych auto-rów, aby uzasadnić dobór rodziny Pareto II rodzaju w rozdziale 4 (zwróćmy uwagę, że mieszanina rozkładów P2 niekoniecznie musi mieć taki rozkład).
Ponadto, na rys. 6.10 prezentujemy wykresy skrzynkowe liczby cytowań prac cytowanych co najmniej raz w zależności od typu dokumentu.
Zweryfikujmy w tym miejscu obiegową opinię [por. 92] głoszącą, że prace przeglądowe są częściej cytowane niż zwykłe artykuły.
> id_ar <- lbsSearchDocuments(conn, surveyDescription="DR", documentTypes="Article"); # pobranie wszystkich artykułów
> info_ar <- lbsGetInfoDocuments(conn, id_ar);
> cit_ar <- sapply(info_ar, function(x) x$Citations);
> summary(cit_ar); # statystyki położenia
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 1.000 3.000 8.716 9.000 836.000
> id_re <- lbsSearchDocuments(conn, surveyDescription="DR",
documentTypes="Review"); # pobranie wszystkich prac przeglądowych
> info_re <- lbsGetInfoDocuments(conn, id_re);
> cit_re <- sapply(info_re, function(x) x$Citations);
> summary(cit_re); # statystyki położenia
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 1.00 5.00 11.39 12.00 550.00
Zastosujmy test sum rang Wilcoxona.
> wilcox.test(cit_ar, cit_re, alternative="less");
Wilcoxon rank sum test with continuity correction
data: cit_ar and cit_re
W = 4135932, p-value = 1.886e-09
alternative hypothesis: true location shift is less than 0
Widzimy, że na każdym sensownym poziomie istotności powinniśmy odrzucić hipotezę zerową na rzecz hipotezy alternatywnej głoszącej, że artykuły w cza-sopismach są średnio rzadziej cytowane niż prace przeglądowe (W = 4135932, p-wartość ≃ 0).
0 6 13 22 31 40 49 58 67 76 85 95 107 121 149 193 359
050015002500
Liczba cytowan na dokument
Rysunek 6.9: Próba badawcza: liczba cytowań na dokument (which=3).
ar bk cp ed le no re sh
151050500
Liczba cytowan cytowanych dokumentow
Rysunek 6.10: Próba badawcza: liczba cytowań cytowanych dokumentów w zależności od typu (which=4).