Überblick & Feedback

Note

Die Skalen in den Grafiken zeigen die absoluten Antwortzahlen.

Überblick & Feedback#

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#

Multiple Choice

Waren Ihnen vor dieser Umfrage die verschiedenen Optionen/’Farben’ des Open Access Publizierens bekannt? Wenn ja, welche?

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['final_1_d48bdd___1', 'final_1_d48bdd___2', 'final_1_d48bdd___3', 
                  'final_1_d48bdd___4']
column_names = [
    "Gold OA", 
    "Green OA", 
    "Diamond OA", 
    "keine davon"
    ]
answerlist = [
    "Diamond OA", 
    "Gold OA", 
    "Green OA", 
    "keine davon"
    ]
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 2#

Multiple Choice

Welche Faktoren spielen für Sie eine besonders wichtige Rolle bei der Auswahl Ihrer Publikationsorgane?

  • Antwort A) das Renommee des Verlags/der Publikationsplattform/des Journals

  • Antwort B) die Politik des Verlags/der Publikationsplattform/des Journals (OA-Politik, Preispolitik o.ä.)

  • Antwort C) der Impact Factor des Journals

  • Antwort D) andere Metriken

  • Antwort E) die Kosten der Publikation

  • Antwort F) die Option, direkt im OA zu publizieren (Gold OA)

  • Antwort G) die Option, direkt und kostenfrei ohne kommerziellen Verlag im OA zu publizieren (Diamond OA)

  • Antwort H) die Option, direkt und für mich kostenfrei im OA zu publizieren (bspw. über DEAL- und andere Transformationsverträge)

  • Antwort I) die Option (z.B. durch die Verlagspolicy), meine Publikation zweitzuveröffentlichen (Green OA)

  • Antwort J) die Option, Daten und Materialien mit zu publizieren

  • Antwort K) dass es auch gedruckte Exemplare der Publikation gibt

  • Antwort L) die Reichweite der Publikation

  • Antwort M) die Dauer des redaktionellen Verfahrens bis zur Veröffentlichung

  • Antwort N) die Qualität des Review-Verfahrens/der Begutachtung

  • Antwort O) die Art des Review-Verfahrens/der Begutachtung (z. B. Open Peer Review)

  • Antwort P) die Serviceleistungen des Verlags/der Plattform für Autor*innen

  • Antwort Q) das Renommee der Reviewer*innen/der Begutachtenden

  • Antwort R) das Renommee der Editor*innen/Herausgeber*innen

  • Antwort S) die persönliche Bekanntschaft mit den Editor*innen/Herausgeber*innen

  • Antwort T) die persönliche Bekanntschaft mit potentiellen Reviewer*innen/Begutachtenden

  • Antwort U) Empfehlung von meiner*m Betreuer*in (bei Qualifikationsarbeiten)

  • Antwort V) Empfehlung von Kolleg*innen

  • Antwort W) sonstiges

Hide code cell source
# Define answer columns and their corresponding names
answer_columns = ['final_2_23d673___1', 'final_2_23d673___2', 'final_2_23d673___3', 
                  'final_2_23d673___4', 'final_2_23d673___5', 'final_2_23d673___6',
                  'final_2_23d673___7', 'final_2_23d673___8', 'final_2_23d673___9',
                  'final_2_23d673___10', 'final_2_23d673___11', 'final_2_23d673___12',
                  'final_2_23d673___13', 'final_2_23d673___14', 'final_2_23d673___15',
                  'final_2_23d673___16', 'final_2_23d673___17', 'final_2_23d673___18',
                  'final_2_23d673___19', 'final_2_23d673___20', 'final_2_23d673___21',
                  'final_2_23d673___22', 'final_2_23d673___23']
column_names = [
    "Antwort A)", 
    "Antwort B)", 
    "Antwort C)", 
    "Antwort D)", 
    "Antwort E)", 
    "Antwort F)", 
    "Antwort G)", 
    "Antwort H)", 
    "Antwort I)", 
    "Antwort J)", 
    "Antwort K)", 
    "Antwort L)", 
    "Antwort M)", 
    "Antwort N)", 
    "Antwort O)", 
    "Antwort P)", 
    "Antwort Q)", 
    "Antwort R)", 
    "Antwort S)", 
    "Antwort T)", 
    "Antwort U)", 
    "Antwort V)", 
    "Antwort W)"
    ]
answerlist = [
    "das Renommee des Verlags/der Publikationsplattform/des Journals",
    "die Politik des Verlags/der Publikationsplattform/des Journals (OA-Politik, Preispolitik o.ä.)",
    "der Impact Factor des Journals",
    "andere Metriken",
    "die Kosten der Publikation",
    "die Option, direkt im OA zu publizieren (Gold OA)",
    "die Option, direkt und kostenfrei ohne kommerziellen Verlag im OA zu publizieren (Diamond OA)",
    "die Option, direkt und für mich kostenfrei im OA zu publizieren (bspw. über DEAL- und andere Transformationsverträge)",
    "die Option (z.B. durch die Verlagspolicy), meine Publikation zweitzuveröffentlichen (Green OA)",
    "die Option, Daten und Materialien mit zu publizieren",
    "dass es auch gedruckte Exemplare der Publikation gibt",
    "die Reichweite der Publikation",
    "die Dauer des redaktionellen Verfahrens bis zur Veröffentlichung",
    "die Qualität des Review-Verfahrens/der Begutachtung",
    "die Art des Review-Verfahrens/der Begutachtung (z. B. Open Peer Review)",
    "die Serviceleistungen des Verlags/der Plattform für Autor\*innen",
    "das Renommee der Reviewer\*innen/der Begutachtenden",
    "das Renommee der Editor\*innen/Herausgeber\*innen",
    "die persönliche Bekanntschaft mit den Editor\*innen/Herausgeber\*innen",
    "die persönliche Bekanntschaft mit potentiellen Reviewer\*innen/Begutachtenden",
    "Empfehlung von meiner\*m Betreuer\*in (bei Qualifikationsarbeiten)",
    "Empfehlung von Kolleg\*innen",
    "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)

Kommentare / Feedback für die UB#

Freitext

Welche Angebote wünschen Sie sich zur Weiterentwicklung der OA-Dienste der UB? (Aggregierte Darstellung)

Anzahl

Thema

5x

Überblicksveranstaltungen zu Open Access

5x

“Mehr Informationen”

4x

OA-Fonds mit mehr finanziellen Mitteln bzw. Kombinierbarkeit von Mitteln

4x

Liste der förderfähigen Journale

2x

OA-Fonds ohne Einschränkungen

2x

Mehr Infos zu predatory journals

1x

Persönliche Beratung

1x

OA-Fonds aufrecht erhalten

1x

OA-Fonds weniger kompliziert

1x

Keine Verträge mit großen Verlagen (DEAL etc.)

1x

“Nachhaltige Speicherung auf Papier”

1x

Publikation auf Repo ohne Papier-Erklärung

1x

Zweifel an Qualität von OA-Publikationen