数据探索与描述性统计分析

在利用 Pandas 进行对数据进行缺失值重复值进行检查与相关处理后

接下来一般是对数据进行简单的探索与统计描述性分析,进一步观察数据特征,为后续的分析提供大致方向。

在线刷题

检查 or 强化 Pandas 数据分析操作?👉在线体验「Pandas进阶修炼300题」

Note

本页面代码可以在线编辑、执行

本页数据说明

为了更好的介绍相关操作,本页面使用 2020年中国大学排名 数据进行展开,你应该对数据字段、数值、类型等相关信息做一个大致了解!

import pandas as pd
df = pd.read_excel("2020年中国大学排名.xlsx",index_col=0)
import warnings
warnings.filterwarnings("ignore")
df.head()
学校名称 省市 学校类型 总分 办学层次得分 学科水平得分 办学资源得分 师资规模与结构得分 人才培养得分 科学研究得分 社会服务得分 高端人才得分 重大项目与成果得分 国际竞争力得分
排名
1 清华大学 北京 综合 852.5 38.2 72.4 39.6 48.4 256.8 69.1 40.6 76.5 131.0 79.9
2 北京大学 北京 综合 746.7 36.1 73.1 24.6 49.2 237.6 71.0 16.2 71.9 105.8 61.2
3 浙江大学 浙江 综合 649.2 33.9 65.3 20.1 48.3 215.3 68.6 23.9 49.1 81.7 43.0
4 上海交通大学 上海 综合 625.9 35.4 53.6 22.1 43.8 192.8 81.2 18.1 45.8 93.0 40.1
5 南京大学 江苏 综合 566.1 35.1 47.8 10.3 47.4 218.6 59.6 5.3 42.0 71.2 29.0

数据查看

查看指定行

查看数据前 10 行

df.head(10)
学校名称 省市 学校类型 总分 办学层次得分 学科水平得分 办学资源得分 师资规模与结构得分 人才培养得分 科学研究得分 社会服务得分 高端人才得分 重大项目与成果得分 国际竞争力得分
排名
1 清华大学 北京 综合 852.5 38.2 72.4 39.6 48.4 256.8 69.1 40.6 76.5 131.0 79.9
2 北京大学 北京 综合 746.7 36.1 73.1 24.6 49.2 237.6 71.0 16.2 71.9 105.8 61.2
3 浙江大学 浙江 综合 649.2 33.9 65.3 20.1 48.3 215.3 68.6 23.9 49.1 81.7 43.0
4 上海交通大学 上海 综合 625.9 35.4 53.6 22.1 43.8 192.8 81.2 18.1 45.8 93.0 40.1
5 南京大学 江苏 综合 566.1 35.1 47.8 10.3 47.4 218.6 59.6 5.3 42.0 71.2 29.0
6 复旦大学 上海 综合 556.7 36.6 48.4 14.9 46.3 198.5 65.7 6.5 42.9 62.0 34.8
7 中国科学技术大学 安徽 理工 526.4 40.0 39.1 10.6 45.9 191.5 52.6 0.2 55.1 49.2 42.2
8 华中科技大学 湖北 综合 497.7 31.9 45.2 11.3 44.2 182.8 58.3 22.0 25.5 44.9 31.8
9 武汉大学 湖北 综合 488.0 31.7 48.4 9.9 45.3 198.8 51.3 11.8 21.4 44.2 25.2
10 中山大学 广东 综合 457.2 30.3 47.1 13.7 46.8 154.4 65.9 5.6 27.1 33.8 32.6

查看数据量

也就是数据框的 行 * 列,总共单元格的数量

df.size
1400

数据排序

升序

将数据按照总分升序排列,并展示前20个学校

备注:也就是看倒数20名啦

df.sort_values(by='总分', ascending=True).head(20)
学校名称 省市 学校类型 总分 办学层次得分 学科水平得分 办学资源得分 师资规模与结构得分 人才培养得分 科学研究得分 社会服务得分 高端人才得分 重大项目与成果得分 国际竞争力得分
排名
100 广州大学 广东 综合 211.1 23.2 16.4 5.0 33.7 95.9 14.4 0.6 2.0 5.2 14.8
99 杭州电子科技大学 浙江 理工 211.6 25.4 12.6 2.7 36.5 103.4 12.0 2.5 1.5 2.6 12.3
98 上海师范大学 上海 师范 212.8 27.3 17.9 3.6 32.1 96.9 14.0 0.5 2.0 6.8 11.8
97 河南大学 河南 综合 212.9 24.2 22.7 3.4 32.5 97.5 15.7 2.1 1.3 4.2 9.2
96 南京邮电大学 江苏 综合 213.9 25.0 12.5 2.4 34.8 101.2 12.4 6.5 1.6 4.6 13.0
95 广东工业大学 广东 理工 214.2 24.2 15.5 3.7 32.6 96.7 13.8 3.2 3.1 5.3 16.2
94 湖北大学 湖北 综合 214.5 26.3 14.7 2.3 35.0 105.8 10.5 2.9 1.2 3.7 12.1
93 南京信息工程大学 江苏 理工 216.6 23.6 16.1 2.4 33.6 97.5 15.1 4.7 2.1 3.6 18.0
92 燕山大学 河北 理工 216.7 26.6 15.2 2.3 34.5 107.2 12.6 2.8 2.5 4.8 8.2
91 长安大学 陕西 理工 218.9 27.2 14.0 3.7 34.1 104.9 12.1 12.4 1.1 1.1 8.2
90 安徽大学 安徽 综合 219.2 25.7 19.0 2.6 29.5 110.8 15.5 1.4 0.8 3.4 10.5
89 上海理工大学 上海 理工 221.4 28.3 16.4 3.6 32.3 105.7 12.6 9.8 1.3 1.5 9.9
88 华南农业大学 广东 农业 227.1 23.2 18.0 4.5 35.0 102.4 14.8 2.2 4.0 10.3 12.7
87 南昌大学 江西 综合 228.4 27.3 21.1 4.1 32.3 105.2 15.6 0.5 2.5 7.8 12.0
85 湖南师范大学 湖南 师范 233.4 27.9 20.6 2.7 35.2 109.8 15.7 0.5 1.9 7.7 11.4
85 首都师范大学 北京 师范 233.4 29.5 22.9 5.2 37.6 99.7 14.7 0.3 3.3 8.3 11.8
84 云南大学 云南 综合 234.1 29.0 22.8 5.0 30.8 111.6 14.0 0.4 3.0 6.4 11.2
83 郑州大学 河南 综合 234.9 26.3 28.3 6.0 37.2 91.8 23.7 1.7 2.0 4.9 13.0
82 南京工业大学 江苏 理工 235.4 25.4 14.4 3.3 33.0 102.2 15.0 8.6 6.6 12.0 15.1
81 浙江工业大学 浙江 理工 235.5 27.6 18.7 5.7 28.7 109.5 17.8 5.6 2.5 5.8 13.5

指定列排序

将数据按照 高端人才得分 降序排序,展示前 10 位

df.nlargest(10, '高端人才得分')
学校名称 省市 学校类型 总分 办学层次得分 学科水平得分 办学资源得分 师资规模与结构得分 人才培养得分 科学研究得分 社会服务得分 高端人才得分 重大项目与成果得分 国际竞争力得分
排名
1 清华大学 北京 综合 852.5 38.2 72.4 39.6 48.4 256.8 69.1 40.6 76.5 131.0 79.9
2 北京大学 北京 综合 746.7 36.1 73.1 24.6 49.2 237.6 71.0 16.2 71.9 105.8 61.2
7 中国科学技术大学 安徽 理工 526.4 40.0 39.1 10.6 45.9 191.5 52.6 0.2 55.1 49.2 42.2
3 浙江大学 浙江 综合 649.2 33.9 65.3 20.1 48.3 215.3 68.6 23.9 49.1 81.7 43.0
4 上海交通大学 上海 综合 625.9 35.4 53.6 22.1 43.8 192.8 81.2 18.1 45.8 93.0 40.1
6 复旦大学 上海 综合 556.7 36.6 48.4 14.9 46.3 198.5 65.7 6.5 42.9 62.0 34.8
5 南京大学 江苏 综合 566.1 35.1 47.8 10.3 47.4 218.6 59.6 5.3 42.0 71.2 29.0
46 南方科技大学 广东 综合 289.0 26.7 7.1 16.9 41.9 105.0 26.4 1.0 38.9 7.1 18.0
10 中山大学 广东 综合 457.2 30.3 47.1 13.7 46.8 154.4 65.9 5.6 27.1 33.8 32.6
8 华中科技大学 湖北 综合 497.7 31.9 45.2 11.3 44.2 182.8 58.3 22.0 25.5 44.9 31.8

分列排名

查看各项得分最高的学校名称

df.iloc[:,3:].idxmax()
总分           1
办学层次得分       7
学科水平得分       2
办学资源得分       1
师资规模与结构得分    2
人才培养得分       1
科学研究得分       4
社会服务得分       1
高端人才得分       1
重大项目与成果得分    1
国际竞争力得分      1
dtype: int64

数据统计

统计信息|均值

计算总分列的均值

df.总分.mean()
322.50000000000017

统计信息|中位数

计算总分列的中位数

df.总分.median()
279.65

统计信息|众数

计算总分列的众数

df.总分.mode()
0    233.4
dtype: float64

统计信息|部分

计算 总分、高端人才得分、办学层次得分的最大最小值、中位数、均值

df.agg({
        "总分": ["min", "max", "median", "mean"],
        "高端人才得分": ["min", "max", "median", "mean"],
        "办学层次得分":["min", "max", "median", "mean"]})
总分 高端人才得分 办学层次得分
min 211.10 0.800 23.200
max 852.50 76.500 40.000
median 279.65 6.150 29.400
mean 322.50 11.176 29.692

统计信息|完整

查看数值型数据的统计信息(均值、分位数等),并保留两位小数

df.describe().round(2).T
count mean std min 25% 50% 75% max
总分 100.0 322.50 118.36 211.1 244.18 279.65 378.80 852.5
办学层次得分 100.0 29.69 3.31 23.2 27.30 29.40 31.90 40.0
学科水平得分 100.0 27.49 12.42 6.8 19.65 24.00 33.92 73.1
办学资源得分 100.0 7.19 5.51 2.3 3.98 5.25 9.02 39.6
师资规模与结构得分 100.0 39.03 4.75 28.7 35.98 37.95 43.20 49.2
人才培养得分 100.0 134.41 33.82 91.8 109.08 122.80 154.75 256.8
科学研究得分 100.0 26.87 15.61 9.7 15.68 21.85 32.72 81.2
社会服务得分 100.0 7.47 7.99 0.0 2.20 5.20 9.80 40.6
高端人才得分 100.0 11.18 14.14 0.8 3.08 6.15 12.35 76.5
重大项目与成果得分 100.0 20.37 22.02 1.1 7.48 13.75 24.78 131.0
国际竞争力得分 100.0 18.81 10.56 8.2 12.70 15.60 21.00 79.9

统计信息|分组

计算各省市总分均值

df.groupby("省市")['总分'].mean()
省市
上海     350.510000
云南     234.100000
北京     362.827778
吉林     326.000000
四川     349.266667
天津     396.200000
安徽     328.700000
山东     304.633333
广东     286.011111
江苏     298.386667
江西     228.400000
河北     216.700000
河南     223.900000
浙江     335.150000
湖北     335.085714
湖南     320.100000
甘肃     300.400000
福建     313.550000
辽宁     339.550000
重庆     289.200000
陕西     297.685714
黑龙江    364.800000
Name: 总分, dtype: float64

统计信息|相关系数

也就是相关系数矩阵,也就是每两列之间的相关性系数

df.corr() 
总分 办学层次得分 学科水平得分 办学资源得分 师资规模与结构得分 人才培养得分 科学研究得分 社会服务得分 高端人才得分 重大项目与成果得分 国际竞争力得分
总分 1.000000 0.793589 0.934838 0.836351 0.829229 0.959664 0.942001 0.589710 0.921307 0.953615 0.917179
办学层次得分 0.793589 1.000000 0.703688 0.651787 0.755698 0.797602 0.711259 0.417265 0.704239 0.739157 0.667455
学科水平得分 0.934838 0.703688 1.000000 0.716097 0.778855 0.889084 0.929943 0.480871 0.793909 0.901262 0.829870
办学资源得分 0.836351 0.651787 0.716097 1.000000 0.697620 0.730003 0.747226 0.463466 0.861156 0.812887 0.850934
师资规模与结构得分 0.829229 0.755698 0.778855 0.697620 1.000000 0.833277 0.806259 0.425790 0.715772 0.710717 0.705235
人才培养得分 0.959664 0.797602 0.889084 0.730003 0.833277 1.000000 0.885429 0.571678 0.830452 0.873353 0.828115
科学研究得分 0.942001 0.711259 0.929943 0.747226 0.806259 0.885429 1.000000 0.475609 0.855328 0.882416 0.831071
社会服务得分 0.589710 0.417265 0.480871 0.463466 0.425790 0.571678 0.475609 1.000000 0.457190 0.500942 0.533772
高端人才得分 0.921307 0.704239 0.793909 0.861156 0.715772 0.830452 0.855328 0.457190 1.000000 0.902862 0.909247
重大项目与成果得分 0.953615 0.739157 0.901262 0.812887 0.710717 0.873353 0.882416 0.500942 0.902862 1.000000 0.878947
国际竞争力得分 0.917179 0.667455 0.829870 0.850934 0.705235 0.828115 0.831071 0.533772 0.909247 0.878947 1.000000

相关系数|热力图

将上一题的相关性系数矩阵制作为热力图

### 方法一

df.corr().style.background_gradient(cmap='coolwarm').set_precision(2)

### 方法二

#借助 `matplotlib` 和 `seaborn` 

#其中中文设置可以参考[我的这篇文章](https://mp.weixin.qq.com/s/WKOGvQP-6QUAP00ZXjhweg)

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize = (9,6),dpi=100)
sns.set(font='Songti SC')
sns.heatmap(df.corr().round(2),annot=True,cmap='RdBu')
plt.show()
../../_images/数据统计描述性分析_33_0.png

统计信息|频率

计算各省市出现的次数

df.省市.value_counts()
北京     18
江苏     15
上海     10
广东      9
陕西      7
湖北      7
浙江      4
湖南      3
安徽      3
山东      3
四川      3
重庆      2
天津      2
辽宁      2
河南      2
福建      2
黑龙江     2
吉林      2
江西      1
云南      1
甘肃      1
河北      1
Name: 省市, dtype: int64

统计信息|热力地图

结合 pyecharts 将各省市高校上榜数量进行地图可视化

from pyecharts import options as opts
from pyecharts.charts import Map
list1 = list(pd.DataFrame(df.省市.value_counts()).index)
list2 = list(pd.DataFrame(df.省市.value_counts()).省市)


c = (
    Map()
    .add('', [list(z) for z in zip(list1,list2)], "china",is_map_symbol_show=False)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="排名前100高校各省市占比"),
        visualmap_opts=opts.VisualMapOpts(max_=20),
       

    )
)
# c.render_notebook() #展示在notebook中

统计信息|直方图

绘制总分的直方图、密度估计图

import seaborn as sns
plt.figure(figsize = (9,6),dpi=100)
sns.set(font='Songti SC')
sns.distplot(df['总分'])
plt.show()
../../_images/数据统计描述性分析_39_0.png