在jupyter中利用pandas處理時間序列

前言

目錄

1.Jupyter Notebook哪里舒服了

2.Pandas常用的時間處理操作

1.Jupyter Notebook哪里舒服了

1.1 一些優(yōu)點

  1. 是一個交互式筆記本,網(wǎng)頁版的IDE,便捷持久化輸出和分享,支持多種語言如R\Spark等
  2. 不需要用vim在服務(wù)器上編碼了

jupyter可以部署到服務(wù)器,通過設(shè)置的密碼登錄
或者通過ssh建立一個本機和服務(wù)器的端口映射,端口映射命令ssh -N -f -L localhost:8889:localhost:8888 remote_name
在本地瀏覽器可以進行:上傳文件,下載導(dǎo)出為.html .md .pdf.py等,運行python,bash命令,交互式的可視化圖像

  1. 運行模式
    • 一個文件由多個cell組成,每個cell是一個可編輯執(zhí)行和展示的小單元
    • 變量,函數(shù),包 等都保存在內(nèi)存中,不需要重復(fù)運行,可實時查看
    • 輸出結(jié)果也會保留再頁面上,便于預(yù)處理數(shù)據(jù)和展示,相互不影響
    • 最后一行會直接輸出結(jié)果,免去print
  2. plot出來的圖片會保存在頁面內(nèi),甚至可以進行選取平移等操作,支持markdown,支持github渲染,讓分享更快捷
  3. 有許多擴展插件:Configurable nbextensions(單獨安裝):
    • Variable Inspector:實時查看變量
    • Code prettify:格式化代碼
    • Table of Contents:顯示md的目錄結(jié)構(gòu),類似書簽
    • 一鍵隱藏代碼或者輸出結(jié)果等等
    • 冷凍部分代碼不運行不可更改
  4. 許多魔法命令,如
    • %magic:查看所有魔法命令
    • %%timeit : 測試整個單元中代碼的執(zhí)行時間

!+linux命令 就可以直接運行,還用什么shell
?pd.qcut() 顯示相關(guān)函數(shù)的說明文檔,附帶sample
%run ./note.ipynb 可以直接運行其他的notebook,其渲染的圖片也會顯示在當(dāng)前的shell中
%load ./hello_world.py 載入py文件的代碼到當(dāng)前cell里
%store data 將在不同的notebook間共享變量,輸入%store -r data 即可加載
%%writefile pythoncode.py 可以把當(dāng)前cell的內(nèi)容保存到外部文件中區(qū),%%pycat 可以查看
%prun some_useless_slow_function() 顯示每個內(nèi)部函數(shù)的耗時情況
LaTex公式:用兩個$$包含住P(A \mid B) = \frac{P(B \mid A) , P(A)}{P(B)}即可
%%bash %%ruby... 在不同cell開頭加上聲明,就可以運行不同內(nèi)核的代碼了
conda install -c r r-essentials 安裝r等不同的內(nèi)核命令

1.2 Notebook 頁面介紹及使用

  • 工具欄:
    從左到右依次是 Cell的常規(guī)操作(移動,中斷,重啟);Cell類型(md還是運行的代碼);隱藏當(dāng)前cell的代碼;全部隱藏;冰凍cell使其不能run或者change;監(jiān)控變量;字的大小;書簽展示;美化代碼等

    image.png

  • 目錄 這個插件我覺得非常的有用,值得推薦!
    你可以先用markdown寫一下算法的大致流程,然后一個一個步驟的去完成,同時也會清晰的看到自己目前正在編寫第幾個步驟(黃色標識),點擊即可跳轉(zhuǎn),想必都體驗過一行一行找代碼的痛苦吧

    image.png

  • 主頁面以及Cell

cell就是一個命令窗口,里面可以放markdown文本或者要執(zhí)行的代碼
第一個是代碼塊,運行一次,結(jié)果很持久;后面是渲染的一個圖,分享給別人打開就能看到圖,不需要再次運行

image.png

1.3 Tips:

  • 兩種狀態(tài):命令模式(Command Mode)與編輯模式(Edit Mode),編輯下可以ctrl-enter運行cell內(nèi)的代碼,或者Esc切換到命令狀態(tài);shitf-enter運行當(dāng)前代碼并移動到下一個cell
  • esc后敲
    • s保存(可以回滾到最近一個保存的checkpoint);
    • m將cell變成一個markdown;
    • 數(shù)字變成md的Heading級別;
    • a在上方插入一個cell;
    • b在下方插入一個cell;
    • z回滾最近的操作;
    • l展示行數(shù)
  • 創(chuàng)建的時候可以選擇不同的kernel,比如py2,py3,R,spark等

2. Pandas常用的時間處理操作

  • 基礎(chǔ)操作
# 生成
pd.DataFrame([1,2,3,4])
# 讀取文件,json sql html...
pd.read_csv('a.csv')
# 寫入文件
df.to_csv()
# 合并
pd.merge()
pd.concat()
# 移除重復(fù)數(shù)據(jù)(去重)
df.duplicated()
# df.map() df.apply() 可以將操作應(yīng)用到一列或者每一個元素
# 選取
df[df['column'] == -1] = 1
  • 更多內(nèi)容看 十分鐘了解pandas
  • 時間序列的一些操作
  • 時間戳->日期 + 時區(qū)轉(zhuǎn)換
    # 時區(qū)問題
    # 單個字符串 時間戳->日期的轉(zhuǎn)換
    pd.to_datetime(df['time_stamp'][1],unit='ms',utc=True).tz_convert('Asia/Shanghai')
    pd.to_datetime(1554970740000,unit='ms').tz_localize('UTC').tz_convert('Asia/Shanghai')
    Timestamp('2019-04-11 16:19:00+0800', tz='Asia/Shanghai')
    '''
    utc是協(xié)調(diào)世界時,時區(qū)是以UTC的偏移量的形式表示的,但是注意設(shè)置utc=True,是讓pandas對象具有時區(qū)性質(zhì),對于一列進行轉(zhuǎn)換的,會造成轉(zhuǎn)換錯誤
    unit='ms' 設(shè)置粒度是到毫秒級別的
    上面的輸出就是:
    Timestamp('2019-04-11 16:19:00+0800', tz='Asia/Shanghai')
    '''
    # 列轉(zhuǎn)換 2.7需要加dt,localize  
    df = pd.DataFrame([1554970740000, 1554970800000, 1554970860000],columns = ['time_stamp'])
    pd.to_datetime(df['time_stamp'],unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')#先賦予標準時區(qū),再轉(zhuǎn)換到東八區(qū)
    pd.to_datetime(df['time_stamp'],unit = 'ms').astype('datetime64[ns, Asia/Shanghai]')
    '''
    上面的正確輸出是這樣子:
        2019-04-11 16:19:00+08:00
        2019-04-11 16:20:00+08:00
        2019-04-11 16:21:00+08:00
    錯誤的是這樣子:
    pd.to_datetime(df['time_stamp'],unit = 'ms', utc=True)
        2019-04-11 08:19:00
        2019-04-11 08:20:00
        2019-04-11 08:21:00
    pd.to_datetime(df['time_stamp'],unit = 'ms', utc=True).dt.tz_localize('Asia/Shanghai')
        2019-04-11 08:19:00+08:00
        2019-04-11 08:20:00+08:00
        2019-04-11 08:21:00+08:00
        
    '''
    # 格式化 單個字符串沒有dt
    pd.to_datetime(df['time_stamp'],unit = 'ms').astype('datetime64[ns, Asia/Shanghai]').dt.strftime('%Y-%m-%d %H:%M')
    # 索引設(shè)置為時間datetime后,可以這么操作:
    df['2019-01']
    df['2019-01-24 01:41':'2019-01-24 01:43']
    time_stamp  value  
    2019-01-24 01:41:00+08:00   1548294060000 
    2019-01-24 01:42:00+08:00   1548294120000 
    2019-01-24 01:43:00+08:00   1548294180000 
    
    • 改變時間間隔
    df['time'].asfreq('45Min', method='pad')
    
    • 字符生成日期格式
    pd.Timestamp('2012-05-01')
    Timestamp('2012-05-01 00:00:00')
    
    • 時間重采樣,粒度
    # index 需要設(shè)置為timedate類型: 
    df.index = pd.to_datetime()
    df.resample('24H',how='count')
    
    • 時間的生成
    # 每個月末
    pd.date_range(start, end, freq='BM')
    # 每隔一周
    pd.date_range(start, end, freq='W')
    # end 往前數(shù)
    pd.bdate_range(end=end, periods=20)
    # start 往后數(shù)
    pd.bdate_range(start=start, periods=20)
    
    • 選取時間-isin:
    df['date'] = pd.date_range('2017-1-1', periods=30, freq='D')
    in_range_df = df[df["date"].isin(pd.date_range("2017-01-15", "2017-01-20"))]
    ...
    
    • 選取時間-between_time('23:00','00:00')
    back_time.between_time('23:00','00:00')
    out:
    2018-12-19 23:29:00+08:00    1545262140000
    2018-12-21 23:55:00+08:00    1545436500000
    
    • 比較
    # 直接比較 datetime64 類型的column
    df_time['date']>'2018-12-19'
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市植酥,隨后出現(xiàn)的幾起案子懂从,更是在濱河造成了極大的恐慌扇调,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件选浑,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機温数,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜻势,“玉大人撑刺,你說我怎么就攤上這事∥章辏” “怎么了够傍?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挠铲。 經(jīng)常有香客問我冕屯,道長,這世上最難降的妖魔是什么拂苹? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任安聘,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浴韭。我一直安慰自己丘喻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布念颈。 她就那樣靜靜地躺著泉粉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榴芳。 梳的紋絲不亂的頭發(fā)上嗡靡,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音窟感,去河邊找鬼叽躯。 笑死,一個胖子當(dāng)著我的面吹牛肌括,可吹牛的內(nèi)容都是我干的点骑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谍夭,長吁一口氣:“原來是場噩夢啊……” “哼黑滴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起紧索,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袁辈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后珠漂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晚缩,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年媳危,在試婚紗的時候發(fā)現(xiàn)自己被綠了荞彼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡待笑,死狀恐怖鸣皂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暮蹂,我是刑警寧澤寞缝,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站仰泻,受9級特大地震影響荆陆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜集侯,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一被啼、第九天 我趴在偏房一處隱蔽的房頂上張望帜消。 院中可真熱鬧,春花似錦趟据、人聲如沸券犁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荞估,卻和暖如春咳促,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勘伺。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工跪腹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人飞醉。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓冲茸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缅帘。 傳聞我的和親對象是個殘疾皇子轴术,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容