python - 生成随机数据以测试带有假设的 pandas 数据框
问题描述
我正在处理很多熊猫数据框,我想使用 pytest 测试它们,并且我正在使用假设来生成测试数据。
我遇到的问题是它在每一列中生成相同的数据值。
我实际上不知道如何生成真实数据来测试..
这是我正在尝试的:
from hypothesis.extra.pandas import data_frames , column, range_indexes
from hypothesis import given, settings, strategies as st
import pandas as pd
from datetime import datetime
data = data_frames(columns=[column(name='key', elements=st.floats(allow_nan=True)),
column(name='fbms_start_date', elements=st.datetimes(min_value=datetime(2020, 7, 1),
max_value=datetime.now())),
column(name='breakdown_type', elements=st.just("Total")),
column(name='breakdown_one', elements=st.just(float('nan'))),
column(name='adset_id', elements=st.floats(allow_nan=True)),
column(name='adset_name', elements=st.text()),
column(name='campaign_id', elements=st.floats(allow_nan=True, )),
column(name='campaign_name', elements=st.text()),
column(name='reach', elements=st.text()),
column(name='impressions', elements=st.just(float('nan'))),
column(name='spend', elements=st.floats(allow_nan=False)),
column(name='page_likes', elements=st.floats(allow_nan=False)),
column(name='post_engagement', elements=st.sampled_from(['LINK_CLICKS',
'POST_ENGAGEMENT',
'PAGE_LIKES'])),
column(name='objective', elements=st.floats(allow_nan=False)),
column(name='ads_run', elements=st.sampled_from([True, False]))],
index=range_indexes(min_size=100)
)
@given(df=data)
@settings(max_examples=5)
def test_hyothesis(df):
print(df)
assert 1
这总是生成以下数据集
key fbms_start_date breakdown_type breakdown_one adset_id adset_name campaign_id campaign_name reach impressions spend page_likes post_engagement objective ads_run
0 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
1 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
2 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
3 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
4 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
5 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
6 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
7 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
8 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
9 0.0 2020-07-01 Total 0.0 0.0 0.0 0.0 LINK_CLICKS 0.0 True
正如您所看到的,每个列都有一个值而不是唯一值,我不知道如何生成可以测试的真实值..
任何帮助都会有所帮助...
解决方案
第一个例子是因为假设总是从生成最简单的例子开始,这将是全零(等等)。我建议调高max_examples
设置 - 默认 100 很好,但小于 20 的情况非常少。
您还为您的索引指定了一个非常大min_size=100
的索引 - 是否真的不可能有一个失败的示例而行数更少?如果不是,请将其设置得更小 - 假设可以很好地发现具有少量输入的错误,而且它们的生成速度也更快。
完成我们的一组原因后,Hypothesis 为每一列生成带有“填充值”的数据帧——在这个大尺寸和几个例子中,当你只看到前几行和最后几行时,你所看到的只是最小的填充——价值。设置min_size=1
,这个问题将完全消失。
推荐阅读
- reactjs - 是否有任何条纹元素可以向用户显示保存的卡片。?
- python - 做更多的标题意味着服务器认为你是人的机会更大
- azure-devops - 我想使用 Azure Pipelines 将基于 .Net 的核心 Web 应用程序与我的测试套件集成,并且只是想知道可能性
- excel - 为什么我的 Excel 表格在我插入/删除行时会增加列?
- python - 如何将函数转换为 lambda
- angular - 是否可以在裁剪框中禁用图像调整大小选项?
- json - 如何将地图转换为其中一种类型为 AnyRef 的 json
- java - 字符串常量中的参数
- c++ - 在 Windows 中的 appcontainer 进程和正常进程之间是否有任何 ipc 方式?
- java - Kotlin float -> 字符串转换问题(也是 Java)