🦉

Junc Times #1: 2022年12月号

2022/12/31に公開

https://twitter.com/u_ribo

一言

年の瀬で仕事が落ち着いたこともあり、ローカル環境のRを4.2.1から4.2.2へアップデートしました。
R4.1系から利用できるようになった無名関数の記法\(x)もそろそろ体に覚えさせたいです。

記事

  • [Julia][Python][link]工学全般で要となる線形代数の演習講義において、PythonとJuliaの特徴を比較する内容。学生が自らコーディングを行う点を考慮すると癖の少ないJuliaが良さそうに思える。
    • 実際に大阪大学の数値計算系の講義でJuliaが使われており、それを紹介
    • 他の講義との関係を考えても複数言語の特徴や違いを理解できてよいのかしらん。
  • [Python][link]定期的に上がってくる、Pythonでの環境構築のまとめ。Python本体のバージョン管理、パッケージ管理、フォーマッターだけでなく、エディタやテスト機能にも焦点を当てている点がユニークに感じた。
  • [R][link]多様化しているRでのcsv読み込み方法の比較記事。各手法の特徴を簡潔に説明している。
    • 自分の中で固まってしまっているものがあって、そういうものでも新しい情報に更新しないといけないなと反省

話題

  • Twitterのゴタゴタの影響か、Hadley WickhamがTwitterからfosstodonへの引っ越しを宣言。そちらのアカウントも@hadleywickham
  • サッカー大好きNakagawaraさんが日本国内のプロサッカーの「戦術分析」と「データ化」に焦点を当てたニュースレター「Shogun Soccer」を開始。データ可視化のところでRが使われる機会がありそう。サッカー⚽そのものだけでなくスポーツ分析に興味がある人は要チェック👀

ニュース

  • [R][Python] RStudioの最新版 "Elsbeth Geranium"
    2022.12.0+353がリリース。ダウンロードはこちらから。
    • リリースノートから気になる点を抜粋。
      • RStudio起動時、スプラッシュ画面としてロゴマークが表示されるように
      • コード・コンソールパネル内で色の文字列("red"とか"tomato"とか)やRGBによるカラーコード(#FF0000や`#0000FFなど)が与えられた時に色がプレビュー表示される。
        • この機能を無効化(ないしは有効化)したい時は、RStudioメニューのGlobal Options > Code > Display > enable preview of named and hexadecimal colorsへのチェックをクリック
      • Shiny for PythonのためにRun appボタンが用意された。これによりボタン一発でアプリケーションをプレビューできる。
  • [R] Rでの関数型プログラミングを支援する{purrr}パッケージのバージョン1.0.0がリリース。リリースを告知するブログ記事が出ている。
    • 第一印象では、まだメジャーバージョンになっていなかったのかと。
    • マップ系の関数でプログレスバーを表示するオプションが追加。map(.progress = TRUE)とする(ただし簡単な処理では表示されない)。
    • purrrの主要な目的に沿わない関数は廃止されたので注意。
      • cross()関数はtidyr::expand_grid()関数で代用
      • map_dfr()関数、map_dfc()関数で行っていた処理はlist_rbind()関数、list_cbind()関数にそれぞれ取って代わる。複数のデータフレームを行結合する際にmap_dfr(id = )で変数を生成していたが、今後はlist_rbind(names_to =)で行うことになる
    • リストを編集して要素を削除する際はlist_modify()関数とzap()関数を組み合わせて使用する
    • ベース版のパイプ演算子を使った処理と無名関数の利用が推奨される
purrr 1.0.0でのリスト要素の削除方法
# 例を示すために2つのリストを用意
x1 <- x2 <- 
  list(a = 1, b = 2)

# purrrを使わずに要素を削除する
x1$a <- NULL
str(x1)
## List of 1
##  $ b: num 2

# purrrによるリスト要素の削除
x2 |> 
  purrr::list_modify(a = purrr::zap()) |> 
  str()
## List of 1
##  $ b: num 2
ベース版のパイプ演算子と無名関数を使った処理
1:10 |>
  purrr::map(\(mu) rnorm(10, mu)) |>
  purrr::map_dbl(mean) 
 [1]  1.675204  2.028044  3.139780  4.177435  4.812461  6.005095  6.834464
 [8]  7.628774  8.961753 10.181296
  • [Julia] Juliaの最新バージョン1.8.4がリリース
  • [Python] Scikit-learn 1.2.0がリリース。このバージョンではPython
    3.8から3.11をサポート

動画

  • [R][link]yutannihilationさんによるtidyverseの現状とこれからの方向性の個人的見解。
    • Japan.R2022でのLTの増補版。スライドも公開されている。タイトルは『タクティクスオウガ』から(私は知らなかったです)
    • 挙動が怪しい機能が改善、変化も少なくなり、tidyverse界隈は成熟期を迎えている。ユーザーが慣れてしまったために破壊的な変更を出来なくなっている。
      • 「tidyverseは機能というよりも、言語・文法を作っている」
      • yutannihilationさんとしては「(開発者の立場から)tidyverseはエキサイティングではなくなってしまった」。
    • tidyverseで使われているlifecycleの説明が丁寧。自分自身もlifecycleで関数を管理しているけれど完全に理解出来ている訳ではないなあと反省。
    • 機能の追加・変更に関して、おそらくPosit社内で議論・意思決定が行われている。一方でtidyupなるリポジトリ(これまでは積極的に利用されていない)があり、オープンに議論される場も用意されている。

学び

  • [R] {arrow}パッケージでcsvファイルを読み込む時、read_csv_arrow()関数またはopen_dataset()関数を利用することになる。csvファイルでは第1行目が列名であることがしばしばあり、{arrow}のこれらの関数でスキーマを指定してデータを読み込むと2行名以降の値とデータ型が異なる場合、エラーを起こす(例えばスキーマにarrow::schema(x = int64())と指定した場合、xが文字列であるためにエラーとなる)。
    • これを回避するにはエラーメッセージにある通り、第1行目をskip = 1で読み込みから除外する必要がある。
library(arrow)
read_csv_arrow("hoge.csv",
               as_data_frame = FALSE,
               schema = schema(
                 x = int64()
               ))
#> Error:
#> ! Invalid: In CSV column #1: CSV conversion error to int64: invalid value 'x'
#> ℹ If you have supplied a schema and your data contains a header row, you should supply the argument `skip = 1` to prevent the header being read in as data.

read_csv_arrow("hoge.csv",
               as_data_frame = FALSE,
               schema = schema(
                 x = int64()
               ),
               # 列名となるはずの1行目をスキップ
               # 列名はschemaから与えられる
               skip = 1)
  • [R][Python][Julia] Quarto(RMarkdownでも同様)でひとつのコードブロックに複数の出力を伴うコードを記述した場合、デフォルトでは出力のたびにコードの部分と分かれてしまう。なんとなく、締まりが悪い気がするときはcollapse: trueを指定し、出力結果をコメントとしてコード出力に収めてしまうのも良い。ただしplotの場合はコード部分に含めることができないので注意。

collapse: false
collapse: false

collapse: true
collapse: true

  • [R] {vroom}パッケージで複数のファイルを読み込む際、引数idに任意の文字列を指定することでその文字列が変数名、値にファイル名が格納される。
    • readr::read_csv()関数などでも{vroom}パッケージが使われている。なのでこの引数idの指定もread_csv()関数においても有効
  • [R] 処理の過程でユーザーにアクションを求め、その内容によって処理を分岐させる機能として、組み込み関数ではutils::menu()関数がそれに該当するが、usethis::ui_yeah()関数も利用できる。この関数にはいくつかのバリエーションがあって、ユーザーがYESを選択した場合にTRUE、NOを選択した場合にTRUEを返すように用途に応じて利用する関数を分けるられる。
if (usethis::ui_yeah("対象のファイルを全件ダウンロードしますか")) {
  # yes を選択した場合の処理を書く
  # ...
}

#> 対象のファイルを全件ダウンロードしますか
#> 
#> 1: Yeah
#> 2: No
#> 3: Negative
#> Selection: 

資料

  • [R][link] @paithiov909 さんによる『RとMeCabによる日本語テキストマイニングの前処理』 。テキストマイニングをRで行うには{RMeCab}パッケージな印象ですが、この資料では{gibasa}(@paithiov909さんが開発者)を使っているのが特徴です。{gibasa}では日本語文章をtidyな枠組み(入出力がデータフレーム)で分かち書きでき、dplyrでのデータ操作だけでなく、多くのテキスト分析のためのパッケージと組み合わせての利用が容易になる利点があります。
  • [Python][link] NTTコミュニケーションズ イノベーションセンターが時系列データ分析コンテンツ『ごちきか』を公開。チーム内で扱ってきた時系列データ分析のための前処理、可視化、モデリングなどの知見を整理したもの。『ごちきか』に関する発表記事では『ごちきか』公開までのいきさつや基盤、デプロイ方法について触れられている。

イベント

  • [R] 年末恒例Japan.Rが12月10日にオンラインで開催。今年はLT中心。私自身はTwitterでタイムラインを追っていました。
  • [R] こちらも年末の恒例行事、R研究集会が12月17日に開催。対面とオンラインを交えたハイブリット開催。対面は2年ぶり?
    • {arrow}パッケージの紹介と各種のパッケージとの処理速度の比較を報告しました
  • [R][Python][Julia] 12月といえばアドベントカレンダー。各言語でのアドベントカレンダーが立ち上がり、賑わいました。各言語で今年話題になったものや最新の動向を知る機会となり良かったです。
  • [R][Python] データ可視化ショーケースイベント Data Visualization Japan Meetup 2022が開催。さまざまな切り口でデータ可視化と向き合う方々の発表。各種メディアでのデータ駆動型報道について、事例紹介も豊富で実りの多いイベントでした。
    • TableauやFlourishといったツールだけでなくR、Pythonを使う記者さんが増えてくれると嬉しいなと思います

書籍

  • [R][link] 私も執筆に参加した『Rユーザのためのtidymodels[実践]入門〜モダンな統計・機械学習モデリングの世界』の発売日が決まりました。年明け1月6日の発売です。Amazonでも予約ができます。
  • [Python][link] Pythonによる衛星データ解析に焦点をあてた『Pythonで学ぶ衛星データ解析基礎』が技術評論社より出版。事例とコードが豊富で写経するだけでも勉強になりそうでした。

Discussion