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技術ブログ オープンソースへ
にほんブログ村

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



このエントリーをはてなブックマークに追加

2025-02-10

【備忘録】等高線図 (contour map)

Matplotlib は、Python と NumPy のためのプロットライブラリです。Tkinter、wxPython、Qt、GTK のような汎用 GUI ツールキットを使ったアプリケーションにプロットを埋め込むためのオブジェクト指向 API を提供しています。

Wikipedia より引用、翻訳

いくつものパラメータで、ある特性の最適点を探索するとき、興味がある2つのパラメータとその特性の関係を視覚化したい場合があります。(他のパラメータ値を固定した上で)2つのパラメータを変動させて、メッシュ状に総当たりのデータを用意できれば、Matplotlib の countour で等高線図を作成することができます。

数式からループを回して大きなメッシュ状のデータを用意して見た目に美しい等高線図を作成したことはあっても、生のデータから直接作成したことがありませんでした。どちらもやっていることは本質的には同じなのですが、あらためて少ないデータから等高線図を作ってみると、線形モデルを前提としなくとも、データの挙動をざっくり捉えるには使えそうだと思ったので、備忘録にまとめました。

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

Fedora Linux 41 Workstation x86_64
Python 3.13.2
jupyterlab 4.3.5
matplotlib 3.10.0
numpy 2.2.2
pandas 2.2.3

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

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

import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

等高線図用データの準備

サンプルの CSV データを読み込みます。ファイル sample_contour.csv は下記からダウンロードできます。

sample_contour.csv
csvfile = 'sample_contour.csv'
df = pd.read_csv(csvfile)
df.head(10)

 

このデータは、X と Y それぞれのパラメータを一つずつ変化させて全ての組み合わせで Z を取得した総当たりのデータです。

X の値は下記のように 3 から 7 までの 5 つの整数です。

df['X'].unique()
array([3, 4, 5, 6, 7])

X のユニークな数 (5) を n_x に保存しておきます。

n_x = len(df['X'].unique())

Y の値は下記のように 0 から 5 までの 6 つの整数です。

df['Y'].unique()
array([0, 1, 2, 3, 4, 5])

Y のユニークな数 (6) を n_y に保存しておきます。

n_y = len(df['Y'].unique())

データフレームの列を Y, X の順番でソートします。

df.sort_values(['Y', 'X'], ignore_index=True, inplace=True)
df.head(10)

 

matplotlib の concour に渡す二次元配列 x, y, z を用意します。二次元配列は縦横のサイズが同じである必要があります。

データフレーム df から X, Y, Z 列を Series で取り出し、numpy の配列にした後、n_y 行 × n_x 列の二次元配列に整形します。

x = np.array(df['X']).reshape([n_y, n_x])
y = np.array(df['Y']).reshape([n_y, n_x])
z = np.array(df['Z']).reshape([n_y, n_x])
x
array([[3, 4, 5, 6, 7],
       [3, 4, 5, 6, 7],
       [3, 4, 5, 6, 7],
       [3, 4, 5, 6, 7],
       [3, 4, 5, 6, 7],
       [3, 4, 5, 6, 7]])
y
array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5]])
z
array([[ 900.,  550.,  450.,  150., -250.],
       [ 800.,  250.,  300.,  200., -100.],
       [ 150., -300., -150., -450., -450.],
       [ 400.,  -50.,  100., -200., -200.],
       [ 450.,    0.,  150., -150., -150.],
       [ 450.,    0.,  150., -150., -150.]])

等高線図のプロット

matplotlib の coucour で、二次元配列 x, y, z の等高線図をプロットします。

plt.rcParams['font.family'] = 'monospace'

fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)

cont = ax.contour(
    x, y, z,
    linestyles='solid',
    linewidths=1,
)
cont.clabel(fmt='%.f', fontsize=12)

ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
ax.yaxis.set_major_locator(ticker.MultipleLocator(1))

ax.xaxis.set_tick_params(labelsize=12)
ax.yaxis.set_tick_params(labelsize=12)

ax.set_xlabel('X', fontsize=14)
ax.set_ylabel('Y', fontsize=14)

ax.grid()

plt.tight_layout()
plt.show()

 

凸凹な等高線図ですが、これでもパラメータの変化にどのように依存するかの傾向を捉えることができます。

実用的には数あるパラメータから、JupyterLab 上であれこれパラメータを変えてプロットを作成するのは手間なので、PySide6 で GUI を用意して、使い勝手を良くしています。GUI を用意するのに時間がかかりますが、そこそこ使えるようにしてしまえば、あとは改善を重ねてどんどん使いやすくできます。

参考サイト

  1. matplotlib.pyplot.contour — Matplotlib documentation
  2. matplotlib.contour — Matplotlib documentation

 

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

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



このエントリーをはてなブックマークに追加

2025-02-02

【備忘録】空のデータフレーム

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

Wikipedia より引用、編集

空の Pandas のデータフレームを用意して、一行ずつデータを追加していきたい場面になると、いつも、あちこちネットで調べて、その場しのぎのやり方で対応してしまっています。

その場しのぎのやり方は、毎回まちまちなので、自分にとってベストなやり方を探索するために、今回たどり着いたやり方を備忘録にしました。もっとよいやり方が見つかれば、あらためて備忘録にしていきたいと考えています。

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

Fedora Linux 41 Workstation x86_64
Python 3.13.1
jupyterlab 4.3.5
numpy 2,2,2
pandas 2.2.3

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

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

import numpy as np
import pandas as pd

 

列名になる要素名(キー)と空の要素からなる辞書型変数を用意し、Pandas のクラスメソッド from_dict を使って、列名だけ定義された空のデータフレームを作成します。さらに、データフレーム全体を object 型にキャストしておきかえておきます。追加するデータが数値だけであればキャストする必要はありません。

dict_columns = {
    'A': [],
    'B': [],
    'C': [],
}
df = pd.DataFrame.from_dict(dict_columns)
df = df.astype(object)
df

 

一行追加します。

r = len(df)    
df.at[r, 'A'] = 1.
df.at[r, 'B'] = 2
df.at[r, 'C'] = ''
df

 

確認用にもう一行追加します。

r = len(df)    
df.at[r, 'A'] = 3
df.at[r, 'B'] = None
df.at[r, 'C'] = np.nan
df

 

各セルの型を確認すると以下のようになっています。

df.map(type)

 

参考サイト

  1. pandas.DataFrame.from_dict — pandas documentation
  2. pandas.DataFrame.astype — pandas documentation
  3. pandas.DataFrame.map — pandas documentation

 

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

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



このエントリーをはてなブックマークに追加