<p>以下是使用熊猫的解决方案:</p>
<p>本福德法律禁止移民的数量</p>
<p>编辑:
您的文件可能有一个标题行,该行由num_ghters列中的字符串“Number of migration”指示。删除读取数据行中的<code>header=None</code>选项。在</p>
<pre><code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# set the width of the bars, you're gonna have to massage this
width = 0.35
immi = pd.read_csv('immigrants.csv')
# name columns
immi.columns = ['country', 'num_immigrants', 'perc_world', 'perc_nat_pop']
# convert num_immigrants to float
immi.num_immigrants= immi.num_immigrants.str.replace(',', '').apply(float)
total = immi.num_immigrants.sum()
# scale the immigration to between 0 and 1
immi['immi_scaled'] = immi['num_immigrants'].apply(lambda x: x/total)
indx = np.arange(1, len(immi) + 1)
benford = [np.log10(1 + (1.0 / d)) for d in indx]
plt.bar(indx, benford, width, color='r', label="Benford's Law")
plt.bar(np.arange(1, immi.shape[0]+1)+ width,
immi.immi_scaled, width, color='b', label="Predicted data")
# center the xtick labels
ax = plt.gca()
ax.set_xticks(indx + width / 2)
ax.set_xticklabels((indx))
# limit the number of bars if you have more data
plt.xlim(1, 9)
plt.title("Immigrants in countries")
plt.ylabel("Probability")
plt.grid(True)
plt.legend()
plt.show()
</code></pre>