読者です 読者をやめる 読者になる 読者になる

GeoJackass

ちゃらんぽらんの絶対領域は、是を頑なに堅持

人工衛星のデータを扱う-その1-

目的

  • 高次元、多次元のデータを操作出来るようにすること
  • numpyのarray、pandasのデータフレーム、Panelの操作に関して習熟すること
  • pythonとpandasからpostgresにデータを流し込む(データの次数を下げる)こと
  • pandasはappendを多用すると、リークが発生しやすいため、postgresを使用してバックグラウンドで計算できる部分は、バックエンドで行う

手段

python、numpy、pandasを使用する
  • numpyのarrayを読み出して、pandasのデータフレームに変換する
  • 読み出したデータを配列として時間軸に対して加算する
  • グリッドを左上から右下に辞書式の配列としてノンブルをふる
  • 2次元に次数を下げて、日付行に対して、カラム番号と対応した物理量を取得できるようなデータ構造にする
# coding:utf-8

import pandas as pd
import numpy as np

data = np.load('../data/2013/01/[sst]{data1}.npy')
df = pd.DataFrame(data)
#データをindex,headerナシでcsvとして出力する
#df.to_csv('sample.csv', index=None, header=None)
#data2,data3として.npyデータを呼び出す
data2 = np.load('../data/2013/01/[sst]{data2}.npy')
data3 = np.load('../data/2013/01/[sst]{data3}.npy')

#呼び出したデータをpandasのDataFrame型に変換する
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

#3日分のデータを、3次元配列のデータとしてpandasのPanel形式で扱う
pf = pd.Panel({'df':df,'df2':df2,'df3':df3})
#pf = pd.Panel({'df':df})

#配列の形式を変換する
s = pf.to_frame()

sst = s.T
#転置行列後の値をcsv出力する
#sst.to_csv('sst_sample.csv')

pythonとpostgresの間でデータのやり取りを行う

pysycopg2
# psycopg2
import psycopg2

# dbへ接続する
conn = psycopg2.connect('dbname=[database] host=[localhost] user=[user] password=[passwd]')
# cursorの作成
cur = conn.cursor()
# SQLの実行クエリの発行 TABLEの作成を行う
cur.execute("CREATE TABLE tset (sst_array integer[]);")
# SQLにデータを流し込む
cur.execute("INSERT INTO test (sst_array) VALUES(%s)", [sst])