SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java開発者のためのCurl入門(AD)

Java開発者のためのCurl入門-CSVファイルの読み込みとグラフ表示

第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

2.読み込みんだデータをグラフにする

 前回の記事では、データを作成しグラフを表示するには次のようなコードを記述しました。

LayeredChartを使用し、バブルグラフを表示するコード
{LayeredChart
    width = 15cm
    , height = 7.25cm
    , left-axis = {new {NumericDataSeriesAxis-of float}
        , {ChartDataSeries records, "height"}
        , force-zero? = false
        , force-range? =  true
        , forced-min = 130
        , forced-max = 210
    }
    , {BubbleLayer
        records
        , "height"
        , scatter-shape = "ellipse"
        , x-axis-data = {ChartDataSeries records, "name"}
        , primary-size-data = {ChartDataSeries records, "bmi"}
        , secondary-size-data = {ChartDataSeries records, "bmi"}
    }
}

 上記コードのrecordsという変数は、RecordSetのインスタンスです。一方、CSVファイルデータを読み込んだデータを表すCsvRecordSetクラスはRecordSetを継承しているため、上記とまったく同じコードを記述するだけで対応できます。recordsという変数の位置にCsvRecordSetのインスタンスを渡せばグラフ化が可能です。

 Javaなどでは、CSVファイルを扱うモジュールとグラフ化を行うモジュールが、異なるモジュールであるのが一般的なため、その間には型変換を行う処理が必要になってきます。しかし、Curlの場合、統一されたAPIとして提供されているので、スマートにデータの連携が行えます。

 しかし、これだけのコードでは、CSVのデータにBMI値が含まれていないためエラーになってしまいますので、BMI値を計算し設定する必要があります。CsvRecordSetのインスタンスにBMI値を設定するコードは次のようになります。

CsvRecordSetにBMI値をセットするコード
{for record:Record in records do
    set record["bmi"] = record["weight"]/((record["height"]/100)*(record["height"]/100))
}

 これは、全レコードに対して、体重と身長からBMI値を計算し、設定するというコードです。RecordSetクラスは、JavaのMapのように、キーを指定してアクセスできます。

 コード全体は次のようになります。

コード全体
{curl 6.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{import * from CURL.GUI.CHARTS}
{let records:CsvRecordSet =
    {CsvRecordSet
          {url "data.csv"}

          || ヘッダが存在する場合は、ヘッダの行数を指定する
        , header-line-count = 1

        , fields = 
            {RecordFields
                {RecordField "name",   caption = "Name", domain = String}
              , {RecordField "height", caption = "height", domain = int}
              , {RecordField "weight", caption = "weight", domain = int}
              , {RecordField "bmi", caption = "bmi", domain = int}
            } 
    }
}

|| BMIの計算と値の設定
{for record:Record in records do
    set record["bmi"] = record["weight"]/((record["height"]/100)*(record["height"]/100))
}

{LayeredChart
    width = 15cm
    , height = 7.25cm
    , left-axis = {new {NumericDataSeriesAxis-of float}
        , {ChartDataSeries records, "height"}
        , force-zero? = false
        , force-range? =  true
        , forced-min = 130
        , forced-max = 210
    }
    , {BubbleLayer
        records
        , "height"
        , scatter-shape = "ellipse"
        , x-axis-data = {ChartDataSeries records, "name"}
        , primary-size-data = {ChartDataSeries records, "bmi"}
        , secondary-size-data = {ChartDataSeries records, "bmi"}
    }
}

次のページ
3.サーバーサイドのデータをグラフ化する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Java開発者のためのCurl入門連載記事一覧

もっと読む

この記事の著者

木村聡(キムラサトシ)

2000年からJavaによるWeb開発に携わる。Seasarプロジェクトコミッタであり、コミッタとしての経験をもとに現在は仕事としてフレームワークの開発を行っている。著書に、「Javaフレームワーク開発入門」や「Eclipseで学ぶはじめてのJava」等がある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3542 2009/02/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング