Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python

Auparavant, j'avais publié Comment insérer par lots un fichier CSV dans un hyperfichier Tableau avec la commande COPY de type PostgreSQL, mais cette fois, il s'agit d'un hyperfichier existant. Apprenez à mettre à jour la source de données de votre fichier twbx (Tableau Packaged Workbook).

Normalement, si vous souhaitez mettre à jour la source de données du fichier twbx, vous devez ouvrir Tableau Desktop et utiliser l'interface graphique. https://help.tableau.com/current/pro/desktop/ja-jp/save_savework_packagedworkbooks.htm

Cependant, si le nombre de classeurs emballés et de sources de données à mettre à jour augmente, cela sera très gênant, il est donc préférable de mettre à jour avec CUI comme cette fois.

environnement

Qu'est-ce qu'un classeur packagé (fichier twbx) en premier lieu?

Avant d'entrer dans le sujet principal, parlons de ce qu'est un fichier twbx. En conclusion, ** les fichiers twbx sont des fichiers twb (classeurs Tableau) et des sources de données (hyperfichiers) fichiers compressés **. Vérifions en fait le contenu du fichier twbx. twbxの中を確認.png Vous pouvez voir que sample.twbx contient sample.twb et Data / sample / sample.hyper. Ainsi, à l'inverse, ** les fichiers twb (classeurs Tableau) et les sources de données (hyperfichiers) peuvent être compressés au zip avec la structure de répertoire appropriée pour devenir des fichiers twbx **! Ci-dessous, nous allons le mettre en œuvre sur la base de cette idée.

Préparation

Structure du répertoire

Nous allons l'implémenter dans le répertoire suivant.

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

Placez le fichier twbx à mettre à jour dans .twbx /

Placez le fichier twbx (sample.twbx) à mettre à jour dans .twbx /. sample.twbx est créé en référençant deux sources de données (hyperfichiers). Les sources de données sont Titanic (train.csv) et Predict Future Sales, qui sont familières à Kaggle. c / competitive-data-science-predire-future-sales) (sales_train.csv). Les noms de fichiers ont été renommés ci-dessous pour plus de clarté.

Placez la source de données (hyper) que vous souhaitez mettre à jour dans .output /

Placez la source de données (hyperfichier) que vous souhaitez mettre à jour dans .output /. Veuillez noter ce qui suit concernant les fichiers à placer.

--Il doit être le même que le fichier hyper référencé par le twbx existant. --Place tous les fichiers hyper référencés par twbx existant

Décrivez les paramètres de mise à jour dans .conf / update_conf.csv

Décrivez ce qui suit dans le fichier de configuration (.conf / update_conf.csv).

--Le répertoire où existe la source de données (hyper) à mettre à jour

csv:.conf/update_conf.csv


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

Implémentation de script

Après la préparation, implémentez le script Python. Implémentez le flux de traitement suivant.

  1. Décompressez le fichier twbx à mettre à jour en . / Work
  2. Remplacez la source de données par la cible de mise à jour
  3. Compressez les fichiers twb et les sources de données

python:.src/update_twbx.py


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


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

#Obtenez le chemin du fichier twbx à mettre à jour
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:
    #Décompressez le twbx à mettre à jour dans le répertoire de travail
    with zipfile.ZipFile(update_from) as existing_zip:
        existing_zip.extractall(work_dir)
    #Obtenez le nom du fichier twb dans 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)
    #répertoire de stockage de fichiers hyper dans twbx
    data_dir_regexp = os.path.join(work_dir, 'Data/*/*.hyper')
    #Obtenir une liste de fichiers hyper dans 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
    #Source de données mise à jour incluse dans twbx
    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)    

Courir

Vous pouvez mettre à jour votre classeur empaqueté en procédant comme suit:

python src/update_twbx.py

Après l'exécution, j'ai pu confirmer que le fichier twbx mis à jour a été créé à l'emplacement spécifié par ʻupdate_twbx_list.csv`!

finalement

Cette fois, j'ai suivi la structure de répertoires créée en décompressant le fichier twbx tel quel, mais vous pouvez placer la source de données dans n'importe quel répertoire en éditant la balise datasource du fichier twb décompressé. La modification du fichier twb est présentée dans Comment réécrire les informations de connexion à la base de données de Tableau Desktop (fichier twb) avec Python.

Recommended Posts

Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
Comment configurer un environnement Python à l'aide de pyenv
Comment mettre à jour Tkinter de Python vers la version 8.6
Comment créer un package Python à l'aide de VS Code
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment transloquer un tableau à deux dimensions en utilisant uniquement python [Note]
Comment mettre à jour le blog FC2, etc. en utilisant XMLRPC avec Python
Comment installer Python à l'aide d'Anaconda
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
[Python] Comment rendre une classe itérable
Comment dessiner un graphique avec Matplotlib
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment mettre à jour Google Sheets à partir de Python
[Python] Comment inverser une chaîne de caractères
Comment installer un package à l'aide d'un référentiel
Comment obtenir stacktrace en python
Comment utiliser "deque" pour les données Python
Comment exécuter des scripts Maya Python
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment envoyer une image visualisée des données créées en Python à Typetalk
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Comment tracer les données de lumière visible d'une galaxie à l'aide de la base de données OpenNGC en python
Comment coder un drone en utilisant la reconnaissance d'image
Comment ouvrir un navigateur Web à partir de python
Comment effacer un taple dans une liste (Python)
Comment créer un fichier JSON en Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment générer un objet Python à partir de JSON
[Introduction à Python] Comment gérer les données au format JSON
Comment ajouter un chemin de recherche de module Python
Comment obtenir des données d'article à l'aide de l'API Qiita
Comment notifier les canaux Discord en Python
Comment rechercher des données HTML à l'aide de Beautiful Soup
[Python] Comment dessiner un histogramme avec Matplotlib
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
[2015/11/19] Comment enregistrer un service localement à l'aide du SDK python avec naoqi os
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Lire la source Python-Markdown: Comment créer un analyseur
Créer un bot de collecte de données en Python à l'aide de Selenium
Comment convertir / restaurer une chaîne avec [] en python
Comment utiliser pip, un système de gestion de paquets indispensable pour utiliser Python
Comment écrire une interface graphique à l'aide de la commande maya
Comment installer Python
[Pour les débutants] Comment étudier le test d'analyse de données Python3
Comment récupérer des données d'image de Flickr avec Python
Comment mettre à jour easy_install
(Python) Essayez de développer une application Web en utilisant Django
Comment récupérer des données de courses de chevaux à l'aide de pandas read_html
Comment soumettre automatiquement des formulaires Microsoft à l'aide de python (version Mac)
Je souhaite utiliser une source de données python dans Re: Dash pour obtenir les résultats de la requête.
[Python] Comment développer des variables dans une chaîne de caractères
Comment écrire un type liste / dictionnaire de Python3
Nettoyage des données à l'aide de Python
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Comment mettre à jour Spyder
Comment créer un environnement Django (python) sur Docker