自动生成建模和采样
sdv的Python项目详细描述
麻省理工学院从数据到人工智能实验室的开源项目。
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的建模和采样过程遵循以下步骤:
我们使用
datanavigator
实例从数据集中提取相关信息,以及 转换他们的C将内容转换为数值。然后使用
datanavigator
创建一个modeler
实例,该实例使用 用于创建表的生成模型的数据导航器。可以将
建模器
实例传递到采样器
以对合成数据行进行采样。
使用数据导航器
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上的第一个版本。