[PYTHON] Traiter les données extraites d'un certain système de point de vente pour créer un tableau récapitulatif par produit et par heure

introduction

J'ai reçu une demande de plusieurs connaissances disant que "les données extraites du point de vente sont difficiles à gérer, veuillez donc les agréger", j'ai donc créé un script pour les convertir en données faciles à gérer avec Python.

Vérifiez les données reçues

Ouvrez-le avec un éditeur de texte et vérifiez-le.

zitem.csv


0000,0000,0000,20160000,201600000000,1000
Code menu / code PLU,Code personnel,Nom du produit,Catégories,Catégories名称,sous/ensemble/Commentaire Code du menu parent,Nom du menu parent,Prix unitaire,1 code de tabulation gratuit,1 nom d'agrégat gratuit,Code de tabulation gratuit 2,Nom global gratuit 2,Code de tabulation gratuit 3,Nom d'agrégat 3 gratuit,Classement à emporter,Classement à emporter名称,原Prix unitaire,Code GP,Nom du GP,Code DP,Nom DP,Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 01 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 02 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 03 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 04 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 05 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 06 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 07 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 08 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 09 Nombre d'apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 10 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 11 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 12 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 13 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 14 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 15 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 16 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 17 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 18 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 19 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 20 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 21 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 22 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 23 apparitions (points),Heure de début du fuseau horaire,Heure de fin du fuseau horaire,Fuseau horaire 24 apparitions (points),Nombre d'employeurs,Nombre de promotions,Données par produit 1,Données par produit 2,Données par produit 3,Fuseau horaire 01 points de réduction de valeur,Valeur du fuseau horaire 01 montant de la remise,Fuseau horaire 01 Numéro promotionnel,Réserve de fuseau horaire 01,Fuseau horaire 02 points de réduction de valeur,Valeur du fuseau horaire 02 montant de la remise,Fuseau horaire 02 Numéro promotionnel,Réserve du fuseau horaire 02,Fuseau horaire 03 points de réduction de valeur,Valeur du fuseau horaire 03 montant de la remise,Fuseau horaire 03 Numéro promotionnel,Réserve du fuseau horaire 03,Fuseau horaire 04 points de réduction de valeur,Valeur du fuseau horaire 04 montant de la remise,Fuseau horaire 04 Numéro promotionnel,Réserve du fuseau horaire 04,Fuseau horaire 05 points de réduction de valeur,Valeur du fuseau horaire 05 montant de la remise,Fuseau horaire 05 Numéro promotionnel,Réserve du fuseau horaire 05,Fuseau horaire 06 points de réduction de valeur,Valeur du fuseau horaire 06 montant de la remise,Fuseau horaire 06 Numéro promotionnel,Réserve du fuseau horaire 06,Fuseau horaire 07 points de réduction de valeur,Valeur du fuseau horaire 07 montant de la remise,Fuseau horaire 07 Numéro promotionnel,Réserve du fuseau horaire 07,Fuseau horaire 08 points de réduction de valeur,Valeur du fuseau horaire 08 montant de la remise,Fuseau horaire 08 Numéro promotionnel,Réserve du fuseau horaire 08,Fuseau horaire 09 points de réduction de valeur,Valeur du fuseau horaire 09 montant de la remise,Fuseau horaire 09 Numéro promotionnel,Réserve du fuseau horaire 09,Fuseau horaire 10 points de réduction,Valeur de la remise sur le fuseau horaire 10,Fuseau horaire 10 Promos,Fuseau horaire 10 disponible,Fuseau horaire 11 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 11,Fuseau horaire 11 Promos,Réserve du fuseau horaire 11,Remise de 12 valeurs pour les fuseaux horaires,Remise de 12 valeurs pour le fuseau horaire,Fuseau horaire 12 Promos,Fuseau horaire 12 disponible,Fuseau horaire 13 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 13,Fuseau horaire 13 Promos,Réserve du fuseau horaire 13,Fuseau horaire 14 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 14,Fuseau horaire 14 Promos,Fuseau horaire 14 disponible,Fuseau horaire 15 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 15,Fuseau horaire 15 Promos,Fuseau horaire 15 disponible,Fuseau horaire 16 points de réduction de valeur,Valeur de la réduction du fuseau horaire 16,Fuseau horaire 16 Promos,Réserve du fuseau horaire 16,Fuseau horaire 17 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 17,Fuseau horaire 17 Promos,Réserve du fuseau horaire 17,Fuseau horaire 18 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 18,Fuseau horaire 18 Promos,Réserve du fuseau horaire 18,Fuseau horaire 19 points de réduction,Valeur de la remise sur le fuseau horaire 19,Fuseau horaire 19 Promos,Réserve du fuseau horaire 19,Fuseau horaire 20 points de réduction,Valeur de la remise sur le fuseau horaire 20,Fuseau horaire 20 Promos,Réserve du fuseau horaire 20,Fuseau horaire 21 points de réduction,Valeur de la remise sur le fuseau horaire 21,Fuseau horaire 21 Numéro promotionnel,Réserve du fuseau horaire 21,Fuseau horaire 22 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 22,Fuseau horaire 22 Numéro promotionnel,Réserve du fuseau horaire 22,Fuseau horaire 23 points de réduction de valeur,Valeur de la remise sur le fuseau horaire 23,Fuseau horaire 23 Numéro promotionnel,Réserve du fuseau horaire 23,Fuseau horaire 24 points de réduction,Montant de la remise de valeur de 24 fuseau horaire,Fuseau horaire 24 Promos,Fuseau horaire 24 disponible
0000000000000,0000000000000,Échantillon 1,00,Principale,0000,                    ,+001200,01,Gratuit 1,01,Gratuit 2,01,Gratuit 3,0,Nourriture et boisson dans le magasin,+000000,01,Repas,01,eau,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,Échantillon de test,00,Principale,0000,                    ,+000400,01,Gratuit 1,01,Gratuit 2,01,Gratuit 3,0,Nourriture et boisson dans le magasin,+000000,01,Repas,01,eau,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
(Ci-après omis)

... Certes, il est difficile de l'utiliser tel quel (-_-;)

Quand j'ai demandé un peu sur le contenu et les demandes des données,

Format de données de sortie CSV

L'en-tête est le code du menu, le nom du produit et le prix unitaire, et organise le nombre de produits qui sont apparus pour chaque heure par la suite.

output.csv


Code de menu,0,1,2,〜,9999
Nom du produit,Échantillon 1,Échantillon 2,Échantillon 3,〜,Échantillon 10000
Prix unitaire,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
(Omission)
2016/1/1 23:00,1,2,3,〜,10

Charger la bibliothèque

python


import pandas as pd
import os
import datetime

Lire le fichier

Le nom du fichier étant fixe, définissez le nom du fichier et récupérez les données de date à partir de la date de création et lisez-le.

python


#nom de fichier
filename = "zitem.csv"    

#Acquisition des données de date
dt = datetime.datetime.fromtimestamp(os.stat(filename).st_mtime)
y = dt.year
m = dt.month
d = dt.day

#Lecture des données
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=1)

Obtenez le nom et le prix du produit

En ce qui concerne le nom du produit et le prix, il est dit qu'il y a des moments où il est inclus dans les données CSV et il y a des moments où il n'est pas inclus, donc en tenant compte de la collecte de plusieurs données à l'avenir, préparez un cadre pour le moment et la partie avec les données Je vais le remplir.

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])

Comme il est compris entre 0 et 9999, il s'agit de 10000 types de données, mais comme les données de date et d'heure sont ajoutées, elles sont transformées en tableau de données 10001.

Obtenez le nombre de ventes

Il semble que les données du nombre de ventes soient incluses dans toutes les 3 colonnes de la 23e colonne, alors obtenez les données pendant 24 heures toutes les 3 colonnes.

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

Sortie de fichier

Enregistrez les informations acquises dans un fichier CSV.

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()

Enregistrez le code jusqu'à ce point sous "pos.py" et exécutez-le.

python


$ python pos.py

l'a fait!

Tout le code source publié

pos.py


import pandas as pd
import os
import datetime

#nom de fichier
filename = "zitem.csv"    

#Acquisition des données de date
dt = datetime.datetime.fromtimestamp(os.stat(filename).st_mtime)
y = dt.year
m = dt.month
d = dt.day

#Lecture des données
df = pd.read_csv(filename,encoding="SHIFT-JIS",skiprows=1)

#Obtenez les données dont vous avez besoin

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

#Sortie de fichier

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()

à la fin

Il doit y avoir un meilleur moyen!

Recommended Posts

Traiter les données extraites d'un certain système de point de vente pour créer un tableau récapitulatif par produit et par heure
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Rechercher la table à l'aide de sqlalchemy et créer un dictionnaire
Créer un bloc de données à partir des données textuelles de course de bateaux acquises
[numpy] Créer une matrice de fenêtre mobile à partir de données de séries chronologiques multidimensionnelles
Le premier débutant en programmation à essayer une analyse de données simple avec programmation
Préparez un environnement d'analyse haute vitesse en accédant à mysql depuis l'environnement d'analyse de données
Extraire et tracer les dernières données démographiques à partir des données PDF fournies par la ville
Créez une table de correspondance entre le numéro CE et l'entrée Uniprot à partir d'enzyme.dat
[Python] Créer une liste de date et d'heure (type datetime) pour une certaine période
Python --Lisez les données d'un fichier de données numériques et recherchez la ligne de régression multiple.
Créons un système de réception simple avec le framework sans serveur Python Chalice et Twilio
Regroupez le nombre d'étapes par jour à partir des données de santé iPhone pour créer un fichier CSV