加工データの汎用形式出力

全都道府県の総人口と、65歳以上の人口がTAB区切り形式で記録された データファイル age65.dat がある。これを読み込み、65歳以上の人口比率の高い順に並べ換えた 結果をCSV形式・タブ区切り形式で出力し、他のソフトウェアで利用 してみよう。

CSV形式の利用

CSVの出力

結果をCSV形式で出力するプログラムは以下のようになる。

age65csv.c

#include <stdio.h>
#include <stdlib.h>
#define BSIZE	100
#define PMAX	50

struct age65 {
  char	pref[20];
  int	total;
  int	over65;
  float	ratio65;
};

int compare_age65(const void *x, const void *y)
{
  struct age65 *a = (struct age65 *)x;
  struct age65 *b = (struct age65 *)y;
  float epsilon = 0.00002;
  if (a->ratio65 - b->ratio65 > epsilon)
    return -1;
  else if (b->ratio65 - a->ratio65 > epsilon)
    return 1;
  else
    return 0;
}

output_csv(struct age65 x[], int n)
{
  int i;
  for (i=0; i<n; i++) {
    printf("%s,%.3f\n", x[i].pref, 100*x[i].ratio65);
  }
}

int main(int argc, char *argv[])
{
  int n, fields;
  FILE *fp;
  char buf[BSIZE];
  struct age65 data[PMAX];
  if (argv[1] == NULL) {
    fp = stdin;
  } else {
    if (NULL == (fp=fopen(argv[1], "r"))) {
      fprintf(stderr, "%s ファイルを用意しといてね(^_-)\n", argv[1]);
      exit(1);
    }
  }
  /* 読み込み開始 */
  n=0;
  while (NULL != fgets(buf, BSIZE, fp)) {
    fields = sscanf(buf, "%19s %d %d",
                    data[n].pref, &data[n].total, &data[n].over65);
    if (fields == 3) {
      data[n].ratio65 = (float)data[n].over65/data[n].total;
      n++;
    }
  }
  if (fp != stdin)
    fclose(fp);
  qsort(data, n, sizeof data[0], compare_age65);
  output_csv(data, n);
}

このプログラムにデータを与えて実行した結果をファイルに保存しよう。

gcc -o age65csv age65csv.c
./age65csv age65.dat > output.csv
less output.csv             (中味を確認。qで抜ける)

CSV形式の読み込み

作成したデータファイル output.csv を StarSuite で読み込んでグラフ化してみよう。

ooffice output.csv

「テキストのインポート」ウィンドウが現れるので、

が選択されるように注意してから [OK] をクリックする。

1位〜10位をグラフ化してみよう。以下のようにする。

  1. 1位〜10位を領域選択
  2. メニュー → 挿入(I) → グラフ(A)
  3. [選択] : [レ] 最初の列を項目名に引用(E)
  4. [グラフの機能] : [レ]テキスト部分の表示 / 棒グラフを選択
  5. [バリエーション」 :
  6. [表示] : 軸のタイトル → 〜タイトルを適当につける〜

[完了] を選ぶとグラフオブジェクトが挿入される。錨マーク(アンカーボタ ン)を押すとスプレッドシート内に定着する。

画像化(JPEG化)

グラフを画像化すればWebページなど広い範囲で利用可能になる。 最も汎用性の高いJPEG形式にしてみよう。グラフを定着化した状態で グラフオブジェクトを選択し、C-c でコピーする(右クリック → コピー(C)でも良い)。

メニュー → ファイル(F) → 新規作成(N) → 図形描画(D)

で図形描画ソフト Draw を起動。C-v をタイプして グラフを張りつける。これをJPEG形式に「エクスポート」すれば良い。

メニュー → ファイル(F) → エクスポート(E)

保存した画像ファイルは、余白が大きすぎたりすることがあるので、 GIMPなどの画像処理ソフトで余白を切り取っておくのが良い。 エクスポートした画像のファイル名が foo.jpg だとすると、 これをGIMPで編集するには、

gimp foo.jpg &

としgimpを起動する。道具箱からカット (CUT) を選択し、切り取りたい領域を指定して、「切り抜き」をクリックする。 もう一度ファイルを保存(C-s)すれば切り抜いたものが完成する。


目次