python验证benfords law
时间: 2023-06-22 10:18:00 浏览: 55
Benford's law(本福德定律)是一个数字分布规律,它指出在很多自然数据集中,数字1出现的概率大约为总数的30%,数字2出现的概率约为总数的17%,数字9出现的概率约为总数的4%。
要验证Benford's law,可以使用以下步骤:
1. 取得一组数据,比如一列数字,或者一组金额等等。
2. 对数据进行处理,提取出每个数字的首位数字。
3. 统计每个首位数字出现的次数,并计算它们出现的概率。
4. 对比Benford's law中的概率分布,判断数据是否符合该规律。
以下是一个简单的Python代码示例:
```python
import numpy as np
import pandas as pd
# 生成一组数据
data = pd.DataFrame(np.random.randint(1, 10000, size=(1000, 1)), columns=['Amount'])
# 提取每个数字的首位数字
first_digits = data['Amount'].astype(str).str[0].astype(int)
# 统计每个首位数字出现的次数
counts = first_digits.value_counts()
# 计算每个首位数字出现的概率
probs = counts / counts.sum()
# Benford's law中的概率分布
benford_probs = np.log10(1 + 1 / np.arange(1, 10))
# 对比概率分布
diffs = probs - benford_probs
if (diffs.abs() < 0.1).all():
print('符合Benford的定律')
else:
print('不符合Benford的定律')
```
这个代码示例中,我们生成了一组随机数据,然后提取出每个数字的首位数字,并统计它们出现的次数和概率。然后我们计算Benford's law中每个首位数字出现的概率分布,对比我们的数据的概率分布,如果它们非常接近,那么就符合Benford's law。这里的对比条件是两个概率之间的差值小于0.1,可以根据实际情况进行修改。