裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

pweave で R の xtable 相当の機能を装備する(その2, Python)

2020年11月25日 | Python

まったく。

日本語(utf-8)が使えないのは,Pweave.engine で経験・解決済みだろ。

ということで,xtable 関数に原因があるわけではないので,それを呼び出す前に locale をセットする必要があるということ。

* 使用法:

setlocale は,xtable の定義の後に実行されているので,普通は再度設定する必要はない。

xtable の引数は,
    xtable(x, caption, label, fmt, align, pos="htbp")

x    pandas のデータフレームオブジェクト caption 表のキャプション
label    table 環境につけるラベル。
    label+".tex" という名前でファイルが作られるので,必要なところで \input{*} で読み込む。
fmt    表の各列の形式を指定するリスト
    文字列なら "s",数値なら小数部の桁数 "3" など,整数なら "0" または "d" を指定 する。
    表の列あたり 1 文字ずつ,全部で表の列数ぶんの長さの文字列で指定(例 "s053"
align    各列での配置法を表す 1 つの文字列(長さは表の列数に等しい) 例 "rllcr"
pos    表の位置。デフォルトは "htbp"

* 使用例

<<>>=
import pandas as pd x = pd.DataFrame({
"a" : [1,2,3,4,5],
"b" : [1.1,2.2,3.3,4.5,5.5], "c" : ["a", "b", "c", "d", "e"] })
xtable(x, "xtable 使用例", "label", "d1s", "rrr")
@

\input{labe.tex}

* xtable

<<>>=
def xtable(x, caption, label, fmt, align, pos="htbp"):
    import scipy as sp
    colnames = x.columns
    f = open(label+".tex", "w")
    x = sp.array(x)
    n = x.shape
    print("\\begin{{table}}[{0:s}]". format(pos), file=f)
    print("\\begin{center}", file=f)
    print("\\caption{{{0:s}}}". format(caption), file=f)
    print("\\label{{{0:s}}}". format(label), file=f)
    print("\\begin{{tabular}}{{{0:s}}} \\hline". format(align), file=f)
    for i in range(n[0]):
        if i == 0:
            for j in range(n[1]):
                print("{0:s}". format(colnames[j]), end="", file=f)
                if j == n[1]-1:
                    print(" \\\\ \\hline", file=f)
                else:
                    print(" & ", end="", file=f)
        for j in range(n[1]):
            if fmt[j] == "s":
                print("{0:s}". format(x[i,j]), end="", file=f)
            elif fmt[j] == "d":
                print("{0:d}". format(int(x[i,j])), end="", file=f)
            else:
                digits = int(fmt[j])
                print("{1:.{0:d}f}". format(digits, float(x[i,j])), end="", file=f)
            if j == n[1]-1:
                print(" \\\\", end="", file=f)
            else:
                print(" & ", end="", file=f)
        if i == n[0]-1:
            print(" \\hline", file=f)
        else:
            print(file=f)
    print("\\end{tabular}", file=f)
    print("\\end{center}", file=f)
    print("\\end{table}", file=f)
    f.close()

import locale
locale.setlocale(locale.LC_ALL, "ja_JP.UTF-8")
@

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« matplotlib で日本語を使え... | トップ | import のやり方 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Python」カテゴリの最新記事