1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Quartoで論文を書いて投稿するまで (1) -- データ解析からQuarto導入まで

Posted at

この記事シリーズの詳細については、こちらの記事をご覧ください。

Step 0. データ解析

まずは、論文執筆の前提となるデータ解析の例からです。
Quarto で執筆する論文に埋め込むことを前提に、解析結果を出力します。
データ解析をして、結果を .ini, .csv, 画像ファイルへ出力します。

今回の例では、以下のようなコードでデータ解析をしたとします。
解析内容は例として適当にやっているだけです。

コード
# %%
from sys import version
from pathlib import Path
from configparser import ConfigParser

import pandas as pd
import pingouin as pg
import seaborn as sns


# 出力先のファイルパスを指定
OUT_DIR = Path('result')
OUT_PATH_VAL_METHOD = OUT_DIR / 'method.ini'
OUT_PATH_TABLE_DESCRIPTIVE = OUT_DIR / 'table_descriptive.csv'
OUT_PATH_TABLE_CORRS = OUT_DIR / 'table_corrs.csv'
OUT_PATH_FIG = OUT_DIR / 'fig_scatter.png'

# Pingouinが提供するデータセットを読み込む
dataset = pg.read_dataset('pairwise_corr.csv').set_index('Subject')
dataset.columns = ['neuro', 'extra', 'open', 'agree', 'consc']  # 後の関数紹介のために、あえて変数名っぽい名前に変更
dataset.index.name = 'sub_id'

# %%

# 使用した統計ツールとバージョンを抽出(後で.iniファイルに保存する)
method_values = dict(misc=dict(), demographic=dict())
method_values['misc']['python_ver'] = '.'.join(version.split()[:1])
method_values['misc']['pingouin_ver'] = pg.__version__

# 被験者数を算出(後で.iniファイルに保存する)
method_values['demographic']['n_subjects'] = len(dataset)
print('Number of subjects:', method_values['demographic']['n_subjects'])

# %%

# 基礎統計量を表にまとめる(後で.csvファイルに保存する)
index = pd.MultiIndex.from_tuples([
    ('internal', 'neuro'),
    ('external', 'extra'),
    ('internal', 'open'),
    ('external', 'agree'),
    ('internal', 'consc')])
index.names = ['highlevel', 'lowlevel']
table_descriptive = (dataset.describe()
                     .T[['mean', 'std']]
                     .set_index(index)
                     .sort_index(level=0))

table_descriptive
# %%

# 相関係数を算出(後で.csvファイルに保存する)
table_corrs = (pg.pairwise_corr(dataset, columns=['neuro'], padjust='bonf')
               .set_index('Y')
               .loc[:, ['r', 'p-unc', 'p-corr']])

table_corrs

# %%

# Scatter plot (後で.pngファイルに保存する)
fig_corrs = sns.regplot(data=dataset, x='neuro', y='open')

# %%

# 結果等をファイルに出力
parser = ConfigParser()
parser.read_dict(method_values)
parser.write(OUT_PATH_VAL_METHOD.open('w'))

table_descriptive.to_csv(OUT_PATH_TABLE_DESCRIPTIVE)

table_corrs.to_csv(OUT_PATH_TABLE_CORRS)
fig_corrs.figure.savefig(OUT_PATH_FIG)

これにより、.ini, .csv, .png ファイルを生成しました。

.ini ファイル

method.ini
[misc]
python_ver = 3.11.11
pingouin_ver = 0.5.4

[demographic]
n_subjects = 500

まず、method.iniという .ini ファイルが出力されました。
Method に記載する情報をまとめているので method.ini です。
使用した Python と pingouin パッケージのバージョンを、自動で出力しています。
また、プログラムによって被験者の人数を数えたところちょうど500人でしたので、それも記載しています。

このように、論文に埋め込むべき数値や文字列などのデータを .ini ファイル1にまとめます。

.csv ファイル

論文で報告する表は、.csv ファイルとして出力します。
↓まず、こういった形のマルチインデックスな表を出力しました。

ss-table.png

↓もうひとつ、相関係数を示した表を出力しました。

ss-table2.png

体裁を整えたうえで、論文に埋め込みましょう。

画像ファイル

↓こんな画像を図として出力しました。

fig_scatter.png

これも論文に埋め込みます。

ディレクトリ構造

出力したファイルたちは、すべて一つのディレクトリに保存します。
今のところ、以下のようなディレクトリ構成になっています。

project
├─ (解析に)
├─ (必要な
├─ (ファイルたち)
└─ result
   ├─ method.ini
   ├─ table_descriptive.csv
   ├─ table_corrs.csv
   └─ fig_scatter.png

Step 1. Quarto のインストール

この記事では Visual Studio Code(VSCode)を介して Quarto を用います。
お好みに応じて RStudio などお使いください。
インストール方法については別の記事にお譲りします。

Step 2. 執筆環境の準備

ディレクトリの準備

論文の本文を書いていきます。
まずはディレクトリを用意しましょう。
publish/paperというディレクトリを作りましょう。

project
├─ (解析に必要なファイルたち)
├─ result
└─ publish  ←新規作成
   └─ paper  ←新規作成

Terminal(やコマンドプロンプトなど)で、publish/paper に移動します。

ss-vscode-cd.png

ジャーナルテンプレートの準備

Quarto は、メジャーなジャーナル用のテンプレートをいくつか用意してくれています。
こちらに一覧があります。
ググってみると、Quarto 公式以外が作成・共有してくれたテンプレートもあるようです。

ここでは、elsevier のテンプレートを使うこととしてみましょう。
ちゃんと Terminal で、publish/paper に移動しましたか?
そのまま Terminal にて、以下のコマンドです。

quarto use template quarto-journals/elsevier

Do you trust the authors of this template

と尋ねられるので、yEnter です。

Create a subdirectory for template?

と尋ねられますが、もうディレクトリは準備したので、nEnter です。

paper 以下に、いろいろなファイルやディレクトリが生成されます。
以下のファイル・ディレクトリは削除してしまって大丈夫です。

  • placeholder.png
  • style-guide/
  • paper_files/
project
├─ (解析に必要なファイル)
├── result
└── publish
    └── paper
        ├── _extensions  ←Quartoが自動生成した
        │   └── quarto-journals
        │       └── elsevier
        ├── bibliography.bib  ←Quartoが自動生成した
        ├── paper.qmd  ←Quartoが自動生成した
        ├── paper_files  ←Quartoが自動生成したけど消してOK
        ├── placeholder.png  ←Quartoが自動生成したけど消してOK
        └── style-guide  ←Quartoが自動生成したけど消してOK

R パッケージのインストール

Quarto 内で使用する R に、パッケージを3つインストールします。
R を開いて、R コンソールに以下をペーストします。

install.packages(c("ini", "kableExtra", "english"))

コンソールの表示に従ってインストールを進めてください。

そのほかのツールを準備

Quarto を使うにあたって、いくつかのツールを作ってみました。
せっかくなのでこれらの使い方もこの記事でご紹介します。
こちらのリポジトリをまるっとダウンロードしてください。

中身を以下のように配置してください。

  • toolspaper/ 下に移動
  • _extensions/jcletterpaper/_extensions/ 下に移動
  • quarto-journal-cl.qmdpaper/ 下に移動

これらの自作コードは、R や Lua 等に不慣れな筆者が頑張って作ったものです。
計算機等に不具合を与えるような要素はないとは思いますが、自己責任でご利用ください。

post-render.py というツールを動かすために、_quarto.yaml というファイルを作成してください。
場所は paper.qmd と同じ場所です。

project
├─ (解析に必要なファイル)
├── result
└── publish
    └── paper
        ├── _extensions
        │   ├── jcletter  ←DLして持ってくる
        │   └── quarto-journals
        ├── bibliography.bib
        ├── paper.qmd
        ├── quarto-journal-cl.qmd  ←DLして持ってくる
        ├── _quarto.yaml  ←新規作成
        └── tools  ←DLして持ってくる
            ├── helper.R  
            ├── insert_roles.lua
            └── post-render.py

_quarto.yaml には、以下のように記載します。

_quarto.yaml
project:
  post-render: tools/post-render.py

長くなりましたのでいったんここまでにします。
次回はメタデータ記入からデータ埋め込みまでです。

  1. .ini ファイルは本来、設定を記述するためのファイル形式です。そのため結果を出力するには不適切とも思われます。しかし、より便利なファイル形式が見つからず、.ini を使っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?