2025-03-25

【備忘録】Pandas で ODS ファイルを読み込む

Pandas は、プログラミング言語 Python において、データ解析を支援する機能を提供するライブラリです。特に、数表および時系列データを操作するためのデータ構造と演算を提供します。Pandas は BSD ライセンスのもとで提供されています。Pandas の 開発により、R 言語における DataFrame が扱える「ベクトル処理」の操作性と同等な機能が導入されました。

Wikipedia より引用、編集

Pandas で Excel ファイルをデータフレームに読み込むには pandas.read_excel() 関数を使いますが [1]、名前の通り Excel ファイルを読み込むためだけの関数だと思い込んでいました。

自分のメイン PC の OS は Linux (Fedora Linux) ですので、普段使いのスプレッドシートは LibreOffice Calc になります。この Calc は Excel ファイルの読み書きができるので、Windows 上で作成した Excel ファイルを Linux 上で読み書きするのには不自由しません。一方、Excel ファイルで Windows とのやりとりを考慮しなくとも良い場合には、Calc デフォルトの ODS 形式(OpenDocument Spreadsheet, 拡張子 .ods)で保存しています。)

この ODS 形式のファイルを Pandas で読み込む方法を調べたところ、Excel の時と同じ pandas.read_excel() 関数にたどり着きました。Pandas で Excel ファイルを扱うために openpyxlxlrd という Excel ファイルを読み書きするパッケージをあらかじめインストールしておく必要があるのと同じように、ODS 形式のファイルを読み込むときには、あらかじめ odfpy [2] というパッケージをインストールしておけば良いことが判りました

判りました」と書いたのは、pandas.read_excel() 関数のマニュアル [3] のパラメータ engine の説明に、

If path_or_buffer is an OpenDocument format (.odf, .ods, .odt), then odf will be used.

とあったので、早速 pip install odfodf パッケージをインストールしたのですが、pandas.read_excel() 関数ではエラーが出て ODF ファイルを読み込めなかったからです。

上記マニュアルページの odf の文字列部分にリンクが張ってあったのでクリックしたところ PyPi の odfpy のページが開きました。ここでインストールするパッケージを間違えたことに気づいたので、odf をアンインストールして、odfpy をインストール。そして ODF 形式のファイルを読み込めることを確認出来ました。

ちょっとハマってしまった間違いだったので備忘録にしました。

参考サイト

  1. pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me
  2. odfpy · PyPI
  3. pandas.read_excel — pandas documentation

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



2025-03-13

【備忘録】Jupyter Lab で上位階層のライブラリをインポート

Python で GUI アプリを作るとき、自分の場合、プロジェクトのルートにメイン・プログラム app.py などを置き、アプリの処理は、機能別に名前を付けたサブディレクトリ内の Python ファイルに用意して、メイン・プログラムからインポートして利用する、といった構成にしています。IDE はもっぱら PyCharm Community 版を使っています。

GUI のレイアウトは、その都度プログラムを起動して確認する、という効率の悪いやり方で良しとしていますが、GUI とは関係が無い関数の機能をテストする際には、Jupyter Lab で対象の関数をインポートして確認しています。

Jupyter Lab の .ipynb ファイルをメイン・プログラムと同じルートに置けば、メイン・プログラムと同じようにインポートができて都合が良いのですが、ルートに .ipynb ファイルがうじゃうじゃ増えてしまって煩わしいです。そこで、jupyter というディレクトリを作って .ipynb ファイルをまとめて置くようにしています。

そうすると、対象の関数をインポートするために一手間かける必要があります。いろいろ試して、結局、なんてことはないやりかたに落ち着きましたが、もっと良いやり方が見つかるかもしれないので備忘録にしました。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
Python 3.13.2
PyCharm Community Edition 2024.3.4
jupyterlab 4.3.5

説明用に下記のプロジェクトを使います。

メイン・プログラムが app.py、テストする関数が funcs/myfunc.py 内に記載されている myfunc01、この関数を Jupyter Lab を起動して jupyter/myfunc.py でテストするというケースです。以下は、例示用に用意した PyCharm のプロジェクトです。

 

funcs/myfunc.py 内に記載されている myfunc01True を返すだけの関数です。

funcs/myfunc.py
def myfunc01() -> bool:
    return True

Jupyter Lab 上でのテスト

Jupyter Lab を起動してテスト用に使う jupyter/myfunc01_test.ipynb は、テスト対象の関数 myfunc01 をインポートする前に、以下のように一つ上のパスをシステムパスに追加します。

jupyter/myfunc01_test.ipynb
import sys
path_up = '..'
if not path_up in sys.path:
    sys.path.append(path_up)

myfunc01 を実行すると確かに True が返ってきます。

from funcs.myfunc import myfunc01
 
myfunc01()
True

念のため、システムのパスを確認しました。

sys.path
['/usr/lib64/python313.zip',
 '/usr/lib64/python3.13',
 '/usr/lib64/python3.13/lib-dynload',
 '',
 '/home/bitwalk/PycharmProjects/PythonProject/.venv/lib64/python3.13/site-packages',
 '/home/bitwalk/PycharmProjects/PythonProject/.venv/lib/python3.13/site-packages',
 '..']

結局 .. をシステムパスに追加するだけで用が足りてしまいました。Jupyter Lab 上で何回も実行してしまう可能性がありますので、一応、システムパスに .. が含まれているか確認してはいますが、なんだこれだけか…記事にするほどの内容でなかったかもしれません。

もともと Jupyter Lab では __file__ が定義されていない、ということから始まった調査だったのですが、記事公開直前に迷走してあれこれ調べ直している中で、参考サイト [3] で、__file__'__file__'"__file__" の違いを知りました。結局どれも使わなかったのですが…。

Python について、ちょっとしたことでも知らないことがまだまだありそうです。😅

もっと良さげな方法が見つかれば、その都度、備忘録にします。

参考サイト

  1. Jupyter NoteBookとPythonで上位階層のimportをする方法 - nyatla@hatena blog [2019-04-25]
  2. Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 | note.nkmk.me
  3. 絶対パスの取得(まとめなおし) #Python - Qiita [2018-09-08]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



2025-02-27

こんどの Fedora Linux 42

Fedora Linux は Red Hat 社が支援するコミュニティ Fedora Project で開発されている Linux ディストロです。このディストロは、最新の技術を積極的に取り込むことで知られています。Fedora Linux の開発成果は CentOS Stream に取り込まれます。ここでテストを経て最終的に Red Hat Enterprise Linux, RHEL へ反映されます。Fedora Linux は、おおむね春と秋の年二回の頻度で新しい版がリリースされています。

Fedora Linux 42 の開発スケジュール [1] によると、ベータ版の公開は 2025-03-11、正式リリースは 2025-04-15 に予定されています。

2025-02-04 に、Fedora Rawhide の開発レポジトリから Fedora Linux 42 のレポジトリがブランチされていましたので、下記サイトから開発中の Fedora Linux 42 の iso ファイル (Fedora-Workstation-Live-42-20250226.n.0.x86_64.iso) をダウンロードして仮想環境 (GNOME Boxes) にインストールしてみました。

プレリリース版の Fedora Linux 42 がダウンロードできるサイト

インストールしてみたところ、すでにデスクトップの壁紙が Fedora Linux 42 用になっていました。

Fedora Linux 42 Workstation(Prerelease 版)のデスクトップ (1)
Fedora Linux 42 Workstation(Prerelease 版)のデスクトップ (2)

ベータ版が公開される前ですので、変更される可能性は残っています。

Anaconda WebUI インストーラ

インストール時、インストーラが WebUI のバージョンになっていました。すでにインストーラが変更されることがアナウンスされており [2]、Fedora Linux 39 の時にフライングで当ブログにまとめてしまいましたが [3]、今回は最終的にどうなるでしょうか。

ISO イメージを起動すると、下記の画面が表示されます。

Install Fedora... をクリックすると WebUI のインストーラが起動します。以下、スクリーンショットを紹介します。

 

Fedora Linux 42 のベータ版が公開された後、今回の変更点などの内容をまとめる予定です。

参考サイト

  1. Fedora Linux 42 Schedule: Key
  2. Changes/AnacondaWebUIforFedoraWorkstation - Fedora Project Wiki
  3. bitWalk's: Fedora Linux 39 のインストーラ [2023-09-02]
  4. Changes/Promote KDE Plasma Desktop variant to Edition - Fedora Project Wiki

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



2025-02-24

【備忘録】アルファベット文字の全角 → 半角変換 ~ Python

コーディングのみならず、表示する文字列において、たとえ漢字やひらがなが混じっていても、(数字などを含む)アルファベット文字はいわゆる半角文字 "ABC" を使うようにしています。しかし、公開されているファイルを読み込んで集計するときなどで、アルファベット文字に全角文字が使われていて無駄に表示文字列の幅が長くなってしまうとイラっとするときがあります。😅

アルファベットの全角文字を半角文字に変換するために変換テーブルを作って対応していましたが、あらためて調べたところ Python の標準ライブラリ unicodedata で変換できることを参考サイト [1] で知ったので、具体例を備忘録にしました。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
Python 3.13.2
jupyterlab 4.3.5
openpyxl 3.1.5
pandas 2.2.3
xlrd 2.0.1

以下の作業は JupyterLab 上でおこなっています。

最初に必要なライブラリをインポートします。

import unicodedata
import pandas as pd

今回の例では、インターネット上の Excel ファイルを読み込むので、import 文で明示しませんが、pandas で Excel ファイルを読み込むために openpyxlxlrd をあらかじめインストールしておく必要があります [3]

例として、東京証券取引所に上場している銘柄のリスト(Excel ファイル)を取得します。

tse = "https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls"
df = pd.read_excel(tse)
df

 

「銘柄名」列の文字列は全て全角文字になっています。この列の文字列をアルファベット文字のみ半角文字に置き換えます。

df['銘柄名'] = [unicodedata.normalize('NFKC', s) for s in df['銘柄名']]
df

 

Unicode の正規化については、参考サイト [4] に日本語表現や説明がありますが、そのまま引用してもピンとこないので、正規化には下記の4種類があることを示すにとどめました。

form 正規化形式
NFC Normalization Form Canonical Composition
NFKC (Normalization Form Compatibility Composition
NFD Normalization Form Canonical Decomposition
NFKD Normalization Form Compatibility Decomposition

四種類の具体的な違いについては、参考サイト [5] で紹介されています。

参考サイト

  1. Pythonで全角・半角を変換(mojimojiなど) | note.nkmk.me
  2. unicodedata --- Unicode データベース — Python ドキュメント
  3. pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me
  4. Unicode正規化 - Wikipedia
  5. Unicode正規化 #文字コード - Qiita [2020-05-15]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



2025-02-16

GMKtec NucBox G2 Plus

GMKtec のミニ PC、NucBox G2 Plus [1] [2] 22,420 円で買いました。今回の目的は Windows 上で Excel VBA のアプリを開発できる専用 PC を用意することです。Excel 上で同時に複数の VBA アプリを動かすことができないので、Windows PC が 1 台しかない現状にとても不便を感じていました。

古いノート PC はいくつもあるのですが Linux を上書きインストールしてしまっています。そのため Windows でなければできないことには全く使いものにはなりません。

メイン PC の Linux 機から利用したかったので、新たに Windows PC を追加するとなれば、リモートデスクトップ接続ができる Windows 11 Pro がプリインストールされていて、どうせ買うならそこそこ新しいプロセッサを搭載している廉価な PC がないかと Amazon.jp で探した結果です。

中国深圳市が拠点の GMKtec(深圳市极摩客科技有限公司)[3] [4] の PC を使ったことがなくやや不安でしたが、スペックと値段に負けてしまいました。😅

小さな筐体

NucBox G2 Plus の筐体の寸法 / 重量は 87 x 87 x 39.5mm / 218g ですが、実際に手にしてみるとかなり小さく軽く感じました。

机の片隅に置いた NucBox G2 Plus

この PC の詳細なレビューについては、下記のサイトなどをご覧になってください。

メイン PC の Linux 機から Remmina [5] で NucBox G2 Plus の Windows へ、リモートデスクトップ接続 (RDP) した例です。背景の画像は表示されず真っ黒です。

Fedora Linux から Reminna でリモートデスクトップ接続した例

Windows PC の最初のアップデートは毎度、拷問のような長い作業になるのでいつも苦痛なのですが、世の中の PC の大半は Windows なので、自分ばかりが愚痴を言っても仕方がないと諦めムードです。

しばらく使ってみて、すぐに壊れてしまった、なんてことになれば評価は変わりますが、今のところ高いコスパに満足しています。

Remmina の設定 (追記 2025-02-17

今回購入した NucBox G2 Plus とは直接関係の無いことですが、Linux の Remmina で Windows 11 Pro へリモートデスクトップ接続して作業をしていると、IME で日本語変換をしている時だけ英語のキーボード・レイアウトになっていることに気がつきました。

Linux も Windows も日本語のキーボード・レイアウトに設定していたので問題がないだろうと思っていたのですが甘かったです。Remmina の設定が必要でした。備忘録として Remmina の設定を追記します。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
remmina 1.4.39-2
Remmina の RDP におけるキーボードレイアウトの設定

参考サイト [6] の記事を参考にさせていただきました。ありがとうございます。

参考サイト

  1. Amazon.co.jp: 【ミニpc Intel N150初登場】 GMKtecミニpc
  2. Intel 12th Twin Lake N150 Mini PC--NucBox G2 Plus
  3. Shenzhen GMK Technology Co., Ltd.のプレスリリース|PR TIMES
  4. GMK极摩客官方网站 – 科技改变你我生活
  5. bitWalk's: Remmina を使ってみる [2022-06-05]
  6. Ubuntu 22.04 Remminaの日本語入力 | お空への夢 [2022-10-13]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース