如何使用Python生成正态分布的人员身高体重信息?
下面是生成的数据的分布情况,身高数据在各个区间大致呈正态分布。
对应的代码如下,先用pd.cut进行各个区间分桶,然后使用sort_index按照区间名排序。
df = pd.read_csv('./datasets/boygirl200.csv', encoding='gbk')
des = df.describe()
bins = range(des.height['min'].astype(int), des.height['max'].astype(int), 2)
cutdf = pd.cut(df.height, bins=bins, include_lowest=True)
cutdf.value_counts().sort_index().plot.bar()
生成正态分布数据
使用np.random.normal(mean,scale,size)可以生成很多数值呈正态分布数字。如下图所示,mean就是中间竖线的位置,scale就是横向挤压或拉伸程度,size是生成数字个数。
但是这里也有问题,由于是基于概率的,就无法避免生成及少量超级小或超级大的值,比如身高1厘米或体重300公斤的异常值数据都有可能产生。最简单的情况是对生成后的数据用DataFrame.loc()条件表达式直接截取最小值和最大值之间的值。
下面是代码部分。首先使用一个男生名字列表来生成一系列name字段,这个数据可以