LibreOfficeの拡張機能LibrePythonista使い方メモ
LibreOfficeの拡張機能LibrePythonistaをインストールしたので使い方を調査した。Calcの指定したセル上でPythonのプログラムを走らせることができます。Pandas、Matplotlib、NumPyが標準で入っているので科学計算やグラフ機能を向上できます。簡単な機械学習の前処理にも使えそうです。pipマネージャーがあるのでpythonライブラリーを追加可能です。参考にしたのは作者のYoutube投稿です。
作者のYoutubeチャンネル
作者によるLibrePythonista使用例のYoutube
LibrePythonista インストール
LibreOffice 拡張機能よりダウンロードする。クリックするとインストール。
LibrePythonista拡張機能
インストール後にPythonのファイル更新のダウンロードが始まるので数分かかる。
※Linux でflatpakを使っている場合はPyEditor用のflatpakが別途必要です。
LibreOffice Calc にアイコンが追加される。マクロ設定。

インストール後にマクロのセキュリティーレベルを修正しておく。
- マクロを使用になるのでオプションのマクロの設定を「中」レベルに下げておく。「セキュリティー」-「マクロセキュリティー」-「セキュリティーレベル」 → 「中」
- アイコンが追加されるのでセルを選んでアイコンをクリックするとセルにPythonオブジェクトが追加される。
- ショートカットの CTL+Shift+Alt+L でもPythonオブジェクトの挿入可能。
お試し
Pythonの画像処理ライブラリーのmatplotlibが動作するか試した。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 100)
y = x ** 2
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
plt.show()

LibrePythonista 練習
表記入例

先ず、データのサンプルをA1-B6に配置しました。lp()はCalcの表のデータをやりとりする関数です。headers=Trueでヘッダー部の読み込みをします。
試しにD6セルにLibrePythonistaのPythonオブジェクトを設置してコードを編集。
df = lp("A1:B6", headers=True)
# dfにデータフレームが入る
Pythonオブジェクトの表示

データフレームの配列を表示 参照された内容が表示されます


データフレームのカードを表示

さらに、他の任意のセルにPythonオブジェクトを設置し、前のD6セルを参照させる

この場合はnum列の平均値なのでデータフレームではない数値3を表示した
lp("D6")
df.num.mean()
# pandasの命令、num列を指定、平均

この場合はnum列の合計なので、データフレームではない数値15を表示した。
lp("D6")
df.num.sum()
# pandasの命令、num列を指定、合計

値は「abcde」、この場合はname列の合計でデータフレームではない文字列の合計値
lp("D6")
df.name.sum()
# pandasの命令、name列を指定、合計
# 文字列が結合された

lp("D6")
df.describe()
# pandas命令、describe() で一覧表表示

nameを指定して詳細表示
lp("D6")
df["name"].describe()
# pandas命令、name欄を指定、一覧
# 旧参照を利用

更にpandasを深める
lp("D6")
df.name.describe()
# ヘッダー属性を使う例
# スペースがある場合はカギカッコ[]を使う必要がある

サンプルとして、日付列のある表を作成し途中のデータフレームも修正しておく

lp("e6")
df.groupby("date").num.sum()
# 日付でグループ化しておいて日付ごとに合計させる
# 一旦、日付欄は数値として表示されるので、セルの属性を日付表示にすると日付が見れる

月ごとの集計
lp("e6")
df.groupby(pd.Grouper(key = "date" , freq = "M")).num.sum()
# 月ごとの集計
- 注意:返されるセルのコードから常に最後の式が取得される
- セルに大量のコードを記述しても、最後の式の結果のみが返される。
月ごとの合計のグラフ表示

lp("e6")
forchart = df.groupby(pd.Grouper(key="date",freq="M")).num.sum()
forchart.plot(x="date",y="num",kind="line")
plt.show()
# kindでライン表示
「kind」の利用可能な値には、次のようなものがあります。
- line:折れ線グラフ
- bar:棒グラフ
- barh:水平方向の棒グラフ
- hist:ヒストグラム
- box:ボックスプロット
- kde:カーネル密度推定図
- density:密度図
- area:面積図
- pie:円グラフ
- scatter:散布図
- hexbin:ヘキサゴンビン図

kindをareaに変えて面積表示
lp("e6")
forchart = df.groupby(pd.Grouper(key="date",freq="M")).num.sum()
forchart.plot(x="date",y="num",kind="area")
plt.show()
# kindをareaにして面積表示

頻度を週単位に変更。MをWにする。
lp("e6")
forchart = df.groupby(pd.Grouper(key="date",freq="W")).num.sum()
forchart.plot(x="date",y="num",kind="area")
plt.show()
# MをWに変更して週単位にした

週単位の合計のLine表示に変更
lp("e6")
forchart = df.groupby(pd.Grouper(key="date",freq="W")).num.sum()
forchart.plot(x="date",y="num",kind="line")
plt.show()
# kindを週単位の合計のLine表示に変更
注意:Pythonセルの計算ロジックに注意。Pythonセルは左から右、上から下に計算される。
---
コメント