データ処理(目次)
項目目次
それぞれのリンクをクリックすることで,各項目の目次等にジャンプする.
1. SQL の活用,リレーショナルデータベースのデータ連携
2. オープンデータ,オンラインサイト
詳細目次
1. SQL の活用,リレーショナルデータベースのデータ連携
並行実行での性能確認
- dstat(システム計測ソフト)と dstat データのグラフ描画(Ubuntu 上)
- コマンドや bash 内の関数を並列実行(bash を使用)
- リレーショナルデータベースへの CSV ファイルインポートでの並列処理効果確認(書きかけ)
2. オープンデータ,オンラインサイト
2.1 オープンデータのダウンロード
- 衛星画像
- 外国為替データ(時系列データ)
- Pascal VOC 2012 Example Segmentations(書きかけ)
セグメンテーション済みのカラー画像,セグメンテーションのラベルは20種類.アノテーションも?(調査中)
geocode のプログラム
import pansda as pd pd.read_excel('hoge.xls', header=8, index_col=F) import geopandas.geocode geopandas.geocode('ほげ')
その他
その他,オープンデータ関係
Detector : Dlib, SSD Mobilenet-v2 Recognition: VGG2 VGG2-Resnet Model: Inception ResNet2 Face Datasets: VGGFace2, MS-Celeb-1M, CASIA WebFace, Labeled Faces in the Wild [1] VGG Face : http://www.robots.ox.ac.uk/~vgg/software/vgg_face/ [2] VGG Face in TensorFlow : https://github.com/ZZUTK/TensorFlow-VGG-face [3] DLib : https://github.com/davisking/dlib [4] Dlib Guide Blog : https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/
Computer Vision Group, Freiburg: https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html NYU Depth Dataset V2, https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html
以下、書きかけ
#!/bin/bash cat >/tmp/a.$$.sql <<-SQL drop table KENALL; drop table JIGYOSYO; SQL cat /tmp/a.$$.sql | sqlite3 /tmp/mydb01 # cat >/tmp/a.$$.sql <<-SQL
## -*- coding: utf-8 -*- import win32com.client as win32 #COMを利用して、Excelに接続 xlApp = win32.Dispatch("Excel.Application")e #Excelを開く wb = xlApp.Workbooks.Open("E:/testFile.xlsx") #Sheet取得 #番号またはSheet名 sheet = wb.Worksheets(1) #Cell取得 cell = sheet.Cells(1,1) #Cellに数字を入れる cell.Value = 10 #関数を入れる sheet.Range("A11").Formula = "=SUM(A1:A10)" #シート名を変更 sheet.Name = "TEST NAME" #セーブして閉じる wb.Save() wb.Close()
CSV データ合成
- 前準備として,domoritz/random-csv のインストールとテスト実行
Windows では,コマンドプロンプトを管理者として実行し, 次のコマンドを実行する.
- 15910行の CSV データ合成
cd /d c:%HOMEPATH% python c:\pytools\random-csv\generate_csv.py 15910 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 1m.csv
- 約 1G, 4G, 8G, 12G, 16G の CSV データ合成
処理が終わるまで,数十分以上を見込む.
Windows の場合
cd /d c:%HOMEPATH% python c:\pytools\random-csv\generate_csv.py 15910000 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 1g.csv python c:\pytools\random-csv\generate_csv.py 63640000 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 4g.csv python c:\pytools\random-csv\generate_csv.py 127280000 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 8g.csv python c:\pytools\random-csv\generate_csv.py 190920000 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 12g.csv python c:\pytools\random-csv\generate_csv.py 254560000 int int float str | "C:\Program Files\Git\usr\bin\nl.exe" -s ',' -n ln | "C:\Program Files\Git\usr\bin\dos2unix.exe" > 16g.csv
CSV ファイルから,テーブル定義 SQL の自動生成(csvkit を使用)
csvkit のオプションは次のページに説明がある.
https://csvkit.readthedocs.io/en/1.0.2/scripts/csvsql.html
テーブル定義のSQLファイルの生成
cd /d c:%HOMEPATH% echo id,x,y,val,comment> a.csv type 1m.csv >> a.csv csvsql --tables T -i postgresql a.csv > 1m.sql
PostgreSQL に接続し,テーブル定義まで行う場合
cd /d c:%HOMEPATH% echo id,x,y,val,comment> a.csv type 1m.csv >> a.csv csvsql --db postgresql://username:password@127.0.0.1:5432/dbname --insert a.csv createdb test csvsql --db postgresql:///test --tables T --insert a.csv
CSV ファイルを PostgreSQL のテーブルに取り込み
\copy でエラーが出る場合は,dos2unix で CR+LF を除去すると解決する場合がある.
psql drop table if exists T; create table T ( id integer, x real, y real, val real, comment varchar ); \copy T from 1m.csv with csv; select * from T limit 10;
8. Python でのデータの取り扱いプログラム例
データを丸ごとメモリに読み込んで SQL 文処理
pandasql は、pandas オブジェクトに対しての SQL 文を処理する機能を持つ。 データを、pandas オブジェクト丸ごとメモリに読み込み、SQL文で処理したいときに便利。 Python 内で実行される。PostgreSQL 等とは無関係。
下のプログラムでは,iris が pandas オブジェクト.
import pandas as pd import seaborn as sns iris = sns.load_dataset('iris') from pandasql import sqldf, load_meat, load_births pysqldf = lambda q: sqldf(q, globals()) print(pysqldf("SELECT * FROM iris WHERE sepal_length > 5;")) print(pysqldf("SELECT sepal_length, sepal_width FROM iris WHERE sepal_length > 5;"))