Python中的统计数据展示

1、数据可以分为“分类型”或“数值型”,如果变量是数值型的,我们就采用某些特定的统计方法,相反,如果数据是定性分类的,那么我们可以采用另外的办法,

1.1、分类数据

①布尔数据

②名义数据

③等级数据(有序变量)

1.2、数值型数据

①连续的数值型

②离散的数值型

2、函数式和面向对象式的绘图方法

2.1、首先考虑pyplot风格

3、统计图形

3.1、散点图

散点图是单变量数据最简单的展示方法,只要绘制出每个单独的数据点即可,

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7#生成数据
8x=np.random.randn(500)
9
10#绘图命令
11plt.plot(x,'.')
12plt.show()

3.2、直方图

直方图提供了一个数据分布的一个很好的概览,如果你除以总的数据点个数,即可得到相对频率的直方图,如果你是每个区间的顶部中间点连接起来,你会得到一个相对频率的多边形。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7x=np.random.randn(500)
8plt.hist(x,bins=25)
9plt.show()

3.3、核密度(KDE)估计图

直方图有一个缺点就是它不是连续的,并且它的形状严格取决于区间的宽度,为了获得平滑的概率密度,也就是说描述一个事件在给定区间内被发现的可能性,我们就可以使用核密度估计的方法,因此,正态分布被用作典型的核,核密度的宽度决定了平滑的程度。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7x=[-2.1,-1.3,-0.4,1.9,5.1,6.2]
8sns.kdeplot(x)
9plt.show()

3.4、误差条图

在比较数值的度量的时候,误差条是展示均值和变异度的常用方法,值得注意的是,误差条图必须显式说明误差到底是标准差还是标准误。使用标准误有一个很好的特性,就是当基于标准误的两组误差条图之间有重叠时,我们就可以确定两组数据之间的均值没有统计学差异(p>0.05),反之则不一定成立。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7index=np.arange(5)
8y=index**2
9errorBar=index/2
10plt.errorbar(index,y,yerr=errorBar,fmt='o',capsize=5,capthick=3)
11plt.show()

3.5、箱型图

箱型图经常在学术期刊中使用,用来表示两组或多组的数值,箱子的底部和顶上分别表示第一分位数和第三分位数,然而箱子内部中间的线则表示中位数,值得注意的是上下的须,存在着不同的习惯用法,最常见的是,下面的须表示在第一分位数外1.5×IQR(四分位距)范围内的最低值,然而上面的须表示在第三分位数外1.5×IQR(四分位数)范围内的最高值,离散值(在上下须之外)被单独绘制,另一个就是习惯用法,须表示整个数据的范围。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6x = np.random.randn(1000)
7plt.boxplot(x,sym='*')
8plt.show()

3.6、小提琴图

箱型图可以和核密度估计图联合起来绘制,生成所谓的小提琴图,期中纵轴和箱型图一样,但是在水平方向上额外绘制了对称的核密度估计图。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7nd=stats.norm
8data=nd.rvs(size=(100))
9
10nd2=stats.norm(loc=3 , scale=1.5)
11data2=nd.rvs(size=(100))
12
13df=pd.DataFrame({'girls':data,'boys':data2})
14sns.violinplot(df)
15plt.show()

3.7、分组的条形图

对于一些应用来说,pabdas的绘图功能可以使得生成有用的图形更容易,比如,分组的条形图。

1import numpy as np
2import matplotlib.pyplot as plt
3import pandas as pd
4import scipy.stats as stats
5import seaborn as sns
6
7df=pd.DataFrame(np.random.rand(10,4),
8 columns=['a','b','c','d'])
9df.plot(kind='bar',grid=False)
10plt.show()

3.8、饼图

1import seaborn as sns
2import matplotlib.pyplot as plt
3
4txtLables='cats','dogs','frogs','others'
5fractions=[45,30,15,10]
6offsets=(0,0.05,0,0)
7
8plt.pie(fractions,explode=offsets,labels=txtLables,
9 autopct='%1.1f%%',shadow=True,startangle=90,
10 colors=sns.color_palette('muted'))
11plt.axis('equal')
12plt.show()

3.9、3D图

3D图需要导入不同的模块,并且3D图的坐标轴需要显式声明。

1import numpy as np
2from matplotlib import cm
3import matplotlib.pyplot as plt
4from mpl_toolkits.mplot3d.axes3d import get_test_data
5
6fig=plt.figure(figsize=plt.figaspect(0.5))
7
8ax=fig.add_subplot(1,2,1,projection='3d')
9X=np.arange(-5,5,0.1)
10Y=np.arange(-5,5,0.1)
11X,Y=np.meshgrid(X,Y)
12
13R=np.sqrt(X**2 + Y**2)
14Z=np.sin(R)
15
16surf=ax.plot_surface(X,Y,Z,rstride=1,cstride=1,
17 cmap=cm.GnBu,linewidth=0,antialiased=False)
18ax.set_zlim3d(-1.01,1.01)
19fig.colorbar(surf,shrink=0.5,aspect=10)
20
21ax=fig.add_subplot(1,2,2,projection='3d')
22X,Y,Z=get_test_data(0.05)
23ax.plot_wireframe(X,Y,Z,rstride=10,cstride=10)
24plt.show()