个人学习之作,水平有限,仅供参考,与诸君共勉。
1:目的
调用库,熟悉数据清洗,数据处理,熟悉python的编程知识
大概流程如下(建议熟记,对知识的掌握和面试都是有好处的):
-
确保数据集本身是可用的,包括但不限于:
a) 检查数据本身是否平衡(balanced or not),并处理
b) 检查数据本身是否有缺失值 (missing value),并处理
c) 检查数据本身是否有一些明显的异类数据(outlier), 根据情况再做处理 -
检查数据集本身特质,确定适合的机器学习模型(machine learning model)
a) 有监督模型(Supervised) VS 无监督模型(Unsupervised)
b) 回归模型(Regression) VS 分类模型(Classification) -
通过数据可视化,建立一个对于数据集的直觉(intuition)和认知(understanding)
-
通过数据可视化,大致了解特征与结果之间的联系,进一步确定适合的机器学习模型
-
预测并验证未来模型产出的结果
-
对用在模型中的特征做初步的筛选
-
为特征工程(feature engineering)部分做准备
2: 数据
数据csv大概如下:我会上传到下载那块,有需求的朋友自己下载
3:开始
# 引入库包
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('student-por.csv')
在引入库包之后,进行初步的数据处理
print(df.head(10))
print(df.shape)
print(df.isnull().sum())
print(df.describe(include = 'all'))
print(df.info())
重点说一下,这个数据集比较干净,也无任何缺省,
数据段中文对应关系如下
字段名 | 含义 | 类型 | 描述 |
---|---|---|---|
sex | 性别 | string | F是女,M表示男 |
address | 住址 | string | U表示城市,R表示乡村 |
famsize | 家庭成员数 | string | LE3表示少于三人,GT3多于三人 |
pstatus | 是否与父母住在一起 | string | T住在一起,A分开 |
medu | 母亲的文化水平 | string | 从0~4逐步增高 |
fedu | 父亲的文化水平 | string | 从0~4逐步增高 |
mjob | 母亲的工作 | string | 分为教师相关、健康相关、服务业 |
fjob | 父亲的工作 | string | 分为教师相关、健康相关、服务业 |
guardian | 学生的监管人 | string | mother,father or other |
traveltime | 从家到学校需要的时间 | double | 以分钟为单位 |
studytime | 每周学习时间 | double | 以小时为单位 |
failures | 挂科数 | double | 挂科次数 |
schoolsup | 是否有额外的学习辅助 | string | yes or no |
fumsup | 是否有家教 | string | yes or no |
paid | 是否有相关考试学科的辅助 | string | yes or no |
activities | 是否有课外兴趣班 | string | yes or no |
higher | 是否有向上求学意愿 | string | yes or no |
internet | 家里是否联网 | string | yes or no |
famrel | 家庭关系 | double | 从1~5表示关系从差到好 |
freetime | 课余时间量 | double | 从1~5从少到多 |
goout | 跟朋友出去玩的频率 | double | 从1~5从少到多 |
dalc | 日饮酒量 | double | 从1~5从少到多 |
walc | 周饮酒量 | double | 从1~5从少到多 |
health | 健康状况 | double | 从1~5从状态差到好 |
absences | 出勤量 | double | 0到93次 |
G1,G2,G3 | 期末成绩 | double | 20分制 |
1;对性别进行处理
sns.countplot(x = 'sex', order = ['M','F'], data = df )
df['sex'].replace('M','0')
df['sex'].replace('F','1')
将M-男,F-女 转化为01
2:对地址进行转换
sns.countplot(x = 'address', order = ['U','R'], data = df )
df['address'].replace('U','1')
df['address'].replace('R','0')
Reference:
1:https://tianchi.aliyun.com/course/video?spm=5176.12282042.0.0.3eb22042bd6YRi&liveId=7729
1:https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12281897.0.0.209439a9IUXP6k&postId=7459
1:https://blog.youkuaiyun.com/jiangtianshe/article/details/77703450