以分析数据集未前往就诊的预约挂号为例,总结一下探索性数据分析的基本流程。
目录
简介
数据集的简介
数据来源kaggle,未前往就诊的挂号预约指一个人预约了医生,收到了所有的指示却没有按约去医院就诊。该数据集包含11万条巴西病人预约挂号的求诊信息,每行数据包含有关患者特点的14个变量,具体有:PatientId:病人ID,
AppointmentID:预约流水号ID,
Gender:预约者的性别,
ScheduledDay:作出预约的具体时间,
AppointmentDay:预约的就诊日期,
Age:病人年龄,
Neighbourhood:医院所在位置,
Scholarship:是否参加巴西福利项目 Bolsa Família
Hipertension: 是否是高血压,
Diabetes:是否是糖尿病,
Alcoholism:是否是酗酒,
Handcap:是否是残障,
SMS_received:病人是否收到短信通知,
No-show:no表示病人如约就诊,yes表示病人没有前往就诊。
提出问题
数据分析的目标就是解决问题,提出感兴趣的或是以业务为导向的问题。一般是两种情况:要么获取一批数据,然后根据它提问;要么先提问,然后根据问题收集数据。 这里提的问题如下:病人的年龄是如何分布的?哪个年龄段的病人更多?
未按约去就诊的病人有多少?占多大的比例?
人们一般会预约在一周的哪一天就诊?
一天中的哪个时段,预约的人最多?
一般会提前几天预约挂号,即病人等待就诊的时长是多久?
哪些重要因素会影响病人是否如约去就诊?例如,年龄,性别,是否参加福利项目,一周中的哪天就诊等。
理解数据
理解数据背景,每个字段的实际含义。主要包括:导入数据和查看数据基本信息,比如,一些描述统计信息。
导入必要的包和数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df = pd.read_csv('noshowappointments-kagglev2-may-2016.csv')
查看基本信息
查看数据集中有哪些列
df.head()
查看数据集是否有缺失值、重复值以及每列的数据类型。共14列,每列都是110527个值,不存在缺失值,也不存在重复值。
df.info()
df.duplicated().sum()
检查异常值,发现年龄的最小值有误。
df.describe()
df.Age.describe()
输出如下:
count 110527.000000
mean 37.088874
std 23.110205
min -1.000000
25% 18.000000
50% 37.000000
75% 55.000000
max 115.000000
Name: Age, dtype: float64
数据清洗
这一步主要是评估数据来识别数据质量或结构中的问题,并通过修改、替换或删除数据来清理数据,以确保数据集具有最高质量和尽可能结构化。
1、将所有列名统一修改成小写并以下划线连接,便于操作。
df.rename(columns=lambda x: x.strip().lower().replace('-','_