gpt4 book ai didi

python - 生成随机数据以通过假设测试 pandas 数据框

转载 作者:行者123 更新时间:2023-12-03 08:29:01 24 4
gpt4 key购买 nike

我正在处理很多 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

正如您所看到的,每一列都有一个值而不是唯一值,我不知道如何生成可以测试的真实值..

任何帮助都会有帮助......

最佳答案

Zac 在 his answer 中提供了一些很好的见解从那以后,我明白了为什么我会遇到这个问题,我设法从文档中与一些黑客共享的代码中获得了一些数据。虽然它没有生成 100% 的我想要的结果,但对于测试来说已经足够了。

以下是我生成列和数据的方法。

我使用以下代码来定义列策略:

from hypothesis.extra.pandas import data_frames , column, range_indexes
from hypothesis import strategies as st, given, settings
import pandas as pd
from datetime import datetime

datetime_st = st.dates(
min_value=datetime(2020, 7, 1).date(),
max_value=datetime.today().date()
)


float_without_nan_st = st.floats(min_value=0.0001, max_value=3030, allow_nan=False)
float_with_nan_st = st.floats(allow_nan=True, allow_infinity=False)
text_st = st.text(alphabet="espoiristusingacolemakeyboard", min_size=5)
boolean_st = st.boolean()

然后我使用以下命令创建了数据框:

df_columns = {
"fbms_start_date": {"elements": datetime_st, "unique": True},
"fbmb_spend": {"elements": float_without_nan_st, "unique":True},
"fbmb_adset_id": {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
"fbmb_adset_name": {"elements": text_st, "unique":False, "fill": st.nothing()},
"fbmb_ads_run": {"elements": boolean_st},
"fbms_key" : {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
"fbmb_breakdown_type": {"elements": st.just("Total")},
"fbmb_breakdown_one": {"elements": st.just(float('nan')) },
"fbmb_campaign_id": {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
"fbmb_campaign_name" : {"elements": text_st, "unique":False, "fill": st.nothing()},
"fbmb_reach" : {"elements": text_st, "unique":False, "fill": st.nothing()},
"fbmb_impressions" : {"elements": st.integers(min_value=0, max_value=100001) },
"fbmb_spend" : {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
"fbmb_page_likes" : {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
"fbmb_post_engagement" : {"elements": st.sampled_from(['LINK_CLICKS',
'POST_ENGAGEMENT',
'PAGE_LIKES']), "unique":False},
"fbmb_objective" : {"elements": float_with_nan_st, "unique":False, "fill": st.nothing()},
}

接下来我使用以下命令生成数据集:

test_dfs = data_frames(
index=range_indexes(min_size=10),
columns=[column(key, **value) for key, value in df_columns.items()],
)

最后,我能够运行以下测试

@given(df=test_dfs)
@settings(max_examples=5)
def test_hyothesis(df):
print(df)
assert 1

注意数据集生成索引中的 min_size 和设置中的 max_example。

关于python - 生成随机数据以通过假设测试 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65707321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com