Diamond Open Access

Note

Die Skalen in den Grafiken zeigen die absoluten Antwortzahlen.

Diamond Open Access#

Hide code cell source
# In diesem Notebook benötigte Funktionen
import plotly.graph_objects as go
import numpy as np
import pandas as pd

# Einlesen der CSV-Datei
data = pd.read_csv("OpenAccessUmfrage_DATA_2024-02-20_1219.csv")

PERSONAL_INFO_MAPPING = {
    1: "FB 01: Rechtswissenschaften",
    2: "FB 02: Wirtschaftswissenschaften",
    3: "FB 03: Gesellschaftswissenschaften und Philosophie",
    4: "FB 04: Psychologie",
    5: "FB 05: Evangelische Theologie",
    6: "FB 06: Geschichte und Kulturwissenschaften",
    7: "FB 09: Germanistik und Kunstwissenschaften",
    8: "FB 10: Fremdsprachliche Philologien",
    9: "FB 12: Mathematik und Informatik",
    10: "FB 13: Physik",
    11: "FB 15: Chemie ",
    12: "FB 16: Pharmazie",
    13: "FB 17: Biologie",
    14: "FB 19: Geographie",
    15: "FB 20: Medizin",
    16: "FB 21: Erziehungswissenschaften",
    17: "an einem der wissenschaftlichen Zentren",
    18: "an einer Serviceeinrichtung",
    19: "in einem Museum / einer Sammlung",
    20: "sonstige Einrichtung"
}
"""Mapping der Werte in 'personal_info_2_f161d3' auf entsprechende Institute"""


def create_plot(answerlist: list, data_frame: pd.DataFrame, x_row: str | list[str], y_row: str, title: str = ''):
    fig = go.Figure()
    answers_field = data_frame[y_row].drop_duplicates().dropna()

    if not isinstance(x_row, list):
        answers_opts = data_frame[x_row].drop_duplicates().dropna()
        grouped_df = [
            [a] +
            [
                data_frame.loc[data_frame[x_row] == a].loc[data_frame[y_row] == b].shape[0] for b in answers_field
            ] for a in answers_opts
        ]
    else:
        grouped_df = [[a] + [np.sum(data_frame.loc[data_frame[y_row] == b][a]) for b in answers_field] for a in x_row]

    grouped_df = [  # Add the column containing the aggregated information
        i + [np.sum(i[1:])] for i in grouped_df
    ]
    grouped_df = pd.DataFrame(grouped_df, columns=['Answer'] + answers_field.tolist() + ['Alle'])
    grouped_df = grouped_df.sort_values('Answer')  # Antworten in der Reihenfolge des Mappings anzeigen
    columns = answers_field.tolist() + ['Alle']

    # interaktives Balkendiagramm erstellen
    for col in columns:
        fig.add_trace(go.Bar(x=grouped_df['Answer'],
                             y=grouped_df[col],
                             name=col,
                             hovertext = answerlist,
                             hovertemplate="%{hovertext}, %{y}",
                             visible=col == 'Alle',
                             marker=dict(color=grouped_df[col],
                                         cauto=True, colorscale='viridis')))
    fig.update_layout(title="",  # Die Frage soll im Markdown dargestellt werden, sonst hier Variable title einfügen
                      xaxis_title='Antworten',
                      yaxis_title='Anzahl',
                      barmode='group')
    #fig.update_traces(marker_line_width=1.5, marker_line_color="black")  # schwarze Randlinie
    fig.update_layout(updatemenus=[
        dict(
            active=len(columns) - 1,
            buttons=[dict(
                label=columns[c],
                method="update",
                args=[{"visible": [d == c for d in range(len(columns))]},
                      # {"title": f"{title} - {columns[c]}"} # Die Frage soll im Markdown dargestellt werden
                      ]
            ) for c in range(len(columns))],
            x=0.25,  # Position des Dropdown-Menüs (x-Koordinate)
            xanchor="right",
            y=1.5,  # Position des Dropdown-Menüs (y-Koordinate)
            yanchor="top"
        )
    ])
    fig.update_xaxes(tickangle=30)
    
    return fig


# Interaktive Funktion für das Dropdown-Menü
def show_plot(answerlist: list, df: pd.DataFrame, answer_tag: str | list[str], answer_mapping: dict, title: str,
              personal_info_field: str = 'personal_info_2_f161d3'):
    """
    Creates a new plot including a Dropdown select based on the personal-info field. Can be used for one column
    containing the answers or multiple columns. If the answer_tag parameter is provided as a list, a list of
    column names are expected containing the different answers in a multiple choice question. The column names will be
    translated using the answer_mapping dictionary. If the answer_tag parameter is only of type string, only one column
    is assumed and the answer_mapping dict, will be used to translate the answer keys in the column.

    :param df: The DataFrame containing the data to plot.
    :param answer_tag: The name of the column(s) containing the answers.
    :param answer_mapping: A mapping to _translate_ the columnnames/answerkeys for human presentation
    :param title: The title of the plot.
    :param personal_info_field: The column containing the personal information used to create the dropdown.
    :return: The figure to display for example in jupyter notebook.
    :raises KeyError: If an answer key (or column name) is not provided in the answer_mapping dict.
    """
    df = pd.DataFrame(df)

    df[personal_info_field] = df[personal_info_field].map(PERSONAL_INFO_MAPPING)
    if not isinstance(answer_tag, list):
        df[answer_tag] = df[answer_tag].map(answer_mapping)

    df_sorted = df.sort_values(
        by=personal_info_field,
        key=lambda x: pd.Categorical(x, categories=PERSONAL_INFO_MAPPING.values(),
                                     ordered=True)
    )  # Antworten in der Reihenfolge des Mappings anzeigen

    df_sorted = df_sorted[
        (answer_tag + [personal_info_field]) if isinstance(answer_tag, list) else [answer_tag,
                                                                                   personal_info_field]
    ]
    if isinstance(answer_tag, list):
        answer_mapping.update({personal_info_field: personal_info_field})
        answer_tag = list(map(lambda x: answer_mapping[x], answer_tag))
        df_sorted.rename(columns=answer_mapping, inplace=True)

    fig = create_plot(answerlist, df_sorted, answer_tag, personal_info_field, title)

    return fig

Frage 1#

Single Choice

Haben Sie bereits einen Artikel in einer Diamond-OA-Zeitschrift veröffentlicht?

Hide code cell source
# Mapping der Werte in 'diamond_1' auf entsprechende Antworten
oa_mapping = {
 1: "ja, mehrmals", 2: "ja, ein Mal", 3: "nein, noch nie", 4: "nein, aber ich plane es in Zukunft", 5: "weiß ich nicht genau" 
}
answerlist = ["ja, ein Mal", "ja, mehrmals", "nein, aber ich plane es in Zukunft", "nein, noch nie", "weiß ich nicht genau"]
answer_id = 'diamond_1'
question = 'Haben Sie bereits einen Artikel im einer Diamond-OA-Zeitschrift veröffentlicht?'
fig = show_plot(answerlist, data, answer_id, oa_mapping, question)
display(fig)

Frage 2#

Single Choice

Haben Sie bereits eine Monographie oder einen Sammelband im Diamond OA veröffentlicht?

Hide code cell source
# Mapping der Werte auf entsprechende Antworten
oa_mapping = {
 1: "ja, mehrmals", 2: "ja, ein Mal", 3: "nein, noch nie", 4: "nein, aber ich plane es in Zukunft", 5: "weiß ich nicht genau" 
}
answerlist = ["ja, ein Mal", "ja, mehrmals", "nein, aber ich plane es in Zukunft", "nein, noch nie", "weiß ich nicht genau"]
answer_id = 'diamond_2'
question = 'Haben Sie bereits eine Monographie oder einen Sammelband im Diamond OA veröffentlicht?'
fig = show_plot(answerlist, data, answer_id, oa_mapping, question)
display(fig)

Frage 3#

Single Choice

Haben Sie bereits eine Schriftenreihe im Diamond OA veröffentlicht?

Hide code cell source
# Mapping der Werte auf entsprechende Antworten
oa_mapping = {
 1: "ja, mehrmals", 2: "ja, ein Mal", 3: "nein, noch nie", 4: "nein, aber ich plane es in Zukunft", 5: "weiß ich nicht genau" 
}
answerlist = ["ja, ein Mal", "nein, aber ich plane es in Zukunft", "nein, noch nie", "weiß ich nicht genau"]
answer_id = 'diamond_3'
question = 'Haben Sie bereits eine Schriftenreihe im Diamond OA veröffentlicht?'
fig = show_plot(answerlist, data, answer_id, oa_mapping, question)
display(fig)

Frage 4#

Multiple Choice

Wenn Sie schon einmal im Diamond OA erstveröffentlicht haben: Wo?

  • Antwort A) in einem wissenschaftlichen Journal

  • Antwort B) auf dem Publikationsserver der UB Marburg

  • Antwort C) auf dem Publikationsserver/Repositorium einer anderen UB

  • Antwort D) auf einem fachspezifischen Repositorium

  • Antwort E) auf einem allgemeinen Repositorium

  • Antwort F) auf einem Preprint-Server

  • Antwort G) in wissenschaftlichen Netzwerken

  • Antwort H) auf der Homepage meiner Arbeitsgruppe/meines Projektes

  • Antwort I) auf meiner privaten Homepage

  • Antwort J) sonstiges

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['diamond_1_1_a50f46___1', 'diamond_1_1_a50f46___2', 'diamond_1_1_a50f46___3', 
                  'diamond_1_1_a50f46___4', 'diamond_1_1_a50f46___5', 'diamond_1_1_a50f46___6', 
                  'diamond_1_1_a50f46___7', 'diamond_1_1_a50f46___8', 'diamond_1_1_a50f46___9', 
                  'diamond_1_1_a50f46___10']
column_names = [
    "Antwort A)",
    "Antwort B)", 
    "Antwort C)", 
    "Antwort D)", 
    "Antwort E)", 
    "Antwort F)", 
    "Antwort G)", 
    "Antwort H)", 
    "Antwort I)", 
    "Antwort J)"
    ]
answerlist = [
    "in einem wissenschaftlichen Journal",
    "auf dem Publikationsserver der UB Marburg",
    "auf dem Publikationsserver/Repositorium einer anderen UB",
    "auf einem fachspezifischen Repositorium",
    "auf einem allgemeinen Repositorium",
    "auf einem Preprint-Server",
    "in wissenschaftlichen Netzwerken",
    "auf der Homepage meiner Arbeitsgruppe/meines Projektes",
    "auf meiner privaten Homepage",
    "sonstiges"          
    ]


title = ''

# Call the show_plot function with the appropriate parameters
fig = show_plot(answerlist, data, answer_columns,
                {answer_columns[i]: column_names[i] for i in range(len(answer_columns))}, title)

display(fig)

Frage 5#

Multiple Choice

Wenn Sie schon einmal im Diamond OA veröffentlicht haben: Sind Sie über das Publizieren eigener Texte hinaus aktiv im Diamond OA?

  • Antwort A) ja, ich habe ein Diamond OA Journal (mit-)gegründet

  • Antwort B) ja, ich bin Editor*in/Herausgeber*in eines oder mehrerer Diamond OA Journals

  • Antwort C) ja, ich bin Reviewer*in/Gutachter*in für ein oder mehrere Diamond OA Journals

  • Antwort D) ja, sonstiges

  • Antwort E) nein

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['diamond_1_2_4da7ad___1', 'diamond_1_2_4da7ad___2', 'diamond_1_2_4da7ad___3', 
                  'diamond_1_2_4da7ad___4', 'diamond_1_2_4da7ad___5']
column_names = [
    "Antwort A)",
    "Antwort B)", 
    "Antwort C)", 
    "Antwort D)", 
    "Antwort E)"
    ]
answerlist = [
    "ja, ich habe ein Diamond OA Journal (mit-)gegründet",
    "ja, ich bin Editor*in/Herausgeber*in eines oder mehrerer Diamond OA Journals",
    "ja, ich bin Reviewer*in/Gutachter*in für ein oder mehrere Diamond OA Journals",
    "ja, sonstiges",
    "nein"        
    ]

title = ''

# Call the show_plot function with the appropriate parameters
fig = show_plot(answerlist, data, answer_columns,
                {answer_columns[i]: column_names[i] for i in range(len(answer_columns))}, title)

display(fig)

Frage 6#

Multiple Choice

Wenn Sie aktiv im Diamond OA sind: Warum?

  • Antwort A) Ich möchte der Preispolitik der kommerziellen Verlage etwas entgegensetzen.

  • Antwort B) Ich möchte der Macht der kommerziellen Verlage etwas entgegensetzen.

  • Antwort C) Ich möchte dem Publikationsbias durch etablierte Verlage etwas entgegensetzen, um dem ‘publish or perish’-Prinzip zu begegnen.

  • Antwort D) Weil ich von Metriken wie dem Impact Factor nicht überzeugt bin.

  • Antwort E) Ich möchte Autor*innen ermöglichen, kostenfrei zu publizieren.

  • Antwort F) Ich möchte Leser*innen einen kostenfreien Zugriff zu wissenschaftlichen Ergebnissen ermöglichen.

  • Antwort G) Ich bin technisch und/oder konzeptuell am Prinzip des Diamond OA interessiert.

  • Antwort H) sonstiges

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['diamond_oa_1_2_1_6cc783___1', 'diamond_oa_1_2_1_6cc783___2', 'diamond_oa_1_2_1_6cc783___3', 
                  'diamond_oa_1_2_1_6cc783___4', 'diamond_oa_1_2_1_6cc783___5', 'diamond_oa_1_2_1_6cc783___6', 
                  'diamond_oa_1_2_1_6cc783___7', 'diamond_oa_1_2_1_6cc783___8']
column_names = [
    "Antwort A)",
    "Antwort B)", 
    "Antwort C)", 
    "Antwort D)", 
    "Antwort E)", 
    "Antwort F)", 
    "Antwort G)", 
    "Antwort H)"
    ]
answerlist = [
    "Ich möchte der Preispolitik der kommerziellen Verlage etwas entgegensetzen.",
    "Ich möchte der Macht der kommerziellen Verlage etwas entgegensetzen.",
    "Ich möchte dem Publikationsbias durch etablierte Verlage etwas entgegensetzen, um dem 'publish or perish'-Prinzip zu begegnen.",
    "Weil ich von Metriken wie dem Impact Factor nicht überzeugt bin.",
    "Ich möchte Autor\*innen ermöglichen, kostenfrei zu publizieren.",
    "Ich möchte Leser\*innen einen kostenfreien Zugriff zu wissenschaftlichen Ergebnissen ermöglichen.",
    "Ich bin technisch und/oder konzeptuell am Prinzip des Diamond OA interessiert.",
    "sonstiges"         
    ]

title = ''

# Call the show_plot function with the appropriate parameters
fig = show_plot(answerlist, data, answer_columns,
                {answer_columns[i]: column_names[i] for i in range(len(answer_columns))}, title)

display(fig)

Frage 7#

Multiple Choice

Wenn Sie noch nie im Diamond OA veröffentlicht haben: Warum nicht?

  • Antwort A) Ich habe noch nie etwas veröffentlicht.

  • Antwort B) Es stand kein Diamond OA Journal mit ausreichend hohem Impact Factor zur Verfügung.

  • Antwort C) In meinem Fach werden Publikationen in renommierten Verlagen erwartet.

  • Antwort D) Ich wusste bisher nichts von den Publikationsoptionen im Diamond OA.

  • Antwort E) Ich bin nicht überzeugt vom Konzept des Diamond OA.

  • Antwort F) sonstiges

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['diamond_oa_1_3_a88e51___1', 'diamond_oa_1_3_a88e51___2', 'diamond_oa_1_3_a88e51___3',
                  'diamond_oa_1_3_a88e51___4', 'diamond_oa_1_3_a88e51___5', 'diamond_oa_1_3_a88e51___6']
column_names = [
    "Antwort A)", 
    "Antwort B)", 
    "Antwort C)", 
    "Antwort D)", 
    "Antwort E)", 
    "Antwort F)"
    ]
answerlist = [
    "Ich habe noch nie etwas veröffentlicht.", 
    "Es stand kein Diamond OA Journal mit ausreichend hohem Impact Factor zur Verfügung.", 
    "In meinem Fach werden Publikationen in renommierten Verlagen erwartet.", 
    "Ich wusste bisher nichts von den Publikationsoptionen im Diamond OA.", 
    "Ich bin nicht überzeugt vom Konzept des Diamond OA.", 
    "sonstiges"
    ]

title = ''

# Call the show_plot function with the appropriate parameters
fig = show_plot(answerlist, data, answer_columns,
                {answer_columns[i]: column_names[i] for i in range(len(answer_columns))}, title)

display(fig)

Frage 8#

Multiple Choice

Wussten Sie von der Möglichkeit, über die Plattform Open Journal Systems der UB Marburg oder einer anderen UB ein eigenes Diamond OA Journal zu betreiben?

  • Antwort A) Ja, ich habe es aber nicht genutzt.

  • Antwort B) Ja, ich habe als Autor*in schon in einem dieser Journale veröffentlicht.

  • Antwort C) Ja, ich bin Reviewer*in/Gutachter*in für eines dieser Journale.

  • Antwort D) Ja, ich bin Editor*in/Herausgeber*in und/oder Gründer*in eines dieser Journale.

  • Antwort E) Ja, und ich plane es in Zukunft als Autor*in in einem der Journale zu publizieren.

  • Antwort F) Ja, und ich plane es in Zukunft als Reviewer*in/Gutachter*in eines der Journale mitzuwirken.

  • Antwort G) Ja, und ich plane es in Zukunft als Editor*in/Herausgeber*in eines der Journale mitzuwirken.

  • Antwort H) Ja, und ich plane ein Journal zu gründen.

  • Antwort I) Nein, ich wäre aber an der Gründung eines neuen Journals interessiert.

  • Antwort J) Nein, und es ist für mich nicht relevant.

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['diamond_oa_4_d0136e___1', 'diamond_oa_4_d0136e___2', 'diamond_oa_4_d0136e___3',
                  'diamond_oa_4_d0136e___4', 'diamond_oa_4_d0136e___5', 'diamond_oa_4_d0136e___6',
                  'diamond_oa_4_d0136e___7', 'diamond_oa_4_d0136e___8', 'diamond_oa_4_d0136e___9',
                  'diamond_oa_4_d0136e___10']
column_names = [
    "Antwort A)", 
    "Antwort B)", 
    "Antwort C)",
    "Antwort D)", 
    "Antwort E)", 
    "Antwort F)", 
    "Antwort G)", 
    "Antwort H)", 
    "Antwort I)", 
    "Antwort J)"
    ]
answerlist = [
    "Ja, ich habe es aber nicht genutzt.", 
    "Ja, ich habe als Autor\*in schon in einem dieser Journale veröffentlicht.", 
    "Ja, ich bin Reviewer\*in/Gutachter\*in für eines dieser Journale.",
    "Ja, ich bin Editor\*in/Herausgeber\*in und/oder Gründer\*in eines dieser Journale.", 
    "Ja, und ich plane es in Zukunft als Autor\*in in einem der Journale zu publizieren.", 
    "Ja, und ich plane es in Zukunft als Reviewer\*in/Gutachter\*in eines der Journale mitzuwirken.", 
    "Ja, und ich plane es in Zukunft als Editor\*in/Herausgeber\*in eines der Journale mitzuwirken.", 
    "Ja, und ich plane ein Journal zu gründen.", 
    "Nein, ich wäre aber an der Gründung eines neuen Journals interessiert.", 
    "Nein, und es ist für mich nicht relevant."
    ]

title = ''

# Call the show_plot function with the appropriate parameters
fig = show_plot(answerlist, data, answer_columns,
                {answer_columns[i]: column_names[i] for i in range(len(answer_columns))}, title)

display(fig)