Python Oracleで取得したデータをDataFrameに入れてpandasで棒グラフ表示


Oracleから取得したデータをお手軽にグラフにする

Oracleからデータを取得してグラフする簡単なコード

ora_graph.py
import cx_Oracle
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

#サーバ名 / IP
HOST = "xxxxx"
#ポート
PORT = 1521
#SID
SID = "orcl"

tns = cx_Oracle.makedsn(HOST, PORT, SID)
conn = cx_Oracle.connect("scott", "tiger", tns)

#SCOOTユーザのEMP表でJOB単位でSAL列を集計
#ここでdataFrameに結果を格納
df = pd.read_sql_query(
    "  select job,sum(sal) as sal from emp5 group by job ",conn)

conn.close

#x軸を JOBにするため、インデックス変更
df.set_index('JOB',inplace=True)

fig = plt.figure(figsize=(5, 3))
ax = fig.add_subplot(1,1,1)

#棒グラフ
df.plot(ax =ax ,kind='bar')

#表示調整
plt.title("SALARY SUM", fontsize=12)
plt.xlabel("", fontsize=7)
plt.ylabel("", fontsize=7)
plt.subplots_adjust(bottom = 0.3)
plt.tick_params(labelsize=7)

plt.show()

plt.show()で出た画面

コードの補足

Python で Oracleに接続する方法は、前の投稿を参照ください

Windows環境のPythonからOracleに接続してみる
- https://qiita.com/kngsym2018/items/04514d623248a070adee

PythonからOracle接続をSID指定ではなく、SERVICE_NAME指定で接続する
- https://qiita.com/kngsym2018/items/f50499dc235db5dd0736

SQLで取得したデータをDataFrameに格納。

pandas.read_sql_query を使用します。
引数はSQL文とDBコネクション を設定して、
戻り値は DataFrameにデータが格納された状態で戻ります。


df = pd.read_sql_query(
    "  select job,sum(sal) as sal from emp5 group by job ",conn)

取得したDataFrameの結果イメージ
(jupyterで確認)

インデックスが自動で作成された状態でDataFrameが作成される。

pandasでグラフ作成する際、デフォルトだと x軸はインデックスなので、インデックスを[JOB]に変更
set_indexで列を指定、inplaceでそのDataFrameのインデックスを変更。


#x軸を JOBにするため、インデックス変更
df.set_index('JOB',inplace=True)

インデックスを変更した後のイメージ
(jupyterで確認)

上記処理をしてグラフ作成。

x軸が名称になっているので
plt.show()で出た画面を出すと文字が切れてしまいました。

なので、名称が全てでるように
plt.subplots_adjust で調整しました。


plt.subplots_adjust(bottom = 0.3)

追記 グラフのx軸設定

df.plot の引数に x軸の列、y軸の列を指定することでもグラフは作成できますね。


# x軸を JOBにするため、インデックス変更 をコメント
#df.set_index('JOB',inplace=True)

fig = plt.figure(figsize=(5, 3))
ax = fig.add_subplot(1,1,1)

# x軸、y軸を指定
df.plot(ax =ax ,kind='bar',x='JOB',y='SAL')

plt.show()で出た画面。
ちゃんとできた。

たけど、軸ごとに色が違う。。