1、导入可能使用到的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 可以自己随时增减
2、导入数据
# 如果需导入文件与代码文件在同一个文件夹
data = pd.read_csv('turkiye-student-evaluation_generic.csv')
# 否则使用绝对路径
# data = pd.read_csv(r'绝对路径')
# 显示前5行
data.head()
3、查看数据,简单分析
# 查询数据类型,是否有缺失值
data.info()
# 读取数据的 信息,平均数、中位数的描述
data.describe()
4、熟悉pandas的数据选取
# 防止修改原数据
df_cor = data.copy()
df_cor.columns
# 修改列名
df_cor.columns = pd.Index(["I1","I2","I3","I4","I5"] + list(df_cor.columns[5:34]))
# 比较loc、iloc的区别;
# 根据矩阵位置选择第10行
# df_cor.iloc[:,9]
# df_cor.iloc[[1,2],:]
# 根据列名和行名选择
ff = df_cor.loc[:,['I4','Q3']]
ff
比较loc、iloc的区别
# 根据矩阵位置选择第10行
# df_cor.iloc[:,9]
# df_cor.iloc[[1,2],:]
# 根据列名和行名选择
ff = df_cor.loc[:,['I4','Q3']]
5、归一化
# 0-1标准化
from sklearn import preprocessing as prep
predata = data.copy()
minmax_scale = prep.MinMaxScaler().fit(predata[predata.columns])
predata[predata.columns] = minmax_scale.transform(predata[predata.columns])
display(predata.head())
6、相关性矩阵
# 相关矩阵
corr = df_cor.corr()
# 设置图形类型为下三角矩阵
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True # 返回方阵的三角矩阵
# 做相关矩阵图——热力图
f, ax = plt.subplots(figsize=(10, 10)) # 设置画布大小(比例)
cmap = sns.diverging_palette(220, 10, as_cmap=True) # 调色盘
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=1.0,
square=True, xticklabels=2, yticklabels=2,
linewidths=.3, cbar_kws={"shrink": .5}, ax=ax)
# 进行可视化
plt.show()
7、卡方检验
# 定义选取的关键特征个数
N=6
# 准备好原始特征
df_feature=data.copy()
del df_feature["attendance"]
# 准备好标签
label=data["attendance"]
"""
函数find_name(new_feature, df_feature)用来输出关键特征的名称;
输入:原始特征、选择的关键特征;
输出:关键特征的名称
"""
def find_name(new_feature, df_feature):
# 定义列表存储关键特征名称
feature_name=[]
col=df_feature.columns
# 寻找关键特征的名称信息
for i in range(N):
for j in range(df_feature.shape[1]):
# 判别标准为new_feature中的特征向量与df_feature中的特征向量一致
if np.mean(abs(new_feature[i]-df_feature[col[j]]))==0:
feature_name.append(col[j])
print (i+1,col[j])
break
return feature_name
# 卡方检验,找出关键特征
from sklearn.feature_selection import SelectKBest,chi2
new_feature = SelectKBest(chi2,k=N).fit_transform(df_feature,label).T
PS_list= find_name(new_feature,df_feature)
画出箱型图,进一步观察相关程度
# 画出箱型图
sns.boxplot(x='difficulty',y='attendance',data=data)
plt.show()