统计学基础
分类数据可分类为:
- 定序数据,数据拥有顺序
- 定类数据,数据没有顺序
数值数据可分类为:
- 连续数据,数据没有最小表示单位
- 离散数据,数据以整数或自然数为单位
数值数据可有三种分析维度:
- 集中趋势,看数据集中在何处
- 离散趋势,看数据偏离中心的散步情况
- 分布形状,看分布的对称程度、峰值高低等等
集中趋势分析指标:
- 平均数
- 中位数
- 众数
在Pandas中对应方法:
适用情况 | 方法 |
求平均值 | mean |
求中位数 | median |
求众数 | mode |
tip:由于众数可能有多个,所以mode方法返回值为一个Series
离散趋势分析指标:
- 极差
- 方差/标准差
- 四分位距(第三四分位数 – 第一四分位数)
在Pandas中对应方法:
适用情况 | 方法 |
极差 | 1.max和min方法相减 2.用numpy.array将Series转换为数组后使用ptp方法 |
方差 | var |
标准差 | std |
四分位距 | Series.quantitle(0.75) – Series.quantile(0.25) |
分布形状分析:
直方图等
在Pandas中对应方法:
适用情况 | 方法 |
直方图 | Series.plot(kind=’hist’) |
常见的图表种类
一列数据/一个变量:
直方图、密度图、箱形图、小提琴图等
两列数据/两个变量:
散点图、折线图、条形图、饼图等
散点图、折线图主要针对2个数值变量
条形图、饼图主要针对一个分类变量、一个数值变量
Matplotlib和Seaborn学习
导入Matplotlib库和Seaborn库代码如下:
# 导入Matplotlib库,并取别名为plt import matplotlib.pyplot as plt # 导入Seaborn库,并取别名sns import seaborn as sns
一些绘图函数(单变量):
函数 | 用法 | 返回值 | 作用 |
histplot | sns.histplot(Serise) | matplotlib.axes._axes.Axes类对象 | 绘制直方图 |
kdeplot | sns.kdeplot(Serise) | matplotlib.axes._axes.Axes类对象 | 绘制密度图 |
boxplot | sns.boxplot(Serise) | matplotlib.axes._axes.Axes类对象 | 绘制箱形图 |
violinplot | sns.violinplot(Serise) | matplotlib.axes._axes.Axes类对象 | 绘制小提琴图 |
countplot | sns.countplot(data=DataFrame, x=列名) | matplotlib.axes._axes.Axes类对象 | 绘制计数图 |
tip:需要这些方法都要在后面调用plt.show(),才能使图显示出来,如:
sns.histplot(Serise) plt.show()
也可以直接传入DataFrame,只需指定x轴为哪一列即可,如:
sns.histplot(DataFrame, x = 列名) plt.show()
一些绘图函数(两个变量):
函数 | 用法 | 返回值 | 作用 |
scatterplot | sns.scatterplot(DataFrame, x = 列名1, y = 列名2) sns.scatterplot(x = Series1, y = Series2) | matplotlib.axes._axes.Axes类对象 | 绘制散点图 |
lineplot | sns.lineplot(DataFrame, x = 列名1, y = 列名2) sns.lineplot(x = Series1, y = Series2) | matplotlib.axes._axes.Axes类对象 | 绘制折线图 |
barplot | sns.barplot(DataFrame, x = 列名1, y = 列名2) sns.barplot(x = Series1, y = Series2) | matplotlib.axes._axes.Axes类对象 | 绘制条形图 |
pie | plt.pie(Series1, labels=Serise2) plt.pie(Series1, labels=Serise2, autopct=’%.1f%%’) | matplotlib.axes._axes.Axes类对象 | 绘制饼图 |
tip:barplot函数默认求的是x轴对应分类的y值平均值,可以使用可选参数estimator指定一个聚合函数,如Numpy.max
一些绘图函数(多个变量):
函数 | 用法 | 返回值 | 作用 |
heatmap | sns.heatmap(DataFrame) sns.heatmap(DataFrame, annot=True) | matplotlib.axes._axes.Axes类对象 | 绘制热力图 |
一些可选参数实现多个变量图表:
可选参数 | 用法 | 作用 |
hue | sns.scatterplot(DataFrame, x = 列名1, y = 列名2, hue = 列名3) | 通过颜色区分所给变量 |
size | sns.scatterplot(DataFrame, x = 列名1, y = 列名2, size= 列名3) | 通过大小区分所给变量 |
这些可选参数可同时使用,以到达绘制多个变量图的效果
但是多个变量时,图例可能会遮挡图中数据,解决方法如下:
函数 | 用法 | 返回值 | 作用 |
legend | plt.legend(bbox_to_anchor=(x, y)) | matplotlib.legend.Legend类对象 | 设置图例位置 |
这里x=0或1表示在图表左边或右边, y=0或1表示在图表下边或者上边
多图合成一图实现多个变量图表:
# 将3张直方图图合并成一张直方图 sns.histplot(Series1) sns.histplot(Series2) sns.histplot(Series3) plt.show()
由于合并时不会统一条柱宽度,所以可能会出现条柱宽度不一致的情况,可以通过可选参数binwidth指定条柱宽度来解决。
此外合并后的图表是没有图例的,我们需要通过label可选参数来指定对应被合并图表的标签后才会出现图例
# 指定三张图的条柱宽度和标签再合并 sns.histplot(Series1, bindwidth=0.1, label="Series1") sns.histplot(Series2, bindwidth=0.1, label="Series2") sns.histplot(Series3, bindwidth=0.1, label="Series3") plt.show()
一些用于图表设置的函数:
函数 | 用法 | 返回值 | 作用 |
title | plt.title(图表标题) | matplotlib.text.Text类对象 | 设置图标标题 |
xlabel | plt.xlabel(x轴标签) | matplotlib.text.Text类对象 | 设置图标x轴标签 |
ylabel | plt.ylabel(y轴标签) | matplotlib.text.Text类对象 | 设置图标y轴标签 |
set_palette | sns.set_palette(色盘名) | NoneType | 设置色盘 |
subplots | plt.subplots(行数, 列数) | tuple类型对象 | 设置一张图中放多张子图 |
tip:这些函数需要在show函数之前调用
seaborn色盘参考链接:Seaborn调色板中所有颜色组合(表格整理版)_seaborn颜色对照表-CSDN博客
subplots函数的一些可选参数:
可选参数 | 用法 | 作用 |
figsize | figsize=(宽, 高) | 设置每张子图的宽和高 |
subplots函数的具体使用方法:
# 接受subplots函数返回值,其中fig表示整个大图,axes表示每个子图 fig, axes = plt.subplots(行数, 列数, figsize=(宽, 高)) # 指定第一个子图为如下箱形图 sns.boxplot(data=Dataframe, x=列名1, y=列名2, ax = axes[0]) # 展示图表 plt.show()
一些用于图表绘制函数的可选参数:
可选参数 | 作用 |
color | 设置图表元素的颜色 |
alpha | 设置图表元素的透明度 |
配对图绘制函数:
函数 | 用法 | 返回值 | 作用 |
pairplot | sns.pairplot(DataFrame) | seaborn.axisgrid.PairGrid类对象 | 绘制配对图 |
该函数会把DataFrame中各个变量的分布用直方图绘制出来,各个变量两两之间关系用散点图绘制出来
该图总共有n*n个子图,n为DataFrame变量个数
pairplot函数的一些可选参数
可选参数 | 作用 |
kind | 设置非对角线上的图的类型 |
diag_kind | 设置对角线上的图的类型 |
plot_kws | 设置非对角线上的图的样式 |
diag_kws | 设置对角线上图的样式 |