StreamlitからCData ODBC Driverを利用してみた

by 杉本雄太 | December 16, 2024

はじめに

この記事ではPythonで実装されたオープンソースのWebアプリケーションのフレームワークであるStreamlitで、CData ODBC Driverを扱う方法をご紹介します。

Streamlitとは

StreamlitはPythonで実装されたオープンソースのWebアプリケーションのフレームワークです。Streamlitを用いることで、機械学習やデータサイエンスのためのカスタムウェブアプリを簡単に作成・共有できます。

Streamlitの詳細についてはこちらのリンクを合わせて参照ください。

Streamlitでアプリ作成

CData ODBC Driverのインストール

まずはStreamlitから利用するCData ODBC Driverをインストールします。今回はCData ODBC Driver for Salesforceを利用します。

インストール後はODBC Data SourceからDSN構成の設定を行います。接続設定の詳細は割愛しますが、接続設定については製品ドキュメントをご確認ください。

Python環境の準備

詳細は割愛しますが、この記事では3.11.9のバージョンを利用しています。

必要なパッケージのインストール

Python環境の準備が出来たら、必要なパッケージをインストールします。

pip install streamlit pandas pyodbc matplotlib

Streamlitのアプリを作成

app.pyファイルを作成して、以下のコードを記述します。コードについて簡単に解説しますと、pyodbcよりCData ODBC Driver for Salesforceを利用して、Salesforceのデータにアクセスしています。

import streamlit as st
import pyodbc
import pandas as pd

# データベースに接続
def get_connection():
    conn = pyodbc.connect('DSN=CData Salesforce Sys')
    return conn

# データを取得
def load_data(query):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute(query)
    columns = [column[0] for column in cursor.description]
    data = cursor.fetchall()
    df = pd.DataFrame.from_records(data, columns=columns)
    cursor.close()
    conn.close()
    return df

# データを可視化
def visualize_data(df, query_name):
    if query_name == "取引先(Account)一覧を取得":
        # 業種ごとの取引先数を棒グラフで表示
        industry_counts = df['Industry'].value_counts()
        st.subheader("業種ごとの取引先数")
        st.bar_chart(industry_counts)
    elif query_name == "商談(Opportunity)の詳細":
        # 商談の金額トップ10を棒グラフで表示
        st.subheader("商談の金額トップ10")
        df_sorted = df.dropna(subset=['Amount']).sort_values(
            'Amount', ascending=False).head(10)
        st.bar_chart(df_sorted.set_index('Name')['Amount'])
    elif query_name == "リード(Lead)のリスト":
        # 会社ごとのリード数を円グラフで表示
        company_counts = df['Company'].value_counts().head(10)
        st.subheader("会社ごとのリード数")
        st.pyplot(company_counts.plot.pie(
            autopct="%1.1f%%", figsize=(5, 5)).figure)

# Streamlitのアプリのメイン部分
def main():
    st.title("Streamlitアプリ")

    st.header("クエリの選択")
    query_options = {
        "取引先(Account)一覧を取得": "SELECT Id, Name, Industry FROM Account",
        "商談(Opportunity)の詳細": "SELECT Id, Name, Amount, CloseDate FROM Opportunity",
        "リード(Lead)のリスト": "SELECT Id, FirstName, LastName, Company FROM Lead",
    }
    query_name = st.selectbox("クエリを選択してください", list(query_options.keys()))
    query = query_options[query_name]

    if st.button("データを取得"):
        try:
            df = load_data(query)
            st.success("データの取得に成功しました。")
            st.header("取得したデータ")
            st.dataframe(df)

            # 可視化オプションの提供
            st.header("データの可視化")
            visualize_data(df, query_name)
        except Exception as e:
            st.error(f"エラーが発生しました: {e}")

if __name__ == "__main__":
    main()


Streamlitの起動

以下のコマンドでStreamlitを起動すると自動でブラウザが立ち上がります。

streamlit run app.py

ドロップダウンリストからクエリを選択して、「データを取得」ボタンを押すと、クエリが実行され、取得されたデータが表示されます。

他のクエリを選択して、「データを取得」ボタンを再度押すと、別のデータが取得され、表示されなおします。

まとめ

簡単ではありますが、この記事ではPythonで実装されたオープンソースのWebアプリケーションのフレームワークであるStreamlitで、CData ODBC Driverを扱う方法をご紹介致しました。Streamlitでは簡単にWebアプリを作成することが出来ます。CData ODBC Driverを利用することで、StreamlitからSaaSなどのデータソースへ簡単に接続出来るようになります。

各コネクタは30日間の評価版が無料で利用できますので、Streamlitとクラウドサービスとのデータ連携を検討している方はぜひお試しください。