記事
· 2024年7月16日 12m read

InterSystems IRIS BI の KPIとしてPandasを用いる

Pandas は単に人気のあるソフトウェアライブラリだけではありません。 これは、Python データ分析環境の基礎でもあります。 その単純さとパワーで知られており、データの準備と分析の複雑さをより扱いやすい形態に変換する上で不可欠な多様なデータ構造と関数が備わっています。 これは、主要なデータ管理および分析ソリューションである InterSystems IRIS プラットフォームのフレームワーク内で、主要評価指標(KPI)やレポート作成用の ObjectScript などの特殊な環境に特に関連しています。
 
データの処理と分析の分野において、Pandas はいくつかの理由により際立っています。 この記事では、それらの側面を詳細に探ります。
 

  • データ分析における Pandas の主なメリット:

ここでは、Pandas を使用する様々なメリットについて深く掘り下げます。 直感的な構文、大規模なデータセットの効率的な処理、および異なるデータ形式のシームレスな操作などが含まれます。 Pandas を既存のデータ分析ワークフローに統合する容易さも、生産性と効率を強化する大きな要因です。

  • Pandas による一般的なデータ分析タスクのソリューション:

Pandas には、単純なデータ集計から複雑な変換まで、日常的なデータ分析タスクを処理できる十分な汎用性が備わっています。 こういった一般的な課題の解決に Pandas をどのように使用できるについて、データクリーニング、変換、および探索的データ分析における機能を紹介しながら説明します。 このセクションでは、Pandas によってこれらのタスクがどれほど単純化されるかに関する実用的なデータを提供します。

  • IRIS の ObjectScript KPI で直接 Pandas を使用する:

IRIS プラットフォームで KPI の開発に Pandas と ObjectScript を統合すると、まさに変革がもたらされます。 ここでは、直接 ObjectScript 内で Pandas を使用して KPI 開発プロセスを強化する方法を説明します。 また、Pandas を使ってデータの分析と可視化を行い、それによってより堅牢でインサイトに満ちた KPI を得る実用的な例も探ります。

  •  IRIS 分析プロセスで Pandas を実装する際の推奨事項:

既存の分析プロセスに新しいツールを実装するのは困難な場合があります。 そのため、このセクションでは、Pandas をできる限り円滑に IRIS 分析エコシステムに統合するためにベストプラクティスと推奨事項を紹介します。 セットアップと構成から最適化とベストプラクティスまで、データ分析ワークフローへの Pandas の統合を成功させるための基本的なガイドラインを説明します。
 
Pandas は、Python プログラミング言語による強力なデータ分析ライブラリです。 Pandas でデータ分析を行うことには、以下のようないくつかのメリットがあります。
 

  1. 使いやすさ: Pandas にはデータ操作用の単純で直感的なインターフェースが備わっています。 NumPy ライブラリをベースに構築されており、DataFrames などの高レベルデータ構造を提供するため、表形式データを簡単に操作できます。  
  2. データ構造: Pandas の主なデータ構造は Series と DataFrame です。 Series はラベル付きの一次元配列であるのに対し、DataFrame は 1 セットの Series を表現する 2 次元のテーブルです。 これらのデータ構造を組み合わせることで、データを便利に格納し、操作することができます。  
  3. 欠損データの処理: Pandas には欠損データ(NaN または None)の検出と処理に使用する便利なメソッドが備わっています。 欠損データを削除、入力、または置換するメソッドがいくつか含まれるため、実際のデータの操作が単純化されます。  
  4. データのグループ化と集計: Pandas では、特徴毎のデータのグループ化と各データグループへの集計関数(合計、平均、中央など)の適応を簡単に行えます。  
  5. 強力なインデックス作成機能: Pandas には、データのインデックスを作成するための柔軟なツールが備わっています。 ラベル、数値インデックス、または複数のレベルのインデックス作成を使用できます。 データを効率的に絞り込み、選択、および操作することができます。  
  6. データの読み取りと書き込み: Pandas では、CSV、Excel、SQL、JSON、HTML など、複数のデータ形式がサポートされています。 様々なソースのデータの読み取りやソースへの書き込みのプロセスが容易です。  
  7. 広範な可視化機能: Pandas には、Matplotlib や Seaborn などの可視化ライブラリが統合されているため、特に Embedded Python 経由の統合を通じて DeepSeeWeb を使用することで、グラフの作成やデータの可視化を簡単に行えます。  
  8. 効率的な時間管理: Pandas には、タイムスタンプや期間を操作するための強力なツールなど、時系列の操作に使用できる機能が複数含まれています。  
  9. 広範なデータ操作機能: ライブラリには、データの絞り込み、ソート、および再構成や、テーブルの結合やマージを行うための様々な関数が備わっているため、強力なデータ操作ツールを得られます。  
  10. 優れたパフォーマンス: Pandas は、大量のデータを処理できるように意図的に最適化されています。 Cython と強化されたデータ構造を使用することで、高いパフォーマンスを提供しています。

 
ObjectScript 環境で Pandas の実装例を見てみましょう。 開発環境として VSCode を使用します。 この場合の IDE は、ObjectScript 用のデバッガーとエディターを提供する InterSystems ObjectScript Extension Pack の提供状況に基づいて選択されました。
まずは、KPI クラスを作成しましょう。

  Class BI.KPI.pandasKpi Extends %DeepSee.KPI
{
}


 
次に、KPI のタイプ、名前、および列とフィルターの数を定義する XML ドキュメントを作成する必要があります。
 

XData KPI [ XMLNamespace = "http://www.intersystems.com/deepsee/kpi" ]
{
<!-- 'manual' KPI タイプは、ユーザーが定義したクラスメソッドからデータが収集されることを DeepSee に示します-->
 
<kpi name="MembersPandasDemo" sourceType="manual">
 
 <!-- この KPI クエリに必要となる列は 1 つのみです -->
 
<property columnNo="1" name="Members" displayName="Community Members"/>
 
<!-- 最後に、メンバーのフィルターを定義する必要があります -->
 
<filter name="InterSystemsMember"
displayName="InterSystems member"
sql="SELECT DISTINCT ISCMember from Community.Member"/>
 
 </kpi>
}


 
次のステップは、Python 関数の定義、インポートの記述、および必要な変数の作成です。
 

ClassMethod MembersDF(sqlstring) As %Library.DynamicArray [ Language = python ]
{
            # First of all, we import the most important library in our script: IRIS.
            # IRIS library provides syntax for calling ObjectScript classes.
            # It simplifies Python-ObjectScript integration.
            # With the help of the library we can call any class and class method, and
            # it returns whatever data type we like, and ObjectScript understands it.
            import iris
            # Then, of course, import the pandas itself.
            import pandas as pd
            # Create three empty arrays:
            Id_list = []
            time_list = []
            ics_member = []


 
次のステップ: データベースに対するクエリを定義します。
 

# Define SQL query for fetching data.
# The query can be as simple as possible.
# All the work will be done by pandas:
            query = """
            SELECT
            id as ID, CAST(TO_CHAR(Created, 'YYYYMM') as Int) as MonthYear, ISCMember as ISC
            FROM Community.Member
            order by Created DESC
            """


次に、生成されるデータを配列グループに保存する必要があります。

 

# Call the class specified for executing SQL statements.
# We use embedded Python library to call the class:
sql_class = iris.sql.prepare(query)
 
# We use it again to call dedicated class methods:
rs = sql_class.execute()
 
# Then we use pandas directly on the result set to make dataFrame:
data = rs.dataframe()


            
We also can pass an argument to filter our data frame.

# フィルターの例
# We take an argument sqlstring which, in this case, contains boolean data.
# With a handy function .loc filtering all the data
sqlstring が False でない場合:
        data = data.loc[data["ISC"] == int(sqlstring)]


 
次に、データをグループ化して、その x 軸を定義する必要があります。
 
 

# Group data by date displayed like MonthYear:
grouped_data = data.groupby(["MonthYear"]).count()

 

残念ながら、直接グループ化されたデータ DataFrame から日付列を取得することはできないため、
代わりに元の DataFrame から日付列を取得して処理します。


 

# Filter out duplicate dates and append them to a list.
# After grouping by MonthYear, pandas automatically filters off duplicate dates.
# We should do the same to match our arrays:
sorted_filtered_dates = [item for item in set(data["MonthYear"])]
# Reverse the dates from left to right:
date = sorted(sorted_filtered_dates, reverse=True)
# Convert dict to a list:
id = grouped_data["ID"].id.tolist()
# Reverse values according to the date array:
id.reverse()
 
# In order to return the appropriate object to ObjectScript so that it understands it,
# we call '%Library.DynamicArray' (it is the closest one to python and an easy-to-use type of array).
# Again, we use IRIS library inside python code:
OBJIDList = iris.cls('%Library.DynamicArray')._New()
OBJtimeList = iris.cls('%Library.DynamicArray')._New()
 
# Append all data to DynamicArray class methods Push()
for i in date:
        OBJtimeList._Push(i)
for i in ID:
        OBJIDList._Push(i)
return OBJIDList, OBJtimeList
}


 
次のステップでは、DeepSee がどのデータを取得するかを理解するように KPI 固有のメソッドを定義します。
 

// メソッドを定義します。 The method must always be %OnLoadKPI(). Otherwise, the system will not recognise it.
 
Method %OnLoadKPI() As %Status
{
 
 //Define string for the filter. Set the default to zero
 set sqlstring = 0
    //Call %filterValues method to fetch any filter data from the widget.
    if $IsObject(..%filterValues) {
        if (..%filterValues.InterSystemsMember'="")
        {
            set sqlstring=..%filterValues.%data("InterSystemsMember")
        }
    }
    //Call pandas function, pass filter value if any, and receive dynamic arrays with data.
    set sqlValue = ..MembersDF(sqlstring)
 
    //Assign each tuple to a variable.
    set idList = sqlValue.GetAt(1)
    set timeList = sqlValue.GetAt(2)
  
    //Calculate size of x-axis. It will be rows for our widget:
    set rowCount = timeList.%Size()
 
    //Since we need only one column, we assign variable to 1:
    set colCount = 1
    set ..%seriesCount=rowCount
  
    //Now, for each row, assign time value and ID value of our members:
    for rows = 1:1:..%seriesCount
    {
        set ..%seriesNames(rows)=timeList.%Get(rows-1)
       
        for col = 1:1:colCount
        {
            set ..%data(rows,"Members")=idList.%Get(rows-1)
        }
    }
    quit $$$OK


この時点で、KPI をコンパイルし、KPI データソースを使ってダッシュボードにウィジェットを作成します。

 

以上です! InterSystems IRIS の ObjectScript アプリケーションで Pandas の統合と使用のプロセスを確認できました。 このプロセスでは、データのフェッチと整形から絞り込みと表示までを 1 つの合理化された関数で行いました。 この実演では、データ分析における Pandas の効率性と力がハイライトされています。 では次に、IRIS 環境内で Pandas を実装する際の実用的な推奨事項を詳しく見て、変換による影響に関するインサイトで締めくくりましょう。
IRIS における実用的な Pandas アプリケーションの推奨事項

  • プロトタイピングから始める:

サンプルのデータセットとユーティリティを使用して Pandas での作業を始めましょう。 この方法によって、制御された使い慣れた環境で Pandas の基本と意味合いを理解できます。 プロトタイピングでは、ライブデータに関連するリスクを伴うことなく、様々な Pandas 関数とメソッドを実験できます。

  • 段階的な実装:

既存のデータプロセスに Pandas を徐々に導入しましょう。 全面的に変更するのではなく、Pandas によってデータ処理と分析が強化または単純化されるエリアを特定します。 データクリーニング集計などの単純なタスクであることも、Pandas の機能を完全に活用できるより複雑な分析であることもあります。

  •  Pandas の使用を最適化する:

大きなデータセットで作業する前に、Pandas コードを最適化しておくことが重要です。 コードの効率によって、処理時間やリソース消費量が大幅に削減されるため、大規模なデータ分析では特に重要です。 ベクトル化操作、適切なデータ型の使用、データ操作でのループの回避といった手法によって、パフォーマンスは大幅に強化されます。


まとめ

InterSystems IRIS プラットフォームの ObjectScript アプリケーションへの Pandas の統合は、データ分析の分野における著しい進歩です。 Pandas によってデータ処理、分析、および可視化に使用できる多数の強力なツールを使用できるようになり、IRIS ユーザーはこれを使用できるようになりました。 この統合は KPI の開発と分析を高速化して単純化するだけでなく、IRIS エコシステム内でのより洗練された高度なデータ分析機能への道も切り開いています。
 
Pandas を使用することで、アナリストと開発者は、その広範な機能を活用してデータからより深い洞察を得ることで、データ分析の新たな地平を探ることができます。 大規模なデータセットを効率的に処理して分析する能力に、魅力的な可視化の作成しやすさを合わせ、ユーザーはより多くの情報に基づいた意思決定を行い、これまで検出が困難であった傾向やパターンを明らかにできるようになります。
 
要約すると、InterSystems IRIS 環境への Pandas の統合は変革的なステップであり、プラットフォームの機能を強化し、増え続ける最新のデータ分析の課題と複雑さに取り組むための拡張されたツールキットをユーザーに提供することができます。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください