版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/79489305
拿到了教务处下发的全校四六级成绩单.xlsx,大呼这简直就是一个不能再好的练习用数据集啊。。
part1 用excel进行数据整理
把四级和六级成绩分开,删除一些没用的列,留下一些有用的列,其实可以用excel做得更多,但笔记本电脑并不能满足excel的硬件需求,还需转换python
part2 用python进行数据分析
step1 数据预处理
import pandas as pd
import os
os.chdir('/Users/zhaohaibo/Desktop')
#-----------------录入数据
data = pd.read_csv('grade4.csv',encoding = 'utf-8')
#----------------提取出有分析价值的内容
dt4_1 = data[['学历','年级','院系','笔试成绩总分']]
dt4_1.columns = ['edu','grade','col','score']
#----------------数据清洗,删除缺考的数据
dt4_2 = dt4_1[(True-dt4_1['score'].isin([0]))]
step2 统计量分析
#仅对入学年份与成绩进行统计量分析
des4_1 = dt4_2.describe()
des4_1.loc['range'] = des4_1.loc['max'] - des4_1.loc['min'] #级差
des4_1.loc['var'] = des4_1.loc['std']/des4_1.loc['mean'] #异变系数
des4_1.loc['dis']=des4_1.loc['75%']-des4_1.loc['25%']#四分位数间距
看到平均分。。最高分竟也仅560,去年是有几个600+的吧。
step3 统计
因为这次仅仅想对分数段及人数做个分析,需要统计的量很少。以后有时间还想分析一下分数与学院、专业的相关性,看看哪个院的成绩最好。
dt4_3 = dt4_2[dt4_2['score'] >= 425]
dt4_4 = dt4_2(dt4_2['score'] >= 501) & (dt4_2['score'] <= 550)]
dt4_5 = data[(data['笔试成绩总分'] >= 460) &(data['学历']=='研究生')]
#....不一一列举了
part3 数据可视化
选用的是基于javascript的ECharts
echarts相关使用方法官网已经说明的足够详细了。
这里上一下六级成绩的绘图代码,参考的是官网的一个饼图模版。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
<!-- 引入 echarts.js -->
<!-- 这里是加载刚下好的echarts.min.js,注意路径 -->
<script src="echarts.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 1000px;height:600px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
// 第二个参数可以指定前面引入的主题
var chart = echarts.init(document.getElementById('main'), 'vintage');
var option = {
title : {
text: '',
subtext: '',
x:'center'
},
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b}: {c} ({d}%)"
},
legend: {
orient: 'vertical',
x: 'left',
data:['551及以上','501~550','476~500','426~475','376~425','326~375','325及以下']
},
series: [
{
name:'asdas',
type:'pie',
selectedMode: 'single',
radius: [0, '50%'],
label: {
normal: {
position: 'inner'
}
},
labelLine: {
normal: {
show: false
}
},
data:[
{value:497, name:'缺考(497)'},
{value:6947, name:'未通过(6947)'},
{value:924, name:'通过(924)', selected:true}
]
},
{
name:'分数段',
type:'pie',
radius: ['60%', '80%'],
label: {
normal: {
formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
backgroundColor: '#eee',
borderColor: '#aaa',
borderWidth: 1,
borderRadius: 10,
// shadowBlur:3,
// shadowOffsetX: 2,
// shadowOffsetY: 2,
// shadowColor: '#999',
// padding: [0, 7],
rich: {
a: {
color: '#999',
lineHeight: 15,
align: 'center'
},
// abg: {
// backgroundColor: '#333',
// width: '100%',
// align: 'right',
// height: 22,
// borderRadius: [4, 4, 0, 0]
// },
hr: {
borderColor: '#aaa',
width: '100%',
borderWidth: 0.5,
height: 0
},
b: {
fontSize: 10,
lineHeight: 20
},
per: {
color: '#eee',
backgroundColor: '#334455',
padding: [2, 4],
borderRadius: 2
}
}
}
},
data:[
{value:73, name:'551及以上'},
{value:61, name:'501~550'},
{value:114, name:'476~500'},
{value:717, name:'426~475'},
{value:1990, name:'376~425'},
{value:2780, name:'326~375'},
{value:2197, name:'325及以下'}
]
}
]
};
// 使用刚指定的配置项和数据显示图表。
chart.setOption(option);
</script>
</body>
</html>