pandas 如何为Synthetic Data Vault(SDV)库准备输入格式表和元数据中的数据

esbemjvw  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(125)

我想使用Synthetic Data Vault(SDV)库的合成数据生成方法(参考https://sdv.dev/SDV/index.html),但我不能。我认为我的问题是如何以方法". fit()"所需的输入格式准备数据。
演示代码如下所示:

from sdv import SDV, load_demo

metadata, tables = load_demo(metadata=True)

SDV().fit(metadata, tables)

sampled = sdv.sample_all()

对象"元数据"为:

type(metadata) = <class 'sdv.metadata.dataset.Metadata'>

并且对象"表"是3个 Dataframe 的字典:

type(tables) = <class 'dict'>
type(tables['users']) = <class 'pandas.core.frame.DataFrame'>

我的案例研究从Pandas Dataframe 开始:

df_input = pd.read_csv("file.csv")

所以我可以将"table"对象示例化为一个dict:

table_input={'input':df_input}

但我不确定如何示例化"元数据"对象。我尝试过:

from sdv  import Table  
metadata_input=Table(name='input',
                     field_names =df_input.columns.tolist(),
                     field_types = {'ID':'int64',
                                    'Type':'object',
                                    'Air temperature [K]':'float64',
                                    'Rotational speed [rpm]':'int64',
                                    },
                     primary_key = 'ID')

但这并不管用

sdv.fit(metadata=metadata_input, 
          tables= table_input)

错误为:

TypeError: 'Table' object is not subscriptable

最后,我应该如何创建元数据对象?

uhry853o

uhry853o1#

自述文件中的SDV案例是为multi-table数据集设计的。为了使用single-table案例(这将是您的案例),您可以使用GaussianCopula模型并跳过当前正在执行的一些步骤。
以下是使用 Dataframe 的示例:

import pandas as pd
from sdv.tabular import GaussianCopula

df_input = pd.read_csv('file.csv')

model = GaussianCopula()
model.fit(df_input)
synthetic_data = model.sample(100) # sample 100 new rows

有关高级用法,请参阅文档:https://sdv.dev/SDV/user_guides/single_table/gaussian_copula.html

dbf7pr2w

dbf7pr2w2#

我在使用sdmetrics创建质量报告时遇到过类似的问题,我通过将Table对象转换为dict来解决。

sdv.fit(metadata=metadata_input.to_dict(), tables= table_input)

顺便说一句,你可以通过这种方式从 Dataframe 中推断出元数据:

from sdv import Table
metadata_input=Table()
metadata_input.fit(table_input)

相关问题