Automatisieren Sie das Öffnen einer HDF5-DateiHallo,
Ich versuche, ein .jsl-Skript zu erstellen, das die HDF5-Dateien aus Tensorflow importiert, ermittelt, wie viele Dateien vorhanden sind (Kernel + Bias) und sie als Datentabellen speichert, um sie dann in eine Form zu übersetzen, die von JMP lesbar und als Ersatz verwendet werden kann. Die Art und Weise, wie ich die Datentabellen bisher öffne, ist sehr manuell; ich benutze
Open( "filename.h5", {"list_of", "dataset_names"});
um alle Datensatznamen zu importieren. Um jedoch mit den Datentabellen arbeiten zu können, verwende ich dann diesen manuellen Weg (dies gilt für ein zweischichtiges Keras-ANN, die letzte Kernel- und Bias-Schicht verkettet die anderen):
layer_0_bias = Data Table( "-model_weights-dense-dense-bias-0" ) << Get As Matrix();
layer_0_kernel = Data Table( "-model_weights-dense-dense-kernel-0" ) << Get As Matrix();
layer_1_bias = Data Table( "-model_weights-dense_1-dense_1-bias-0" ) << Get As Matrix();
layer_1_kernel = Data Table( "-model_weights-dense_1-dense_1-kernel-0" ) << Get As Matrix();
layer_2_bias = Data Table( "-model_weights-dense_2-dense_2-bias-0" ) << Get As Matrix();
layer_2_kernel = Data Table( "-model_weights-dense_2-dense_2-kernel-0" ) << Get As Matrix();
Ich möchte den Prozess des Importierens, Speicherns und Umbenennens der Datentabellen automatisieren und verstehen, wie viele Ebenen das Keras-Modell enthält (Anzahl der Datentabellen / 2). Gibt es eine Möglichkeit zu verstehen, wie viele Datentabellen vorhanden sind, und jede einzeln umzubenennen, ohne den oben gezeigten manuellen Prozess durchführen zu müssen?
Danke!
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiEs tut mir leid, Bob, aber ich habe derzeit weder einen solchen Beispielcode noch wirklich die Zeit, ihn zu entwickeln.
Brian
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiHallo Brian,
Ich habe nur eine Möglichkeit gefunden, eine HDF5-Datei aus Python zu generieren, die JMP direkt in das Tabellenformat einlesen kann. Das bedeutet, dass der GUI-Assistent mich nicht fragt, welche Teilmenge(n) der HDF-Struktur geladen werden soll.Ich möchte nicht den gesamten Code einfügen, aber der grundlegende Weg besteht darin, den Pandas-Datenrahmen in ein Numpy-Recarray zu konvertieren und diesen in HDF5 zu schreiben.
ABER...es ist absurd langsam, diese .H5-Datei in JMP zu öffnen.Bei einer mittelgroßen Datei (131.000 Zeilen x 500 Spalten) ist sie etwa zehnmal langsamer als die gleichen Daten, die als CSV gespeichert sind.
Können Sie Beispiel-Python-Code bereitstellen, der tabellenartige Daten in einer HDF5-Datei speichert, die JMP direkt interpretieren und öffnen kann, mit angemessener Leistung für das Datenvolumen?Oder ein Python-Modul, das eine .JMP-Datei schreibt, wäre großartig.
Die Python-Schnittstelle scheint den Pandas-Datenrahmen als CSV-Datei zum Öffnen in JMP zu speichern. Das liegt hoffentlich nicht daran, dass CSV der schnellste Vermittler ist.
Danke,
- Bob
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiLeider habe ich immer noch keine Lösung dafür gefunden. Es ist nicht die Hauptfunktion meiner Anwendung, daher werde ich mich nicht weiter darum kümmern. Aber wenn ich auf etwas stoße, werde ich es auf jeden Fall informieren!
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiWenn ich die Lösung dafür sicher finde, werde ich sie teilen. Bisher jedoch kein Glück.
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiSie haben Recht, denn JMP geht davon aus, dass .h5 die einzige Erweiterung für eine HDF5-Datei ist.Dies scheint zwar die Norm zu sein, aber .hdf5 und .hdf sind akzeptierte Alternativen.Wir werden sehen, wie wir den Dateidialog und die JSL-Öffnungsbefehle erhalten, um die Erweiterungen .hdf5 und .hdf in JMP 15.2 zu unterstützen. Sicherlich wird es in 16.0 sein.
Brian Corcoran
JMP-Entwicklung
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiEigentlich noch eine Frage hier: JMP geht offenbar davon aus, dass eine HDF5-Datei die Erweiterung „h5“ verwenden wird. Wenn meine Dateien eine andere Erweiterung haben, beispielsweise „hdf5“, kann ich JMP mit dem Befehl „Open()“ dazu zwingen, diesen Dateityp zu verwenden? Das Argument File Type() scheint für HDF5 nicht zu funktionieren.Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiDanke für die Antwort. Wenn ich zumindest die Struktur der HDF5-Datei abfragen könnte, würde ich den Rest gerne selbst skripten.Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiJMP bietet derzeit keinen wirklich umfangreichen JSL-Funktionssatz für HDF5.Wir haben offene Funktionsanfragen, um JSL-Unterstützung zum Abfragen von Tabellennamen hinzuzufügen und ähnliche Datensätze zusammenzuführen.Wir erwägen diese Ergänzungen für die Zukunft.Wenn es darüber hinaus Unterstützung gibt, die Ihrer Meinung nach hilfreich wäre, teilen Sie diese bitte dem technischen Support mit. Dies wird uns dabei helfen, künftige Arbeiten zu priorisieren.
Vielen Dank und es tut mir leid, dass wir Ihnen im Moment nicht weiterhelfen können.
Brian Corcoran
JMP-Entwicklung
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiHallo,
Ich möchte auch etwas Ähnliches mit HDF5-Dateien machen – die Anzahl und Namen von „Datensätzen“ ermitteln und etwas Intelligentes damit machen. Wie Sie sicher festgestellt haben, ist die Dokumentation in diesem Bereich recht spärlich. Ich habe dem JMP-Support eine E-Mail mit der Bitte geschickt, dies zu tun. Wenn ich etwas höre, werde ich es hier posten. Wenn Sie das am Ende selbst herausgefunden haben, könnten Sie uns bitte Ihre Lösung(en) mitteilen?
Danke!Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiDiskussion 2024, ähnliches Thema:
Hilfe zum Öffnen von HDF5-Dateien
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiBis einschließlich JMP 17 speichert der Pandas-Datenrahmen als CSV-Datei. JMP 18 kann mit seiner integrierten Python-Unterstützung aus einem Pandas-Datenrahmen eine Datentabelle im Speicher erstellen. In 18 müssen Sie über den Datenrahmen iterieren und jeweils eine Spalte der JMP-Datentabelle erstellen.
Im kommenden JMP 19 EA-5 ist eine bessere Datenrahmen-Unterstützung vorhanden.
Das Python-Paket zum Arbeiten mit HDF5-Dateien ist h5py.
Betreff: Automatisieren Sie das Öffnen einer HDF5-DateiIch hatte ein bisschen Zeit zum Basteln. Hier ist ein Python-Skript, das JMP- und H5PY- Importpakete verwendet, um „Big Class.jmp“ zu öffnen, eine „Big Class.h5“-Datei zu erstellen und daraus dann eine DT2-Datentabelle aus der H5-Datei zu erstellen.
# File: h5_example.py
# Author: Paul R. Nelson
# Description: Example showing use of h5py and jmp packages to
# create a .h5 file from a JMP data table, and recreate the JMP
# table from the .h5 file. Note: the HDF5 file doesn't preserve
# column order so the new table comes back in alphabetic order
#
# Layout of my .h5 file - using a generic layout so it can always be easily read
# regardless of name.
# Other attrs could be added as needed.
# /table/ group 'table' has attrs['name'] = table name
# /table/col_name
# /table/...
# /table/nth_col_name
#
# /scripts/script_name
# ...
# /scripts/nth_script_name
#
import jmp
#from jmputils import jpip
#jpip('install', 'h5py')
import numpy as np
import h5py as h5
#callable function to use with h5py file.visit()
def printname(name):
print(name)
# Build a hdf5 file from JMP data table. HDF5 is like NumPy and each dataset
# must be homogeneous, so a JMP like table needs to be multiple datasets.
# To make it easy, a dataset per column.
def h5_from_dt(file_path, dt):
"""Build and save an .h5 file at at file_path/dt_name.h5 from dt"""
try:
f = h5.File( file_path + dt.name + '.h5', 'w')
h_tbl = f.create_group( 'table' ) # table data
h_script = f.create_group('scripts') # table scripts
h_tbl.attrs["name"] = dt.name
for col in dt:
if col.dtype == jmp.DataType.Character:
ds = h_tbl.create_dataset( col.name, shape=len(col), dtype=h5.string_dtype())
# I'm cheating - I'm saving the JMP data type so read can determine char type
ds.attrs['jtype'] = 'jmp_Character'
elif col.dtype == jmp.DataType.Numeric:
ds = h_tbl.create_dataset( col.name, shape=len(col), dtype='f8' )
ds.attrs['jtype'] = 'jmp_Numeric'
ds[:] = dt[col.name] # assign dt values to dataset
except Exception as err:
print(f'Error: {err}')
f.close()
return None
return f
def dt_from_h5(file_path):
"""Create a data table from an .h5 file turning datasets to JMP columns"""
f = h5.File(file_path, 'r')
if f and 'table' in f.keys():
print('A dt like h5.')
tbl = f['table']
cols = tbl.keys()
if cols:
print(cols)
col_name = list(cols)[0]
dt = jmp.DataTable('dt2', rows=len( tbl[ col_name ] ) )
for cname in cols:
c = tbl[cname]
print(c)
print(c.dtype)
# My cheat on knowing utf-8 char columns
if c.attrs['jtype'] and c.attrs['jtype'] == 'jmp_Character':
print('char col')
dt.new_column(cname, jmp.DataType.Character)
for x in range( len( c )):
# need to turn byte object back to utf-8 string
dt[cname][x] = c[x].decode('utf-8')
else:
dt.new_column(cname, jmp.DataType.Numeric)
dt[cname] = c
f.close()
return dt
else:
f.close()
return None
f.close()
return None
# open 'Big Class'
dt = jmp.open(jmp.SAMPLE_DATA + 'Big Class.jmp')
try:
# create 'Big Class.h5' file in my home directory
hdf = h5_from_dt(jmp.HOME, dt)
if hdf:
print(list(hdf.keys()))
hdf.visit(printname)
h_tbl = hdf['table']
print( f'Table Name: {h_tbl.attrs['name']}')
print( hdf['table/name'])
print( [x.decode('utf-8') for x in hdf['table/name'] ])
print( hdf[ 'table/weight'])
print( [x.item() for x in hdf['table/weight'] ] )
else:
print('Unable to create .h5 file from data table.')
except Exception as err:
print(f'Error: {err}')
finally:
if hdf:
hdf.close()
dt2 = dt_from_h5( jmp.HOME + 'Big Class.h5')
print(dt2)