Python 處理 Apple Health Kit data

一個偶然的發現,在iPhone的健康應用里,可以將全部健康數據導出為一個XML文件。這是數據啊,有數據不就可以折騰了嗎? 于是越想越精神,雖然我并不知道怎么處理這些數據,那就。。先把其中的一些數據用matplotlib可視化一下吧。這都是我自己產生的真實的數據啊,于是就有了今天下午的故事··

知識相關:

  • python 讀取XML文件的方法 (xml.sax/xml.etree.ElementTree)
  • Python 對象序列化
  • Python 迭代器和生成器 (讀 python cookbook)
  • Python elementsTree 讀取xml 標簽的多個屬性值 參考
  • Matplotlib 將dict類型的數據可視化 (折線圖)
  • Matplotlib 以日期為橫軸的問題 (matplotlib 必須把數值轉換為浮點數)

讀取XML的方法

ElementTree是將所有的XML解析為樹,就要讀入所有的數據,這個還是比較占用內存空間的。因為僅僅是一個月的數據,XML文件解壓后就有90兆左右了。XML.sax會比較省內存,但是比較麻煩,需要自己重新實現一個handler,因為90mb的數據還是在允許的范圍之內的,所以為了省事就使用了ElementTree,日后有需要的時候還是要研究一下sax的。但是因為自己寫代碼需要多次運行,每一次運行就要重新載入一下90兆的數據,這個速度慢的還是有點不能忍的,好在我并不是需要所有的數據--我只是想把每天的運動時間可視化展示一下,這樣,我在第一次把數據讀入時就把所有的運動時間相關的數據存在一個list 中,然后把這個list對象序列化,保存為文件,那么我下一次就直接載入這個序列化的文件就好了,大大節省了載入數據的時間。

pickle

就是干這件事情的,關于pickle,我覺的目前只要記住兩個方法就夠用了
關于對象序列化,我覺的作用還是蠻大的,至少讓對象的生存周期延續到了程序運行結束后,也讓對象的生存空間從內存移動到了硬盤 +ns

import pickle
pickle.dump(activity_data, f)  # store the sequence of object activity_data to f(f is a file)
activity_data = pickle.load(f) # get the object by f
# now type(activity_data) is []
# 序列化部分的完整代碼
def create_activity_data():
    # source_data = open('/home/alexsun/testData/appleHealth/apple_health_export/mydata.xml')
    # data = parse(source_data)
    # f = open('xml_data','wb')
    # pickle.dump(data, f)
    f = open('xml_data', 'rb')
    f1 = open('activity_data_list','wb')
    data = pickle.load(f)
    cnt = 0
    activity_data = []
    for item in data.iterfind('ActivitySummary'):
        activity_data.append(item.attrib)
        print item.attrib
    # pickle.dump(records_data, fr)
    pickle.dump(activity_data, f1)
    f.close()
    f1.close()
    # source_data.close()

matplotlib展示健身時間

先把代碼貼在這里吧,更熟練了matplotlib之后再來補充

def main():
    f = open('activity_data_list')
    activity_data = pickle.load(f)
    # x represents date
    x = []
    # y represents  daily exercise time
    y = []
    for item in activity_data:
        date = item['dateComponents']
        x.append(datetime.strptime(date, '%Y-%m-%d').date())
        y.append(item['appleExerciseTime'])
    plt.gca().xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
    plt.gca().xaxis.set_major_locator(md.DayLocator())
    plt.xlabel('date')
    plt.ylabel('exercise time')
    plt.plot(x, y)
    plt.show()


if __name__ == '__main__':
    main()

最后的效果是這個樣子的:

figure_1-1.png

發現現在看到數據就會非常驚喜,我覺得有了數據之後可以做太多有意義的事情了.這僅僅是一個開始

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,533評論 6 427
  • 環境管理管理Python版本和環境的工具。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,813評論 1 61
  • 一個運行中的程序會存取放在隨機存取存儲器(RAM)上的數據。RAM 讀取速度快,但價格昂貴,需要持續供電,斷電后保...
    Gaolex閱讀 6,493評論 0 8
  • Python的面向對象 類 Class 類變量 Class variable 數據成員 Data member 函...
    JasonJe閱讀 1,145評論 0 3
  • 對于簡單的文件,唯一的結構層次是間隔的行。然而有時需要更加結構化的文本,用于后續使用的程序保存數據或者向另一個程序...
    碼農小楊閱讀 3,113評論 0 2