【代码第一部分】数据生成
- def list_generator(mean, dis, number): # 封装一下这个函数,用来后面生成数据
- return np.random.normal(mean, dis * dis, number) # normal分布,输入的参数是均值、标准差以及生成的数量
-
- # 我们生成四组数据用来做实验,数据量分别为70-100
- # 分别代表男生、女生在20岁和30岁的花费分布
- # 构造数据库DataFrame
- num = 100 # 每组100个样本
- girl20 = list_generator(1000, 29.2, num)
- boy20 = list_generator(800, 11.5, num)
- girl30 = list_generator(3000, 25.1056, num)
- boy30 = list_generator(1000, 19.0756, num)
- girl_sex = ['female' for _ in range(num)]
- boy_sex = ['male' for _ in range(num)]
- age20 = [20 for _ in range(num)]
- age30 = [30 for _ in range(num)]
-
- girl_d1 = pd.DataFrame({'cost': girl20, 'sex': girl_sex, 'age': age20})
- boy_d1 = pd.DataFrame({'cost': boy20, 'sex': boy_sex, 'age': age20})
- girl_d2 = pd.DataFrame({'cost': girl30, 'sex': girl_sex, 'age': age30})
- boy_d2 = pd.DataFrame({'cost': boy30, 'sex': boy_sex, 'age': age30})
- data = pd.concat([girl_d1, boy_d1, girl_d2, boy_d2])
-
- print(data.head())
数据长啥样?下面是给出的数据框前面的部分,一共400个样本,分性别和年龄。
【代码第二部分】使用seaborn库画图
简单看看所有数据的分布情况:
- sns.boxplot(x=data["cost"],data=data)
根据性别分组:
- sns.boxplot(x="age", y="cost", data=data, hue="sex", width=0.5, linewidth=1.0, palette="Set3")
根据年龄分组:
- sns.boxplot(x="sex", y="cost", data=data, hue="age", width=0.5, linewidth=1.0, palette="Set3")
上面这些是seaborn库的简单使用,可以通过年龄看男女花费比较,也可以根据性别看不同年龄段的花费比较,还是比较直观的。当然除此之外还有很多其他的炫技,大家可以自己尝试。
总结
从上面来看,虽然我们是采用不同方法来画箱线图,但是最基本的都是调用matplotlib库,这里面pandas是最简单的箱线图可视化,但是不灵活。而matplotlib虽然灵活,但是需要慢慢调,而且复杂。相比之下seaborn更加酷炫,而且图还更好看。上面例子都是本人亲测,一个个对比,原创文章,大家如果有其他问题可以留言讨论。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|