python机器学习——SCUEC入学预警
本次项目为学长运用Python2编写的项目,我主要任务是转换成python3并进行精度提高以及代码优化
1.采用平台anaconda 3 python 3.5,编译器Jupyter Notebook
2.工程中使用到的python类库 pandas(数据分析包),numpy(相关计算方向,支持多维计算与矩阵运算),matplotlib(图像处理库)
2.1 pandas中的数据结构:
Series一维数组Time- Series以时间为索引的SeriesDataFrame:二维的表格型数据结构,可以将DataFrame理解为Series的容器Panel三维的数组,可以理解为DataFrame的容器。
学习网址:http://codingpy.com/article/a-quick-intro-to-pandas/
2.2 numpy中的数据结构
ndarray:NumPy的核心功能是”ndarray”(即n-dimensional array,多维数组)数据结构。这是一个表示多维度、同质并且固定大小的数组对象。而由一个与此数组相关系的数据类型对象来描述其数组元素的数据格式(例如其字符组顺序、在存储器中占用的字符组数量、整数或者浮点数等等)。列子1:创建数组
import numpy as np
x = np.array([1, 2, 3])
x
输出:array([1, 2, 3])
y = np.arange(10) # 類似 Python 的 range, 但是回傳 array
y
输出:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
列子2:基本运算
a = np.array([1, 2, 3, 6])
b = np.linspace(0, 2, 4) # 建立一個array, 在0與2的範圍之間讓4個點等分
c = a - b
c
输出:array([ 1. , 1.33333333, 1.66666667, 4. ])
a**2
输出:array([ 1, 4, 9, 36])
2.3 matplotlib介绍
matplotlib 是Python编程语言及其数值数学扩展包 NumPy的可视化操作界面。它为利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+向应用程序嵌入式绘图提供了应用程序接口(API)。此外,matplotlib还有一个基于图像处理库(如开放图形库OpenGL)的pylab接口,其设计与MATLAB非常类似–尽管并不怎么好用。SciPy就是用matplotlib进行图形绘制。
matplotlib最初由John D. Hunter撰写,它拥有一个活跃的开发社区,并且根据BSD样式许可证分发。 在John D. Hunter2012年去世前不久,迈克尔Droettboom被提名为matplotlib的主要开发者。
截至到2015年10月30日,matplotlib 1.5.x支持Python 2.7到3.5版本。 Matplotlib 1.2是matplotlib的第一个版本,支持Python 3.x. Matplotlib 1.4是matplotlib支持Python 2.6的最后一个版本
例子1 曲线图
import matplotlib.pyplot as plt
import numpy as np
a = np.linspace(0,10,100)
b = np.exp(-a)
plt.plot(a,b)
plt.show()
例子2 直方图
import matplotlib.pyplot as plt
from numpy.random import normal,rand
x = normal(size=200)
plt.hist(x,bins=30)
plt.show()
例子3 散点图
import matplotlib.pyplot as plt
from numpy.random import rand
a = rand(100)
b = rand(100)
plt.scatter(a,b)
plt.show()
例子四 3D图
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection=’3d’)
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X2 + Y2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
plt.show()
3 准备事项完成之后开始介绍本次分析
3.1常用操作
获取数据集
rx_data = pd.read_csv('path',encoding='gbk'index=False||true)
打印数据集中元素rx_data.head()//默认是前5个,也可以修改,tail()是从后往前输出
对数据集中新加入某一列rx_data=rx_data.join(xb_dummies)//对性别热编码
xb_dummies=pd.get_dummies(rx_data[‘xb’])
//获取性别男女,新加入数据集中 女:1,男:0
xb_dummies.columns=[‘female’,’male’]
//新加的列
rx_data=rx_data.join(xb_dummies)
获取数据集中i属性的数据集的分类以及数量
rx_data['i'].value_counts()
保存数据集操作:to_csvrx_data = rx_data.to_csv('path',encoding = "utf-8",index=False)
替换数据集中某一项数据操作rx_data['i']=rx_data['i'].apply(x)
3.2项目思想
获取到学生入学各个数据之后,建立成表(数据集)
通过对数据集的操作分析来预测接下来一学期可能会遇到的问题
数据集中属性大部分以拼音首字母表示
通过对 性别,生源地,高考分数,各地高考分数线,是否为少数民族,与学校分数线差距来建立模型,预测给予一个入学基础分数
3.3项目成果
对每一个学生都有了一个相较于同一水平的分数,能更好的直观的了解学生入学情况,数据化,可视化的清楚学生的各个入学相较于大环境的水平。更能准确的表现出学生学习能力。
3.3项目不足
各地分数线不一致,可能会出现基础分数线相差很大的情况
各属性权重不好设定,没有权威科学的数据统计方法证明属性权重的分配
只能大致的测量出学生数据,但是没有验证集验证数据是否正确,需要后续数据的支持
挂科不止和入学成绩,生源地有关,还和学生心理,性格等多方面因素有关,数据还较为缺少。
针对预科情况:入学分数明显低于入学基础分数,但是学业预警的不是很多,因为大部分课程已在预科阶段就上过,所以特例应该要特殊分析