Oracleから取得したデータをお手軽にグラフにする
Oracleからデータを取得してグラフする簡単なコード
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()で出た画面。
ちゃんとできた。
たけど、軸ごとに色が違う。。