読込と同時に計算する(CSVファイルをADOで扱う⑦)


CSVファイルをADOで扱う連載の7回目です。前回の記事はこちらになります。

hirocom777.hatenadiary.org

読込と同時に計算する

 前回は、SQLを指定してCSVファイルを確認できるツール(CSV_ReaderSQL)で行を選択して読み込んでみました。列の選択に加えて行の選択もできるとあれば、色々な応用方法が考えられます。

f:id:HiroCom777:20210417202750j:plain

今回は、読込と同時に読み込んだ内容を計算した結果も表示してみましょう。これができると色々なことに応用できそうです。読み込んだ後の処理が簡単になりますし、元のファイルサイズはコンパクトで済みます。ツールは以下からダウンロードしてください。

CSV_ReaderSQL110.zip - Google ドライブ

身長、体重からBMIを計算する

 BMIを求めてみましょう。BMIとは人間の肥満度を肥満度を数値的に表した指数です。身長(m)と体重(kg)から算出されます。数式は以下の通りです。

 BMI = 体重 ÷ (身長×身長)

BMIが18.5~25だと標準体重。これより少ないと痩せすぎ、多いと太りすぎです。

以下のデータをご用意しました。前回と同様にコピーしてメモ帳などに貼り付けて名前を指定して保存してください。身長と体重の記録です。ファイル名は'健康診断.csv'としましょう。作ったファイルは任意のフォルダー下に保存してください。

"ID","名前","身長","体重"
"1","菅澤 亮","1.70","65"
"2","岡本 那奈","1.65","62"
"3","合田 光博","1.82","82"
"4","片平 由美子","1.53","60"
"5","片桐 徹平","1.73","69"

前回と同じようにCSV_ReaderSQLでフォルダーを指定して、SQLコマンド欄に以下を入力して実行ボタンを押します。

  SELECT 名前,体重/(身長*身長) AS BMI FROM [健康診断.csv]

結果は以下の様になりました。

名前 BMI
菅澤 亮 22.49134948
岡本 那奈 22.77318641
合田 光博 24.75546432
片平 由美子 25.6311675
片桐 徹平 23.05456246

それぞれのBMIが算出されました。この例では乗算(*)、除算(/)を使用しましたが、当然、加算(+)、減算(-)も使用できます。また計算式の後にある'AS BMI'ですが、計算結果を表示した列名の指定です。

今回のデータも前回同様数値を文字列で表しています。しかし、数式の中では自動的に数値に置き換えられるので数値変換の必要はありません。当然数値に変換できないデータがある場合エラーとなります。

表示される数値の桁数を指定したい場合にはROUNDを使用します。小数点以下2桁までの表示にしてみましょう。SQL文を以下の様にして実行しなおしてみてください。

  SELECT 名前,ROUND(体重/(身長^2),2) AS BMI FROM [健康診断.csv]

結果は以下の様になりました。表示がすっきりしましたね。

名前 BMI
菅澤 亮 22.49
岡本 那奈 22.77
合田 光博 24.76
片平 由美子 25.63
片桐 徹平 23.05

ADOのSQLで使用されるROUNDは'銀行型'(端数の中間値5を、もっとも近い偶数に丸める。整数に丸める場合、0.5は0となり、1.5は2となる。)が使用されます。他の処理系と結果が異なることがあるので注意しましょう。また、'身長*身長'が'身長^2'に変わっています。'^'はべき乗を意味しますので計算結果に変わりはありません。

その他の関数

 その他にも数値の計算に使える関数があります。組み合わせることでさまざまな計算が可能です。

  • ABS  指定した値の絶対値を返します。

  • SQR  指定した値の平方根を返します。

  • SIN,COS,TAN  指定した値の三角関数を返します。ラジアンで値を指定します。

  • LOG  指定した値の自然対数(底がe)を返します。常用対数(底が10)を使用する場合は、この値をLOG(10)で割ります。

次回は文字データ

 今回は、色々な計算に挑戦してみました。これはかなり使えるんじゃないですか?次回は文字データの扱い方について取り組んで見ようと思います。お楽しみに!!

hirocom777.hatenadiary.org

CSVファイルをADOで扱う連載記事はコチラからどうぞ