小蛇学python(5)可视化分析睡眠—起床关系

想要成为一名数据科学家(我也在这条路上追逐奔跑)就要发自内心的对数据感兴趣,对数据敏感,想用数字来形容自己的一切。我平时有着记录起息时间的习惯,目前积攒了两个月的数据,心血来潮,就想画画图,分析一下数据之间有着什么关系。

这是一个小工程没有什么代码量,主要也是熟悉一下对pandas以及matplotlib的使用。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from dateutil.parser import parse
from pandas import DataFrame

def time_to_int(num):
    integer_part = int(num)
    fractional_part = num - integer_part
    new_fractional_part = fractional_part * 5/3
    new_num = integer_part + new_fractional_part
    return float('%.2f'%new_num)

filename =  'C:/my python/python code/my_life_anlyze/3-4.csv'

morning = []
sleep = []
new_sleep_time = []
data = pd.read_csv(filename, header=0)
data.dropna(axis=0, inplace=True)

for i in data.morning:
    morning.append(time_to_int(i))
for i in data.night:
    sleep.append(time_to_int(i))
print(morning)
print(sleep)
sleep_time = np.array(morning) - np.array(sleep)
for i in sleep_time:
    if i < 0:
        i = i + 24
    new_sleep_time.append(i)
print(new_sleep_time)


time_record = [morning, sleep]
data1 = DataFrame(morning, index=data.date, columns=['mornig'])
data2 = DataFrame(sleep, index=data.date, columns=['sleep'])
data3 = DataFrame(time_record, index=['morning', 'sleep'], columns=data.date)
data4 = data3.T
data5 = DataFrame(new_sleep_time, index=data.date, columns=['sleep_time'])
pd.scatter_matrix(data5)

#print(data4)
#pd.scatter_matrix(data1)
#pd.scatter_matrix(data2)
#plt.scatter(sleep, data.date)
#pd.scatter_matrix(data4.loc[:,'morning':'sleep'], figsize=(12,8), diagonal='kde')
#plt.bar(data.date, new_sleep_time)
#plt.scatter(sleep, new_sleep_time)
plt.show()

在这里耍了一个小聪明,因为python与matlab不同,python的时间数据类型像是一个时间流,就是说每一个时间都是确定唯一的。举个例子,你如果想单单用0-24小时来做横坐标是做不到的,它前面必定(即使不显示)还有个年月日的日期,如果你不显示要求它就默认为今天。

所以我想横坐标是我从3.12-5.1这些天数,而纵坐标是0-24小时如何实现呢?我把我睡觉、起床的时间用浮点数据来表示,区间是[0,24],再把六十进制转化为一百进制就可以精确表示时间了,这也是函数time_to_int(num)的功能。

Figure_2.png

Figure_3.png

Figure_4.png

Figure_5.png

Figure_6.png

Figure_7.png

从这六张图中可以很直观的看出来,我在8:20-8:40这个时间段起床的频率尤其的高。震惊我自己的是竟然有三次是在5点就起床了,当然那只是昙花一现。

而我晚上睡觉集中在23:00-次日1点之间,在零点入睡的频率更为高一些。

Figure_10.png

Figure_11.png

这两张图所表达的意思是,我每天的睡眠时间以及频率图。可知我每天睡七个半小时到八个半小时是最多的,但是睡九到十个小时的懒觉的时候也是很多,太颓废了啊。居然还要一天睡了十二个小时,震惊。

Figure_9.png

这张图比较难以理解,也不是很直观,却很重要,里面有些规律因为数据量太少而并不直观。但是这毕竟是我的生活,我还是很敏锐的发现了一些规律。

这张图说的是晚上入睡时间点和睡眠时间长度之间的关系。大家可以很清晰得看出来,凡是零点以前入睡的,睡眠时间都至少大于六个小时。而零点以后入睡的呢?有五次睡眠时间不足六小时,有两次连四个小时都不到,说明睡眠质量已经差到一定地步了。

还有一个规律,那就是无论时零点前入睡,还是零点后入睡,散点都呈现着集中在八小时周围并向外延伸蔓延的规律,可见八小时睡眠是我最佳的睡眠时间长度。再仔细分析一下呢,零点前入睡我睡眠时间多在8-10这个区间,而零点后却不这样,在6-10区间内呈近似正态分布。当然这有可能是数据太少的原因,等我攒足了数据,再做仔细分析。

在生活里,从自己的生活数据中挖掘意想不到的信息是不是很有趣呢?这也是数据科学这个行业如此吸引人的原因之一吧。

你可能感兴趣的:(小蛇学python(5)可视化分析睡眠—起床关系)