【データ処理・Python】時間データ処理のArrowライブラリ(転送)

16063 ワード

pythonの時間、前にnaive active timeを回ってとても感じて、今日突然ブックマークの中でarrowライブラリを見て、1篇のとても良い文章が筋が通っていることを知っていて、このライブラリはデータ処理の時にとても役に立ちます.
https://zhuanlan.zhihu.com/p/25091834
データを処理する際には様々な時間データに遭遇することが多いが、時間データのフォーマットが統一されていないため、データ処理に支障をきたすことがある.Pythonの標準ライブラリは対応するモジュールを提供していますが、可用性は高くなく、人間的ではありません.このコラムでは、Rで時間データ(lubridateパケット)をどのように処理するか、Pythonでも同様の機能を実現するパケットが紹介されています.この記事では、PythonのサードパーティライブラリArrowを使用して時間データを処理する方法について説明します.
Arrowは、時間データの作成、操作、フォーマット、変換に便利なスマートな方法を提供します.
きほんしよう
Arrowは、時間データを処理する際に、まずデータをArrowオブジェクトに変換する必要があります.Arrowは、異なる間隔で区切られた時間データなど、複数のフォーマットの時間データを柔軟に変換できます.
>>> arrow.get('2017-01-05')
2017-01-05T00:00:00+00:00]>
>>> arrow.get('2017.01.05')
2017-01-05T00:00:00+00:00]>
>>> arrow.get('2017/01/05')
2017-01-05T00:00:00+00:00]>
>>> arrow.get('2017/01.05')
2017-01-05T00:00:00+00:00]>

また、異なる順序で並べられた時間データもあります.
>>> arrow.get('05/2017.01', 'DD/YYYY.MM')
2017-01-05T00:00:00+00:00]>
>>> arrow.get('05/01/2017', 'DD/MM/YYYY')
2017-01-05T00:00:00+00:00]>
>>> arrow.get('01.05.2017', 'MM.DD.YYYY')
2017-01-05T00:00:00+00:00]>
timestamps         :

>>> arrow.get('1586782011')
2020-04-13T12:46:51+00:00]>
>>> arrow.get('1586782011.123456')
2020-04-13T12:46:51.123456+00:00]>

文字列内の時間データも取得できます.
>>> arrow.get('June was born in May 1980', 'MMMM YYYY')
1980-05-01T00:00:00+00:00]>

データの取得
Arrowオブジェクトに変換すると、year、month、day、hour、minute、second、weekなどのプロパティを使用して、必要な時間データを簡単に取得できます.
>>> now = arrow.now()
>>> now
2017-02-04T13:47:58.114342+08:00]>
>>> now.year
2017
>>> now.month
2
>>> now.day
4
>>> now.hour
13
>>> now.minute
47
>>> now.second
58
>>> now.week
5

データの変更
時間データの操作修正が避けられない.Arrowは、タイムゾーンto()を切り替える方法など、便利な方法を提供しています.
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')
>>> utc
2017-02-03T13:47:58.114342+00:00]>
>>> utc.to('local')
2017-02-03T21:47:58.114342+08:00]>
>>> utc.to('US/Pacific')
2017-02-03T05:47:58.114342-08:00]>
>>> utc.to('+02:00')
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')
>>> utc
2017-02-03T13:47:58.114342+00:00]>
>>> utc.replace(days=+1)
2017-02-04T13:47:58.114342+00:00]>
>>> utc.replace(days=+1, hours=-1)
2017-02-04T12:47:58.114342+00:00]>
>>> utc.replace(weeks=+1)
2017-02-10T13:47:58.114342+00:00]>

データ演算
Arrowオブジェクトは、以下のように、単純な適合よりも大きいことによって、時間の前後を判断することができる.
>>> start = arrow.get('2017-02-03T15:47:58.114342+02:00')
>>> end = arrow.get('2017-02-02T07:17:41.756144+02:00')
>>> start
2017-02-03T15:47:58.114342+02:00]>
>>> end
2017-02-02T07:17:41.756144+02:00]>
>>> start > end
True
>>> start_to = start.to('+08:00')
>>> start == start_to
True

次のように、'-'演算子を使用して時間の差を取得することもできます.
>>> start - end
datetime.timedelta(1, 30616, 358198)

タイムゾーン
Arrowは、時間に応じて、次のような時間区間を取得することもできます.
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')
>>> utc
<Arrow [2017-02-03T13:47:58.114342+00:00]>
>>> utc.span('hour')
(<Arrow [2017-02-03T13:00:00+00:00]>, <Arrow [2017-02-03T13:59:59.999999+00:00]>)
>>> utc.span('year')
(<Arrow [2017-01-01T00:00:00+00:00]>, <Arrow [2017-12-31T23:59:59.999999+00:00]>)
>>> utc.span('day')
(<Arrow [2017-02-03T00:00:00+00:00]>, <Arrow [2017-02-03T23:59:59.999999+00:00]>)

最大時間と最小時間は、次のような制限条件に基づいて取得することもできます.
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')
>>> utc
2017-02-03T13:47:58.114342+00:00]>
>>> utc.floor('year')
2017-01-01T00:00:00+00:00]>
>>> utc.ceil('year')
2017-12-31T23:59:59.999999+00:00]>
>>> utc.floor('day')
2017-02-03T00:00:00+00:00]>
>>> utc.ceil('day')
2017-02-03T23:59:59.999999+00:00]>

人間的
Arrowはまたいくつかの人間的な比較時間の方式を提供して、humanize()方法、具体的な例は以下の通りです:
>>> earlier = arrow.utcnow().replace(hours=-2)
>>> earlier.humanize()
'2 hours ago'
>>> later = later = earlier.replace(hours=4)
>>> later.humanize(earlier)
'in 4 hours'