Python 実践 データ加工/可視化 100本ノック」を購入したので、
一通りやっているところです。今日はノック91 ノック92を行います。
資料は以下から入手できます。
Python実践 データ加工/可視化 100本ノック|サポート|秀和システム
ノック91 : 大容量CSVデータを扱ってみよう
CSVファイルのデータを読み込みデータを分割して再度保存します。
使用するデータはサンプルにあるperson_count_out_0001_202111509.csvファイルです。
実行結果
id place receive_time sensor_num in1 out1 state1 in2 out2 state2
0 0 1 2021-01-15 09:00:00.144 2 508 73 0 73 508 0
1 1 1 2021-01-15 09:00:01.146 2 508 73 0 73 508 0
2 2 1 2021-01-15 09:00:02.161 2 508 73 0 73 508 0
3 3 1 2021-01-15 09:00:03.176 2 508 73 0 73 508 0
4 4 1 2021-01-15 09:00:04.192 2 508 73 0 73 508 0
... ... ... ... ... ... ... ... ... ... ...
3535 3535 1 2021-01-15 09:59:55.054 2 782 156 0 156 782 0
3536 3536 1 2021-01-15 09:59:56.07 2 782 156 0 156 782 0
3537 3537 1 2021-01-15 09:59:57.085 2 782 156 0 156 782 0
3538 3538 1 2021-01-15 09:59:58.101 2 782 156 0 156 782 0
3539 3539 1 2021-01-15 09:59:59.116 2 782 156 0 156 782 0
[3540 rows x 10 columns]
全部で3540行のデータです。
このデータを512行ごとに読み取り、別ファイルに保存します。
header=i==0 とすることで、i==0のときにheader=1となり、ヘッダーが付加され、
それ以外の行のときはheader=0となり、ヘッダーが付加されません。
512ぎょうずつ読み込んでprocessed_big_data.csvファイルに追加上書きをしているので、最初のperson_count_out_0001_202111509.csvと同様のファイルが生成されます。
ノック92: Json形式のファイルを扱ってみよう
JsonファイルはJavaScript Object Notationの略で、JavaScript用のドキュメントの規格です。
JsonファイルはPandasのread_jsonで読み込むことができます。
実行結果
id value
0 1 1
1 2 10
2 3 100
出力されるデータからフォーマットはrowとcolumnがあるcsvファイルと同様に見えます。
実際のjsonファイルの中身は、以下のように記述されています。
(テキストでディタでcolumn_oriented.jsonファイルを開いた場合)
{"id":{"0":1,"1":2,"2":3},"value":{"0":1,"1":10,"2":100}}
サンプルとして用意されているもう一つのindex_oriented.jsonファイルの中身を
確認すると、以下のようになっています。
{"0":{"id":1,"value":1},"1":{"id":2,"value":10},"2":{"id":3,"value":100}}
読み込んで表示してみます。
実行結果
0 1 2
id 1 2 3
value 1 10 100
最初に表示したデータと比較すると、行と列が入れ替わっていることが確認できます。
read_jsonの引数にorient='index'を追加すると最初の表示と同じになります。
実行結果
id value
0 1 1
1 2 10
2 3 100
列ごとにデータが記述されている場合は、引数無し、またはorient='column'です。
各indexにカラム名:値、カラム名:値の場合はorient='index’を使用します。
以下のように行ごとに書かれていても表示できます。
[{"id":"1", "value":"1"},{"id":"2", "value":"10"},{"id":"3", "value":"100"}]
実行結果
id value
0 1 1
1 2 10
2 3 100
サンプルにあるテーブル型のjsonファイルを読み込んで表示します。
{"schema":{"fields":[{"name":"index","type":"integer"},{"name":"id","type":"integer"},{"name":"value","type":"integer"}],"primaryKey":["index"],"pandas_version":"0.20.0"},"data":[{"index":0,"id":1,"value":1},{"index":1,"id":2,"value":10},{"index":2,"id":3,"value":100}]}
実行結果
id value
0 1 1
1 2 10
2 3 100
その他にorient='split'というものがあります。これは行と列とデータ全てがそれぞれ記述されているフォーマット形式です。
{"index":["0","1","2"]
,"columns":["id","value"]
,"data":[
["1","1"]
,["2","10"]
,["3","100"]
]
}
上記フォーマットを例えばsplit_oriented.jsonという名で保存して読み込むと
同様の出力が得られることが確認できます。
実行結果
id value
0 1 1
1 2 10
2 3 100