Funny Walking

人の個性への好奇心

【達成感を感じてもらえた】Perl入学式 in東京 秋開講 第4回 〜リファレンス編〜 #Perl入学式

サポーター参加してきましたので、ふりかえりをしていきます。

今回はリファレンスというデータ構造を学んでいく回です。比較的難しい回ですが、みなさん躓くことなく終えられて良かったと思います

イベントの詳細はこちらです。

perl-entrance-tokyo.connpass.com

良かったこと

前回と比較して、参加者の方に積極的に話しかけることが出来ました。

講義が終わったあと、「今日の講義はいかがでしたか?」と尋ねたところ、「コードをコピペすれば動かすことは出来たが、なぜ動いているのかまでは理解が出来なかった。復習していきたい」と仰っていました。

ただ、「これまでの回で学んだ知識を使ってプログラミングを出来るようになった。少しずつ継続して、仕事でも活かしてみたい」と言って貰えたのは嬉しかったです。

みなさん、勉強熱心だなぁと感心しました。自分も、次の仕事を頑張ろうと思います!

感じた課題

リファレンスを使った実用的なコードは一体どんなものでしょう?

経理で売り上げデータを集計する想定のスクリプトを考えてみました。

スクリプト

  my $fh = shift;
  my @headers;
  my $json_data = {};
  my $is_header = TRUE;
  while (<$fh>) {

    # 改行コードはデータ処理に不便なことが多いため、削除
    chomp;

    my @row = split /\t/, $_;

    # ヘッダ情報は後で使うので保存
    if ($is_header) {
      $is_header = FALSE;
      @headers = @row;
      next;
    }

    # データの列名をkeyにし、項目をvalueにしたハッシュ(行ハッシュ)を作る
    my %hash;
    @hash{@headers} = @row;

    # 集計項目
    my $key = 'data';

    # 集計配列の初期作成
    $json_data->{$key} = [] unless exists $json_data->{$key};

    # 集計配列へ、作成した行ハッシュを追加
    push @{$json_data->{$key}}, \%hash;
  }

  # JSONデータへ変換
  return to_json($json_data, {utf8=>1, pretty=>1, canonical=>1});

TRUE, FALSEの定義は、上記スクリプトの定義エリアでやってます。

use constant {
  TRUE  => 1,
  FALSE => 0,
};

元となるTSVデータ(年ごと、月ごと、日単位の売り上げ)

year  month   day profit
2019    01  01  1000
2019    01  02  1500
2019    02  01  2000
2019    02  02  2500
2020    01  01  1000
2020    01  02  1500
2020    02  01  2000
2020    02  02  2500

集計後のデータ

{
   "data" : [
      {
         "day" : "01",
         "month" : "01",
         "profit" : "1000",
         "year" : "2019"
      },
      {
         "day" : "02",
         "month" : "01",
         "profit" : "1500",
         "year" : "2019"
      },
      {
         "day" : "01",
         "month" : "02",
         "profit" : "2000",
         "year" : "2019"
      },
      {
         "day" : "02",
         "month" : "02",
         "profit" : "2500",
         "year" : "2019"
      },
      {
         "day" : "01",
         "month" : "01",
         "profit" : "1000",
         "year" : "2020"
      },
      {
         "day" : "02",
         "month" : "01",
         "profit" : "1500",
         "year" : "2020"
      },
      {
         "day" : "01",
         "month" : "02",
         "profit" : "2000",
         "year" : "2020"
      },
      {
         "day" : "02",
         "month" : "02",
         "profit" : "2500",
         "year" : "2020"
      }
   ]
}

今回は、ただ変換しただけですね。。!JSONにしてから集計したりするのもアリですが、TSVから集計するのも全然アリです。

改善したいこと

相手のやりたいことを一言で要約して、最短で目的に辿り着けるお手伝いをしたいです。

つまり、人間版のSEOをしたいです。