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を作るのは、子育てと全く同じだと。
2017-10-30
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が何ものかが、なんとなーーく分かったので、ラッキーな講演会なのでした。
---------------
しかし、最近、気持ちに余裕があるのか、期末の考課の季節だからか、いろんな出来事が続いたからか、色々と釈然としないことが多い。思うところは色々あるけど、もう、各方面に対して、やさしい大人の対応、というかいい顔をすることも限界って気がしてきたな・・・
インターネットが発達した昨今、何かといえば、大規模データの分析がどーーのという話になりますよね。で、その大規模データを集めたり処理したりするとき、最近では、こーーーするのが最新テクですよ的な話なのです
で、テクのほうですが、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が何ものかが、なんとなーーく分かったので、ラッキーな講演会なのでした。
---------------
しかし、最近、気持ちに余裕があるのか、期末の考課の季節だからか、いろんな出来事が続いたからか、色々と釈然としないことが多い。思うところは色々あるけど、もう、各方面に対して、やさしい大人の対応、というかいい顔をすることも限界って気がしてきたな・・・
ラベル:
Programing
2008-12-14
書き込み式SQLのドリル―ドンドン身に付く、スラスラ書ける
書き込み式SQLのドリル―ドンドン身に付く、スラスラ書ける (単行本)
山田 祥寛
ソシム (2006/03)
ホントに、どんどん身につきますよ!!
やっぱり、ぼんやり参考書を見ているよりも、色々書いてみた方が、身につきますね。まあ、もっと複雑な問い合わせってあるのでしょう。しかし、ひとまず、このレベルをマスターすることが、大切なのだと思います。
SQLって、普通のプログラム言語よりも単純そうだけど、なんだかとっつきにくいよなあ、なんて思っている人に、最適だと思います。
ラベル:
Programing
エクセルオブジェクトを変数に取り込む方法
エクセルシートを、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
====================================================
こんな感じデス。
いちいち
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
====================================================
こんな感じデス。
ラベル:
Programing
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
---------------------------------------------------
(備考)
エラーが出現したら、エラートラップで、エクセルのインスタンスを終了しないとダメ。じゃなきゃ、エクセルの
しかも、悪いことに、この手の作業って簡単だから、誰でも出来ちゃう。その結果、一生懸命やったところで、出来て当たり前って顔されて、アホみたい。
そこで、クエリーからのデータの抽出を、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
---------------------------------------------------
(備考)
エラーが出現したら、エラートラップで、エクセルのインスタンスを終了しないとダメ。じゃなきゃ、エクセルの
ラベル:
Programing
登録:
投稿 (Atom)