Profile picture

Programmer / Analyst @ OSRAM GmbH

Electrodes

Last updated: March 17th, 20202020-03-17Project preview
drawing
The most popular Python data science platform

Převodník naměřených dat na elektrodách

📋 Zadání

Firma Keyence Solutions nám dodá měřící zařízení nahrazující technologii profil projektoru. Bohužel jejich software nepodporuje ukládání dat v relačních databázích (a to ani přes předpřipravené procedury). Jediným použitelným formátem, který lze využít je textová, vertikální podoba datové evidence ve formátu CSV. Úkolem tedy zůstává zajistit automatizovaný transfer naměřených dat z textového souboru CSV do databázového systému platformy MS-SQL a uklidit po sobě...

📝 Teorie

Při zpracování logiky scriptu budu vycházím z teorie datové analytiky programovacího jazyka Python, za použití především knihoven PANDAS a NumPy v prostředí iPython.

Použité zdroje

MCKINNEY, Wes. Python for data analysis: data wrangling with pandas, NumPy, and IPython [online]. Second edition. Beijing: O'Reilly, 2017 [cit. 2020-02-25]. ISBN 978-1-491-95766-0.

Pochody myšlenek

Lámu si hlavu, jak provést transfer dat nezávisle a bez možnosti jakéhokoliv rizika (... a blbuvzdorně...)...

  • Jednak jsem musel zrušit volitelné pole pro možnost přidání komentáře, protože právě komentáře bývají v CSV rozlišeny nějakými oddělovači (např. pomocí "). No, jenomže pokud mi nějaký uživatel právě takový symbol použije v samotném komentáři, celé mi to nabourá a struktura dat půjde srát... Proto veškerá data omezuji pouze na ta, která jdou automatizovat...

  • Další a docela obdobný problém řeším s názvy produktů a procesů... Z principu relačních databází potřebuji používat IDčka těchto parametrů, což, jak vidno, řeším tak, že ID jsou součastí názvů a odděleny čárkou, no a takto si to pak mohu jednoduše přebrat... Problém však nastává v případě, že bude potřeba založit nový produkt, nebo měrný parametr... Procesní inženýr pak bude závislý na IT oddělení, aby získal informaci o tom, které číslo má do názvu použít, neboť tato čísla jsou právě primárními klíči těchto produktů, či parametrů. Nicméně ani přesto to nevylužuje možnost chybovosti vlivem lidského faktoru...

😊 Motivace

drawing
Ahoj, jsem Panda velká! (Ailuropoda melanoleuca) "kočičí stopa - černá a bílá".
Mým posláním je analyzovat data a jsem v tom K*REVSKY dobrá!

💻 Programování

Visualizační knihovny

In [1]:
import IPython
from IPython.display import IFrame, display, HTML
from IPython.display import set_matplotlib_formats
display(HTML("<style>.container{width:98%;}</style>"))

print("All libraries was successfully imported...")
All libraries was successfully imported...

Výpočetní knihovny

In [2]:
%matplotlib inline

import sys, os, re, math
import pandas as pd
import numpy as np
import time

import matplotlib as mpl
import matplotlib.pyplot as plt
#mpl.style.use('ggplot')

set_matplotlib_formats('pdf')#'png')

from scipy.interpolate import splev, splrep

#from sympy import init_session, pprint
#init_session(quiet=True, use_latex=True)
#%matplotlib inline

print("All libraries was successfully imported...")
All libraries was successfully imported...

Načtení dat

In [3]:
RawData = pd.read_csv('Data/RawMeasuring/Data.csv', sep=';')

print('Data v neučesané podobě, načtená rovou z textové podoby vypadají zatím takto:')

RawData
Data v neučesané podobě, načtená rovou z textové podoby vypadají zatím takto:
Out[3]:
DateTime UserNumber Protocol Sample Product Parameter MeasuredValue NominalValue LowerLimit UpperLimit

Manipulace s daty

In [70]:
try:
    #SaveData = RawData.truncate(after=-1,axis=0)
    #SaveData.to_csv('Data/RawMeasuring/Data.csv',sep=';',index=False)#, encoding='utf-8')
    
    RawData[['ProductID','SN','Product']] = RawData.Product.str.split(",",expand=True)
    RawData[['ParameterID','Parameter']] = RawData.Parameter.str.split(",",expand=True)

    NewData = RawData[['DateTime','UserNumber','Protocol','Sample','ProductID','SN','Product','ParameterID','Parameter','MeasuredValue','NominalValue','LowerLimit','UpperLimit']]

    print('Po oddělení IDs a SNs vypadají data zatím takto:')
    
    print(NewData)

except:
    pass
Po oddělení IDs a SNs vypadají data zatím takto:
              DateTime  UserNumber  Protocol  Sample ProductID      SN  \
0  2020-03-06 10:12:12      173404    123456       1         1  123456   

  Product ParameterID Parameter  MeasuredValue  NominalValue  LowerLimit  \
0   kunda           1    cmunda             15            15          14   

   UpperLimit  
0          16  
In [71]:
print('Tvorba a volání (prodleva 1s) řetězce pro SQL proceduru:')

for index, row in NewData.iterrows():
    ExecString = 'EXEC dbo.SW_Keyence_01_Save '+\
                    '@EventTime='+'\''+str(row['DateTime'])+'\''+\
                    ', @Number='+'\''+str(row['UserNumber'])+'\''+\
                    ', @Protocol='+'\''+str(row['Protocol'])+'\''+\
                    ', @Sample='+'\''+str(row['Sample'])+'\''+\
                    ', @EOSystemID='+'\''+str(row['ProductID'])+'\''+\
                    ', @SN='+'\''+str(row['SN'])+'\''+\
                    ', @Product='+'\''+str(row['Product'])+'\''+\
                    ', @ParameterID='+'\''+str(row['ParameterID'])+'\''+\
                    ', @Parameter='+'\''+str(row['Parameter'])+'\''+\
                    ', @Value='+'\''+str(row['MeasuredValue'])+'\''+\
                    ', @NominalValue='+'\''+str(row['NominalValue'])+'\''+\
                    ', @LowerLimit='+'\''+str(row['LowerLimit'])+'\''+\
                    ', @UpperLimit='+'\''+str(row['UpperLimit'])+'\''
    
    print('\n'+ExecString)
    time.sleep(1)
Tvorba a volání (prodleva 1s) řetězce pro SQL proceduru:

EXEC dbo.SW_Keyence_01_Save @EventTime='2020-03-06 10:12:12', @Number='173404', @Protocol='123456', @Sample='1', @EOSystemID='1', @SN='123456', @Product='kunda', @ParameterID='1', @Parameter='cmunda', @Value='15', @NominalValue='15', @LowerLimit='14', @UpperLimit='16'

🏁 Konec

In [6]:
IPython.display.Audio("./Sound/Thats-all-Folks.mp3")
Out[6]:
drawing

Author: Miroslav BURDA, OSRAM GmbH, 02/2020

Powered by Python

Notebooks AI
Notebooks AI Profile20060