{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# **Analyse 3**\n", "\n", "## Merkmal 2 - Zeitbezüge innerhalb der Vorgänge\n", "\n", "### Strategie & Fokus\n", "\n", "- Untersuchung der Datumszusammenhänge\n", "- Anlage von Datumsangaben:\n", " 1. ``ErstellungsDatum``\n", " 1. ``VorgangsDatum`` (Plan)\n", " 1. ``Arbeitsbeginn``\n", " 1. ``ErledigungsDatum``" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "sns.set()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 129020 entries, 0 to 129019\n", "Data columns (total 20 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 VorgangsID 129020 non-null int64 \n", " 1 ObjektID 129020 non-null int64 \n", " 2 HObjektText 129003 non-null object \n", " 3 ObjektArtID 129020 non-null int64 \n", " 4 ObjektArtText 128372 non-null object \n", " 5 VorgangsTypID 129020 non-null int64 \n", " 6 VorgangsTypName 129020 non-null object \n", " 7 VorgangsDatum 129020 non-null datetime64[ns]\n", " 8 VorgangsStatusId 129020 non-null int64 \n", " 9 VorgangsPrioritaet 129020 non-null int64 \n", " 10 VorgangsBeschreibung 124087 non-null object \n", " 11 VorgangsOrt 507 non-null object \n", " 12 VorgangsArtText 129020 non-null object \n", " 13 ErledigungsDatum 129020 non-null datetime64[ns]\n", " 14 ErledigungsArtText 128474 non-null object \n", " 15 ErledigungsBeschreibung 118135 non-null object \n", " 16 MPMelderArbeitsplatz 6359 non-null object \n", " 17 MPAbteilungBezeichnung 6359 non-null object \n", " 18 Arbeitsbeginn 123538 non-null datetime64[ns]\n", " 19 ErstellungsDatum 129020 non-null datetime64[ns]\n", "dtypes: datetime64[ns](4), int64(6), object(10)\n", "memory usage: 19.7+ MB\n" ] } ], "source": [ "# load dataset\n", "FILE_PATH = '01_2_Rohdaten_neu/Export4.csv'\n", "date_cols = ['VorgangsDatum', 'ErledigungsDatum', 'Arbeitsbeginn', 'ErstellungsDatum']\n", "raw = pd.read_csv(filepath_or_buffer=FILE_PATH, sep=';', encoding='cp1252', parse_dates=date_cols, dayfirst=True)\n", "raw.info()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VorgangsIDObjektIDHObjektTextObjektArtIDObjektArtTextVorgangsTypIDVorgangsTypNameVorgangsDatumVorgangsStatusIdVorgangsPrioritaetVorgangsBeschreibungVorgangsOrtVorgangsArtTextErledigungsDatumErledigungsArtTextErledigungsBeschreibungMPMelderArbeitsplatzMPAbteilungBezeichnungArbeitsbeginnErstellungsDatum
011114427 C , Webmaschine, DL 280 EMS Breite 2803Luft-Webmaschine3Reparaturauftrag (Portal)2019-03-0640NaNNaNKettbaum kaputt2019-03-06NaNNaNWebereiWebereiNaT2019-03-06
117124621 C , Webmaschine, DL 280 EMS Breite 2803Luft-Webmaschine3Reparaturauftrag (Portal)2019-03-1150NaNNaNasgasdg2019-03-11NaNNaNElektrowerkstattElektrowerkstattNaT2019-03-11
253244285 C, Webmaschine, SG 220 EMS5Greifer-Webmaschine3Reparaturauftrag (Portal)2019-03-1950Kupplung schleiftNaNKupplung defekt2019-03-20Reparatur UTTNaNWebereiWebereiNaT2019-03-19
358257107, Webmaschine, OM 220 EOS3Luft-Webmaschine3Reparaturauftrag (Portal)2019-03-2150Gegengewicht wieder anbringenNaNGegengewicht an der Webmaschine abgefallen2019-03-21Reparatur UTTSchraube ausgebohrt\\nGegengewicht wieder angeb...WebereiWeberei2019-03-212019-03-21
48113800138, Schärmaschine 9,16Schärmaschine3Reparaturauftrag (Portal)2019-03-2550da ist etwas gebrochen. (Herr Heininger)NaNzentrale Bremsenverstellung linke Gatterseite ...2019-03-25Reparatur UTTBolzen gebrochen. Bolzen neu angefertig und di...VorwerkVorwerk2019-03-252019-03-25
\n", "
" ], "text/plain": [ " VorgangsID ObjektID HObjektText \\\n", "0 11 114 427 C , Webmaschine, DL 280 EMS Breite 280 \n", "1 17 124 621 C , Webmaschine, DL 280 EMS Breite 280 \n", "2 53 244 285 C, Webmaschine, SG 220 EMS \n", "3 58 257 107, Webmaschine, OM 220 EOS \n", "4 81 138 00138, Schärmaschine 9, \n", "\n", " ObjektArtID ObjektArtText VorgangsTypID VorgangsTypName \\\n", "0 3 Luft-Webmaschine 3 Reparaturauftrag (Portal) \n", "1 3 Luft-Webmaschine 3 Reparaturauftrag (Portal) \n", "2 5 Greifer-Webmaschine 3 Reparaturauftrag (Portal) \n", "3 3 Luft-Webmaschine 3 Reparaturauftrag (Portal) \n", "4 16 Schärmaschine 3 Reparaturauftrag (Portal) \n", "\n", " VorgangsDatum VorgangsStatusId VorgangsPrioritaet \\\n", "0 2019-03-06 4 0 \n", "1 2019-03-11 5 0 \n", "2 2019-03-19 5 0 \n", "3 2019-03-21 5 0 \n", "4 2019-03-25 5 0 \n", "\n", " VorgangsBeschreibung VorgangsOrt \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 Kupplung schleift NaN \n", "3 Gegengewicht wieder anbringen NaN \n", "4 da ist etwas gebrochen. (Herr Heininger) NaN \n", "\n", " VorgangsArtText ErledigungsDatum \\\n", "0 Kettbaum kaputt 2019-03-06 \n", "1 asgasdg 2019-03-11 \n", "2 Kupplung defekt 2019-03-20 \n", "3 Gegengewicht an der Webmaschine abgefallen 2019-03-21 \n", "4 zentrale Bremsenverstellung linke Gatterseite ... 2019-03-25 \n", "\n", " ErledigungsArtText ErledigungsBeschreibung \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 Reparatur UTT NaN \n", "3 Reparatur UTT Schraube ausgebohrt\\nGegengewicht wieder angeb... \n", "4 Reparatur UTT Bolzen gebrochen. Bolzen neu angefertig und di... \n", "\n", " MPMelderArbeitsplatz MPAbteilungBezeichnung Arbeitsbeginn ErstellungsDatum \n", "0 Weberei Weberei NaT 2019-03-06 \n", "1 Elektrowerkstatt Elektrowerkstatt NaT 2019-03-11 \n", "2 Weberei Weberei NaT 2019-03-19 \n", "3 Weberei Weberei 2019-03-21 2019-03-21 \n", "4 Vorwerk Vorwerk 2019-03-25 2019-03-25 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "raw.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anzahl Features: 20\n" ] } ], "source": [ "print(f\"Anzahl Features: {len(raw.columns)}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Duplikate" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "duplicates_filt = raw.duplicated()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anzahl Duplikate: 84\n" ] } ], "source": [ "print(f\"Anzahl Duplikate: {duplicates_filt.sum()}\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "filt_data = raw[duplicates_filt]\n", "uni_obj_id_dupl = filt_data['ObjektID'].unique()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anzahl einzigartiger Objekt-IDs unter Duplikaten: 47\n" ] } ], "source": [ "print(f\"Anzahl einzigartiger Objekt-IDs unter Duplikaten: {len(uni_obj_id_dupl)}\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 128936 entries, 0 to 128935\n", "Data columns (total 20 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 VorgangsID 128936 non-null int64 \n", " 1 ObjektID 128936 non-null int64 \n", " 2 HObjektText 128920 non-null object \n", " 3 ObjektArtID 128936 non-null int64 \n", " 4 ObjektArtText 128289 non-null object \n", " 5 VorgangsTypID 128936 non-null int64 \n", " 6 VorgangsTypName 128936 non-null object \n", " 7 VorgangsDatum 128936 non-null datetime64[ns]\n", " 8 VorgangsStatusId 128936 non-null int64 \n", " 9 VorgangsPrioritaet 128936 non-null int64 \n", " 10 VorgangsBeschreibung 124008 non-null object \n", " 11 VorgangsOrt 507 non-null object \n", " 12 VorgangsArtText 128936 non-null object \n", " 13 ErledigungsDatum 128936 non-null datetime64[ns]\n", " 14 ErledigungsArtText 128402 non-null object \n", " 15 ErledigungsBeschreibung 118086 non-null object \n", " 16 MPMelderArbeitsplatz 6337 non-null object \n", " 17 MPAbteilungBezeichnung 6337 non-null object \n", " 18 Arbeitsbeginn 123480 non-null datetime64[ns]\n", " 19 ErstellungsDatum 128936 non-null datetime64[ns]\n", "dtypes: datetime64[ns](4), int64(6), object(10)\n", "memory usage: 19.7+ MB\n" ] } ], "source": [ "wo_duplicates = raw.drop_duplicates(ignore_index=True)\n", "wo_duplicates.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### NA vals" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['VorgangsDatum', 'ErledigungsDatum', 'Arbeitsbeginn', 'ErstellungsDatum']" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_cols" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature VorgangsDatum: number of NA vals 0, relative 0.00%\n", "Feature ErledigungsDatum: number of NA vals 0, relative 0.00%\n", "Feature Arbeitsbeginn: number of NA vals 5456, relative 4.23%\n", "Feature ErstellungsDatum: number of NA vals 0, relative 0.00%\n" ] } ], "source": [ "for col in date_cols:\n", " na_count = wo_duplicates[col].isna().sum()\n", " rel_count = na_count / len(wo_duplicates)\n", " print(f'Feature {col}: number of NA vals {na_count}, relative {rel_count:.2%}')" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "wo_na = wo_duplicates.dropna(how='any', subset=date_cols).reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 123480 entries, 0 to 123479\n", "Data columns (total 20 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 VorgangsID 123480 non-null int64 \n", " 1 ObjektID 123480 non-null int64 \n", " 2 HObjektText 123464 non-null object \n", " 3 ObjektArtID 123480 non-null int64 \n", " 4 ObjektArtText 122932 non-null object \n", " 5 VorgangsTypID 123480 non-null int64 \n", " 6 VorgangsTypName 123480 non-null object \n", " 7 VorgangsDatum 123480 non-null datetime64[ns]\n", " 8 VorgangsStatusId 123480 non-null int64 \n", " 9 VorgangsPrioritaet 123480 non-null int64 \n", " 10 VorgangsBeschreibung 120389 non-null object \n", " 11 VorgangsOrt 445 non-null object \n", " 12 VorgangsArtText 123480 non-null object \n", " 13 ErledigungsDatum 123480 non-null datetime64[ns]\n", " 14 ErledigungsArtText 123428 non-null object \n", " 15 ErledigungsBeschreibung 117900 non-null object \n", " 16 MPMelderArbeitsplatz 6110 non-null object \n", " 17 MPAbteilungBezeichnung 6110 non-null object \n", " 18 Arbeitsbeginn 123480 non-null datetime64[ns]\n", " 19 ErstellungsDatum 123480 non-null datetime64[ns]\n", "dtypes: datetime64[ns](4), int64(6), object(10)\n", "memory usage: 18.8+ MB\n" ] } ], "source": [ "wo_na.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Unlogische Einträge\n", "\n", "- nach Prozessablauf Datumsangaben, die in anderer chronologischer Reihenfolge erscheinen" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Planung vor Erstellung, Treffer 3966\n", "Arbeitsbeginn vor Erstellung, Treffer 4118\n", "Arbeitsbeginn vor Planung, Treffer 9356\n", "Erledigung vor Erstellung, Treffer 3681\n", "Erledigung vor Planung, Treffer 8142\n", "Erledigung vor Arbeitsbeginn, Treffer 1\n" ] } ], "source": [ "# Planung des Vorgangs vor Erstellung\n", "matches = (wo_na['VorgangsDatum'] < wo_na['ErstellungsDatum']).sum()\n", "print(f'Planung vor Erstellung, Treffer {matches}')\n", "\n", "# Arbeitsbeginn vor Erstellung\n", "matches = (wo_na['Arbeitsbeginn'] < wo_na['ErstellungsDatum']).sum()\n", "print(f'Arbeitsbeginn vor Erstellung, Treffer {matches}')\n", "\n", "# Arbeitsbeginn vor Planung\n", "matches = (wo_na['Arbeitsbeginn'] < wo_na['VorgangsDatum']).sum()\n", "print(f'Arbeitsbeginn vor Planung, Treffer {matches}')\n", "\n", "# Erledigung vor Erstellung\n", "matches = (wo_na['ErledigungsDatum'] < wo_na['ErstellungsDatum']).sum()\n", "print(f'Erledigung vor Erstellung, Treffer {matches}')\n", "\n", "# Erledigung vor Planung\n", "matches = (wo_na['ErledigungsDatum'] < wo_na['VorgangsDatum']).sum()\n", "print(f'Erledigung vor Planung, Treffer {matches}')\n", "\n", "# Erledigung vor Arbeitsbeginn\n", "matches = (wo_na['ErledigungsDatum'] < wo_na['Arbeitsbeginn']).sum()\n", "print(f'Erledigung vor Arbeitsbeginn, Treffer {matches}')" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of illogical entries: 13215\n" ] } ], "source": [ "filter_illogical = (\n", " (wo_na['VorgangsDatum'] < wo_na['ErstellungsDatum']) |\n", " (wo_na['Arbeitsbeginn'] < wo_na['ErstellungsDatum']) |\n", " (wo_na['Arbeitsbeginn'] < wo_na['VorgangsDatum']) |\n", " (wo_na['ErledigungsDatum'] < wo_na['ErstellungsDatum']) |\n", " (wo_na['ErledigungsDatum'] < wo_na['VorgangsDatum']) |\n", " (wo_na['ErledigungsDatum'] < wo_na['Arbeitsbeginn'])\n", ")\n", "print(f'Number of illogical entries: {filter_illogical.sum()}')" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [], "source": [ "logical = wo_na.loc[~filter_illogical,:].reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 132, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 110265 entries, 0 to 110264\n", "Data columns (total 20 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 VorgangsID 110265 non-null int64 \n", " 1 ObjektID 110265 non-null int64 \n", " 2 HObjektText 110252 non-null object \n", " 3 ObjektArtID 110265 non-null int64 \n", " 4 ObjektArtText 109788 non-null object \n", " 5 VorgangsTypID 110265 non-null int64 \n", " 6 VorgangsTypName 110265 non-null object \n", " 7 VorgangsDatum 110265 non-null datetime64[ns]\n", " 8 VorgangsStatusId 110265 non-null int64 \n", " 9 VorgangsPrioritaet 110265 non-null int64 \n", " 10 VorgangsBeschreibung 108683 non-null object \n", " 11 VorgangsOrt 441 non-null object \n", " 12 VorgangsArtText 110265 non-null object \n", " 13 ErledigungsDatum 110265 non-null datetime64[ns]\n", " 14 ErledigungsArtText 110215 non-null object \n", " 15 ErledigungsBeschreibung 106105 non-null object \n", " 16 MPMelderArbeitsplatz 6029 non-null object \n", " 17 MPAbteilungBezeichnung 6029 non-null object \n", " 18 Arbeitsbeginn 110265 non-null datetime64[ns]\n", " 19 ErstellungsDatum 110265 non-null datetime64[ns]\n", "dtypes: datetime64[ns](4), int64(6), object(10)\n", "memory usage: 16.8+ MB\n" ] } ], "source": [ "logical.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Date Diffs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Differenzen von:\n", " - VorgangsDatum und Arbeitsbeginn (Plan zu Ist)\n", " - Arbeitsbeginn zu ErledigungsDatum (Dauer im Ist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Planabweichungen" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VorgangsIDObjektIDHObjektTextObjektArtIDObjektArtTextVorgangsTypIDVorgangsTypNameVorgangsDatumVorgangsStatusIdVorgangsPrioritaetVorgangsBeschreibungVorgangsOrtVorgangsArtTextErledigungsDatumErledigungsArtTextErledigungsBeschreibungMPMelderArbeitsplatzMPAbteilungBezeichnungArbeitsbeginnErstellungsDatum
058257107, Webmaschine, OM 220 EOS3Luft-Webmaschine3Reparaturauftrag (Portal)2019-03-2150Gegengewicht wieder anbringenNaNGegengewicht an der Webmaschine abgefallen2019-03-21Reparatur UTTSchraube ausgebohrt\\nGegengewicht wieder angeb...WebereiWeberei2019-03-212019-03-21
18113800138, Schärmaschine 9,16Schärmaschine3Reparaturauftrag (Portal)2019-03-2550da ist etwas gebrochen. (Herr Heininger)NaNzentrale Bremsenverstellung linke Gatterseite ...2019-03-25Reparatur UTTBolzen gebrochen. Bolzen neu angefertig und di...VorwerkVorwerk2019-03-252019-03-25
2820Warenschau allgemein0NaN3Reparaturauftrag (Portal)2019-03-2550Klappbügel Portalkran H31 defektWarenschau allgemeinAllgemeine Reparaturarbeiten2019-03-25Reparatur UTTFeder ausgetauschtWarenschauWarenschau2019-03-252019-03-25
3760Neben der Türe0NaN3Reparaturauftrag (Portal)2019-03-2250Schraube nix mer gutNeben der TüreKettbaum2019-03-25Reparatur UTTSchrauben ausgebohrt\\t\\nGewinde nachgeschnitten\\tVorwerkVorwerk2019-03-252019-03-22
4111241294 C, Webmaschine, SG 240 EMS5Greifer-Webmaschine3Reparaturauftrag (Portal)2019-04-0150KBK tauschen\\nUrsache vermutlich mechanischNaNKupplung-Brems-Kombination2019-04-08Reparatur UTTda derzeit Keine Ersatzteile da Reparatur mit ...WebereiWeberei2019-04-022019-04-01
\n", "
" ], "text/plain": [ " VorgangsID ObjektID HObjektText ObjektArtID \\\n", "0 58 257 107, Webmaschine, OM 220 EOS 3 \n", "1 81 138 00138, Schärmaschine 9, 16 \n", "2 82 0 Warenschau allgemein 0 \n", "3 76 0 Neben der Türe 0 \n", "4 111 241 294 C, Webmaschine, SG 240 EMS 5 \n", "\n", " ObjektArtText VorgangsTypID VorgangsTypName \\\n", "0 Luft-Webmaschine 3 Reparaturauftrag (Portal) \n", "1 Schärmaschine 3 Reparaturauftrag (Portal) \n", "2 NaN 3 Reparaturauftrag (Portal) \n", "3 NaN 3 Reparaturauftrag (Portal) \n", "4 Greifer-Webmaschine 3 Reparaturauftrag (Portal) \n", "\n", " VorgangsDatum VorgangsStatusId VorgangsPrioritaet \\\n", "0 2019-03-21 5 0 \n", "1 2019-03-25 5 0 \n", "2 2019-03-25 5 0 \n", "3 2019-03-22 5 0 \n", "4 2019-04-01 5 0 \n", "\n", " VorgangsBeschreibung VorgangsOrt \\\n", "0 Gegengewicht wieder anbringen NaN \n", "1 da ist etwas gebrochen. (Herr Heininger) NaN \n", "2 Klappbügel Portalkran H31 defekt Warenschau allgemein \n", "3 Schraube nix mer gut Neben der Türe \n", "4 KBK tauschen\\nUrsache vermutlich mechanisch NaN \n", "\n", " VorgangsArtText ErledigungsDatum \\\n", "0 Gegengewicht an der Webmaschine abgefallen 2019-03-21 \n", "1 zentrale Bremsenverstellung linke Gatterseite ... 2019-03-25 \n", "2 Allgemeine Reparaturarbeiten 2019-03-25 \n", "3 Kettbaum 2019-03-25 \n", "4 Kupplung-Brems-Kombination 2019-04-08 \n", "\n", " ErledigungsArtText ErledigungsBeschreibung \\\n", "0 Reparatur UTT Schraube ausgebohrt\\nGegengewicht wieder angeb... \n", "1 Reparatur UTT Bolzen gebrochen. Bolzen neu angefertig und di... \n", "2 Reparatur UTT Feder ausgetauscht \n", "3 Reparatur UTT Schrauben ausgebohrt\\t\\nGewinde nachgeschnitten\\t \n", "4 Reparatur UTT da derzeit Keine Ersatzteile da Reparatur mit ... \n", "\n", " MPMelderArbeitsplatz MPAbteilungBezeichnung Arbeitsbeginn ErstellungsDatum \n", "0 Weberei Weberei 2019-03-21 2019-03-21 \n", "1 Vorwerk Vorwerk 2019-03-25 2019-03-25 \n", "2 Warenschau Warenschau 2019-03-25 2019-03-25 \n", "3 Vorwerk Vorwerk 2019-03-25 2019-03-22 \n", "4 Weberei Weberei 2019-04-02 2019-04-01 " ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logical.head()" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [], "source": [ "MAX_DATE_DIFF = 1000" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_diffdays
00 days0
10 days0
20 days0
33 days3
41 days1
\n", "
" ], "text/plain": [ " date_diff days\n", "0 0 days 0\n", "1 0 days 0\n", "2 0 days 0\n", "3 3 days 3\n", "4 1 days 1" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff = logical['Arbeitsbeginn'] - logical['VorgangsDatum']\n", "date_diff = date_diff.to_frame()\n", "date_diff.columns = ['date_diff']\n", "date_diff['days'] = date_diff['date_diff'].apply(lambda x: x.days)\n", "date_diff = date_diff.loc[((date_diff['days'] <= MAX_DATE_DIFF) & \n", " (date_diff['days'] >= -MAX_DATE_DIFF)), :]\n", "#date_diff = date_diff.reset_index(drop=True)\n", "date_diff.head()" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 110265 entries, 0 to 110264\n", "Data columns (total 2 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 date_diff 110265 non-null timedelta64[ns]\n", " 1 days 110265 non-null int64 \n", "dtypes: int64(1), timedelta64[ns](1)\n", "memory usage: 2.5 MB\n" ] } ], "source": [ "date_diff.info()" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 110265.000000\n", "mean 0.994939\n", "std 6.599087\n", "min 0.000000\n", "25% 0.000000\n", "50% 0.000000\n", "75% 0.000000\n", "max 392.000000\n", "Name: days, dtype: float64" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff['days'].describe()" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_diffdays
296392 days392
5982358 days358
109336303 days303
\n", "
" ], "text/plain": [ " date_diff days\n", "296 392 days 392\n", "5982 358 days 358\n", "109336 303 days 303" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff.loc[date_diff['days'] > 300]" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "VorgangsID 136387\n", "ObjektID 1820\n", "HObjektText 01821, Phenolphtaleinindikatorlösung 0,1%, \n", "ObjektArtID 105\n", "ObjektArtText Chemische Prüfmittel\n", "VorgangsTypID 1\n", "VorgangsTypName Wartung\n", "VorgangsDatum 2022-02-28 00:00:00\n", "VorgangsStatusId 5\n", "VorgangsPrioritaet 0\n", "VorgangsBeschreibung Jährliche Kontrolle des Mindeshaltbarkeitsdatum\\n\n", "VorgangsOrt NaN\n", "VorgangsArtText Prüfmittelüberwachung jährlich\n", "ErledigungsDatum 2023-03-27 00:00:00\n", "ErledigungsArtText Intern UTT - Prüfmittelkontrolle\n", "ErledigungsBeschreibung laut Prüfplan\n", "MPMelderArbeitsplatz NaN\n", "MPAbteilungBezeichnung NaN\n", "Arbeitsbeginn 2023-03-27 00:00:00\n", "ErstellungsDatum 2021-08-27 00:00:00\n", "Name: 296, dtype: object" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logical.loc[296,:]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Dxs2TDt37kzYhyf63iFDhpgvGAAAdDhW1+yEQiFNmDBBs2fPVlZWlnr37q1Zs2YpOztbo0aNUjgcVkVFhdLT05WSkqLc3FwNGTJEt912m+677z7t379f9957ry6++GJGdgAAQKMc1/IGLuFwWHPmzNGSJUt04MABDRs2TNOnT1efPn306aef6txzz9XMmTN16aWXSpJ27dql+++/X2+++aaSk5N1wQUXaNq0aUpOZoEvAABoyHrYAQAAMKlj37wPAADQBMIOAADwNcIOAADwNcIOAADwNcIOAADwNcIOAADwNcIOAADwNcKOQZFIRPPmzVNBQYFyc3M1ceLEhEdddESfffaZBgwY0ODXiy++KEn64IMPNGHCBJ122mn63ve+pwULFliu+NspLi7WVVddlXCsqZ462nVurMdp06Y1uKZnnXVW7PX23uNXX32l6dOn66yzztKQIUM0fvx4rV27Nva6H65hUz129GsoHdo0tqioSPn5+crLy9ONN96orVu3xl73w3Vsqkc/XMd4//rXv5SXl6clS5bEjlm5ji6MefTRR93hw4e7f//7390PPvjAnThxojtq1Ci3urradmkt9tprr7mDBw92y8rK3PLy8tivqqoqt6Kiwj3zzDPdX/ziF+7WrVvdl156yR08eLD70ksv2S67WZ566il3wIAB7oQJE2LHmtNTR7rOjfXouq57ySWXuHPmzEm4prt27Yq93t57vO6669wxY8a4JSUl7rZt29wHH3zQPfXUU92tW7f65hoeqUfX7fjX0HVd97LLLnMvv/xyd8OGDe7WrVvdyZMnuyNGjHD379/vm+t4pB5d1x/XMaqmpsa99NJL3f79+7uLFy92Xdfev1MJO4ZUV1e7eXl57nPPPRc7tmfPHvfUU091V6xYYbGy1pk/f747ZsyYRl97/PHH3YKCAvfgwYOxY4888oh7/vnne1Vei+zcudO9/vrr3dNOO8294IILEoJAUz11lOt8pB5ra2vdwYMHu6tWrWr0ve29x+3bt7v9+/d3161bFzsWiUTcUaNGub/+9a99cQ2b6rGjX0PXPfQfwdtuu8398MMPY8c++OADt3///u769et9cR2b6tEP1zHeI4884l511VUJYcfWdWQay5BNmzZp3759ys/Pjx3LyMjQwIEDVVJSYrGy1tm8ebNOPPHERl9bu3athg0bpqSkuufL5ufn61//+pd27drlVYnf2j//+U9169ZNf/zjH5Wbm5vwWlM9dZTrfKQet2/frurqavXr16/R97b3HjMzM/Xkk09q0KBBsWOO48h1Xe3Zs8cX17CpHjv6NZQO9ThnzhyddNJJkqQvv/xSCxYsUHZ2tk488UTfXMcj9eiH6xhVUlKi559/Xr/85S8Tjtu6jlafeu5nO3fulCT16tUr4XiPHj1UWlpqo6Q28eGHH6p79+664oortH37dh177LG65ZZbVFBQoJ07d6p///4J5/fo0UOS9Pnnn+uYY46xUXKTzjnnHJ1zzjmNvtZUTx3lOh+pxw8//FCO4+j3v/+93njjDQUCARUWFuqnP/2p0tPT232PGRkZKiwsTDj2pz/9SR9//LFGjhypuXPndvhr2FSPHf0a1nfPPffohRdeUCgU0vz589WlSxff/G8xqrEe/XIdKysrdccdd+juu+9uUKut68jIjiFVVVWSpFAolHA8OTlZ1dXVNkpqtZqaGm3fvl179+7VT3/6Uz355JMaPHiwJk2apH/84x86cOBAo/1K6rA9N9WTH67zli1bFAgE1Lt3bz3++OO688479frrr+uWW25RJBLpcD2uW7dOP//5z3XuuefqnHPO8eU1rN+j367hNddco8WLF2vMmDG69dZb9c9//tN317GxHv1yHe+77z6ddtpp+uEPf9jgNVvXkZEdQ1JSUiQdCgjRn6VDFzM1NdVWWa0SCoVUUlKipKSk2F/EQYMGadu2bVqwYIFSUlJUU1OT8J7oX84uXbp4Xm9baKonP1znyZMn69prr1VGRoYkqX///urevbsuv/xyvffeex2qx1dffVVTp05Vbm6u5syZI8l/17CxHv10DSXFpsoffPBBvfvuu3r22Wd9dx0b6/Ghhx7q8Ndx6dKlWrt2rZYvX97o67auIyM7hkSH4MrLyxOOl5eXKzs720ZJbaJLly4NEnf//v1VVlam7OzsRvuVpJ49e3pWY1tqqic/XGfHcWL/co2KDjPv3Lmzw/T47LPPavLkyTrrrLP0u9/9LvYvSj9dw8P16IdruGvXLq1YsULhcDh2LBAIqF+/frE6O/p1bKpHP1zHxYsXa9euXfre976nvLw85eXlSZLuvfdejR492tp1JOwYkpOTo7S0NK1evTp2rLKyUhs3btTQoUMtVtZymzZtUl5eXsLeHpL0/vvv68QTT9SwYcO0bt26hP8h/+Mf/9Dxxx/fbtfrNKWpnvxwnW+//XZdf/31Ccfee+89SYf+v8+O0ONzzz2nBx98UFdeeaV+/etfJwRyv1zDI/Xoh2tYXl6u22+/XWvWrIkdO3jwoDZu3Kh+/fr54jo21aMfruPs2bO1cuVKLV26NPZLkqZMmaInn3zS3nVs8X1caNKcOXPcM844w3311VdjewWcd9557XI/hOYIh8PuZZdd5l500UVuSUmJu3XrVvehhx5yBw0a5G7atMn98ssv3WHDhrl33nmnu2XLFnfx4sXu4MGD3SVLltguvdnuvPPOhNuym9NTR7vO9Xv861//6g4YMMAtLi52d+zY4f797393zznnHPdnP/tZ7Jz23ONHH33knnLKKe6tt96asDdJeXm5W1lZ6Ytr2FSPHf0auu6hW+knTpzonn/++W5JSYm7efNm97bbbnOHDRvmfvbZZ764jk316Ifr2Jj4W89tXUfCjkG1tbXur371Kzc/P9897bTT3EmTJrmffPKJ7bJaZdeuXe60adPcESNGuIMHD3Yvv/xyt6SkJPb6+vXr3R//+MfuoEGD3LPPPtt95plnLFb77dUPAq7bdE8d7To31uMrr7ziXnzxxe6pp57qjhgxwn344YfdAwcOxF5vzz3Onz/f7d+/f6O/7rzzTtd1O/41bE6PHfkaRlVWVrr33nuvO2LECPfUU091J06cmLAnTUe/jq7bdI9+uI71xYcd17VzHR3Xdd2WjwsBAAC0b6zZAQAAvkbYAQAAvkbYAQAAvkbYAQAAvkbYAQAAvkbYAQAAvkbYAQAAvkbYAdDhLFmyRAMGDNCnn35quxQAHQBhBwAA+BphBwAA+BphB0C7FolEVFxcrO9973vKzc3VLbfcoj179iSc8+qrr+qKK65QXl6eBg0apAsuuEDPPvusJKm2tlYjR47U7bff3uCzL7zwQk2bNk2S9M9//lPXXHONTj/9dOXl5enaa6/V+vXrzTcIwDjCDoB2bdasWXrsscc0duxY/fa3v1VmZqYeeeSR2Ot///vfdeutt+qUU05RcXGxHn30UfXu3VsPPvig3n77bSUlJeniiy/Wq6++qr1798bet379en300Ue69NJLtXfvXt1www3KzMzUvHnzNHfuXFVVVen666/X119/baNtAG0oyXYBAHA4lZWVeuaZZ3T11Vdr8uTJkqSCggKVlZXpzTfflCRt3bpVF198sX7xi1/E3peXl6czzzxTJSUlGjJkiMaOHavf/e53+vOf/6yxY8dKkl5++WX17dtXQ4cO1fr161VRUaGrrrpKp59+uiTphBNO0KJFi7R3716lp6d73DmAtkTYAdBuvfvuuzp48KDOPffchOMXXnhhLOzccMMNkqT9+/fr448/1r/+9S+99957kqSDBw9Kko4//nidfvrpWrZsmcaOHauamhqtXLlS11xzjRzH0UknnaSsrCzdfPPNuvDCC1VYWKjhw4frjjvu8LBbAKYwjQWg3YquzcnKyko43r1799jPFRUVmjx5sk4//XRdeumlmjdvniorKyVJruvGzhs3bpzWrFmjzz//XK+99poqKyt1ySWXSJK6du2q//mf/1FhYaFWrlypm2++WcOHD9f06dNVXV1tuk0AhjGyA6DdyszMlCTt2rVLJ5xwQuz4V199Fft56tSp2rZtm5566ikNGTJEoVBIVVVVevHFFxM+64ILLtCMGTP05z//We+8846GDx+u7373u7HXTzjhBM2aNUvhcFgbNmzQsmXL9Ic//EF9+vTRjTfeaLZRAEYxsgOg3crLy1NKSopeeeWVhON/+9vfYj+vW7dO559/vvLz8xUKhSRJb7zxhqRDd3JFdenSRT/4wQ+0YsUKvfnmm7FRHUl65ZVXlJ+fry+++ELBYFB5eXm67777lJGRoZ07d5psEYAHGNkB0G517dpVt9xyi379618rNTVV+fn5ev311xPCzqmnnqrly5frlFNOUXZ2tt555x098cQTchxHVVVVCZ83btw4XX755UpLS9N5550XOz5kyBBFIhHdeuutuvHGG9W1a1f96U9/0tdff51wHoCOyXHjJ7UBoB165pln9Pvf/15lZWXKy8vThRdeqPvuu0+vvfaaHMfRgw8+qLVr10qSjjvuOF199dX64x//qK+++kovvfRSwmfl5+frvPPO0wMPPJBwfMOGDfrNb36j999/X1VVVTrppJP07//+7xo1apRnfQIwg7ADoNPYsGGDLrvsMi1evFiDBg2yXQ4AjzCNBcD3Vq9erdWrV2vp0qXKz88n6ACdDAuUAfje7t279dRTT+mYY47RzJkzbZcDwGNMYwEAAF9jZAcAAPgaYQcAAPgaYQcAAPgaYQcAAPgaYQcAAPgaYQcAAPgaYQcAAPgaYQcAAPgaYQcAAPja/weD5PSu+y91RwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(data=date_diff, x='days')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ist-Dauer" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VorgangsIDObjektIDHObjektTextObjektArtIDObjektArtTextVorgangsTypIDVorgangsTypNameVorgangsDatumVorgangsStatusIdVorgangsPrioritaetVorgangsBeschreibungVorgangsOrtVorgangsArtTextErledigungsDatumErledigungsArtTextErledigungsBeschreibungMPMelderArbeitsplatzMPAbteilungBezeichnungArbeitsbeginnErstellungsDatum
058257107, Webmaschine, OM 220 EOS3Luft-Webmaschine3Reparaturauftrag (Portal)2019-03-2150Gegengewicht wieder anbringenNaNGegengewicht an der Webmaschine abgefallen2019-03-21Reparatur UTTSchraube ausgebohrt\\nGegengewicht wieder angeb...WebereiWeberei2019-03-212019-03-21
18113800138, Schärmaschine 9,16Schärmaschine3Reparaturauftrag (Portal)2019-03-2550da ist etwas gebrochen. (Herr Heininger)NaNzentrale Bremsenverstellung linke Gatterseite ...2019-03-25Reparatur UTTBolzen gebrochen. Bolzen neu angefertig und di...VorwerkVorwerk2019-03-252019-03-25
2820Warenschau allgemein0NaN3Reparaturauftrag (Portal)2019-03-2550Klappbügel Portalkran H31 defektWarenschau allgemeinAllgemeine Reparaturarbeiten2019-03-25Reparatur UTTFeder ausgetauschtWarenschauWarenschau2019-03-252019-03-25
3760Neben der Türe0NaN3Reparaturauftrag (Portal)2019-03-2250Schraube nix mer gutNeben der TüreKettbaum2019-03-25Reparatur UTTSchrauben ausgebohrt\\t\\nGewinde nachgeschnitten\\tVorwerkVorwerk2019-03-252019-03-22
4111241294 C, Webmaschine, SG 240 EMS5Greifer-Webmaschine3Reparaturauftrag (Portal)2019-04-0150KBK tauschen\\nUrsache vermutlich mechanischNaNKupplung-Brems-Kombination2019-04-08Reparatur UTTda derzeit Keine Ersatzteile da Reparatur mit ...WebereiWeberei2019-04-022019-04-01
\n", "
" ], "text/plain": [ " VorgangsID ObjektID HObjektText ObjektArtID \\\n", "0 58 257 107, Webmaschine, OM 220 EOS 3 \n", "1 81 138 00138, Schärmaschine 9, 16 \n", "2 82 0 Warenschau allgemein 0 \n", "3 76 0 Neben der Türe 0 \n", "4 111 241 294 C, Webmaschine, SG 240 EMS 5 \n", "\n", " ObjektArtText VorgangsTypID VorgangsTypName \\\n", "0 Luft-Webmaschine 3 Reparaturauftrag (Portal) \n", "1 Schärmaschine 3 Reparaturauftrag (Portal) \n", "2 NaN 3 Reparaturauftrag (Portal) \n", "3 NaN 3 Reparaturauftrag (Portal) \n", "4 Greifer-Webmaschine 3 Reparaturauftrag (Portal) \n", "\n", " VorgangsDatum VorgangsStatusId VorgangsPrioritaet \\\n", "0 2019-03-21 5 0 \n", "1 2019-03-25 5 0 \n", "2 2019-03-25 5 0 \n", "3 2019-03-22 5 0 \n", "4 2019-04-01 5 0 \n", "\n", " VorgangsBeschreibung VorgangsOrt \\\n", "0 Gegengewicht wieder anbringen NaN \n", "1 da ist etwas gebrochen. (Herr Heininger) NaN \n", "2 Klappbügel Portalkran H31 defekt Warenschau allgemein \n", "3 Schraube nix mer gut Neben der Türe \n", "4 KBK tauschen\\nUrsache vermutlich mechanisch NaN \n", "\n", " VorgangsArtText ErledigungsDatum \\\n", "0 Gegengewicht an der Webmaschine abgefallen 2019-03-21 \n", "1 zentrale Bremsenverstellung linke Gatterseite ... 2019-03-25 \n", "2 Allgemeine Reparaturarbeiten 2019-03-25 \n", "3 Kettbaum 2019-03-25 \n", "4 Kupplung-Brems-Kombination 2019-04-08 \n", "\n", " ErledigungsArtText ErledigungsBeschreibung \\\n", "0 Reparatur UTT Schraube ausgebohrt\\nGegengewicht wieder angeb... \n", "1 Reparatur UTT Bolzen gebrochen. Bolzen neu angefertig und di... \n", "2 Reparatur UTT Feder ausgetauscht \n", "3 Reparatur UTT Schrauben ausgebohrt\\t\\nGewinde nachgeschnitten\\t \n", "4 Reparatur UTT da derzeit Keine Ersatzteile da Reparatur mit ... \n", "\n", " MPMelderArbeitsplatz MPAbteilungBezeichnung Arbeitsbeginn ErstellungsDatum \n", "0 Weberei Weberei 2019-03-21 2019-03-21 \n", "1 Vorwerk Vorwerk 2019-03-25 2019-03-25 \n", "2 Warenschau Warenschau 2019-03-25 2019-03-25 \n", "3 Vorwerk Vorwerk 2019-03-25 2019-03-22 \n", "4 Weberei Weberei 2019-04-02 2019-04-01 " ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logical.head()" ] }, { "cell_type": "code", "execution_count": 157, "metadata": {}, "outputs": [], "source": [ "MAX_DATE_DIFF = 1000" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_diffdays
00 days0
10 days0
20 days0
30 days0
46 days6
\n", "
" ], "text/plain": [ " date_diff days\n", "0 0 days 0\n", "1 0 days 0\n", "2 0 days 0\n", "3 0 days 0\n", "4 6 days 6" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff = logical['ErledigungsDatum'] - logical['Arbeitsbeginn']\n", "date_diff = date_diff.to_frame()\n", "date_diff.columns = ['date_diff']\n", "date_diff['days'] = date_diff['date_diff'].apply(lambda x: x.days)\n", "date_diff = date_diff.loc[((date_diff['days'] <= MAX_DATE_DIFF) & \n", " (date_diff['days'] >= -MAX_DATE_DIFF)), :]\n", "#date_diff = date_diff.reset_index(drop=True)\n", "date_diff.head()" ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_diffdays
count110265110265.000000
mean0 days 04:03:16.2834988430.168938
std3 days 09:12:15.4161633443.383512
min0 days 00:00:000.000000
25%0 days 00:00:000.000000
50%0 days 00:00:000.000000
75%0 days 00:00:000.000000
max486 days 00:00:00486.000000
\n", "
" ], "text/plain": [ " date_diff days\n", "count 110265 110265.000000\n", "mean 0 days 04:03:16.283498843 0.168938\n", "std 3 days 09:12:15.416163344 3.383512\n", "min 0 days 00:00:00 0.000000\n", "25% 0 days 00:00:00 0.000000\n", "50% 0 days 00:00:00 0.000000\n", "75% 0 days 00:00:00 0.000000\n", "max 486 days 00:00:00 486.000000" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff.describe()" ] }, { "cell_type": "code", "execution_count": 160, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date_diffdays
106054486 days486
\n", "
" ], "text/plain": [ " date_diff days\n", "106054 486 days 486" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "date_diff.loc[date_diff['days'] > 300]" ] }, { "cell_type": "code", "execution_count": 161, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "VorgangsID 65407\n", "ObjektID 55\n", "HObjektText 503 C , Webmaschine, DL 280 EMS Breite 280 Bj....\n", "ObjektArtID 3\n", "ObjektArtText Luft-Webmaschine\n", "VorgangsTypID 3\n", "VorgangsTypName Reparaturauftrag (Portal)\n", "VorgangsDatum 2020-11-19 00:00:00\n", "VorgangsStatusId 5\n", "VorgangsPrioritaet 0\n", "VorgangsBeschreibung Schaltschrank ausrichten ist angefahren worden...\n", "VorgangsOrt NaN\n", "VorgangsArtText Maschineninfrastruktur\n", "ErledigungsDatum 2022-03-21 00:00:00\n", "ErledigungsArtText Intern UTT - Reparatur \n", "ErledigungsBeschreibung Schanier eingebaut \n", "MPMelderArbeitsplatz Weberei\n", "MPAbteilungBezeichnung Weberei\n", "Arbeitsbeginn 2020-11-20 00:00:00\n", "ErstellungsDatum 2020-11-19 00:00:00\n", "Name: 106054, dtype: object" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "logical.loc[106054,:]" ] }, { "cell_type": "code", "execution_count": 162, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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ldbDGicAAOyhRcHp73//u8aOHau6urpmX+dZda2LEScAAOyhRcHpmWee0aWXXqrJkyerU6dOcjhatMYcATIYcQIAwBZaFJw+//xzLViwQL169Wrt60Ezjm+Aae11AABwtmvRUNF5552nw4cPt/a14CTYABMAAHtoUXB64IEH9Nxzz/k2wURwsTgcAAB7aNFU3TvvvKPy8nLl5OSoffv2io6O9nvdMAytX7++VS4QLA4HAMAuWhSckpKSeKxKCBm+DTAJTgAAWKlFwWn27NmtfR34Ab6pOo/FFwIAwFmuxRtgStLu3bu1adMmVVRU6O6779bevXuVkpKitm3bttb1Qcen6prbaBQAAIROi4KT2+3W1KlTtWLFCpmmKcMwdNNNN+m5557T3r179dprrzGV14pYHA4AgD206Ft1Cxcu1DvvvKOZM2dq06ZNvpGQSZMmyePxaN68ea16kWc7FocDAGAPLQpOK1asUF5enm677TYlJCT4jqekpCgvL0+bNm1qreuDJIdvcbi11wEAwNmuRcHpu+++01VXXdXsa506dVJ1dfUZXRT8+UacmKoDAMBSLQpOF110kf7+9783+1phYaEuuuiiM7oo+Dv+rTqCEwAAVmrR4vBhw4bpscce09GjR/XTn/5UhmFoz549Kigo0JIlS/TII4+09nWe1RhxAgDAHlo04nTHHXdo7NixeuuttzRy5EiZpqlf//rXmjdvnkaMGKEhQ4YE3JfH41F+fr769u2rtLQ0jRgxQnv27Dlp+6qqKo0fP14ZGRnKyMjQlClTVFtb69fmvffe04ABA9S9e3cNHDhQGzdu9Hv96NGjmjt3rvr27atrrrlGubm52rlz5+kVIYQMRpwAALCFFgUnSRo5cqTeffddPfnkk5ozZ45eeOEFffDBB/rVr351Wv0sWLBAy5Yt08yZM7V8+XIZhqGRI0eqvr6+2fZ5eXnau3evXnrpJeXn52vTpk2aPn267/XNmzdrwoQJGjp0qFatWqXs7GyNHj1au3fv9rWZNm2a3nzzTT3++ONasWKFEhISNHLkSB06dKhlxQgy7+JwBpwAALDWaQenNWvWKDc3V2lpabr++us1efJkTZkyRa+88oqKi4tPq6/6+notWbJEY8aMUf/+/ZWSkqJ58+apvLxc69ata9J+27ZtKiws1OzZs5WamqqsrCzNmDFDq1evVnl5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TNOk3sFQXV1tTp061bz22mvNq6++2hwxYoTfvk7UPLhODE6mSb1b2/79+83Jkyeb1157rdm9e3fzzjvvNIuKinyvh6rehmma5hmNnwEAAJwlWOMEAAAQIIITAABAgAhOAAAAASI4AQAABIjgBAAAECCCEwAAQIAITgAAAAEiOAE4K61cuVJXXnmlvv76a6svBUAYITgBAAAEiOAEAAAQIIITgB89j8ejBQsW6LrrrlNaWpoeeughHTx40K/N+vXrNXToUPXo0UPdunXTjTfeqNdee02S1NDQoOzsbI0fP75J3zfddJMmT54sSfr00081bNgw9ezZUz169NC9996rjz/+OPg3CCBkCE4AfvSefvppPffcc7rttts0f/58JSYmau7cub7X//a3v2n06NFKTU3VggUL9Oyzz+r888/X448/rq1btyoiIkKDBg3S+vXrdfjwYd/7Pv74Y33++ecaPHiwDh8+rPvvv1+JiYnKz8/XvHnzVFdXp/vuu0+HDh2y4rYBBEGE1RcAAMFUXV2tV199Vffcc4/GjBkjSerbt6/Ky8v1wQcfSJJ27dqlQYMG6be//a3vfT169FCfPn1UVFSk9PR03XbbbVq0aJH+9Kc/6bbbbpMkvfXWW7rwwgvVq1cvffzxx6qsrNTdd9+tnj17SpIuvfRSLVu2TIcPH1a7du1CfOcAgoHgBOBH7aOPPtLRo0d1/fXX+x2/6aabfMHp/vvvlyTV1tbqq6++0hdffKF//OMfkqSjR49Kki655BL17NlTq1ev1m233ab6+nqtXbtWw4YNk2EYuvzyy9W+fXs9+OCDuummm9S/f39lZWVp4sSJIbxbAMHGVB2AHzXvWqb27dv7He/QoYPv58rKSo0ZM0Y9e/bU4MGDlZ+fr+rqakmSaZq+drfffrsKCwv17bffasOGDaqurtatt94qSYqLi9P//M//qH///lq7dq0efPBBZWVl6bHHHpPL5Qr2bQIIEUacAPyoJSYmSpL279+vSy+91Hf8wIEDvp8ffvhh7d69W0uXLlV6eroiIyNVV1enP/7xj3593XjjjZo5c6b+9Kc/adu2bcrKytJ5553ne/3SSy/V008/Lbfbre3bt2v16tV644031KVLF40aNSq4NwogJBhxAvCj1qNHD0VHR+v999/3O/7Xv/7V9/OWLVt0ww03KDMzU5GRkZKkjRs3Smr8Rp5XbGysBgwYoDVr1uiDDz7wjTZJ0vvvv6/MzEzt27dPTqdTPXr00LRp0xQfH6+ysrJg3iKAEGLECcCPWlxcnB566CH97ne/U0xMjDIzM/X3v//dLzhdffXVeuedd5SamqqkpCRt27ZNL7zwggzDUF1dnV9/t99+u+688061bdtWP//5z33H09PT5fF4NHr0aI0aNUpxcXF67733dOjQIb92AMKbYZ44gQ8AP1KvvvqqXn75ZZWXl6tHjx666aabNG3aNG3YsEGGYejxxx9XcXGxJOniiy/WPffco7ffflsHDhzQm2++6ddXZmamfv7zn2vGjBl+x7dv367f//73+uSTT1RXV6fLL79c//Vf/6WcnJyQ3SeA4CI4AcBp2L59u+644w6tWLFC3bp1s/pyAIQYU3UAEICCggIVFBRo1apVyszMJDQBZykWhwNAAKqqqrR06VKde+65mj17ttWXA8AiTNUBAAAEiBEnAACAABGcAAAAAkRwAgAACBDBCQAAIEAEJwAAgAARnAAAAAJEcAIAAAgQwQkAACBABCcAAIAA/f+F04RVfuJNgAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(data=date_diff, x='days')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }