データベースへの旅路

9/15

9月ももう半ばである。
Cal1
今日は早めに家に戻り,修正の終わったプログラムを動かしている。2台のMacBook Airをフル稼働。早い方のMBAでは,2日弱で終わる予定。
Cal2
このRunningがokに変わるまであと2日か。何も問題が起こらなければ。がんばって働くのだ我が僕どもよ。

しかし,こうしてぼーっと待っていると,何か妙に蓮舫氏に腹が立ってくるのである。「2番じゃだめなんですか?」 自分にはもっとcomputing powerが必要だ。我にもっと計算力を! もっともっと集積回路を!! Give me a Mac Pro!!!

高いんだよねMac Pro。しかもMacBook Air買ったところだし。

はよ終わらんかな計算。。蓮舫め。。。

いよいよ終盤@SQL。

Sql0911
おかしい。どこかにバグがある。

SQLで進めているデータベース作業は,いよいよ終盤にきている。このプロシージャがうまく動けば,必要な作業はほぼ終了することになる。だが。

うまく動かない。。。

シンタックスエラーはないので,アルゴリズムの問題のはずである。前回別のプロシージャで悩んだときには,そう思っていてデータの問題だったが。。

MySQLではCursolに書き込めないことが分かってから,RDMSを変更することも考えたのだが,結局MySQLのまま,アルゴリズムを変えてCursolを使わずに書くことにした。おかげで複雑怪奇なプロシージャとなった上に,18万回もループ処理するので実行に相当時間がかかる。ただでさえ複雑なのに,理由の分からんバグはもうほんと勘弁してほしい。。。

が,これが終わればもうあとは統計処理に文章化だけだ。がんばろう。

しかしそうこうしているうちに,新学期が始まる。まだ何も準備していない。リバイズのかかっている論文も2本ほど放置しているし,,,

考えれば考えるほど楽しくなってくるなははは。

あーぁ。

9/7

もう死にそうだ。

今日もずっとSQLでプログラミングしていたわけだが,どうしても理解できないバグがいくつかあった。それを片っ端から潰していくわけだが。

カーソル開いて,フェッチして,取り出したデータを変数に格納して,最後にフェッチしたデータをアップデートする。そんなプロシージャ。

何度トライしてもできないのである。ストアドプロシージャの作成はできるのだが,その実行ができない。むむむ。。。

悩むこと2時間。しょーがないので,MySQLのリファレンスを適当に読む。すると,,,
Ref1
お? なにやら気になる既述が。

Ref2

あんだとぉぉぉ〜〜〜!!

,,,

使おうとしていた機能は,MySQLではまだ実装されておりません。以上。

あぁ,,,怒り狂うべきなのか,バグの理由が分かったことを良しとするのか,もう帰って寝るべきなのか,,,

PostgreSQLもインストールしてある。セットアップしてそちらで書くことにする。 
ってか半端ない疲労感。。。

8/30

8月ももう終わりである。論文作業の進捗状況的には,非常に遅れている

そんなわけで,日々SQL作業を進めているわけだが。昨日,ずっと分からなかったバグがようやく判明し,テスト環境での検証作業から,ようやく本番データを用いた作業へと取りかかったのである。18万行のデータ。

Sql0830
テストデータでどうしても分からなかったバグは,null値が入っているはずだったところに半角スペースが入っていたためと判明した。このバグのせいで3日近く浪費した。。。
コンパイルは通るものの,出力されるデータが求めるものと違うので,絶対書いたアルゴリズムにバグがあるものと思い込んで探すこと3日。ifをcaseで置き換えたり,=を<=>でおきかえたり,inをorで書き換えたり,考えられる問題要因はすべて検証したのだが,結局バグはデータにあった。Navicatを使ってCSVからインポートしたときの設定ミス。はーっっ。

そんなわけで,今日から勇んで本番データを使って作業を進め始めたのである。見込みでは,多少複雑なプロシージャではあるものの,一日で十分終わるはずだったのだが,,,

16000行書いて,未だ終わらず。マジか。。。

ま,ほとんどが繰り返し作業なので,コピペでかなりの部分済ませられるのだけども。ってか,いろいろと必要になるテーブルをすべて一つのプロシージャで作ろうとしてるからこんなに長くなるんだけども。分けるべき。

しかしそうすると多少重複してかかなくてはいけない部分がででくるし,これまで書いたのも修正しないといけないし,,,

,,,

もう寝よ。

SQL,,,

悩んでいる。
ずっと進めているデータベース的作業。VBAで処理することはあきらめて,SQLでなんとか処理しようともがいているのだが,,,

とりあえず,5000行ほどのデータと,3000行ほどのデータがあるテーブルをleft outer join させてみた。5000行ほどのデータがtable A,3000行の方がtable Bとする。
結合する条件は少々複雑。各データにはfirst nameが3種類,last nameが4種類,職業が3種類の記載があるので,それらを考慮して同じ名前と職業のデータを結合させる。そんな作業。left outer joinなので,5000行ほどあるtable Aに,名前と職業が一致するデータがtable Bに見つかった場合,table Aの横にそれを加えて表示させる。

それほど難しい作業ではない。書いたクエリが以下。
Wb
ところが,出力がなぜか変。こんな短いクエリでうんうん悩むこと数十分,,,ようやく原因判明。()の位置がおかしかった。

,,,

そんなこんなで,SQLの習得は亀の歩みである。Cursor 開いてfetchするのはいつになるやら。というか,そんな方法使わなくてもなんとかなりそうな光明も見えてきた気がする。いや,見えないか。

VBAやらExcel関数を書いた後で急にSQLに切り替えると,シンタックスエラーを連発する。いやはや。

あぁデータベース。

午前,大阪で学会シンポジウム。興味のあるテーマだったので行ってきたのだが,一日全部使うわけにも行かず,午後からはあちこちでデータベースをいじる作業。

結局,現在進行中の作業はSQLを勉強しつつ,なんとかExcel VBAでできないかと試行錯誤していた。これまでは,テスト用のデータを作ってExcelマクロを書いていたのだが,一昨日,ようやく実用レベルのマクロを書き上げる。18万行のデータを照合する。相当な時間がかかることは想定済みなので,一昨日の夜から,まる二日近くマクロを動かしていた。3日程度で終わるなら,SQL覚えなくても良いかな,と。

実行に使ったマシンは,新しい方のMacBook Air,CPUはCorei5のメモリ4GBである。そこそこ早いので,なんとかなるかと思ったが,,,

2日で終わったのは1000行ちょっと。計算すると,マクロ終了まで1ヶ月以上かかる計算。

。。。

やはりSQLしかないのか。

SQLも,たいした作業をするわけじゃないからと,SQLiteを使っていたのだが,なんとSQLiteはプロシージャがかけないらしい。なんということ。しかも,調べてみると,求める作業をこなすには,カーソルをオープンしてフェッチがどうの,その後カーソルを閉じるらしい。よーわからん。。。

こりゃますますピンチ。

とりあえず,SQLiteには見切りをつけ,MySQLを導入。PostgreSQLに比べ,MySQLは簡単にOSX用のバイナリが見つかった。インストールし,ちょちょっとターミナルから設定し,フロントエンドにはやはりNavicatを導入。で,データベースを構築し直した。
Mysql
インストールにデータベースのインポートだけで何時間かかるねん。。。

がんばってこれからクエリを書くのである。さて,うまくできるかどうか。

しかしSQLの解説書も何冊かかってきたのだが,なぜかどれもifやforの制御文については触れてないな。無いのかと思ったらあるらしいし。よーわからんなぁ。。。

がんばろ。

やはり限界@Excel

ここ数日,データベース的研究に取り組んでいる。トータル18万行のデータ。

Excel関数で処理することは早々に諦めたので,昨日はマクロで動かすことを試みていた。18万行のデータは12個のリストに分かれているので,それぞれのリストの一致する名前を照合するマクロ。ちなみに,名前は表記揺れを含めてfirst nameが3つ,last nameが4つある。そのどれかが一致する場合,IDを結合する。そんなマクロ。

一日かけて,書き上げたのである。最初は簡単にFindメソッドを使うことを考えていたのだが,これだと処理が面倒になる。というか,ちゃんと照合できるアルゴリズムが思いつかなかった。なので,ifを死ぬほどネストさせ,一つの名前を他のすべての名前と照合し,一致するものを見つけ,それをすべての名前について繰り返すという,ちょっと考えただけで実行に何分かかるんだ的なマクロ,書き上げたのである。

結果。マクロ終了までに10日以上かかることがわかりました。ぬはっ。

確かに,ifを死ぬほどネストさせてforで18万回繰り返し,それをまた18万回繰り返すんだから,それぐらいかかるわな。いやはや。

そんなわけで,今日から楽しくSQLの勉強をしている。

いや結局,SQL以外の方法ではできないということが分かったんで,それだけでも良かった。諦めてSQLを覚える踏ん切りがついた。ま,ちょっと見た感じでは,Left Joinにwhereで条件をうまくつければできるはずなので,難しくはないはずだ。

今度からは,専攻は「西洋経済史」ではなく「SE」にしようかと思う。むはは。

6/6

今日も研究ネタを一つ。

今進めているネタの目標は,16-19世紀のイギリスのいろんな記録から,中産階級と呼ばれた人たちがいかに発生し,どのように人たちを中心として変化していったのかを明らかにすることである。

で,ようやくデータ集めが終わった。

選挙人名簿やら商工人名録やら教区簿冊やら,結局のところ12種の史料,トータル18万行のデータとなった。この中から重複する個人を抽出し,グループ分けすることが次の作業となる。

ただ,Excelではもうこの規模のデータを扱うことは全くできない。なので,SQLiteを使ったデータベースを構築し,データベース作業はすべてこのデータベースで行うこととしたのだ。

ただ,たいしたクエリは書かないとは言え,すべてコマンドラインから操作するのはメンドクサイので,NavicatというGUIフロントエンドを導入した。サポートページには「もうSQL書かなくても良いよ」的なことが書いてあったのが決め手。いちいちターミナルから入力するのメンドクサイ。
Sqlite3
が,しかし。やはりSQLの構文を理解していないと何も書けないのだった。はーっ。

しかしまぁ,それは十分想定していたことではある。すでにSQLの入門書も買ってある。なので,今日はいろんな雑事の合間にSQLでクエリを書いていたのだが,,,

SQL結構簡単。Select文でInner JoinしてCreate Viewでビューにすりゃあいいんじゃん。ほっほっほ。

しばらく前に,「Objective-CをマスターしてMac用アプリケーションを作ろう」プロジェクトを進めていたせいで,VBAだとかSQLがやたらと簡単に感じる。ちゅーか,Inner Joinよりもwhere句でandした方が複数条件は簡単なのか。ほほ。

まだやりたいことが完全にできるわけではないが,これならばそれほど時間かからずにデータ処理も終わりそうである。決めた。これからはもう,ExcelではなくSQLiteを使おう。

なんだか業界のSEと化しつつある今日この頃だ。

3/8

さて。

天気が良いこの時期。昼前から六甲経由で大学まで行った。要するにバイクでプチツーリング。

ちょうど芦屋の辺りを走っていたとき、信号待ちで停車。ぼーっと待っていたんだが、ふとどこからか人が呼ぶような声が聞こえた。

思わずキョロキョロしたんだが、信号が青になったので発進。で、少し走ってまた信号待ち。

すると、またどこからか声がするではないか。

しかも、良く聞いてみると「かっこいー」とか「ねぇねぇー」と言ってるような。

、、、

はて?

、、、

後ろを走っていた青いフィット。その窓から、坊主頭の少年が手を振っていたのであった。「かっこえーなー、バイクー」ときたもんだ。

照れるじゃないか少年よ。

、、、

あまりに目を輝かせて見てるので、手を振るとスッゴイ勢いで振り返してくれた。振りすぎじゃないのか。

そんなこんなで、微妙な体験をしつつ、今もPCの前で格闘しているわけだが、うーむ。

かねてからのデータベースは、徐々にAccess化しつつあるのだが、学会には間に合わないかも知れないので、Excelでも同様の作業を進めている。のだが。

やっていることは特に統計的に難しい事はしておらず、単にクロス集計なわけだが、単純な作業もデータが膨大だとエライことになる。

しばらく前から、配列数式という技を覚えて、ちょくちょく使っている。これはピボットテーブルを使わずに、簡単な関数で同様の結果を得られるので便利に使っている。ところが、、
Excel1
やたらとメモリを食うらしい。

使っている関数はsumにifだけなのだが、140個ほどこの関数を並べるとこのザマである。

さらに、いましている作業は、元データだけを別ファイルにまとめて、分析はまた別のファイルから元データのファイルにリンクして作業している。だが、この状態で配列数式を使うと「別ファイルにリンクしたままでは保存できません」とくる。 ムム、ムムムム、、、、

やはりもう、Excelでは限界か。

しかし、2時間頑張った結果が「保存できません」はサギじゃないのか。なんだかもう、、、



寝る。


3/6

さて。今日もPC前で忍耐力の限界に挑戦している。データベースが専門のヒストリアン、ワダです。

そろそろ頭が沸いてきた今日の課題は、AccessがExcelのリストをちゃんとインポートしてくれないという問題である。なんか変なデータが混じる。これはバグなのか。それともこっちのAccessスキルが足りてないだけなのか。

、、、

なんだか。

すでにExcelで扱うには、メンドクサ過ぎるデータ量なので、なんとか早めにAccessを使えるようになりたいのだが、いかんせん、来月の学会まで約一ヶ月であり、別の某学会への申込期限は今月末である。それまでになんとかしなければいけないというのは、なんかもうちょっと、、、

いいか。Excelで。

と、思わず呟きたくなってきているわけである。いかんいかん、そんなことは絶対にいかーん。空しいプライド。

Accessを使うにしても、やりたいことはなかなかに高度なのである。そんなことができるほどにAccessを使いこなせるようになるには、それなりの時間が必要なわけであって、そんな時間がかかるのであれば、Excelでシコシコ進めるのと時間的には差はない、、、

いかんいかん、そんなことは絶対にいかーん。
空しいプライド。

、、、

なにやら、しばらく前にVBAで経験したような危機が、またもや迫ってきているような気がする。ピンチである。ムムム。

しかしもう、なんだか。

やる気が。

これ以上書いていたらマズイ気がするので、今日はここまで。

2012年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ