So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python

Zuvor habe ich So stapeln Sie eine CSV-Datei mit einem PostgreSQL-ähnlichen COPY-Befehl stapelweise in eine Tableau-Hyperdatei, diesmal ist es jedoch eine vorhandene Hyperdatei. Erfahren Sie, wie Sie die Datenquelle für Ihre twbx-Datei (Tableau Packaged Workbook) aktualisieren.

Wenn Sie die Datenquelle der twbx-Datei aktualisieren möchten, müssen Sie normalerweise Tableau Desktop öffnen und die GUI bedienen. https://help.tableau.com/current/pro/desktop/ja-jp/save_savework_packagedworkbooks.htm

Wenn jedoch die Anzahl der zu aktualisierenden gepackten Arbeitsmappen und Datenquellen zunimmt, ist dies sehr problematisch. Daher ist es besser, diesmal mit CUI zu aktualisieren.

Umgebung

Was ist überhaupt eine gepackte Arbeitsmappe (Twbx-Datei)?

Bevor wir zum Hauptthema kommen, lassen Sie uns darüber sprechen, was eine Twbx-Datei ist. Zusammenfassend sind ** Twbx-Dateien Twb-Dateien (Tableau-Arbeitsmappen) und komprimierte Datenquellen (Hyper-Dateien) **. Lassen Sie uns den Inhalt der twbx-Datei überprüfen. twbxの中を確認.png Sie können sehen, dass sample.twbx`` sample.twb und Data / sample / sample.hyper enthält. Umgekehrt können ** Twb-Dateien (Tableau-Arbeitsmappen) und Datenquellen (Hyper-Dateien) mit der entsprechenden Verzeichnisstruktur zip-komprimiert werden, um Twbx-Dateien zu werden **! Im Folgenden werden wir es basierend auf dieser Idee implementieren.

Vorbereitung

Verzeichnisaufbau

Wir werden es im folgenden Verzeichnis implementieren.

.
├── conf
│   └── update_conf.csv
├── input
│   ├── sales.csv
│   └── titanic.csv
├── output
│   ├── sales.hyper
│   └── titanic.hyper
├── src
│   └── update_twbx.py
├── twbx
│   └── sample.twbx
└── work

Platzieren Sie die zu aktualisierende twbx-Datei in .twbx /

Platzieren Sie die zu aktualisierende twbx-Datei (sample.twbx) in .twbx /. sample.twbx wird durch Verweisen auf zwei Datenquellen (Hyperdateien) erstellt. Die Datenquellen sind Titanic (train.csv) und Predict Future Sales, die Kaggle bekannt sind. c / Competitive-Data-Science-Predict-Future-Sales) (sales_train.csv). Die Dateinamen wurden aus Gründen der Übersichtlichkeit unten umbenannt.

Platzieren Sie die Datenquelle (Hyper), die Sie aktualisieren möchten, in .output /

Platzieren Sie die Datenquelle (Hyperdatei), die Sie aktualisieren möchten, in .output /. Bitte beachten Sie Folgendes bezüglich der zu platzierenden Dateien.

Beschreiben Sie die Update-Einstellungen in .conf / update_conf.csv

Beschreiben Sie Folgendes in der Konfigurationsdatei (.conf / update_conf.csv).

csv:.conf/update_conf.csv


datasource,update_target_twbx,create_target_twbx
./output,./twbx/sample.twbx,./twbx/output.twbx

Skriptimplementierung

Implementieren Sie nach der Vorbereitung das Python-Skript. Implementieren Sie den folgenden Verarbeitungsablauf.

  1. Entpacken Sie die zu aktualisierende twbx-Datei auf . / Work
  2. Ersetzen Sie die Datenquelle durch das Aktualisierungsziel
  3. Zip-Twb-Dateien und Datenquellen

python:.src/update_twbx.py


import csv
import zipfile
import os
import glob
import re
import shutil


work_dir = './work'
twbx_dir = './twbx'

#Holen Sie sich den zu aktualisierenden twbx-Dateipfad
with open('./conf/update_conf.csv') as f:
    reader = csv.reader(f)
    next(reader)
    line_list = [row for row in reader]

for replace_dir, update_from, update_to in line_list:
    #Entpacken Sie den zu aktualisierenden Twbx in das Arbeitsverzeichnis
    with zipfile.ZipFile(update_from) as existing_zip:
        existing_zip.extractall(work_dir)
    #Holen Sie sich den Namen der twb-Datei in twbx
    for file_name in os.listdir(work_dir):
        if 'twb' in file_name:
            twb_file_name = file_name
            twb_file_path = os.path.join(work_dir, twb_file_name)
    #Hyper-Dateispeicherverzeichnis in twbx
    data_dir_regexp = os.path.join(work_dir, 'Data/*/*.hyper')
    #Holen Sie sich die Hyper-Dateiliste in twbx
    data_file_list = glob.glob(data_dir_regexp)
    
    data_file_dict = {}
    for data_file_path in data_file_list:
        data_file_dict[re.sub(r'^.*/', '', data_file_path)] = data_file_path
    replace_file_dict = {}
    for replace_file_path in glob.glob(f'{replace_dir}*.hyper'):
        replace_file_dict[re.sub(r'^.*/', '', replace_file_path)] = replace_file_path
    #Aktualisierte Datenquelle in twbx enthalten
    for key in data_file_dict.keys():
        shutil.copy2(data_file_dict[key], replace_file_dict[key])
    
    with zipfile.ZipFile(update_to, 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
        new_zip.write(twb_file_path, arcname=twb_file_name)
        for data_file_path in data_file_list:
            data_file_name = re.sub(r'^.*/', '', data_file_path)
            new_zip.write(data_file_path, arcname=data_file_name)    

Lauf

Sie können Ihre gepackte Arbeitsmappe folgendermaßen aktualisieren:

python src/update_twbx.py

Nach der Ausführung konnte ich bestätigen, dass die aktualisierte twbx-Datei an dem in update_twbx_list.csv angegebenen Speicherort erstellt wurde!

Schließlich

Dieses Mal folgte ich der Verzeichnisstruktur, die durch das Entpacken der twbx-Datei erstellt wurde. Sie können die Datenquelle jedoch in einem beliebigen Verzeichnis platzieren, indem Sie das Datenquellen-Tag der entpackten twb-Datei bearbeiten. Das Bearbeiten der Twb-Datei wird unter So schreiben Sie die DB-Verbindungsinformationen von Tableau Desktop (Twb-Datei) mit Python neu beschrieben.

Recommended Posts

So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
So richten Sie eine Python-Umgebung mit pyenv ein
So aktualisieren Sie Pythons Tkinter auf 8.6
So erstellen Sie ein Python-Paket mit VS Code
So führen Sie einen Befehl mit einem Unterprozess in Python aus
So verschieben Sie ein zweidimensionales Array nur mit Python [Hinweis]
So aktualisieren Sie FC2-Blogs usw. mithilfe von XMLRPC mit Python
So installieren Sie Python mit Anaconda
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
[Python] Wie man eine Klasse iterierbar macht
So zeichnen Sie ein Diagramm mit Matplotlib
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
So aktualisieren Sie Google Sheets von Python
[Python] So invertieren Sie eine Zeichenfolge
So installieren Sie ein Paket mithilfe eines Repositorys
Wie bekomme ich Stacktrace in Python?
Verwendung von "deque" für Python-Daten
So führen Sie Maya Python-Skripte aus
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Zeichnen von Daten einer Galaxie mit sichtbarem Licht mithilfe der OpenNGC-Datenbank in Python
So codieren Sie eine Drohne mithilfe der Bilderkennung
So öffnen Sie einen Webbrowser über Python
So löschen Sie einen Taple in einer Liste (Python)
So erstellen Sie eine JSON-Datei in Python
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
So generieren Sie ein Python-Objekt aus JSON
[Einführung in Python] Umgang mit Daten im JSON-Format
So fügen Sie einen Suchpfad für Python-Module hinzu
So erhalten Sie Artikeldaten mithilfe der Qiita-API
So benachrichtigen Sie Discord-Kanäle in Python
So suchen Sie HTML-Daten mit Beautiful Soup
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Hochladen auf ein freigegebenes Laufwerk mit pydrive
So deinstallieren Sie ein mit setup.py installiertes Modul
[19.11.2015] So registrieren Sie einen Dienst lokal mit dem Python SDK bei naoqi os
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Verwendung von pip, einem Paketverwaltungssystem, das für die Verwendung von Python unverzichtbar ist
So schreiben Sie eine GUI mit dem Befehl maya
So installieren Sie Python
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
So kratzen Sie Bilddaten von Flickr mit Python
So aktualisieren Sie easy_install
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Wie man Pferderenndaten mit pandas read_html kratzt
So senden Sie Microsoft Forms automatisch mit Python (Mac-Version)
Ich möchte eine Python-Datenquelle in Re: Dash verwenden, um Abfrageergebnisse zu erhalten
[Python] So erweitern Sie Variablen in einer Zeichenfolge
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Datenbereinigung mit Python
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
So aktualisieren Sie Spyder
So erstellen Sie eine Django (Python) -Umgebung auf Docker