[PYTHON] Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen

Einführung

Ich erhielt eine Anfrage von mehreren Bekannten, dass "die aus dem POS extrahierten Daten schwer zu verarbeiten sind, also aggregieren Sie sie bitte". Deshalb habe ich ein Skript erstellt, um sie in Daten zu konvertieren, die mit Python einfach zu handhaben sind.

Überprüfen Sie die empfangenen Daten

Öffnen Sie es mit einem Texteditor und überprüfen Sie es.

zitem.csv


0000,0000,0000,20160000,201600000000,1000
Menücode / PLU-Code,Eigener Code,Produktname,Kategorien,Kategorien名称,sub/einstellen/Kommentar Übergeordneter Menücode,Name des übergeordneten Menüs,Stückpreis,Geben Sie 1 Tabellencode frei,Geben Sie 1 Aggregatnamen frei,Geben Sie 2 Tabellierungscode frei,Geben Sie 2 Aggregatnamen frei,Geben Sie 3 Tabellierungscode frei,Geben Sie 3 Aggregatnamen frei,Klassifizierung zum Mitnehmen,Klassifizierung zum Mitnehmen名称,原Stückpreis,GP-Code,GP Name,DP-Code,DP-Name,Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 01 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 02 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 03 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 04 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 05 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 06 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 07 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 08 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 09 Anzahl der Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 10 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 11 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 12 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 13 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 14 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 15 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 16 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 17 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 18 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 19 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 20 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 21 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 22 Erscheinungen (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 23 Auftritte (Punkte),Startzeit der Zeitzone,Endzeit der Zeitzone,Zeitzone 24 Auftritte (Punkte),Anzahl der Arbeitgeber,Anzahl der Aktionen,Daten nach Produkt 1,Daten nach Produkt 2,Daten nach Produkt 3,Zeitzone 01 Wert Rabattpunkte,Zeitzone 01 Wert Rabattbetrag,Zeitzone 01 Promo-Nummer,Zeitzone 01 Reserve,Zeitzone 02 Wert Rabattpunkte,Zeitzone 02 Wert Rabattbetrag,Zeitzone 02 Promo-Nummer,Zeitzone 02 Reserve,Zeitzone 03 Wert Rabattpunkte,Zeitzone 03 Wert Rabattbetrag,Zeitzone 03 Promo-Nummer,Zeitzone 03 Reserve,Zeitzone 04 Wert Rabattpunkte,Zeitzone 04 Wert Rabattbetrag,Zeitzone 04 Promo-Nummer,Zeitzone 04 Reserve,Zeitzone 05 Wert Rabattpunkte,Zeitzone 05 Wert Rabattbetrag,Zeitzone 05 Promo-Nummer,Zeitzone 05 Reserve,Zeitzone 06 Wert Rabattpunkte,Zeitzone 06 Wert Rabattbetrag,Zeitzone 06 Promo-Nummer,Zeitzone 06 Reserve,Zeitzone 07 Wert Rabattpunkte,Zeitzone 07 Wert Rabattbetrag,Zeitzone 07 Promo-Nummer,Zeitzone 07 Reserve,Zeitzone 08 Wert Rabattpunkte,Zeitzone 08 Wert Rabattbetrag,Zeitzone 08 Promo-Nummer,Zeitzone 08 Reserve,Zeitzone 09 Wert Rabattpunkte,Zeitzone 09 Wert Rabattbetrag,Zeitzone 09 Promo-Nummer,Zeitzone 09 Reserve,Zeitzone 10 Wert Rabattpunkte,Zeitzone 10 Wert Rabattbetrag,Zeitzone 10 Promos,Zeitzone 10 frei,Zeitzone 11 Wert Rabattpunkte,Zeitzone 11 Wert Rabattbetrag,Zeitzone 11 Promos,Zeitzone 11 Reserve,12-Wert-Rabatt für Zeitzonen,12-Wert-Rabatt für die Zeitzone,Zeitzone 12 Promos,Zeitzone 12 frei,Zeitzone 13 Wert Rabattpunkte,Zeitzone 13 Wert Rabattbetrag,Zeitzone 13 Promos,Zeitzone 13 Reserve,Zeitzone 14 Wert Rabattpunkte,Zeitzone 14 Wert Rabattbetrag,Zeitzone 14 Promos,Zeitzone 14 frei,Zeitzone 15 Wert Rabattpunkte,Zeitzone 15 Wert Rabattbetrag,Zeitzone 15 Promos,Zeitzone 15 frei,Zeitzone 16 Wert Rabattpunkte,Zeitzone 16 Wert Rabattbetrag,Zeitzone 16 Promos,Zeitzone 16 Reserve,Zeitzone 17 Wert Rabattpunkte,Zeitzone 17 Wert Rabattbetrag,Zeitzone 17 Promos,Zeitzone 17 Reserve,Zeitzone 18 Wert Rabattpunkte,Zeitzone 18 Wert Rabattbetrag,Zeitzone 18 Promos,Zeitzone 18 Reserve,Zeitzone 19 Wert Rabattpunkte,Zeitzone 19 Wert Rabattbetrag,Zeitzone 19 Promos,Zeitzone 19 Reserve,Zeitzone 20 Wert Rabattpunkte,Zeitzone 20 Wert Rabattbetrag,Zeitzone 20 Promos,Zeitzone 20 Reserve,Zeitzone 21 Wert Rabattpunkte,Zeitzone 21 Wert Rabattbetrag,Zeitzone 21 Promo-Nummer,Zeitzone 21 Reserve,Zeitzone 22 Wert Rabattpunkte,Zeitzone 22 Wert Rabattbetrag,Zeitzone 22 Promo-Nummer,Zeitzone 22 Reserve,Zeitzone 23 Wert Rabattpunkte,Zeitzone 23 Wert Rabattbetrag,Zeitzone 23 Promo-Nummer,Zeitzone 23 Reserve,Zeitzone 24-Wert-Rabattpunkte,Zeitzone 24-Wert-Rabattbetrag,Zeitzone 24 Promos,Zeitzone 24 frei
0000000000000,0000000000000,Probe 1,00,Maine,0000,                    ,+001200,01,Kostenlos 1,01,Kostenlos 2,01,Kostenlos 3,0,Essen und Trinken im Laden,+000000,01,Mahlzeit,01,Wasser,0000,0059,+0000,0100,0159,+0000,0200,0259,+0000,0300,0359,+0000,0400,0459,+0000,0500,0559,+0000,0600,0659,+0000,0700,0759,+0000,0800,0859,+0000,0900,0959,+0000,1000,1059,+0000,1100,1159,+0000,1200,1259,+0000,1300,1359,+0000,1400,1459,+0000,1500,1559,+0000,1600,1659,+0000,1700,1759,+0002,1800,1859,+0000,1900,1959,+0000,2000,2059,+0000,2100,2159,+0000,2200,2259,+0000,2300,2359,+0000,+0000,+0000,+0000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000
0000000000000,0000000000000,Testprobe,00,Maine,0000,                    ,+000400,01,Kostenlos 1,01,Kostenlos 2,01,Kostenlos 3,0,Essen und Trinken im Laden,+000000,01,Mahlzeit,01,Wasser,0000,0059,+0000,0100,0159,+0000,0200,0259,+0000,0300,0359,+0000,0400,0459,+0000,0500,0559,+0000,0600,0659,+0000,0700,0759,+0000,0800,0859,+0000,0900,0959,+0000,1000,1059,+0000,1100,1159,+0000,1200,1259,+0000,1300,1359,+0000,1400,1459,+0000,1500,1559,+0000,1600,1659,+0000,1700,1759,+0000,1800,1859,+0000,1900,1959,+0000,2000,2059,+0000,2100,2159,+0000,2200,2259,+0000,2300,2359,+0000,+0000,+0000,+0000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000,+0000,+0000000,+0000,+0000
(Im Folgenden weggelassen)

... Sicher ist es schwierig, dies so zu verwenden, wie es ist (-_-;)

Als ich ein wenig nach dem Inhalt und den Anforderungen der Daten fragte,

CSV-Datenformat ausgeben

Die Kopfzeile enthält den Menücode, den Produktnamen und den Stückpreis und organisiert die Anzahl der Produkte, die danach für jede Stunde angezeigt wurden.

output.csv


Menücode,0,1,2,〜,9999
Produktname,Probe 1,Probe 2,Probe 3,〜,Probe 10000
Stückpreis,100,200,300,〜10000
2016/1/1 0:00,1,2,3,〜,10
2016/1/1 1:00,4,5,6,〜,0
2016/1/1 2:00,6,2,9,〜,20
(Unterlassung)
2016/1/1 23:00,1,2,3,〜,10

Bibliothek laden

python


import pandas as pd
import os
import datetime

Datei lesen

Da der Dateiname festgelegt ist, legen Sie den Dateinamen fest, rufen Sie die Datumsdaten vom Erstellungsdatum ab und lesen Sie sie.

python


#Dateiname
filename = "zitem.csv"    

#Datumsdatenerfassung
dt = datetime.datetime.fromtimestamp(os.stat(filename).st_mtime)
y = dt.year
m = dt.month
d = dt.day

#Daten gelesen
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=1)

Holen Sie sich Produktname und Preis

In Bezug auf den Produktnamen und den Preis wird gesagt, dass es Zeiten gibt, in denen diese in den CSV-Daten enthalten sind, und Zeiten, in denen sie nicht enthalten sind. Berücksichtigen Sie daher im Hinblick auf die zukünftige Erfassung mehrerer Daten einen Rahmen für den Moment und den Teil mit den Daten Ich werde es füllen.

python


cnt = 10001

names = [""] * cnt
prices = [0] * cnt

for i in range(len(df)):
    key = int(df.loc[i][0]) + 1
    names[key] = df.loc[i][2]
    prices[key] = int(df.loc[i][7])

Da es sich um 0 bis 9999 handelt, handelt es sich um 10000 Arten von Daten. Da jedoch Datums- und Uhrzeitdaten hinzugefügt werden, werden sie zu 10001 Datenfeldern verarbeitet.

Holen Sie sich die Anzahl der Verkäufe

Es scheint, dass die Daten der Anzahl der Verkäufe in allen 3 Spalten der 23. Spalte enthalten sind, sodass die Daten für 24 Stunden alle 3 Spalten erfasst werden.

python


x = 23

datas = []

for i in range(24):
    items = [0] * cnt
    items[0] = datetime.datetime(y,m,d,i,0).strftime("%Y-%m-%d %H:%M")
    for j in range(len(df)):
        key = df.loc[j][0] + 1
        num = int(df.loc[j][x])
        items[key] = num
    datas.append(items)
    x += 3

Dateiausgabe

Speichern Sie die erfassten Informationen in einer CSV-Datei.

python


f = open('output.csv', 'w')

sName = ""
sPrice = ""

for i in range(len(names)):
    sName += names[i] + ","
    sPrice += str(prices[i]) + ","

f.write(sName + "\n" + sPrice + "\n")

for i in range(len(datas)):
    data = datas[i]
    sData = ""
    for j in range(len(data)):
        sData += str(data[j]) + ","
    f.write(sData + "\n")
    
f.close()

Speichern Sie den Code bis zu diesem Punkt als "pos.py" und führen Sie ihn aus.

python


$ python pos.py

erledigt!

Der gesamte Quellcode wurde veröffentlicht

pos.py


import pandas as pd
import os
import datetime

#Dateiname
filename = "zitem.csv"    

#Datumsdatenerfassung
dt = datetime.datetime.fromtimestamp(os.stat(filename).st_mtime)
y = dt.year
m = dt.month
d = dt.day

#Daten gelesen
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=1)

#Holen Sie sich die Daten, die Sie benötigen

cnt = 10001

names = [""] * cnt
prices = [0] * cnt

for i in range(len(df)):
    key = int(df.loc[i][0]) + 1
    names[key] = df.loc[i][2]
    prices[key] = int(df.loc[i][7])

x = 23

datas = []

for i in range(24):
    items = [0] * cnt
    items[0] = datetime.datetime(y,m,d,i,0).strftime("%Y-%m-%d %H:%M")
    for j in range(len(df)):
        key = df.loc[j][0] + 1
        num = int(df.loc[j][x])
        items[key] = num
    datas.append(items)
    x += 3

#Dateiausgabe

f = open('output.csv', 'w')

sName = ""
sPrice = ""

for i in range(len(names)):
    sName += names[i] + ","
    sPrice += str(prices[i]) + ","

f.write(sName + "\n" + sPrice + "\n")

for i in range(len(datas)):
    data = datas[i]
    sData = ""
    for j in range(len(data)):
        sData += str(data[j]) + ","
    f.write(sData + "\n")
    
f.close()

schließlich

Es muss einen besseren Weg geben!

Recommended Posts

Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Durchsuchen Sie die Tabelle mit sqlalchemy und erstellen Sie ein Wörterbuch
Erstellen Sie einen Datenrahmen aus den erfassten Textdaten des Bootsrennens
[numpy] Erstellen Sie eine sich bewegende Fenstermatrix aus mehrdimensionalen Zeitreihendaten
Zum ersten Mal versuchte ein Programmieranfänger eine einfache Datenanalyse mit Programmierung
Bereiten Sie eine Hochgeschwindigkeitsanalyseumgebung vor, indem Sie in der Datenanalyseumgebung auf MySQL klicken
Extrahieren und zeichnen Sie die neuesten Bevölkerungsdaten aus den von der Stadt bereitgestellten PDF-Daten
Erstellen Sie eine Korrespondenztabelle zwischen der EC-Nummer und dem Uniprot-Eintrag aus enzym.dat
[Python] Erstellen Sie eine Liste mit Datum und Uhrzeit (Datum / Uhrzeit-Typ) für einen bestimmten Zeitraum
Python - Lesen Sie Daten aus einer numerischen Datendatei und suchen Sie die multiple Regressionslinie.
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
Aggregieren Sie die Anzahl der Schritte pro Tag aus den iPhone-Gesundheitsdaten, um eine CSV-Datei zu erstellen