无标题文章

## 关于ExtraSensory 数据集的分析过程

> 在这一周的学习当中,我进行对UCSD的传感器数据集进行了分析和学习,我对我学习和尝试的过程,进行复盘

我们首先先从需要解决的问题入手: 

- 我们需要对数据进行了解和清洗 

- 清洗完成后我们需要对其做一个分类的问题

## 观察数据

根据官网的描述,我们得知如下:

ExtraSensory 数据集由 UCSD 下 Yonatan Vaizman 和 Katherine Ellis 收集, 由手机 APP --the

ExtraSensory App进行收集,收集的信息为手机各类传感器的数据和此时的人体状态等一些数据。

该数据集有 60个'csv.gz'文件,文件的命名格式为[UUID].features_label.csv.gz。 UUID为每个用户独有的 ID, 使用 gzip 进行压缩。

我们打开其中一个UUID为 1155FF54-63D3-4AB2-9863-8385D0BD0A13 的单个数据集

进行分析


部分截图

我们对其进行具体的观察,我们得知在该数据集中以timestamp作为主键进行排序,拥有221个feature,和51个label,和一个sourelabel(此不作为label进行学习)

我当时第一个想法是将csv文件读入后,将timestamp、feature、label三部分进行划分,单独取出来 

```

# parse_header_of_csv函数将feature和label进行区分归类

# parse_body_of_csv函数将feature和label的具体数据进行分割存储

# read_user_data函数将csv文件读入

def parse_header_of_csv(csv_str):

    headline = csv_str[:csv_str.index('\n')]

    column = headline.split(",")


    # 进行assert测试

    assert column[0] == 'timestamp'

    assert column[-1] == 'label_source'


    # 找到label开始的位置

    for (ci,col) in enumerate(column):

        if col.startswith("label:"):

            first_start_lind = ci

            break

        pass


    feature_names = column[1:first_start_lind]

    label_names = column[first_start_lind:-1]


    ##去除多余无效的字符

    for (li,label) in enumerate(label_names):

        # assert

        assert label.startswith("label:")

        label_names[li] = label.replace('label:',"")

        pass


    return (feature_names, label_names)

def parse_body_of_csv(csv_str,n_feature):

    full_body = np.loadtxt(StringIO(csv_str),delimiter=',',skiprows=1)


    # 数据的主键为timestamp

    timestamps = full_body[:,0].astype(int)

    # 将特征和标签分开,前面的是特征即传感器

    X = full_body[:,1:(n_feature+1)]


    #分离出所有label数据

    trinary_labels_mat = full_body[:,(n_feature+1):-1]

    M = np.isnan(trinary_labels_mat)# 将其进行判断有哪些是nan值

    Y = np.where(M,0,trinary_labels_mat)>0.## 进行判断哪里有Nan值则将其转化为0,则保留原来的数值

                                          ##并将其转化为布尔值

    return (X,Y,M,timestamps)

# 输出feature数据矩阵X,label数据矩阵Y,label的缺失数据分布矩阵M,feature_names,label_names   

def read_user_data(uiud):

    user_data_file = '%s.features_labels.csv.gz'%uuid


    with gzip.open(user_data_file,'r') as fid:

        csv_str = fid.read()

        csv_str = csv_str.decode(encoding = 'utf-8')

        pass


    (feature_names,label_names) = parse_header_of_csv(csv_str)

    n_feature = len(feature_names)

    (X,Y,M,timestamps) = parse_body_of_csv(csv_str, n_feature)


    return (X,Y,M,timestamps,feature_names,label_names)

```

在这段代码中,主要有三个函数 

def read_user_data(uiud)读入用户数据,并且其中将读取数据的过程再次抽离出两个函数进行抽象。分别是:parse_header_of_csv()、 parse_body_of_csv().

> 值得注意的是在这里,我们使用的Python,Python在IO输入的时候和Python2有所不同,我们进行读取之后需要对其进行decode()操作,encoding为utf-8

parse_header_of_csv(csv_str)函数:由于我们直接将csv文件整个进行输入,所以我们直接将其作为一个大的str进行分析,我们通过判断\n的位置,进行对heading(column)的截取。为了更为严谨,我们在其中插入了assert函数进行判断,截取之后再使用enumerate对column进行从新标号,判断label开始的位置,得到位置之后在依旧使用enumrate对其进行分析,对label标签进行处理,return (feature_names, label_names)

parse_body_of_csv(csv_str,n_feature)函数:我们使用使用numpy中的loadtxt进行读取,以StringIo进行读取,在将feature和label进行分割。


``` 

    #分离出所有label数据

    trinary_labels_mat = full_body[:,(n_feature+1):-1]

    M = np.isnan(trinary_labels_mat)# 将其进行判断有哪些是nan值

    Y = np.where(M,0,trinary_labels_mat)>0.

    ##进行判断哪里有Nan值则将其转化为0,则保留原来的数值

    ##并将其转化为布尔值

```

由上我们得到状态存在矩阵M,同时使用where函数对其进行从新置换。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容