【達成感を感じてもらえた】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をしたいです。