2

次のデータを含む .json ファイル拡張子 (logs.json) が送信されてきました (2,000 を超えるエントリがあるため、一部のみを表示しています)。

["2012-03-01T00:05:55+00:00", "2012-03-01T00:06:23+00:00", "2012-03-01T00:06:52+00:00"," 2012-03-01T00:11:23+00:00"、"2012-03-01T00:12:47+00:00"、"2012-03-01T00:12:54+00:00"、"2012- 03-01T00:16:14+00:00"、"2012-03-01T00:17:31+00:00"、"2012-03-01T00:21:23+00:00"、"2012-03- 01T00:21:26+00:00"、"2012-03-01T00:22:25+00:00"、"2012-03-01T00:28:24+00:00"、"2012-03-01T00: 31:21+00:00"、"2012-03-01T00:32:20+00:00"、"2012-03-01T00:33:32+00:00"、"2012-03-01T00:35: 21+00:00"、"2012-03-01T00:38:14+00:00"、"2012-03-01T00:39:24+00:00"、"2012-03-01T00:43:12+ 00:00"、"2012-03-01T00:46:13+00:00"、"2012-03-01T00:46:31+00:00"、"2012-03-01T00:48:03+00: 00","2012-03-01T00:49:34+00:00"、"2012-03-01T00:49:54+00:00"、"2012-03-01T00:55:19+00:00"、"2012 -03-01T00:56:27+00:00", "2012-03-01T00:56:32+00:00"]

パンダを使用して、次のことを行いました。

import pandas as pd
logs = pd.read_json('logs.json')
logs.head()

そして、私は次のようになります:

                           0
0  2012-03-01T00:05:55+00:00
1  2012-03-01T00:06:23+00:00
2  2012-03-01T00:06:52+00:00
3  2012-03-01T00:11:23+00:00
4  2012-03-01T00:12:47+00:00

[5 rows x 1 columns]

次に、UTC ゾーンを含む適切なデータ型を割り当てるために、次のようにします。

logs = pd.to_datetime(logs[0], utc=True)
logs.head()

そして得る:

0   2012-03-01 00:05:55
1   2012-03-01 00:06:23
2   2012-03-01 00:06:52
3   2012-03-01 00:11:23
4   2012-03-01 00:12:47
Name: 0, dtype: datetime64[ns]

ここに私の質問があります:

  1. 上記のコードは、データを正しい形式で取得するのに正しいですか?
  2. 私の UTC ゾーンはどこに行きましたか? 対応する PST 時間で列を作成し、それをデータ フレーム形式でこのデータセットに追加したい場合はどうすればよいでしょうか?
  3. 日/週、または年ごとのカウントを取得するには、どこかに.day、.week、または.yearを追加する必要があることを思い出したようですが(logs.day?)、私はそれを理解できず、推測していますこれは、データの現在の形状が原因です。日ごとのカウントを取得するにはどうすればよいですか? 週?年?データをプロットできるようにするには?データをプロットするにはどうすればよいですか?

このような単純な質問は、データ分析のために R から Python を使用するように移行しようとしている人にとっては非常に難しいように思えます! 皆さんが助けてくれることを願っています!

4

1 に答える 1

3

ここでの tz 処理にバグがある可能性があると思います。これがデフォルトで変換される可能性は確かにあります (そうではないことに驚きました。これは単なるリストだからだと思います)。

In [21]: s = pd.read_json(js, convert_dates=[0], typ='Series')  # more honestly this is a Series

In [22]: s.head()
Out[22]:
0   2012-03-01 00:05:55
1   2012-03-01 00:06:23
2   2012-03-01 00:06:52
3   2012-03-01 00:11:23
4   2012-03-01 00:12:47
dtype: datetime64[ns]

年、月などのカウントを取得するには、おそらく DatetimeIndex を使用します (現時点では、日付のような列には年/月などのメソッドがありませんが、(c|sh) する必要があると思います):

In [23]: dti = pd.DatetimeIndex(s)

In [24]: s.groupby(dti.year).size()
Out[24]:
2012    27
dtype: int64

In [25]: s.groupby(dti.month).size()
Out[25]:
3    27
dtype: int64

おそらく、データを TimeSeries として表示する方が理にかなっています。

In [31]: ts = pd.Series(1, dti)

In [32]: ts.head()
Out[32]:
2012-03-01 00:05:55    1
2012-03-01 00:06:23    1
2012-03-01 00:06:52    1
2012-03-01 00:11:23    1
2012-03-01 00:12:47    1
dtype: int64

このようにして、再サンプルを使用できます。

In [33]: ts.resample('M', how='sum')
Out[33]:
2012-03-31    27
Freq: M, dtype: int64
于 2014-04-10T18:25:32.333 に答える