Hebei University of Technology Data Mining Experiment 2 Datenwürfel und Online-Analyseverarbeitungskonstruktion

1. Experimenteller Zweck

(1) Mit der grundlegenden Datenwürfelkonstruktion sowie Online-Analyse- und Verarbeitungsalgorithmen vertraut sein.
(2) Erstellen Sie eine konsistente und qualitativ hochwertige relationale Datenbank.
(3) Erstellen Sie einen Basisdatenwürfel basierend auf der erstellten Datenbank.
(5) Schreiben Sie einen Experimentbericht.

2. Experimentelle Prinzipien

1. Relationale Datenbank

Eine relationale Datenbank ist eine Datenbank, die auf der Grundlage eines relationalen Modells erstellt wird und mathematische Konzepte
und Methoden wie die Mengenalgebra verwendet, um Daten in der Datenbank zu verarbeiten. Das relationale Modell besteht aus drei Teilen: relationaler Datenstruktur, relationalem Operationssatz und relationalen
Integritätsbeschränkungen.

2. Datenwürfel

Ein mehrdimensionales Datenmodell, das die Modellierung und Beobachtung von Daten in mehreren Dimensionen ermöglicht. Es wird durch friedenserhaltende Fakten definiert. Eine Dimension ist eine Perspektive oder Entität, die eine Einheit wünscht. Jede Dimension kann über eine mit Personen verknüpfte Tabelle verfügen, die als Dimensionstabelle bezeichnet wird und die Dimension weiter beschreibt. Beispielsweise enthält die Dimensionstabelle der Artikeldimension Attribute wie Name, Zeit, Typ usw. Fakten: Mehrdimensionale Datenmodelle sind rund um Themen wie Verkäufe organisiert, wobei die Themen durch Fakten dargestellt werden, bei denen es sich um numerische Maße handelt.

3. OLAP-Operationen

Roll-up: Hierarchisches Aufsteigen von Konzepten entlang einer Dimension oder Aggregieren auf einem Datenwürfel durch Dimensionsreduzierung.
Drilldown: Der umgekehrte Vorgang des Rollup, der durch hierarchisches Drilldown entlang des Dimensionskonzepts oder durch die Einführung zusätzlicher Dimensionen erreicht werden kann.
Slice: Treffen Sie eine Auswahl in einer Dimension des angegebenen Datenwürfels, wodurch ein Unterwürfel entsteht. Es handelt sich um eine bestimmte Datenschicht im Datenwürfel.
Umschalten: Wählen Sie in zwei oder mehr Dimensionen aus, um Unterwürfel zu definieren. Es handelt sich um ein bestimmtes Datenelement
in einer bestimmten Ebene des Datenwürfels.

4. Design des Data Warehouse

Wählen Sie den Geschäftsprozess aus, der modelliert werden soll: Welche Geschäftsprozesse gibt es, etwa Bestellung, Rechnungsstellung, Versand, Inventur, Buchhaltung, Verkauf oder Hauptbuch? Wählen Sie die Granularität der Geschäftsverarbeitung aus: Für die Geschäftsverarbeitung ist diese Granularität grundlegend und stellt die atomare Ebene der Daten in der Faktentabelle dar, z. B. eine einzelne Transaktion, eine Momentaufnahme eines Tages usw. Wählen Sie die Dimensionen aus, die für jeden Faktentabellendatensatz verwendet werden sollen: Typische Dimensionen sind Zeit, Artikel, Kunde, Lieferant, Lager, Transaktionstyp und Status. Wählen Sie die Kennzahl aus, die in jeden Faktentabellendatensatz eingefügt werden soll: Typische Kennzahlen sind additive numerische Mengen, z. B. „dollars_sold“ und „units_sold“.

3. Experimentelle Inhalte und Vorgehensweisen

1. Experimenteller Inhalt

1) Verwenden Sie VC++-Programmiertools, um Programme zu schreiben, relationale Datenspeicherstrukturen einzurichten, Datenwürfel zu erstellen und die im Versuchsbericht verwendeten Hauptprozesse und -methoden zu schreiben. Der erstellte Datenwürfel hat drei Dimensionen: Produktkategorien, Filialnummern und Zeit. Spezifische Anforderungen:

  1. Erstellen Sie drei Speichertabellen (TXT-Dateien), um die Daten von 1019, 1020 bzw. 1021 zu speichern.
  2. Die horizontale Richtung jeder TXT-Datei ist die Produktkategorie (die ersten fünf Ziffern der Produkt-ID): 10010 Öl, 10020 Mehlprodukte, 10030 Reis und Mehl, 10088 Getreide- und Ölgeschenke;
  3. Jeder Text hat vertikal die Daten 13 bis 19. Der in der Tabelle für diese Woche gespeicherte Wert
    ist der Gesamtumsatz.
    2) Führen Sie eine einfache OLAP-Datenabfrage durch
    . Spezifische Anforderungen:
  • Den Gesamtumsatz von 10010 Ölprodukten in den Geschäften des Jahres 2020 finden Sie am 13.;
  • Kann den Gesamtumsatz von 10030 Metern und Nudeln im Laden im Jahr 2020 berechnen;
  • Kann das Verkaufsvolumen bestimmter Warenarten in bestimmten Geschäften überprüfen; (zusätzliche Frage)

2. Experimentelle Schritte

1) Studieren und überprüfen Sie die Daten sorgfältig, um Attribute oder Dimensionen zu identifizieren, die in Ihre Analyse einbezogen werden sollten, und entfernen Sie unnötige
Daten. Nach der Datenvorverarbeitung wurden die fehlenden Werte ergänzt und das Format vereinheitlicht. Lesen Sie die Produkt-ID und das Datum der vorverarbeiteten Daten aus und berechnen Sie das Verkaufsvolumen.
2) Wählen Sie eine geeignete Speicherstruktur aus, um den Datenspeicherzugriff zu realisieren und entsprechende Funktionen zu implementieren.

3. Programmblockdiagramm

Fügen Sie hier eine Bildbeschreibung ein

4. Experimentelle Proben

Data.csv nach der Verarbeitung von Experiment 1

6. Experimenteller Code

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 #
# @Time    : 2022/5/30 21:27
# @Author  : Yang Haoyuan
# @Email   : [email protected]
# @File    : Exp2.py
# @Software: PyCharm
import pandas as pd
import argparse

parser = argparse.ArgumentParser(description='Exp2')
parser.add_argument('--Shop', type=str, default="1019", choices=["1019", "1020", "1021"])
parser.add_argument('--Good', type=str, default="10010油", choices=["10010油", "10020面制品", "10030米和粉", "10088粮油类赠品"])

parser.set_defaults(augment=True)
args = parser.parse_args()
print(args)


# 读取1019,1020,1021三个商店的数据
def getData():
    data = pd.read_csv("data.csv")
    data_19 = data[:7693]
    data_20 = data[7693:17589]
    data_21 = data[17589:]
    return data_19, data_20, data_21


# 构建数据立方体,数据结构采用DataFrame
def make_cuboid(data):
    arr = [[ 0.0, 0.0, 0.0, 0.0],
           [ 0.0, 0.0, 0.0, 0.0],
           [0.0, 0.0, 0.0, 0.0],
           [0.0, 0.0, 0.0, 0.0],
           [ 0.0, 0.0, 0.0, 0.0],
           [ 0.0, 0.0, 0.0, 0.0],
           [0.0, 0.0, 0.0, 0.0]]
    dataFrame = pd.DataFrame(arr, columns=["10010油", "10020面制品", "10030米和粉", "10088粮油类赠品"],
                             index=["13", "14", "15", "16", "17", "18", "19"])
    # 按日期进行筛选,把各日期的数据放入list中
    t = [data.loc[data["Date"] == 20030413, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030414, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030415, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030416, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030417, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030418, ["Date", "GoodID", "Num", "Price"]],
         data.loc[data["Date"] == 20030419, ["Date", "GoodID", "Num", "Price"]]
         ]
    idx = 13

    for df in t:



        # 按照商品类别,将各类商品各日期销售总额计算出来并保存
        _df = df[df["GoodID"] >= 1001000]
        _df = _df[_df["GoodID"] <= 1001099]
        _sum = 0

        for index, row in _df.iterrows():
            _sum = _sum + row["Num"] * row["Price"]
        dataFrame.loc[(str(idx), "10010油")] = _sum
        _sum = 0

        _df = df[df["GoodID"] >= 1002000]
        _df = _df[_df["GoodID"] <= 1002099]
        for index, row in _df.iterrows():
            _sum = _sum + row["Num"] * row["Price"]
        dataFrame.loc[(str(idx), "10020面制品")] = _sum
        _sum = 0

        _df = df[df["GoodID"] >= 1003000]
        _df = _df[_df["GoodID"] <= 1003099]
        for index, row in _df.iterrows():
            _sum = _sum + row["Num"] * row["Price"]
        dataFrame.loc[(str(idx), "10030米和粉")] = _sum
        _sum = 0

        _df = df[df["GoodID"] >= 1008800]
        _df = _df[_df["GoodID"] <= 1008899]
        for index, row in _df.iterrows():
            _sum = _sum + row["Num"] * row["Price"]
        dataFrame.loc[(str(idx), "10088粮油类赠品")] = _sum
        _sum = 0

        idx = idx + 1

    return dataFrame


if __name__ == "__main__":
    data_1019, data_1020, data_1021 = getData()

    # 各数据立方体按照4为小数保存到txt文件
    df_1019 = make_cuboid(data_1019)
    df_1019.applymap('{:.4f}'.format).to_csv("1019.txt", index=False)

    df_1020 = make_cuboid(data_1020)
    df_1020.applymap('{:.4f}'.format).to_csv("1020.txt", index=False)

    df_1021 = make_cuboid(data_1021)
    df_1021.applymap('{:.4f}'.format).to_csv("1021.txt", index=False)

    # 三维数据立方体保存到txt文件中
    data = pd.concat([df_1019, df_1020, df_1021], keys=["1019", "1020", "1021"], names=["Shop", "Date"])
    data.to_csv("data_cubiod.csv")

    # "1020商店10010油类商品13日总的销售额
    print("1020商店10010油类商品13日总的销售额", format(data.loc[("1020", "13"), "10010油"], '.2f'))

    # 1020商店10030米和粉总的销售额
    df = data.loc["1020"]
    print("1020商店10030米和粉总的销售额", format(df["10030米和粉"].sum(), '.2f'))

    # 指定商店指定货物的销售总额
    df = data.loc[args.Shop]
    print(args.Shop + "商店" + args.Good + "的销售额", format(df[args.Good].sum(), '.2f'))

4. Experimentelle Ergebnisse

Fügen Sie hier eine Bildbeschreibung ein
1019 Datenwürfel-TXT-Datei
Fügen Sie hier eine Bildbeschreibung ein
1020 Datenwürfel-TXT-Datei
Fügen Sie hier eine Bildbeschreibung ein
1021 Datenwürfel-TXT-Datei
Fügen Sie hier eine Bildbeschreibung ein
Dreidimensionale Datenwürfel-CSV-Datei, die Dimensionen sind Shop, Datum und vier Warenkategorien
Fügen Sie hier eine Bildbeschreibung ein
2020 Store 10010 Der Gesamtumsatz von Ölprodukten am 13. und der Gesamtumsatz von 2020 Filialen 10030 Meter und Pulververkäufe
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fragen Sie die Verkäufe von 10088 Getreide- und Ölgeschenken im 2021 Filiale ab

5. Experimentelle Analyse

Dieses Experiment erstellt hauptsächlich einen Datenwürfel für die vorverarbeiteten Daten und führt entsprechende OLAP-Operationen durch.

Die DataFrame-Datenstruktur im Pandas-Paket wird zum Speichern des zweidimensionalen Datenwürfels verwendet. Die DataFrame-Struktur verfügt über viele geeignete Operationen und Methoden, die für den Aufbau von Datenwürfeln und die Implementierung von OLAP-Operationen geeignet sind.

In DataFrame verfügt jede Dateneinheit über zwei Indizes, einen Zeilenindex (Index) und einen Spaltenindex (Spalten). Ein 1-D-Würfel kann gemäß jedem Index gelesen werden, oder ein Basiswürfel kann gemäß zwei Indizes gelesen werden. Das Pandas-Paket verfügt auch über eine Panel-Struktur, die dreidimensionale Daten unterstützt. Diese Struktur wurde jedoch nach und nach veraltet. Daher wähle ich für die Konstruktion eines dreidimensionalen Würfels immer noch einen zweidimensionalen DataFrame, um die ursprünglichen drei 2D-Daten zu verbinden Würfel.

OLAP-Operationen werden mithilfe der DataFrame.loc-Methode und der Series.sum-Methode implementiert.

Supongo que te gusta

Origin blog.csdn.net/d33332/article/details/127245436
Recomendado
Clasificación