ラベル Programing の投稿を表示しています。 すべての投稿を表示
ラベル Programing の投稿を表示しています。 すべての投稿を表示

2017-10-30

AIについて

AIについて書いてみる

正直なところ、Deep learning祭りが、こんなにも盛り上がるとは思わなかった。囲碁や将棋で人間を打ち負かせたり、Googleの音声認識や翻訳が劇的に改善したりと、Deep learningは、要素技術として実用段階に近づきつつある。

がしかし、私の考えでは、ビジネスで使えるためには、もう少し時間がかかると思う。

理由は、技術が未成熟といよりも、ビジネス側の受け入れ準備が整っていないことにある。AIを入れるためには、AIを動かせるような体制やデータの準備が必要だ。

考えてみれば、当たり前のこと。AIで将棋や囲碁のプロを打ち負かすために、Googleは一体いくらのお金を費やしたのだろうか?Deep learningが、ネコの画像をネコと見分けるために、研究者は、一体どれだけの時間と労力を費やしたのだろうか?Deep learningの効果は、Deep learningを仕込んだ人たちの労力と、それ自身の性能をセットで考える必要があると思う。

実は、ここ数か月、業務効率改善のために、Deep learningが使えないか模索していた。結論は、単純だった。ビジネス側の準備が整っていない。

ビジネス側の準備を整えずに、AI(もどき)を導入した企業の話も聞いてみた。答えは、みんな同じだった。AIは、ロクな働き方をしないと。

AIは、何もしなくても賢くなる道具ではない。AIを賢くするためには、ちゃんと手をかけて育てなければならない。人間がバカだと、AIもバカになる。それだけのこと。

AIは、使う人の能力次第。
ここまで来て気がついた、よく働くAIを作るのは、子育てと全く同じだと。

2011-10-12

IBM大和研究所講演会

今日は、どーーいういきさつがあるのか、少しは分かるけど、完全には分からないのですが、わたしの勤め先にIBMの大和にある研究所のお偉いさんが、最新のDBテクノロジーのご紹介にいらっしゃいました。

インターネットが発達した昨今、何かといえば、大規模データの分析がどーーのという話になりますよね。で、その大規模データを集めたり処理したりするとき、最近では、こーーーするのが最新テクですよ的な話なのです

で、テクのほうですが、HadoopとMapReduceの説明と、これらを実装したIBMの製品の紹介を受けました。個人的には、Hadoopってよく聞くけど、具体的にはいったいナンなんですか?という感じだったのです。で、どーーーやら分散処理、とくにペタスケールでデータ処理するときに使う、処理フレームがHadoopとMapreduceですよ、ただし、RDBMのようにはいきませんよ、的な感じだったと思われます、たぶん。

で、テクでないほうの説明もありました。何かといえば、大規模データがあれば、意思決定に役立つよね、、、といういつものヤツです。IBMのデータ処理基盤を整えて、データ分析すれば、金儲けに役立つよ、こんな例もアンな例もありますよ、、、、といろいろ事例を挙げて説明してくださいました。IBMの人は、Deep AnalyticsとBig insightsとかいってました。

そんなことで、もろもろ3時間くらいわたり、さすが外資だけあり、ひじょーに流暢なプレゼンをうけたのです。で、さいごの質疑応答で、いつものように質問をしたのでした。

わたくし
「新しいDBをつかえば大規模処理ができるのはわかったのですが、肝心のBig Insightsはいったい誰がしらべるんですか。IBMで何かそれを調べるサービスがあるんですか?」

IBMの人1
「えーーーと、うーーーん、基本的にはシステムを導入したお客さんですが、、、、ええーーーーと、ええーーーと、IBMでもいろいろサポートはできますが、、、、えーーーとええーーと、そうですね、サポートはできますが・・・・・」


IBMの人2
「うーーーん、そーーですね、、、、研究所でも、テキストマイニングとか各種数理技術とか、20年来の研究成果があるので、いろいろサポートはできます。ええーーーと、具体的にお話を承って、御社とさらに深い関係を構築していけば、いろいろとお互いメリットを発揮できるかとおもいます、、、どーーーのこーーーのーーーー・・・・・・うーーん、なんか、あまりお答えになってない気がしますが、、、、ごにょごにょごにょ」

気軽に聞いただけなのですが、なんかマズイことを聞いてしまったようで、みょーに答えにくそうな感じでした。

まあ、個人的には、Hadoopが何ものかが、なんとなーーく分かったので、ラッキーな講演会なのでした。

---------------

しかし、最近、気持ちに余裕があるのか、期末の考課の季節だからか、いろんな出来事が続いたからか、色々と釈然としないことが多い。思うところは色々あるけど、もう、各方面に対して、やさしい大人の対応、というかいい顔をすることも限界って気がしてきたな・・・

2008-12-14

書き込み式SQLのドリル―ドンドン身に付く、スラスラ書ける

書き込み式SQLのドリル―ドンドン身に付く、スラスラ書ける (単行本)
山田 祥寛
ソシム (2006/03)

ホントに、どんどん身につきますよ!!

やっぱり、ぼんやり参考書を見ているよりも、色々書いてみた方が、身につきますね。まあ、もっと複雑な問い合わせってあるのでしょう。しかし、ひとまず、このレベルをマスターすることが、大切なのだと思います。

SQLって、普通のプログラム言語よりも単純そうだけど、なんだかとっつきにくいよなあ、なんて思っている人に、最適だと思います。

エクセルオブジェクトを変数に取り込む方法

エクセルシートを、Worksheetオブジェクトに代入して、連続的に取得する技
いちいち
Applcation.Workbooks(1).Worksheets(1).delete
と書くのって面倒

Dim mysht as worksheet

とオブジェクト変数を宣言しておいて

Set mysht = Application.Workbooks(1).Worksheets(i)

と、オブジェクト変数に、Worksheetオブジェクトをゲットしておけば

mysht.delete

とコードの作成が簡単
しかも、Worksheetオブジェクトに代入しているから、コードの補完機能も利用できる。まあ、With文でも書けるけど。
でも、なんとなく、こっちの方がスキ。

====================================================

Sub Get_worksheet()

Dim i As Integer
Dim j As Integer

'worksheetsではなく、worksheetをオブジェクトに指定する
Dim mysht As Worksheet

'WorkbooksにあるWoeksheetsの数をカウント
(Worksheetsコレクションのメソッド)
j = Application.Workbooks(1).Worksheets.Count

For i = 1 To j - 1
'worksheetオブジェクトに、Worksheetsオブジェクトの番号を指定して代入。
Set mysht = Application.Workbooks(1).Worksheets(i)

'警告を非表示
Application.DisplayAlerts = False

'例えば、シートを削除してみる
mysht.Delete

'一応、オブジェクトを開放
Set mysht = Nothing

Next i

MsgBox ("終了")

End Sub

====================================================

こんな感じデス。

Access VBAでExcelシートを操作するTips

アクセスのクエリーで抽出したデータを、エクセルシートに貼り付けることって結構ある。でも、データの種類が沢山あると、作業が怖ろしく大変。

しかも、悪いことに、この手の作業って簡単だから、誰でも出来ちゃう。その結果、一生懸命やったところで、出来て当たり前って顔されて、アホみたい。

そこで、クエリーからのデータの抽出を、SQLをループで生成して、そのつど、アクセスのモジュールで生成したエクセルのインスタンスを通じて、 エクセルシートにクエリーの結果を出力できれば、超簡単。しかも、正確。その上、早い。クエリーの結果を、エクセルシートに出力するのが、テクニックのポ イント。マクロで、クエリーの結果をエクセルシートに出せるけど、あれだと、クエリーの条件を連続的に変えられないし、シート名も指定できないから、不 便。

(事前準備) 
事前バインディングを設定する
(モジュール→ツール→参照設定→Microsoft Excel 11.0 Object Libraryにチェック)

(注意)
実行時バインディングだと、コードの補完機能が効かないので、不便。事前バインディングの方がよい。


---------------------------------------------------

Public Sub OutPut_to_xls()

'エクセルへのインスタンス
Dim xlapp As Excel.Application
Dim mysht As Worksheet

'制御変数
Dim i, j As Integer

'レコードセット関係
Dim rst As ADODB.Recordset
Dim cn As ADODB.Connection


'========================================
'プログラムの開始
'========================================


'各種インスタンスを確立
Set rst = New ADODB.Recordset
Set cn = CurrentProject.Connection
Set xlapp = New Excel.Application


'========================================
'エクセルの操作
'========================================


'フルパスを指定してエクセルを開く。その後、新シートを追加
With xlapp
.Workbooks.Open ("J:\My_files\CreateObject\test.xls")
.Worksheets.Add
End With

'(注!!)Activeworkbook.Activesheetをつかうと、エクセルのインスタンスを閉じることが出来ないから、つかっちゃ だめ。コレがわからなくて、エクセルインスタンスが閉じず苦労した!!これって、MSのバグだよね。つめり、Activesheetを
'Set mysht = ActiveWorkbook.ActiveSheet
'って設定するとダメデスYo!


'インデックスを指定して、シートオブヘクトへ代入しよっと
Set mysht = xlapp.Workbooks(1).Worksheets(1)
'シート名を指定(重複するとエラーだよ)
mysht.name = "test5"

'レコードセットを開く
rst.Open "crs1", cn, adOpenKeyset, adLockOptimistic


'表頭をコピー(Cellプロパティーを使うと、エラーを出す噂も・・・・)
For i = 0 To rst.Fields.Count - 1
mysht.Cells(1, i + 1).Value = rst.Fields(i).name
Next i

'レコードセットの内容をコピー
mysht.Range("A2").CopyFromRecordset rst

'CopyFromRecordsetを使わない方法
'まずクエリーの最終列まで、Fieldプロパティーのインデックスを使ってアクセス。その後、次の行へカーソルを動かす。これを、最終行まで繰り返す。EOFがTrueになったら、ループ脱出。
'j = 2
'rst.MoveFirst
'Do Until rst.EOF
' For i = 0 To rst.Fields.Count - 1
' mysht.Cells(j, i + 1) = rst.Fields(i)
' Next i
' rst.MoveNext
' j = j + 1
'Loop


'==================================
'ここから先は、終了処理
'==================================


'レコードセットと、接続を閉じる
rst.Close
cn.Close

'エクセルシート関係も保存して閉じる
'保存する時は、インデックスをちゃんと指定しましょう
xlapp.Workbooks(1).Save
xlapp.Workbooks.Close
'エクセルインスタンスを閉じる
xlapp.Quit

'各種インスタンスを開放
'(ちゃんと開放しないと、メモリーにゴミが残っちゃうよ)
Set rst = Nothing
Set cn = Nothing
Set mysht = Nothing
Set xlapp = Nothing

End Sub

---------------------------------------------------

(備考)
エラーが出現したら、エラートラップで、エクセルのインスタンスを終了しないとダメ。じゃなきゃ、エクセルの