Korpus formatieren und vorbereiten#

Dateien zusammenfügen und als Dataframe einlesen#

import pandas as pd
import glob
import os
import csv
# Pfad definieren, in dem die .txt-Dateien von WOS liegen
dataPath = "./corpus/wos_data/"
# Liste mit file-Namen in diesem Ordner erstellen
file_list = glob.glob(dataPath + "/*.txt")
# .txt-Dateien als Dataframes einlesen und zusammenfügen
# Um Fehlermeldung zu vermeiden: https://stackoverflow.com/questions/18016037/pandas-parsererror-eof-character-when-reading-multiple-csv-files-to-hdf5
corpus = pd.DataFrame()
for file in file_list:
    frame = pd.read_csv(file, delimiter = '\t', header=0, quoting=csv.QUOTE_NONE, encoding='utf-8', index_col=False)
    corpus = pd.concat([corpus, frame], axis=0)
# 1. Plausibilitätscheck: Erhalten wir hier ebenfalls die besagten 48,847 Ergebnisse?
print('Korpusgröße: ' + str(len(corpus.index)) + ' Paper')
Korpusgröße: 48847 Paper

Korpus-Dataframe formatieren und für spätere Deskription und Analyse als csv speichern#

# Index und ID einfügen, startet bei 1
corpus.index = [x for x in range(1, len(corpus.values)+1)]
corpus["id"] = corpus.index
# Spaltenüberschrifen zur besseren Nachvollziehbarkeit ändern
corpus = corpus.rename(columns={"AU": "authors", "TI": "title", "SO": "publ_title", "SE": "book_series_title"})
corpus = corpus.rename(columns={"DT": "doc_type", "CT": "conf_title", "DE": "author_keyw", "ID": "keywords_plus"})
corpus = corpus.rename(columns={"AB": "abstract", "CR": "references", "NR": "ref_count", "Z9": "times_cited"}) 
corpus = corpus.rename(columns={"BF": "book_authors", "SN": "issn", "EI": "e_issn", "BN": "isbn", "PY": "publ_year"}) 
corpus = corpus.rename(columns={"DI": "doi", "D2": "book_doi", "WC": "wos_cat", "SC": "research_area"})
# Überflüssige Spalten löschen 
# Hier löschen wir sowohl Spalten die in unserer Datei leer sind als auch Spalten, die mit exportiert wurden, aber für unsere weiteren Analysen nicht relevant sind.
corpus = corpus.drop(['AF', 'BA', 'PT', 'LA', 'CY', 'CL', 'SP', 'HO', 'C1', 'RP', 'EM', 'FU', 'FX', 'TC', 'PI', 'PA', 'J9', 'JI', 'PD', 'VL', 'IS', 'PN', 'SU', 'SI', 'BP', 'EP', 'AR', 'EA', 'PG', 'PM', 'OA', 'HC', 'HP', 'DA'], axis=1)
# Dataframe als csv speichern
corpus.to_csv(f'corpus/corpus_all_entries.csv', encoding='utf-8', index=False)
corpus_all_entries = pd.read_csv('corpus/corpus_all_entries.csv')
# corpus_all_entries.head(5) # Test ob korrekt eingelesen
# Test, ob in einer Spalte missing values sind (hier: Spalte 'references')
corpus.authors.isna().sum()
36
# Spalten löschen, in denen publ_year oder AU oder references fehlt
print(str(len(corpus.index)) + ' Einträge vorher.')
print('Einträge ohne Publikationsjahr: ' + str(corpus.publ_year.isna().sum()))
corpus = corpus[corpus['publ_year'].notna()]
print('Einträge ohne Autor*innen: ' + str(corpus.authors.isna().sum()))
corpus = corpus[corpus['authors'].notna()]
print('Einträge ohne Referenzen: ' + str(corpus.references.isna().sum()))
corpus = corpus[corpus['references'].notna()]
print(str(len(corpus.index)) + ' Einträge nach Cleaning.') # Anzahl der übrigen Zeilen ausgeben
48847 Einträge vorher.
Einträge ohne Publikationsjahr: 983
Einträge ohne Autor*innen: 36
Einträge ohne Referenzen: 1202
46626 Einträge nach Cleaning.
# Corpus ohne unvollst. Einträge als csv speichern
corpus.to_csv(f'corpus/corpus_all_with_year-author-references.csv', encoding='utf-8', index=False)
corpus_with_all = pd.read_csv('corpus/corpus_all_with_year-author-references.csv')
# corpus_with_all.head(5) # Test ob korrekt eingelesen
/var/folders/q0/0x5x7rwd62s15f9x0xbjv18h0000gp/T/ipykernel_28875/21472234.py:3: DtypeWarning: Columns (27) have mixed types. Specify dtype option on import or set low_memory=False.
  corpus_with_all = pd.read_csv('corpus/corpus_all_with_year-author-references.csv')

Nach diesen ersten Schritten haben wir nun ein Korpus an 46,626 Publikationen, die den Kritierien unserer Suche entsprechen, die wir aus unserer Forschungsfrage abgeleitet haben. Wir haben den Korpus für eine bessere Verständlichkeit aufbereitet und für uns irrelevante Informationen gelöscht. Die entstandenen csv-Datei können wir nun zuerst deskriptiv untersuchen und u.a. auf ihre Plausibilität untersuchen, bevor wir dann mit der Vorbereitung der Netzwerkbildung beginnen.