メモ

備忘録です。

make: gfortran: No such file or directoryへの対処

rstanarmパッケージをインストールしようとしたら、なんか色々エラーを吐いて失敗。
要するに依存パッケージのminqaをインストールするときにgfortranが見つからないということが原因とのこと(「make: gfortran: No such file or directory」なるエラーを吐いた)。
とはいえgccは入れてるし「んなアホな」と思って色々調べてみると以下のページを発見。
www.cynkra.com
はえ〜と思いつつ、以下のように対処しましたというメモです。
まあ、基本的には上のページの通りですが。


(1) ~/.R/Makevarsがなければつくる。
なかったのでつくりました。

mkdir ~/.R/
touch ~/.R/Makevars

(2) Makevarsを編集
上のページを参考に,以下の3つを設定(gfortranの場所は個々の環境によって違うでしょうし,もっと適切な設定方法があるかもしれませんが…)。

FC      = /opt/homebrew/Cellar/gcc/11.2.0_3/bin/gfortran
F77     = /opt/homebrew/Cellar/gcc/11.2.0_3/bin/gfortran
FLIBS   = -L/usr/local/opt/gcc/lib

以上です。
あとはminqa→lme4→arms→rstanarmsの順にインストールして,無事インストール完了。
もうちょっと適切な設定方法はあるのかもしれませんが,まあとりあえずインストールできたのでよしということで。

sympy.plottingでグラフと凡例がかぶるときの対処法

タイトルの通り。ざっくりメモのみで。

以下のコードだと

from sympy import *
import matplotlib.pyplot as plt

plt.style.use('seaborn-darkgrid')
x = Symbol('x')
p = plot(5*x, x**2, (x, 0, 10), legend = True)
p[0].line_color = '#FF0066'
p[0].label = '$y=5x$'
p[1].line_color = '#3366CC'
p[1].label = '$y=x^{2}$'
p.show()

p.save('plot.png')

f:id:mrikc:20180806001340p:plain
こうなる。
線と凡例がかぶってしまう。

Sympyのplotだと本家のmatplotlibみたいに凡例の位置を指定できない。
で、以下のように書くと凡例の位置を動かすことができた。

from sympy import *
import matplotlib.pyplot as plt

plt.style.use('seaborn-darkgrid')
x = Symbol('x')
p = plot(5*x, x**2, (x, 0, 10), legend = True)
p[0].line_color = '#FF0066'
p[0].label = '$y=5x$'
p[1].line_color = '#3366CC'
p[1].label = '$y=x^{2}$'
p.show()

fig = p._backend.fig
ax = p._backend.ax

#凡例の位置を修正
ax.legend(loc = 'upper left')

fig.savefig('plot_ok.png')

f:id:mrikc:20180806001838p:plain

これでOK。めでたし。

latexmk導入メモ

「何度もLaTeXをタイプセットするの面倒くさい!」「bibtexも含めてタイプセットを自動化したい!」「ついでに自動ビルドの結果をPDFビューワに逐一反映させたい!」ということでlatexmkを導入したのでメモ。メモなので非常にざっくりと書きます。
TeXはMacTeX2016、エディタはCotEditorを使っています。

Step1: 以下のサイトの通りに設定ファイル(.latexmkrc)を作成してホームディレクトリに保存

konn-san.com
細かい点については、このサイトがわかりやすく書いてくれているのでここでは割愛。
あとuplatexを使いたいので、platexでなくuplatex、pbibtexでなくupbibtexを設定。

Step2: 以下のサイトを参考にCotEditorからワンタッチでビルドできるようにAppleScriptを書く

CotEditor から AppleScript で latexmk を叩くaximov.wordpress.com
関連ファイルを監視させて、変更のたびに自動ビルドさせたいので、latexmkを走らせる部分については、

do script with command "cd " & thisdir & ";" & space & "latexmk " & thisbase & space & "-pvc" & "; exit"

としました(-pvcオプションが監視&自動ビルド)。
ちなみにスクリプト置場は、CotEditorのスクリプトメニューから「スクリプトフォルダを開く」をクリックした先。

Step3: 諸々の設定

CotEditorの環境設定>連携から、コマンドラインツールをインストール。
さらに、Skimの環境設定>同期するから、「ファイルの変更をチェック」にチェックを入れることで、自動ビルドの結果を都度チェックできる。
PDF-TeX同期サポートについては、「初期値:カスタム、コマンド:cot、引数:-l %line "%file"」と設定(CotEditorのコマンドラインツールがないと動かないので、先にインストールしておくこと)。
これで、Skimの画面上でCommand + Shiftを押下しながら文章をクリックすれば、CotEditor上の対応するLaTeXソースに飛んでくれます。


以上で、

  1. タイプセット自動化
  2. 自動ビルドの結果をPDFビューワに逐一反映
  3. SynctexでPDFからLaTeXソースへのジャンプ

ができるようになりました。

ggplot2で比例縮尺財務諸表をつくる

タイトルの通り、ggplot2で比例縮尺財務諸表をつくる方法をまとめてみます。
ちなみにggplot2のバージョンは1.0.1です。
現在は2.x系が公開されており、1.x系とは書き方が変わっているということですので、その点はご留意ください。

作成手順はおおまかに以下の通りです。

  1. データの用意
  2. グラフの作成

ではつくって行きましょう。

データの用意

今回は筆者の地元である愛媛県に本社のある株式会社フジのデータを使います。
フジは愛媛県を中心に営業しているスーパーマーケットチェーンです。
地元企業というだけで特に深い意味はありません。

財務データの入手については、皆さんのお好きなようにしてください。
入手したデータは,以下の様に整形します。
f:id:mrikc:20160504182459p:plain
ここでのポイントは、実際の財務諸表とは科目が逆になるように並べることです。
以下で積み上げ棒グラフとして比例縮尺財務諸表をつくっていくのですが、
ggplot2の積み上げ棒グラフは、先に出てきた科目から下に積んでいきます。
なので、下に表示させたい科目を先に持ってくる必要があるのです。

並べ方にはいくつかやり方があるでしょうが、私は以下のようにしています。
f:id:mrikc:20160504182722p:plain
A列に作業列を作成して、(B/Sならば)現預金から順に各科目に番号を振り、
上図のように並べ替えを行ないます。

整形を終えたら、csvファイルとして保存します。
また、Mac版のOfficeではShift JISで保存されるため、
Rでデータを開くと文字化けをしてしまうことがあります。
そのため、この段階で文字コードUnicodeに変換しておきましょう。

グラフの作成

まずデータを読み込んで,factor型の変数の水準をチェックします。
基本的に先に表示されたものほど、グラフ上、左上に表示されます。

#ggplot2呼び出し
library(ggplot2)
#データ読み込み
data <- read.csv("fuji.csv", header = T)
#factor型変数の水準チェック→先に表示されたものほど左上に表示される
print(levels(data$Dr.Cr))
print(levels(data$年度BS.PL))
print(levels(data$科目))
#並べ替え
data <- transform(data, Dr.Cr = factor(Dr.Cr, levels = c("Dr", "Cr")))
data <- transform(data, 科目 = factor(科目, levels = c("現預金", "営業債権","商品","その他流動資産","建物・土地","その他有形固定資産","無形固定資産","投資有価証券","その他投資","営業債務","未払金","有利子負債","その他債務","純資産","売上高","売上原価","営業収入","販管費","営業利益")))

科目の並べ替えは面倒ですが、ここをきちんとしておかないと凡例がめちゃくちゃな順番で表示されてしまいます。
並べ替えが終わったら、実際に積み上げ棒グラフとして比例縮尺財務諸表を作成します。

#元データを指定します。
fs_plot <- ggplot(data, aes(x=Dr.Cr, y=金額, fill=科目))
#グラフに日本語を表示するために、theme_set()で日本語フォントを指定します。
fs_plot <- fs_plot + theme_set(theme_bw(base_family="HiraKakuProN-W3"))
#積み上げ棒グラフの指定。colourは棒グラフの外枠の色、sizeは外枠の太さです。
fs_plot <- fs_plot + geom_bar(stat = "identity", colour = "black", size = 0.25)
#ここがキモです。facet_grid()で各年度のBS、PLごとに積み上げ棒グラフを作成せよと指定。
fs_plot <- fs_plot + facet_grid(. ~ 年度BS.PL)
#軸指定。
fs_plot <- fs_plot + scale_y_continuous(breaks=seq(0, 350000,by=50000))
#表タイトル&軸タイトル指定。
fs_plot <- fs_plot + ggtitle("比例縮尺財務諸表") + xlab("") + ylab("金額[百万円]")

以上のコードで、以下の様な比例縮尺財務諸表が完成します。
f:id:mrikc:20160504191050p:plain
色の指定等もできますが、それはまたいずれ。

tabularx環境とlongtable環境を同時に使いたい

のっぴきならない事情で長くてごちゃごちゃした表を作らなければならなくなったんだけど、ちょっと手こずってしまったので備忘用のメモ。
「セル内で改行したい!」って場合はtabularx環境、「複数ページにまたがるような表をつくりたい!」って場合はlongtable環境を使うわけですが、
tabularx環境を使うと複数ページにまたがる表をつくれないし、longtable環境を使うとセル内改行できないしで、
複数ページにまたがって、かつセル内で改行が起こるような表をつくりたいという状況にぶち当たると、ちょっと困ったことになってしまいます(まあそんな表をつくることは滅多にないでしょうが)。

こんな状況を打開してくれるのが、ltablex環境です。
くわしくはこちらのページ(CTAN: Package ltablex)にある仕様書をご覧いただければと思うのですが、
要するにtabluarx環境下で、longtable環境も使えるようにしてくれる、というものです。
使い方としては、プリアンブルに

\usepackage{ltablex}

と書いて、あとはtabularx環境やlongtable環境と同じように表を組んでいくだけです。たとえば、

\setlongtables %これでlongtable環境を使えるようになる。
\begin{tabularx}{\linewidth}{|X|X|} %表の中身はtabularx環境と同じ書き方。
\hline
項目 & 説明 \\
\hline
\endhead %longtable環境と同様にendheadやendfootも使える
%以下、表の中身。
マグロ&赤身で美味しい。\\&白身で美味しい。\\
赤貝&貝は美味しい。\\
……
鰻&蒲焼きで美味しい。\\
\hline
\end{tabularx}

ちなみに、以下のように書くと上手く動きませんのでご注意を。

\begin{table}[htb]
\setlongtables
\begin{tabularx}{\linewidth}{|X|X|}\end{tabularx}
\end{table}