这两天学习一点统计学的知识。
均值:均值就是将所有数字加起来,然后除以数字个数。
均值作用:给出典型值(不存在异常值时用)
均值危害:存在当常值时会将数据向左或向右偏斜,它会给出一个不存在于数据集中区的数值。
异常值:与其他数据格格不入的极高或极低的数值。
![](https://img.haomeiwen.com/i6626611/c4efcb4647c1950f.png)
![](https://img.haomeiwen.com/i6626611/88f95ece7cbb1d72.png)
参加这个班的有9个孩子及其父母,分别求出年龄的均值和中位数,还要画出直方图。
我试着用代码实现:
![](https://img.haomeiwen.com/i6626611/99db09cd94ad2573.png)
![](https://img.haomeiwen.com/i6626611/1a99f7de45ffb91e.png)
![](https://img.haomeiwen.com/i6626611/7a3dd9627c413c89.png)
![](https://img.haomeiwen.com/i6626611/c025f27b296a925b.png)
![](https://img.haomeiwen.com/i6626611/d693d69aa079fa92.png)
其中size存储着所有年龄的个数,size % 2 表示求余数,如果余数等于0,则所有年龄的个数为偶数,中位数就是中间两个数的和除以2;如果余数不等于0,则所有年龄的个数为奇数,中位数就是处于中间的数值。
![](https://img.haomeiwen.com/i6626611/4c0b47650564a5cd.png)
![](https://img.haomeiwen.com/i6626611/247b1ffdc48059d0.png)
其中 rects =plt.bar(left = (1,2,3,4,5,6),height = (3,4,2,2,4,3),width = 0.8,align="center",yerr=0.000001)
这句代码是最重要的,其中left表示直方图的开始的位置(也就是最左边的地方),height是指直方图的高度,当直方图太粗时,可以通过width来定义直方图的宽度,注意多个直方图要用元组,yerr这个参数是防止直方图触顶。
从上面的结果我们还发现了一个问题,就是这个班级的年龄均值和中位数都是17,而这个班里根本没有17岁的人,所以在这里均值和中位数都不能代表这个游泳班的年龄情况,所以这时候要引入众数。
![](https://img.haomeiwen.com/i6626611/54baa665841ceca3.png)
众数的好处:当众数的数目较少时,或者,当数据为类别数据而不是数值型数据时.均值和中位数都不能用于类别数据。
众数的劣势:当众数很多时并不能表示典型值。
最近看了罗胖的跨年演讲,想想这已经是第三个年头,最大的触动是有关人生算法:成就=核心算法X大量重复动作,从一开始决定学Python不就是为了找到属于自己的人生算法,可回顾这半年以来,并没有完成自己的计划,连每天敲一段代码这样简单的重复动作,还是没能坚持下来。木心先生说“岁月不饶人,我也未曾饶过岁月”,岁月确实没饶过我,可我却饶了岁月好几回。
2018继续加油吧,即使没有如期完成计划,好歹我们已在路上!
源码:
# coding: utf-8
# In[1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
data = [1,33,1,32,2,31,2,3,33,2,31,32,2,32,32,1,33,3]
d = sorted(data) # 对数据进行临时排序(从小到大)
print(d)
# In[2]:
# 给数据添加标签
frame = Series(d)
print(frame)
# In[3]:
# 统计各个年龄出现的频率(频数),按照降序排列
value_counts =frame.value_counts()
print(value_counts)
# In[4]:
# 统计年龄的均值
mean = frame.mean()
print(mean)
# In[5]:
# 统计年龄的中位数
def get_median(data): # 定义一个用于计算中位数的函数
data = sorted(data)
size = len(data) # 统计数据有多少个
n = size/2
if size % 2 == 0: # 通过求余数判断数据总数是否为偶数
median = (data[n] + data[n-1]) / 2.0
else:
median = data[n]
print(median)
get_median(data)
# In[6]:
# 画直方图
fig1 = plt.figure(6) # 设置直方图中有6组数据
rects =plt.bar(left = (1,2,3,4,5,6),height = (3,4,2,2,4,3),width = 0.8,align="center",yerr=0.000001)
# 增加直方图脚注
plt.xticks((1,2,3,4,5,6),('1','2','3','31','32','33'))
# 修改直方图上显示具体的数字
def autolabel(rects):
for rect in rects:
height = rect.get_height()
plt.text(rect.get_x()+rect.get_width()/2,1.01*height,'%s' % int(height))
autolabel(rects)
plt.title('Swimming class frequency histogram') # 修改标题
plt.xlabel('age') # 修改x轴标签
plt.ylabel('Frequency') # 修改y轴标签
plt.show()
网友评论