1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(分析3)IBMiのライブラリ毎の種類別オブジェクト数をjupyterで集計

Posted at

■概略

オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
IBMiのライブラリ毎の種類別オブジェクト数をjupyterで集計しました
SQL+pythonでループ+dataframeの使い方(合計追加と横持ち→縦持ち変換)です

■集計結果

OBJATTRIBUTE CLP DFU DSPF OTHER PRTF RPG RPGLE SAVF
BKNLIB 1444 207 1266 173 265 2495 228 0
BKNLIBF 0 0 0 60 0 0 0 0
TOTAL 2469 365 2136 360 414 4525 256 1

…続く(画面に入らないので左右に分割し上下に並べた)
OBJATTRIBUTE LF PF QRY TOTAL
BKNLIB 0 56 252 6386
BKNLIBF 816 1046 5 1927
TOTAL 3710 4986 650 19872

■集計コード

※jupyterのインストール、接続などの共通関数は
 (分析1)jupyterでSQL設計とデータ分析に掲載している
 使用しているSQLは上記の「オブジェクト名取得(DSPFD相当)」

# DB接続
conn = connect_dev()

df = pd.DataFrame()
LIBL = ['BKNLIB', 'BKNLIBF'] # 集計するライブラリの配列を指定する
for LIB in LIBL:
    # (分析1)...の「オブジェクト名取得(DSPFD相当)」のSQLでライブラリ名を
    # pythonのループで指定している
    query = """
    SELECT '{0}' as LIBID,OBJATTRIBUTE,count(*) as CNT
      FROM TABLE(QSYS2.OBJECT_STATISTICS('{0}','*ALL'))
     group by OBJATTRIBUTE
     order by OBJATTRIBUTE
    """.format(LIB)
    df_tmp = pd.read_sql(sql=query, con=conn)
    df_tmp = df_tmp.replace('', 'OTHER') # 空白はOTHERにする
    # 1ライブラリにつき種類別行数の集計を結合する
    df = pd.concat([df, df_tmp], ignore_index=True)
#display(df)

# 縦持ちを横持ちにする
pivot_df = df.pivot_table('CNT', index=['LIBID'], columns=['OBJATTRIBUTE'], aggfunc='sum')
pivot_df = pivot_df.fillna(0)   # N/Aを0にする
pivot_df = pivot_df.astype(int) # 整数にする
pivot_df['TOTAL'] = pivot_df.sum(axis = 1,numeric_only=True) # 各行の合計
# 各列の合計
total_df = pivot_df.sum(axis = 0).to_frame().T
total_df.index=["TOTAL"]
pivot_df = pd.concat([pivot_df, total_df])

dt_now = datetime.datetime.now().strftime('%Y%m%d%H')
print("■as400dev({0})".format(dt_now))
display(pivot_df)

# CSVに出力する
pivot_df.to_csv('DSPOBJD@AS400DEV_{0}.csv'.format(dt_now))

◯縦持ちを横持ち変換(pivot)
pivot_table前のdataframeは以下の形になっている
BKNLIBで1行、BKNLIBFで1行にまとめたい=縦持ちを横持ちに変換したい
pivot_tableで変換を行う。詳しくはpandas.dataframeのpivot_tableを調べてください

LIBID OBJATTRIBUTE CNT
0 BKNLIB OTHER 173
1 BKNLIB CLP 1444
2 BKNLIB DFU 207
3 BKNLIB DSPF 1266
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?