2024-03-27

Fedora Linux 40 ベータ版公開

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

Fedora Linux は、おおむね春と秋の年二回の頻度で新しい版がリリースされています。

3 月 26 日(現地時間)に、次期 Fedora Linux 40 のベータ版が公開されました [1]

Fedora Linux のプロジェクトサイト

ダウンロードのページで "Show Beta downloads" のスイッチを ON にすると、ダウンロードする Fedora Linux 40 の ISO イメージが表示されます。

以下は、GNOME Boxes の仮想環境にインストールした Fedora Linux 40 prerelease 版のスクリーンショットです。

Fedora Linux 40 Workstation prerelease のデスクトップ画面

Fedora Linux 40 では、昨 2 月末にリリースされた KDE Plasma 6 が KDE Spin に収録されています。

Fedora Linux 40 KDE prerelease のデスクトップ画面

Fedora Linux 40 の ChangeSet

Fedora Linux 40 で予定されている変更点 (ChangeSet) は、参考サイト [2] にまとめられています。英文ですので、機械翻訳の助けを借りて、ざっくり日本語にしてみました。

システム全体の変更
Golang 1.22 Go(golang パッケージ)を次期バージョン 1.22 に更新。
Enable IPv4 Address Conflict Detection by default アドレスの競合を検出する RFC 5227(IPv4 Address Conflict Detection, ACD)がデフォルトで有効になります。IPv6 は RFC 4862 で規程されているように、設定された各アドレスに対して常に重複チェックを実行しています。
LLVM 18 すべての llvm サブプロジェクトをバージョン 18 に更新。
Change Firefox desktop file Firefox のデスクトップファイルを firefox.desktop から org.mozilla.firefox.desktop に変更して DBus/Gnome 検索プロバイダのルールに準拠させます。
Assign individual, stable MAC addresses for Wi-Fi connections Wi-Fi 接続時に個別の MAC アドレスを割り当てるのに stable-ssid を採用、ネットワークの安定性を損なうことなくユーザーのプライバシーを強化。
Build Fedora Cloud Edition Images Using Kiwi in Koji Fedora Cloud Edition イメージのビルドツールは、保守されていない ImageFactory から Kiwi に置き換えられます。
java-21-openjdk as the system JDK in F40 Fedora のシステム JDK を java-17-openjdk から java-21-openjdk に更新。
Boost 1.83 upgrade 最新の Boost 1.83 へ更新。
Build Fedora with DNF 5 Mock (mock-core-configs)、Koji、Copr の Mock コンフィギュレーションを変更し、DNF 4 の代わりに DNF 5 をMockのパッケージ・マネージャーとして使用します。DNF 5 は Mock がパッケージのビルドのためにビルドの依存関係を chroots にインストールするのに使われます。この変更はビルドインフラストラクチャに関連しており、Fedora のデフォルトパッケージマネージャの変更とは異なります。
Enable systemd service hardening features for default system services デフォルトのシステムサービスを分離してサンドボックス化する高レベルの systemd security hardening 設定のいくつかを有効にすることで、セキュリティを向上させます。
Changes/Linker Error On Security Issues redhat-rpm-config パッケージの %{hardened_build} 機能を拡張し、既知のセキュリティ問題を 1 つ以上含む実行バイナリの作成する場合に、リンカがエラーメッセージを生成して失敗するようにしました。
389_Directory_Server_3.0.0 389-ds-base が バージョン 3.0.0 にアップグレードされました。新しく作成されたインスタンスは、デフォルトで BerkeleyDB の代わりに LDMB データベースを使用するようになりました。
Removing SSSD ‘files provider’ "id_provider=files" を使用してローカルユーザー(/etc/passwd と /etc/group)を処理する SSSD 機能は、以前は非推奨であり、Fedora 38 で将来の削除がアナウンスされていました。今回 lexibleLocalUserCache の変更により、この機能はデフォルトで無効になりました。
DNF: Do not download filelists by default デフォルトでファイルリストをダウンロードしないように DNF の動作を変更。各パッケージに含まれるすべてのファイルを記述するこれらのメタデータは、大半のユースケースでは不要で、さらに、これらのメタデータファイルはサイズが大きくなる可能性があり、ユーザーエクスペリエンスの大幅な低下を招くのを防ぐための措置。
Ruby 3.3 Ruby 3.3 に更新。
Modernize Thread Building Blocks for Fedora 40 Thread Building Blocks ライブラリーをバージョン 2020.3(2020年7月10日リリース)から現行バージョン 2021.8(2022年12月22日リリース)へ更新。
SPDX License Phase 3 SPDX (Software Package Data Exchange) は、システムを構成するソフトウェアについての情報を収集して管理するためのデータ形式の標準の一つです。ソフトウェア部品表 (SBOM) の作成に用いられます。Fedora の rpm パッケージをビルドする SPEC ファイル内の License: フィールドの記載を SPDX 識別子への移行させる活動の第三フェーズ。
Removing OpenSSL 1.1 package Fedora 40 から openssl11 パッケージは含まれません。
Changes/MinizipNGTransition minizip から minizip-ng への移行。zlib パッケージの削除によって minizip-compat サブパッケージも削除されるため、Zlib 移行の変更と強く関連しています。
Changes/ZlibNGTransition Zlib を Zlib-ng に置き換えます。Zlib-ng への移行は、既存のパッケージやライブラリとの互換性を確保しながら、Fedora の圧縮効率とパフォーマンスを強化することを目的としています。
KDE Plasma 6 KDE Plasma 5 の後継バージョンの KDE Plasma 6 は Qt 6 と KDE Frameworks 6 をベースにしており、以前のバージョンと比較して多くの変更と改良が加えられています。Fedora Linux では、KDE Plasma 6 への移行に伴い X11 セッションのサポートを終了します。Plasma Wayland のみが唯一のデスクトップモードとして提供されます。
Drop Delta RPMs 現在実装されている Delta RPM の欠点に対処することは実現不可能であると考えられ、またアップグレードのダウンロードサイズを正味で減らす結果にはならないことが多いため、DeltaRPM の生成を無効にすることと、dnf / dnf5 の deltarpm サポートをデフォルトで無効にします。
Switch pam_userdb from BerkeleyDB to GDBM pam_userdb は BerkeleyDB から GDBM にデータベースに移行します。
GNU Toolchain Update (gcc 14.0, binutils 2.41, glibc 2.39, gdb 14.1) GNU Toolchain を gcc 14.0、binutils 2.41、glibc 2.39、gdb 14.1 へ更新。
Changes/SQLAlchemy 2 python-sqlalchemy パッケージをメジャーバージョン 2 にアップグレード。まだ新しい API を使っていないソフトウェアのために、互換性パッケージ python-sqlalchemy1.4 をディストリビューションに追加。
Build Fedora Workstation live ISO with Image Builder Image Builder は、オペレーティングシステムのイメージをビルドするためのツール群です。Image Builder を使用して、Fedora Workstation ライブ ISO を作成できます。なお、Image Builder はすでに Fedora IoT の ISO と raw ディスクをビルドするために使用されています。
Deprecating libuser and removing passwd package from Fedora libuser は、ユーザーとグループの情報を操作するためのライブラリーとコマンドラインユーティリティーを提供します。このライブラリの目的は、LDAP のユーザーと etc のファイル (passwd, groups...) の違いを隠すことです。LDAP のサポートは完全ではなく、機能を拡張する計画もありません。Fedora における LDAP の統合は、現在では SSSD によって行われています。
Build JDKs once, repack everywhere これは、https://fedoraproject.org/wiki/MoveFedoraJDKsToBecomePortableJDKs の取り組みの最後のステップです。Fedora の JDK はすでにスタティックです。
Porting Fedora to Modern C 1999 年に C 標準の新しい改訂が行われ、いくつかの後方互換機能が削除されました。しかし、GCC ではこれらの時代遅れの構文をデフォルトでまだ受け入れています。これらの構文のサポートはプログラマを混乱させ、将来のC標準の機能を実装する GCC の性能に潜在的に影響します。将来の GCC のバージョン(おそらく GCC 14)では、これらの古い言語構文のサポートをデフォルトで無効にすることが期待されています。本変更の目的は、Fedora がこの移行に備えることです。
自己完結している変更
Changes/ArmMinimalImageOSBuild osbuild で Arm 版最小イメージをビルド。
Fedora IoT Bootable Containers Fedora IoT ユーザーのために 2 つの(ブート可能な)bootc コンテナを提供します。1 つはユーザーが Fedora IoT をベースとした最小バージョン、それと従来の Fedora IoT です。
ibus-anthy 1.5.16 ibus-anthy の更新。
IBus 1.5.30 IBus 1.5.30 へ更新。
IoT Simplified Provisioning Fedora IoT システムをデプロイし設定するための、Simplified Provisioning と呼ばれる新しいツール。
Deprecate_ntlm_in_cyrus_sasl NTLM は何年も前から非推奨とされており、時代遅れです。SASL メカニズムとしてのサポートは削除されるべきです。cyrus-sasl ではサポートされなくなったので、cyrus-sasl-ntlm サブパッケージは削除されます。
ROCm 6 Release AMD ROCm™ 6.0は、AMD GPU の AI および HPC ワークロード性能向けに最適化された AMD のソフトウェアの最新リリースです。この最新リリースは、最新のフラッグシップ・データセンター GPU である AMD Instinct™ MI300 を有効にするだけでなく、前回の 5.x リリースで有効になった GPU を継続し、最近の GPU のほとんど/すべてを有効にします。
PyTorch Release PyTorch を Fedora 向けにパッケージ化する目的は、このオープンソースの機械学習フレームワークに簡単にアクセスできるようにし、Fedora Linux のエコシステムの中でシームレスに統合できるようにすることです。PyTorch を Fedora リポジトリでパッケージ化されたソフトウェアとして提供することで、ユーザーはインストールとメンテナンスのプロセスを簡素化することができます。これにより、Fedora ユーザーにとっての PyTorch のアクセシビリティが向上し、開発者、研究者、愛好家がこの強力な機械学習フレームワークの機能を活用できる環境が醸成されます。さらに、PyTorch を Fedora 向けにパッケージ化することは、Fedora プラットフォーム上での機械学習分野における共同開発とイノベーションを促進することで、より広範なオープンソースコミュニティに貢献します。
Replace iotop with iotop-c 10 年前にリリースされたバージョン 0.6 である iotop を廃止予定にし、活発にメンテナンスされている iotop-c へ置き換えます。
Move /var/run selinux-policy entries to /run システム・ランタイム・ファイルの実際のパスは、10年ほど前に /var/run から /run に移動したが、それ以来、ポリシーは古いエントリを保持する方法で管理されており、実際のパスはファイル等価機能によって処理される一方で、更新は不正確なパスのまま行われている。このため、実際にどのパスを使うべきかわからず、システム管理者を混乱させたり、ユーザー空間のツールが正しく動作しなかったりすることがある。
Update Kubernetes to v1.29 in Rawhide Kubernetes 1.28 を v1.29に更新。
Podman 5 Podman 5 に更新。
Build Fedora IoT using rpm-ostree unified core 上流の rpm-ostree の開発は、現在、"unified core" モードにフォーカスしており、将来的に以前のモードは非推奨になる予定です。Fedora IoT は、SilverBlue と Kinoite が Fedora 39 で変更した、この古い、まもなく非推奨となるモードを使用する最後の rpm-ostree ベースの Fedora エディションです。この変更により、IoT は Fedora の他の ostree ベースのエディションと揃うことになります。
Wget2 as wget wget を wget2 に置き換えます。
Fedora Atomic Desktops Fedora の rpm-ostree ベースのすべてのデスクトップの変種を Fedora Atomic Desktops の名前で再編成します。
F40 MariaDB & MySQL repackaging 変更のほとんどは(すべてではないにせよ)、Fedora Change のような正式なプロセスは必要ないかもしれない小さな変更です。主に変更の可視性を高め、それらの情報を恒久的な文書として保存し、ユーザーとメンテナの両方が現在と将来の両方でこのページを見つけられるようにすることです。
PostgreSQL 16 Fedora のデフォルトの PostgreSQL ストリーム(postgresql と libpq コンポーネント)のバージョン 15 からバージョン 16 への更新。
Update To Pydantic Version 2 Python データ検証ライブラリ python-pydantic が 1.10.z から 2.y.z に更新されます。
Switch bogofilter to use SQLite bogofilter のデータベースエンジンを Berkeley DB (libdb) から SQLite へ変更。
Passim Peer-to-Peer Metadata Passim は、特定の共有メタデータをローカルネットワーク上の他のクライアントにブロードキャストし、インターネットからダウンロードされる重複データの量を削減するローカルキャッシュサーバーです。
PHP 8.3 最新のバージョン 8.3.x に更新。
Restructure Kubernetes Packages Fedora の Kubernetes パッケージについて、新しい(サブ)パッケージ名または改訂されたパッケージ名が提案されています。新しい名前は、Kubernetes をアップストリームで文書化されている現在の使用法とよりよく整合させ、パッケージの内容を現在の Fedora のプラクティスと標準に整合させます。
Revitalize Forge Macros これまで、forge マクロは redhat-rpm-config の一部でした。これを新しい forge-srpm-macros パッケージに分割します。より多くのテストカバレッジを追加し、新しい %forgeversion マクロを追加して、スナップショット情報を Release ではなく Version に追加できるようにします。
Unified Kernel Support Phase 2 Fedora の "Unified Kernel" のサポートを改善。
Enable bootupd for Fedora Silverblue & Kinoite 設計上、ostree はブートローダの更新を管理しません。この問題を解決するために、bootupd (https://github.com/coreos/bootupd) が作成されました。 bootupd は小さなソケット起動プログラムで、ブートローダの更新を行います。現在のところ、EFI ブートシステムと rpm-ostree ベースのシステムのみをサポートしています。アップデートは管理者がトリガーし、安全上の理由から自動化されていません。この変更は、ブートローダーの更新を簡単にするために、Fedora Silverblue と Fedora Kinoite で bootupd の統合を可能にするものです。
Retire python3.7 python3.7 パッケージは Fedora Linux 40 では置き換えられることなく引退します。Python 3.7 は 2023 年 6 月に EOL (End of Life) となり、Debian 10 "Buster" LTS をターゲットとしたソフトウェアのテスト用にのみ残されます。Fedora 39 (Python 3.7 を含む最後のもの) は 2024-11-12 に EOL になる予定です。

参考サイト

  1. Announcing Fedora Linux 40 Beta - Fedora Magazine
  2. Releases/40/ChangeSet - Fedora Project Wiki

 

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

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



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

2024-03-26

【備忘録】Matplotlib と時系列データ ~ PySide6

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。

動作確認をするときには JupyterLab 上で Matplotlib でちゃちゃっプロットしていますが、常用する用途は PySide6 で GUI アプリにするのが常です。今回は Matplotlib を使った過去記事を PySide6 の GUI アプリにしてみました。

今回のテーマ
  • 当ブログの過去記事 [1] で扱った Matplotlib のチャートを PySide6 の GUI 上で扱えるように移植します。

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

Fedora Workstation 39 x86_64
Python 3.12.2
PySide6 6.6.2
pandas 2.2.0
matplotlib 3.8.3
scipy 1.12.0

サンプルデータ

サンプルデータは、過去記事 [1] と同じです。

下記からダウンロードできます。

temperature.csv

PySide6 の GUI 上の Matplotlib チャート

GUI 部分以外は過去記事のコードとほぼ同じになるように移植してみました。

qt_matplotlib_trend.py

実行結果を以下に示しました。PySide6 の GUI アプリとして識別できるように Qt のアイコンをタイトルバーに表示しましたが、デスクトップ環境によってはこのアイコンが表示されません(例:KDE Plasma)。

qt_matplotlib_trend.py の実行例

過去記事の Matplotlib の出力とほぼ同じになるように、今回はごくシンプルな GUI サンプルを作りましたが、実用では、メニューバーを付けたり、タブやボタンを付けたりと用途に応じた機能を追加しています。

参考サイト

  1. bitWalk's: 【備忘録】Matplotlib と時系列データ [2024-03-25]

 

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

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



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

2024-03-25

【備忘録】Matplotlib と時系列データ

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

Wikipedia より引用、翻訳

Matplotlib によるチャート作成では、なんとなく時系列データの扱いに苦手意識を持っています。それでも最近はデータ解析で時系列データを扱うことが多くなってきているので、毎回調べ直さなくとも済むように、気になるトピックを備忘録として不定期にまとめていきます。

今回のテーマ
  • 時系列データを Matplotlib でトレンドチャートにして表示します。
  • さらに、データの加工例として SciPy を利用してスプライン補間した曲線を重ねて表示します。
  • y 軸を追加して、スプライン補間した曲線の微分値をプロットします。

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

Fedora Workstation 39 x86_64
Python 3.12.2
pandas 2.2.0
matplotlib 3.8.3
scipy 1.12.0

サンプルデータ

今回使用するサンプルデータは、参考サイト [1]、気象庁のサイトからダウンロートした、今年 3 月 1 日の気温データ(東京、1時間毎)を使用します。ただし、扱いやすいように少し整形して UTF-8 のエンコードで保存した CSV 形式のファイルです。

下記からダウンロードできます。

temperature.csv

ファイルの内容は以下のように「年月日時」と「気温」の二列のデータになっています。

年月日時,気温
2024/3/1 00:00:00,7
2024/3/1 1:00:00,7
2024/3/1 2:00:00,6.7
   :
   :

トレンドチャート

最初は、サンプルデータの CSV ファイルを読み込んで、データ点を時間順に◯で表示、データ間を直線でつないで表示します。

mpl_trend_01.py

実行例を示しました。

mpl_trend_01.py の実行例

ファイルの読み込み

今回のサンプルデータの最初の列「年月日時」は、重複無く順番に並んでいる情報ですので、これを Pandas データフレームのインデックスとして読み込みます。引数 index_col に列「年月日時」の列 0 を指定し、引数 parse_datesTrue とします。すると、列「年月日時」が DatetimeIndex 型のインデックスとして読み込まれます [2]

import pandas as pd

if __name__ == '__main__':
    csvfile = 'temperature.csv'
    df = pd.read_csv(csvfile, index_col=0, parse_dates=True)
    print(df)
    print(type(df.index))

実行時の出力は以下のようになります。

                       気温
年月日時                     
2024-03-01 00:00:00   7.0
2024-03-01 01:00:00   7.0
2024-03-01 02:00:00   6.7
   :
   :
   :
2024-03-01 22:00:00  10.9
2024-03-01 23:00:00  10.6
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

トレンドチャート

データフレームのインデックスが DatetimeIndex 型になっていると、Matplotlib でプロットする場合、xy を指定せずともデータフレーム df を指定するだけでプロットできます。

import matplotlib.pyplot as plt
import pandas as pd

if __name__ == '__main__':
        :
        :
    fig, ax = plt.subplots()
    fig.canvas.manager.set_window_title('Trend test')

    line1 = plt.plot(
        df,
        linewidth=1,
        color='blue',
        marker='o',
        markersize=6,
        markeredgecolor='darkblue',
        markeredgewidth=1,
        markerfacecolor='cyan',
        label='original data'
    )

    plt.grid()
    plt.xticks(rotation=45)
    plt.ylabel('Temperature')
    fig.legend(loc='outside lower center')

    plt.subplots_adjust(top=0.99, left=0.1, bottom=0.25, right=0.95)
    plt.show()

時間軸の目盛ラベルの「月-日 時」は、ちょっと長いので、隣の目盛ラベルと重ならないように 45 度傾けました。また、プロットの余白を調節しています。

スプライン補間

チャート上のデータ点と次の点を直線で結ぶ、というのは無難な表現なのかもしれません。

しかし、このサンプルの 気温 のように、通常は連続的に値が変化しているのに、サンプリングの都合で離散的なデータになっている場合は、データ点間をなめらかな曲線でつなげて変化を近似したいこともあります。そうすればその曲線を微分することによって、近似的に変化点の評価をすることもできます。

そんな時に便利なのがB-スプライン曲線による補間です。ずいぶん昔から利用しているB-スプライン曲線なのですが、残念ながら、自分はしっかりとした説明ができません、ごめんなさい。🙇🏻

SciPy の interpolate(補間ツール)にある make_interp_spline でB-スプライン曲線を計算して、トレンドチャートに重ねてみます [3]

まずはサンプルから。前出のサンプルをベースにしています。

mpl_trend_02.py

実行例を示しました。

mpl_trend_02.py の実行例

ナビゲーターバーの虫眼鏡アイコンをクリックして ON にするよ、プロット上をマウスでドラッグして指定した矩形領域を拡大できます。これで直線()とスプライン曲線()の違いを確認できます。

mpl_trend_02.py の実行例 (2) 一部を拡大

時刻情報の扱い

時刻情報は、今回はデータフレームのインデックスに DateTimeIndex として読み込んでいますが、 SciPy ではこの時刻情報を数値としては扱えません。

DatetimeIndex(['2024-03-01 00:00:00', '2024-03-01 01:00:00',
               '2024-03-01 02:00:00', '2024-03-01 03:00:00',
               '2024-03-01 04:00:00', '2024-03-01 05:00:00',
               '2024-03-01 06:00:00', '2024-03-01 07:00:00',
               '2024-03-01 08:00:00', '2024-03-01 09:00:00',
               '2024-03-01 10:00:00', '2024-03-01 11:00:00',
               '2024-03-01 12:00:00', '2024-03-01 13:00:00',
               '2024-03-01 14:00:00', '2024-03-01 15:00:00',
               '2024-03-01 16:00:00', '2024-03-01 17:00:00',
               '2024-03-01 18:00:00', '2024-03-01 19:00:00',
               '2024-03-01 20:00:00', '2024-03-01 21:00:00',
               '2024-03-01 22:00:00', '2024-03-01 23:00:00'],
              dtype='datetime64[ns]', name='年月日時', freq=None)

ちょっと手間ですが、SciPy では以下のように時刻情報のインデックス df.index をタイムスタンプのインデックス ts に変換して利用することにします。タイムスタンプへの変換は、参考サイト [4] を参考にさせていただきました。

import pandas as pd
from pandas import DatetimeIndex, Index
        :
        :
        :
    ts: Index = df.index.map(pd.Timestamp.timestamp)
    print(ts)
Index([1709251200.0, 1709254800.0, 1709258400.0, 1709262000.0, 1709265600.0,
       1709269200.0, 1709272800.0, 1709276400.0, 1709280000.0, 1709283600.0,
       1709287200.0, 1709290800.0, 1709294400.0, 1709298000.0, 1709301600.0,
       1709305200.0, 1709308800.0, 1709312400.0, 1709316000.0, 1709319600.0,
       1709323200.0, 1709326800.0, 1709330400.0, 1709334000.0],
      dtype='float64', name='年月日時')

B-スプライン曲線の計算

時刻をタイムスタンプに変換した ts と、対応する気温データ df['気温'] で、補間するB-スプライン曲線(の係数)を計算する BSpline クラスのインスタンス bspl を生成します。次数は k で指定しますが、ここでは 2(二次)としています。

from scipy.interpolate import make_interp_spline, BSpline
        :
        :
        :
    bspl: BSpline = make_interp_spline(ts, df['気温'], k=2)

B-スプライン曲線を計算するために、サンプルと同じ時間内でより細かく刻んだ時刻列を用意します、ここでは(ちょっとやりすぎかもしれませんが)1分刻みで作成しました。

    x1: DatetimeIndex = pd.date_range(min(df.index), max(df.index), freq='1min')
    ts1: Index = x1.map(pd.Timestamp.timestamp)

プロット用には x1、B-スプライン曲線の計算用にはタイムスタンプに変換した ts1 を使います。

ts1 に対応したB-スプライン曲線の気温データ y1BSpline のインスタンス bspl で算出します。

    y1 = bspl(ts1)

B-スプライン曲線のプロット

プロットには x1y1 のペアを使います。

    line2 = plt.plot(
        x1, y1,
        linewidth=1,
        color='red',
        label='spline curve'
    )

二つの y 軸で表示 [2024-03-26 追加]

右側に二つ目の y 軸を追加して、B-スプライン曲線を微分した値を表示します。

微分値を算出する導関数の追加と軸を二つする都合でいくつか変更を加えたサンプルです。

mpl_trend_03.py

実行例を示しました。

mpl_trend_03.py の実行例

B-スプライン曲線の導関数

BSpline クラスの derivative(nu) (デフォルトは nu=1)メソッドで導関数のインスタンスを生成できます。

    dbspl = bspl.derivative(nu=1)
    dy1 = dbspl(ts1)

この dy1(一次微分値)を重ねてプロットするために、共通の x 軸に対して、右側にもうひとつの y 軸を追加してプロットすることにします。

二つの y 軸を扱うときの変更点

単純に x-y 軸でプロットする時には plt.plot(...) というように、plt= pyplot)でプロットできましたが、二軸にすると、どちらに表示するかを軸 (ax) を基準にして指定する必要が出てきます。pltax のメソッドには微妙な違いがあるので、それに留意して書き換えます。

まず、ファイルから読み込んだ「年月日時」と「気温」の二列のデータのプロットは以下のようになります。ここは単純に pltax へ置き換えただけです。

    line1 = ax.plot(
        df,
        linewidth=1,
        color='blue',
        marker='o',
        markersize=6,
        markeredgecolor='darkblue',
        markeredgewidth=1,
        markerfacecolor='cyan',
        label='original data'
    )

B-スプライン曲線を表示する部分も同様に pltax へ置き換えます。

    line2 = ax.plot(
        x1, y1,
        linewidth=1,
        color='red',
        label='spline curve'
    )

次に二つ目の y 軸を追加して、B-スプライン曲線の導関数で算出した微分値 dy1 をプロットします。

y 軸の追加は、ax2 = ax.twinx() で生成した ax2 を使います [5]

    ax2 = ax.twinx()
    line3 = ax2.plot(
        x1, dy1,
        linewidth=1,
        linestyle='dashed',
        color='violet',
        label='derivative'
    )

x 軸の目盛ラベルに傾けて表示する方法がちょっと面倒になっています。グリッドは ax を基準にしました。また余白の調節をしています。

    fig.legend(loc='outside lower center')

    for tick in ax.get_xticklabels():
        tick.set_rotation(45)
    ax.set_ylabel('Temperature')
    ax.grid()

    ax2.set_ylabel('Derivative')

    plt.subplots_adjust(top=0.99, left=0.1, bottom=0.3, right=0.8)
    plt.show()

参考サイト

  1. 気象庁|過去の気象データ検索
  2. pandas.DataFrame, Seriesを時系列データとして処理 | note.nkmk.me
  3. scipy.interpolate.make_interp_spline — SciPy v1.12.0 Manual
  4. pandasで日付・時間の列を処理(文字列変換、年月日抽出など) | note.nkmk.me
  5. matplotlib.axes.Axes.twinx — Matplotlib documentation

 

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

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



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

2024-03-20

Ubuntu 24.04 の壁紙

2024 年 4 月 25 日にリリース予定 [1] の今度の Ubuntu 24.04 LTS の開発コードは、“⁠Noble Numbat⁠”(高貴なフクロアリクイ)と名付けられています。リリース前の Daily build [2] で壁紙がリリースされました。

Ubuntu 24.04 ⁠⁠Noble Numbat の壁紙

たかが壁紙ですが、リリースの顔みたいなものなんで、毎回記事にしています。😅

参考サイト

  1. Noble Numbat Release Schedule - Release - Ubuntu Community Hub
  2. Ubuntu Daily Build

 

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

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



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

CachyOS と KDE Plasma 6

CachyOS は Arch Linux ベースの Linux ディストリビューションです。デフォルトの Linux カーネルは BORE (Burst-Oriented Response Enhancer) スケジューラを使って大幅に最適化されており、デスクトップパッケージは LTO (Link Time Optimization) と x86-64-v3 でコンパイルされています。利用可能なデスクトップ環境とウィンドウマネージャには、KDE、GNOME、Xfce、CuteFish、i3wm、Wayfire、LXQt、OpenBox、Cinnamon、UKUI、LXDE、MATE、Budgie、Qtile、Hyprland、Sway があります。CachyOS はまた、グラフィカルインストーラーとコマンドラインインストーラーを同梱し、セキュリティの強化とパフォーマンスの最適化を行った Cachy-Browser と呼ばれる Firefox ベースのブラウザを提供しています。

Distrowatch より引用、翻訳

Distrowatch.com で CachyOS が KDE Plasma 6 に対応したバージョンをリリースしたとのニュースがありましたので [1]、仮想環境 GNOME Boxes にインストールしてみました。

CachyOS (cachyos-kde-linux-240316.iso) のデスクトップ画面

インストーラは Calamares ベースでした。

カーネルを最適化したりと、パッケージのビルドに特徴のあるディストロのようです。少し評価して詳しくまとめたいと思います。

参考サイト

  1. Distribution Release: CachyOS 240313 (DistroWatch.com News)
  2. CachyOS — Blazingly Fast OS based on Arch Linux — CachyOS
  3. 信頼性とスピードを兼ね備えた「CachyOS」--「Arch Linux」を試したい人向け - ZDNET Japan [2023-05-01]

 

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

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



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

2024-03-17

KaOS 2024.03 と KDE Plasma 6

KaOS は デスクトップ用途の Linux ディストリビューションで、最新バージョンの KDE デスクトップ環境、Qt ツールキットを使用するその他の一般的なソフトウェアアプリケーションを搭載しています。

Wikipedia より引用・翻訳、編集

先日正式にリリースされた KDE Plasma 6 をいち早くデスクトップ環境に反映している Linux ディストロを探索していたところ、KaOS というディストロが対応していることを知りました。

KaOS のデスクトップ画面

ノート「Linux ディストロ探訪」に、KaOS を取り上げました[サイトへ]。継続的に内容を更新していきます。

参考サイト

  1. KaOS – A Lean KDE Distribution

 

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

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



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