LoginSignup
6
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-05

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()で出た画面

image.png

コードの補足

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で確認)

image.png

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

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


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

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

image.png

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

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

image.png

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


plt.subplots_adjust(bottom = 0.3)

image.png

追記 グラフの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()で出た画面。
ちゃんとできた。

image.png

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

6
7
0

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
6
7