In [3]:
import pandas as pd

df = pd.read_csv(
    r'C:/temp/auswertung/auswertung.csv', 
    names=["Zeit", "Rolle", "Antworten"], 
    sep=",", 
    header=0)
df.head()


Out[3]:
Zeit Rolle Antworten
0 2017/10/07 12:14:03 PM GMT+2 Software-Entwickler/-Architekt Fehlendes, unklares, unterschiedliches Qualitä...
1 2017/10/07 1:38:55 PM GMT+2 Software-Entwickler/-Architekt Fehlendes, unklares, unterschiedliches Qualitä...
2 2017/10/07 1:56:37 PM GMT+2 Software-Entwickler/-Architekt Management-Druck (Überstunden, schneller entwi...
3 2017/10/07 2:01:44 PM GMT+2 Operator/Betrieb Mangelndes Verständnis für Softwareentwicklung...
4 2017/10/07 2:04:00 PM GMT+2 Software-Entwickler/-Architekt Geringe oder fehlende Testabdeckung;Politische...

Teilnehmerzahl


In [4]:
teilnehmerzahl = len(df)
teilnehmerzahl


Out[4]:
30

Rollenverteilung


In [5]:
pd.DataFrame(df['Rolle'].value_counts())


Out[5]:
Rolle
Software-Entwickler/-Architekt 16
Operator/Betrieb 5
Produktmanager 3
Meister der Faulheit und Inkompetenz 1
Partner Manager 1
Projektleiter/-manager 1
Sonstige 1
Gesamtentwicklungsleiter 1
Anforderungsmanager 1

In [6]:
%matplotlib inline
df['Rolle'].value_counts().plot(kind="pie", figsize=(8,8), fontsize=16)


Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x273cfdf7eb8>

Auswertung Fragen


In [7]:
df['Antworten'] = df['Antworten'].str.replace("Entwicklungsprozess;", "Entwicklungsprozess,")
antworten = df['Antworten'].str.split(";", expand=True).unstack().reset_index()
# Hack für vorhandenen Semikolon :-/
antworten[0] = antworten[0].str.replace("Entwicklungsprozess,", "Entwicklungsprozess;")
antworten = antworten[[0]]
antworten['count'] = 1
prozentualer_anteil = antworten.groupby(0).count()
prozentualer_anteil["Wir"] = prozentualer_anteil['count'] / teilnehmerzahl
prozentualer_anteil.head(10)


Out[7]:
count Wir
0
Fehlendes, unklares, unterschiedliches Qualitätsbewusstsein 9 0.300000
Geringe oder fehlende Testabdeckung 9 0.300000
Kein oder schwacher Entwicklungsprozess; mangelnde Prozesstreue der Mitarbeiter 6 0.200000
Kunden die zu lange brauchen um Features freizugeben. 1 0.033333
Management-Druck (Überstunden, schneller entwickeln!) 4 0.133333
Mangelnde Fortbildungsmöglichkeiten 4 0.133333
Mangelnde Rollenklärung / Rollenverständnis 3 0.100000
Mangelndes Verständnis für Softwareentwicklung im Management 9 0.300000
Menschliche Schwächen von Teammitgliedern (mich eingeschlossen) 8 0.266667
Motivationsmängel: z.B. wenig Feedback, Kritik, Lob 2 0.066667

In [8]:
prozentualer_anteil['Wir'].sort_values().plot(kind='barh', figsize=(10,15), fontsize=20)


Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x273cf5a4d68>

In [9]:
vergleichsauswertung = pd.read_csv(
    r"C:/Temp/auswertung/andere.csv", 
    sep="|", 
    index_col=0, 
    names=["Frage", "Andere"], 
    header=0)
vergleichsauswertung.head(10)


Out[9]:
Andere
Frage
Unklare Anforderungen 53.49
Termindruck, viele Workarounds, "Quick & Dirty"-Mentalität 37.21
Fehlendes, unklares, unterschiedliches Qualitätsbewusstsein 37.21
Geringe oder fehlende Testabdeckung 34.88
Zu häufig & schnell wechselnde Anforderungen 25.58
Mangelndes Verständnis für Softwareentwicklung im Management 25.58
Politische Entscheidungen 20.93
Nicht machbare Aufwandsschätzungen 18.60
Projektmanagement setzt falsche Prioritäten 18.60
Unverständlicher Code 18.60

In [10]:
ergebnis_raw = prozentualer_anteil.join(vergleichsauswertung, how="outer").sort_values(by="Wir", ascending=False).fillna(0)
del(ergebnis_raw['count'])
ergebnis_raw['Wir'] = ergebnis_raw['Wir'] * 100
ergebnis = ergebnis_raw.copy()
ergebnis['Wir'] = ergebnis['Wir'].apply(lambda x : '{:,.2f} %'.format(x))
ergebnis['Andere'] = ergebnis['Andere'].apply(lambda x : '{:,.2f} %'.format(x))
ergebnis


Out[10]:
Wir Andere
Politische Entscheidungen 36.67 % 20.93 %
Termindruck, viele Workarounds, "Quick & Dirty"-Mentalität 33.33 % 37.21 %
Fehlendes, unklares, unterschiedliches Qualitätsbewusstsein 30.00 % 37.21 %
Mangelndes Verständnis für Softwareentwicklung im Management 30.00 % 25.58 %
Geringe oder fehlende Testabdeckung 30.00 % 34.88 %
Menschliche Schwächen von Teammitgliedern (mich eingeschlossen) 26.67 % 13.95 %
Projektmanagement setzt falsche Prioritäten 20.00 % 18.60 %
Kein oder schwacher Entwicklungsprozess; mangelnde Prozesstreue der Mitarbeiter 20.00 % 13.95 %
Starre Organisationsstrukturen 20.00 % 13.95 %
Unverständlicher Code 16.67 % 18.60 %
Unklare Anforderungen 16.67 % 53.49 %
Mangelnde Fortbildungsmöglichkeiten 13.33 % 9.30 %
Management-Druck (Überstunden, schneller entwickeln!) 13.33 % 4.65 %
Unzureichende Ausbildung der Mitarbeiter 10.00 % 16.28 %
Unzureichende Abstimmung und Zusammenarbeit zur/mit der Fachseite 10.00 % 4.65 %
Unnötige Meetings & Diskussionen 10.00 % 11.63 %
Zu häufig & schnell wechselnde Anforderungen 10.00 % 25.58 %
Schlechte Tools 10.00 % 4.65 %
Mangelnde Rollenklärung / Rollenverständnis 10.00 % 2.33 %
Ständig wechselndes Programmiererteam mit unterschiedlichestem KnowHow 6.67 % 0.00 %
Unzureichende Abstimmung und Zusammenarbeit zur/mit dem Anforderungsmanagement 6.67 % 2.33 %
Motivationsmängel: z.B. wenig Feedback, Kritik, Lob 6.67 % 6.98 %
Unzureichende Kommunikation im Team 6.67 % 13.95 %
Technologien unpassend/ineffizient eingesetzt 3.33 % 9.30 %
Schlechte Teamstimmung 3.33 % 4.65 %
Nichts 3.33 % 0.00 %
Nicht machbare Aufwandsschätzungen 3.33 % 18.60 %
Unzureichende Abstimmung und Zusammenarbeit zwischen Entwickler und Betrieb 3.33 % 9.30 %
Zeit 3.33 % 0.00 %
Kunden die zu lange brauchen um Features freizugeben. 3.33 % 0.00 %
Zu wenige Entwickler 3.33 % 0.00 %
ich finde die Beschränkung auf 5 Kreuze sehr schade! 0.00 % 9.30 %
ständig wechselndes Programmiererteam mit unterschiedlichestem KnowHow 0.00 % 9.30 %

In [11]:
ergebnis_raw.sort_values(by="Wir").plot(kind='barh', figsize=(10,15), fontsize=20)


Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x273d034def0>

In [14]:
ergebnis_raw["pseudogesamt"] = (ergebnis_raw['Wir'] + ergebnis_raw["Andere"]) / 2.0
ergebnis_raw = ergebnis_raw.sort_values(by="pseudogesamt", ascending=False)
ergebnis_raw


Out[14]:
Wir Andere pseudogesamt
Termindruck, viele Workarounds, "Quick & Dirty"-Mentalität 33.333333 37.21 35.271667
Unklare Anforderungen 16.666667 53.49 35.078333
Fehlendes, unklares, unterschiedliches Qualitätsbewusstsein 30.000000 37.21 33.605000
Geringe oder fehlende Testabdeckung 30.000000 34.88 32.440000
Politische Entscheidungen 36.666667 20.93 28.798333
Mangelndes Verständnis für Softwareentwicklung im Management 30.000000 25.58 27.790000
Menschliche Schwächen von Teammitgliedern (mich eingeschlossen) 26.666667 13.95 20.308333
Projektmanagement setzt falsche Prioritäten 20.000000 18.60 19.300000
Zu häufig & schnell wechselnde Anforderungen 10.000000 25.58 17.790000
Unverständlicher Code 16.666667 18.60 17.633333
Kein oder schwacher Entwicklungsprozess; mangelnde Prozesstreue der Mitarbeiter 20.000000 13.95 16.975000
Starre Organisationsstrukturen 20.000000 13.95 16.975000
Unzureichende Ausbildung der Mitarbeiter 10.000000 16.28 13.140000
Mangelnde Fortbildungsmöglichkeiten 13.333333 9.30 11.316667
Nicht machbare Aufwandsschätzungen 3.333333 18.60 10.966667
Unnötige Meetings & Diskussionen 10.000000 11.63 10.815000
Unzureichende Kommunikation im Team 6.666667 13.95 10.308333
Management-Druck (Überstunden, schneller entwickeln!) 13.333333 4.65 8.991667
Schlechte Tools 10.000000 4.65 7.325000
Unzureichende Abstimmung und Zusammenarbeit zur/mit der Fachseite 10.000000 4.65 7.325000
Motivationsmängel: z.B. wenig Feedback, Kritik, Lob 6.666667 6.98 6.823333
Unzureichende Abstimmung und Zusammenarbeit zwischen Entwickler und Betrieb 3.333333 9.30 6.316667
Technologien unpassend/ineffizient eingesetzt 3.333333 9.30 6.316667
Mangelnde Rollenklärung / Rollenverständnis 10.000000 2.33 6.165000
ich finde die Beschränkung auf 5 Kreuze sehr schade! 0.000000 9.30 4.650000
ständig wechselndes Programmiererteam mit unterschiedlichestem KnowHow 0.000000 9.30 4.650000
Unzureichende Abstimmung und Zusammenarbeit zur/mit dem Anforderungsmanagement 6.666667 2.33 4.498333
Schlechte Teamstimmung 3.333333 4.65 3.991667
Ständig wechselndes Programmiererteam mit unterschiedlichestem KnowHow 6.666667 0.00 3.333333
Kunden die zu lange brauchen um Features freizugeben. 3.333333 0.00 1.666667
Nichts 3.333333 0.00 1.666667
Zeit 3.333333 0.00 1.666667
Zu wenige Entwickler 3.333333 0.00 1.666667

In [ ]: