在数据科学领域,数据探索是一个关键的步骤,它涉及到对原始数据的分析和理解,以便发现数据中隐藏的模式和趋势。尽管没有固定的指南或路线图来执行数据探索,但这个过程对于任何数据科学专业人士或学生来说都是至关重要的。通过数据探索,可以更好地理解数据,从而做出更明智的决策。例如,某些机器学习或深度学习算法可能更适合某些类型的数据。了解数据分布后,可以提出更好的问题,从而更深入地挖掘数据的潜力。
数据探索,尤其是对于大型数据集,有助于理解在进一步分析中的下一步行动。人脑擅长理解视觉数据,因此,数据的视觉呈现是揭示数据模式的绝佳方式。通过有效的数据探索,可以了解单个变量的特性以及多个变量之间的关系。
让通过一个数据集来观察高效的数据探索是如何进行的。以“研究生录取”数据集为例。这个数据集包含了在申请大学时非常重要的各种数据字段。
数据集包括以下字段:
将探讨GRE成绩对于录取机会的影响。
将分析GRE成绩在录取中的重要性,并尝试理解GRE成绩与其他变量之间的关系以及它们如何影响录取机会。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 读取数据
df= pd.read_csv("/kaggle/input/graduate-admissions/Admission_Predict.csv")
# 数据预览
df.head()
现在可以查看数据,GRE成绩似乎在300分左右。这是有道理的,因为GRE的满分是340分。数据探索的一个重要方面是将其与现实生活情况联系起来。
print("DATA INFORMATION AND DATA TYPES")
df.info()
基本上,可以了解所有数据类型以及拥有的数据点数量,这里共有400个。
print('MISSING DATA (IF ANY)')
df.isnull().sum()
因此,没有数据字段是空的,这意味着不需要处理缺失值。
df.corr()
GRE成绩与录取机会之间存在0.802的相关性。因此,很有可能这些变量(数据)高度相关。实际上,相关性是第二高的,仅次于CGPA。因此,可以确定CGPA和GRE成绩在决定录取机会方面最为重要。
plt.figure(figsize = (10,10))
sns.heatmap(df.corr(),annot=True, cmap='Blues')
plt.subplots(figsize=(12,8))
plt.scatter(df["Chance of Admit "],df["GRE Score"])
plt.xlabel("Chance of Admit")
plt.ylabel("GRE Score")
这两个变量之间似乎存在联系。需要进行一些探索。
plt.subplots(figsize=(12,8))
sns.regplot(x="GRE Score", y="Chance of Admit ", data=df)
可以舒适地通过数据绘制一条线性回归线。让尝试其他图表并考虑其他数据,以全面理解整个画面。
sns.jointplot(df["GRE Score"], df["Chance of Admit "], kind="kde", height=8, space=0)
plt.plot(figsize=(12,8))
让看看候选人的研究经验是否有助于获得录取。
sns.lmplot(x="GRE Score", y="Chance of Admit ", data=df, hue="Research",height= 8)
数据显示,具有研究经验的候选人(图中的橙色)通常有更高的录取机会。话虽如此,这些候选人的GRE成绩也很好。因此,良好的GRE成绩确实表明了良好的候选人档案。
现在,让看看大学评级。
sns.lmplot(x="GRE Score", y="Chance of Admit ", data=df, hue="University Rating",height=8)
观察:
现在取一些数据,其中录取机会为0.8或更高,并检查GRE成绩的重要性。
admit_high_chance= df[df["Chance of Admit "]>=0.8]
admit_high_chance.info()
# 取128个数据
admit_high_chance.corr()
现在让看看录取机会和GRE成绩的分布。
plt.subplots(figsize=(12,8))
sns.set_theme(style="darkgrid")
sns.distplot( admit_high_chance["GRE Score"])
plt.subplots(figsize=(12,8))
sns.set_theme(style="darkgrid")
sns.distplot( admit_high_chance["Chance of Admit "])
观察:
X= df["GRE Score"].values
# 将GRE成绩带入0-1范围
X=X/340
y= df["Chance of Admit "].values
# sklearn训练测试数据分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
# sklearn线性回归
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
# 在训练数据上训练模型
lr.fit(X_train.reshape(-1,1), y_train)
y_pred = lr.predict(X_test.reshape(-1,1))
# 模型评分
lr.score(X_test.reshape(-1,1),y_test.reshape(-1,1))
输出:0.6889753669343462
plt.subplots(figsize=(12,8))
plt.scatter(X_train, y_train, color = "red")
plt.plot(X_train, lr.predict(X_train.reshape(-1,1)), color = "green")
plt.title("GRE Score vs Chance of Admit")
plt.xlabel("GRE Score")
plt.ylabel("Chance Of Admit")
plt.show()
模型表现不佳,但确实了解到GRE成绩与录取机会之间存在相关性。让尝试用测试输入。
# 测试输入
test= 320
val= test/340
val_out=lr.predict(np.array([[val]]))
print("Chance of admission :", val_out[0])
Chance of admission: 0.7540416752698649
x = df.drop(['Chance of Admit ','Serial No.'],axis=1)
y = df['Chance of Admit ']
X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.25, random_state = 7)
# 随机森林回归
from sklearn.ensemble import RandomForestRegressor
regr = RandomForestRegressor(max_depth=2, random_state=0, n_estimators=5)
regr.fit(X_train,y_train)
regr.score(X_test, y_test)
输出:0.6901443456671795
Let us work with a sample input.
val=regr.predict([[325, 100, 3, 4.1, 3.7, 7.67, 1]])
print("Your chances are (in %):")
print(val[0]*100)
输出: 录取机会是(%): 54.47694678499888
GRE成绩对于录取很重要。拥有良好GRE成绩的学生似乎拥有良好的整体档案。当然也有例外,这些例外构成了异常值。