自动生成建模和采样

sdv的Python项目详细描述


sdv麻省理工学院从数据到人工智能实验室的开源项目。

pypitraviscodecov

SDV-综合数据仓库

自动生成建模和采样

  • 自由软件:麻省理工学院许可证
  • 文档:https://hdi-project.github.io/sdv" rel="nofollow">https://hdi-project.github.io/sdv

摘要

综合数据仓库(SDV)的目标是允许数据科学家导航、建模和 示例关系数据库。库的主要访问点是类 三个核心类的功能:datanavigator、modeler和sampler。

使用这些类,用户可以方便地访问有关关系数据库的信息, 为数据库中的表创建生成模型,并从这些模型中创建示例行以生成 合成数据。

安装

使用PIP安装

安装sdv的最简单方法是使用pip

pip install sdv

从源安装

您还可以克隆存储库并从源安装它

git clone git@github.com:HDI-Project/SDV.git

克隆存储库后,建议您创建一个virtualenv。 在本例中,我们将使用virtualenvwrapper来创建它

cd SDV
mkvirtualenv -p $(which python3.6) -a $(pwd) sdv

创建并激活virtualenv后,您可以通过运行以下命令来安装项目:

make install

对于开发,请改用以下命令,该命令将安装一些额外的依赖项,用于代码linting和测试。

make install-develop

用法示例

下面是一个关于如何使用sdv对由 关系表。

注意:为了能够运行此示例,请确保已克隆了存储库 并在其中执行这些命令,因为它们依赖于其中包含的一些演示数据。

使用SDV类

在python中使用sdv的最简单方法是使用从包的根目录导入的sdv类:

>>>fromsdvimportSDV>>>data_vault=SDV('tests/data/meta.json')>>>data_vault.fit()>>>samples=data_vault.sample_all()>>>fordatasetinsamples:...print(samples[dataset].head(3),'\n')CUSTOMER_IDCUST_POSTAL_CODEPHONE_NUMBER1CREDIT_LIMITCOUNTRY0061026.05.410825e+091017.0FRANCE1120166.07.446005e+091316.0US2211371.08.993345e+091839.0USORDER_IDCUSTOMER_IDORDER_TOTAL0001251.01101691.02201126.0ORDER_ITEM_IDORDER_IDPRODUCT_IDUNIT_PRICEQUANTITY0009.020.00.01108.079.03.02208.066.01.0

这样,我们就可以生成烧结数据样本。我们传递给sdv的唯一参数 是包含不同表、其字段和 关系。有关如何生成此文件的详细说明,请参见文档。

在实例化类之后,我们调用fit()方法来转换和建模 数据,然后我们可以对行、表或整个数据库进行采样。

手动使用每个类

使用SDV的建模和采样过程遵循以下步骤:

  1. 我们使用datanavigator实例从数据集中提取相关信息,以及 转换他们的C将内容转换为数值。

  2. 然后使用datanavigator创建一个modeler实例,该实例使用 用于创建表的生成模型的数据导航器。

  3. 可以将建模器实例传递到采样器以对合成数据行进行采样。

使用数据导航器

datanavigator可用于提取有关数据集的有用信息,例如 表之间的关系。在这里,我们将使用它从csv文件加载测试数据 并对其应用一些转换。

首先,我们将创建一个csvdataloader实例,该实例将加载数据并准备将其与datanavigator一起使用。 要创建csvdataloader类的实例,必须提供meta.json文件的文件路径。

>>>fromsdvimportCSVDataLoader>>>data_loader=CSVDataLoader('tests/data/meta.json')

然后,可以使用load_data()函数创建datanavigator的实例

>>>data_navigator=data_loader.load_data()

datanavigator将数据存储为字典,将表名映射到数据的元组 本身(表示为pandas.dataframe)和该表的元信息。您可以访问 使用以下命令的数据:

>>>customer_table=data_navigator.tables['DEMO_CUSTOMERS']>>>customer_data=customer_table.data>>>customer_data.head(3).T012CUSTOMER_ID50497338810CUST_POSTAL_CODE11371631456096PHONE_NUMBER1617555329586055518357035552143CREDIT_LIMIT10005001000COUNTRYUKUSCANADA>>>customers_meta=customer_table.meta>>>customers_meta.keys()dict_keys(['fields','headers','name','path','primary_key','use'])>>>customers_meta['fields']{'CUSTOMER_ID':{'name':'CUSTOMER_ID','subtype':'integer','type':'number','uniques':0,'regex':'^[0-9]{10}$'},'CUST_POSTAL_CODE':{'name':'CUST_POSTAL_CODE','subtype':'integer','type':'number','uniques':0},'PHONE_NUMBER1':{'name':'PHONE_NUMBER1','subtype':'integer','type':'number','uniques':0},'CREDIT_LIMIT':{'name':'CREDIT_LIMIT','subtype':'integer','type':'number','uniques':0},'COUNTRY':{'name':'COUNTRY','type':'categorical','uniques':0}}

您还可以使用数据导航器获取表的父表或子表。

pip install sdv
0

最后,我们可以使用transform_data()函数应用 我们的数据的rdt库。如果没有提供转换, 默认情况下,函数会将所有分类类型和日期时间类型转换为数值。 它将返回一个字典,将表名映射到表示为 pandas.dataframe

pip install sdv
1

使用建模器

建模器可以用来递归地对数据建模。这很重要,因为 数据之间有关系,也应该建模,以便有可靠的 采样。例如,让我们看看测试数据。此数据集中有三个表: 演示客户演示订单演示订单项目

demo_orders表有一个标记为customer_id的字段,该字段引用"id"字段 在demo_customers表中。SDV不仅要对数据建模,而且要将这些关系建模为 好。Modeler类负责执行此任务。

为此,首先,从modeler导入并创建类的实例。建模者必须 提供要使用的数据导航器和模型类型。如果没有提供模型类型,它将 默认情况下,使用acopulas.multivariate.gaussian copula。注意,为了 建模器要工作,datanavigator必须已经转换了它的数据。

pip install sdv
2

然后可以对整个数据库建模。建模器将存储 数据集。

pip install sdv
3

可以使用以下命令访问为每个表创建的模型:

pip install sdv
4

上面的输出显示了为用户表中的每一列存储的参数。

还可以使用save()方法将建模器保存到文件中。这将保存pickle文件 在指定的路径上。

pip install sdv
5

如果使用上面的命令在前一个会话中存储了模型,则可以加载该模型 使用load()方法:

pip install sdv
6

使用采样器

采样器采用建模器数据导航器。使用上一步创建的模型, 采样器可以递归地遍历数据集中的表,并对合成数据进行采样。 它可以用于从指定表中采样行、一次采样整个表或samp乐 整个数据库。

让我们用我们的数据集做一个例子。首先导入采样器并创建 上课。

pip install sdv
7

要从行中采样,请使用命令sample_rows()。注意在从孩子身上取样之前 表,它的父表之一必须事先进行采样。

pip install sdv
8

要对整个表进行采样,请使用sample_table()。这将创建尽可能多的行。 原始数据库。

pip install sdv
9

最后,可以使用sample_all(num_rows)对整个数据库进行采样。num_rows参数 指定每个父行要创建的子行数。此函数返回字典映射 生成的数据帧的表名。

git clone git@github.com:HDI-Project/SDV.git
0

历史记录

0.1.1-数据匿名化

  • 尝试建模不受支持的数据集结构时添加警告。gh 73
  • 添加匿名化数据的选项。gh 51
  • 使用gaussianmultivariate模型时,添加对具有不同分布的数据建模的支持。gh 68
  • 添加对vinecopulas作为模型的支持。gh 71
  • 改进了gaussianmultivariate参数采样,避免了警告和参数无效。gh 58
  • 修正了导致采样的分类值有时会混合数值的问题。gh 81
  • 改进扩展的验证。gh 69
  • 更新示例。gh 61
  • 类替换为名称偶gh 92
  • 修复不一致的依赖项并向依赖项添加上限。gh 96
  • 修复运行示例时合并modeler.cpa中的扩展时的错误。gh 86

0.1.0-首次发布

  • pypi上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android Espresso如何检查字符串是否缩写   java jar从cmd写入文件,但不能双击   Grails中的java onetomany映射|我可以在复合键中使用生成的值吗?   java HttpsURLConnection在尝试添加Cookie时已连接   java在Netbeans中不能有同名的包和类   如何在格式化字段自动更改无效输入(Swing)Java时触发事件   用户输入后java JTextArea未更新   java试图用新字符替换字符串中的特定字符   java类加载器在Linux上显示错误路径   java mySQL远程数据库未连接   java如果接口需要MyObject对象,如何返回错误对象?   java无法解析在MainActivity之外调用安卓类时的符号   java如何将应用程序文件正确添加到appium所需的功能?   Java中浮点数组的数据对齐算法