開発者ガイド - CData Python Connector と Pandas
この記事では、CData Python Connector for CSV を使用して、Pandas などのモジュールで Python 上の CSV データを可視化する方法をご紹介します。ここでは、CSV ファイルを含むフォルダのパスをユーザーに入力してもらい、利用可能なテーブルを一覧表示し、選択したテーブルのデータを表示する Python スクリプトを作成していきます。
注: この記事では CData Python Connector for CSV を例に説明していますが、同じ原則は CData がサポートする 270 以上のデータソース すべてに適用できます。
完成したスクリプトはこちらからご覧いただけます: 完成版スクリプト
前提条件
このガイドを進めるには、以下が必要です:
- CData Python Connector for CSV
- Python 3.8、3.9、3.10、3.11、または 3.12 がインストールされていること
- CSV ファイルにアクセスでき、読み取り権限があること: サンプル CSV ファイル(ZIP 形式でダウンロード可能)
ステップバイステップガイド
-
必要なモジュールをインストールする
ターミナルで pip ユーティリティを使用して、Pandas モジュールと SQLAlchemy ツールキットをインストールします:
pip install pandas pip install sqlalchemy -
Python ファイルを作成してモジュールをインポートする
新しい Python ファイルを作成し、以下のコードでモジュールをインポートします:
import pandas as pd import matplotlib.pyplot as plt from sqlalchemy import create_engine -
CSV ファイルパスの入力を求める
ユーザーに CSV ファイルパスの入力を求め、その値を格納する変数「file_path」を作成します:
file_path = input("Enter the full path to the folder that is holding your CSV file, for example 'C:/Users/Public/CSVFiles': ")
-
SQLAlchemy エンジンを作成する
入力を取得したら、CSV 接続用の接続文字列を作成し、クエリの実行に使用する SQLAlchemy エンジンを作成します。接続文字列を格納する変数「conn_str」と、その接続文字列を使用する SQLAlchemy エンジンの変数「engine」を作成しましょう:
conn_str = f"csv:///?URI={file_path};RowScanDepth=0" engine = create_engine(conn_str)注: 「RowScanDepth」プロパティを「0」に設定しています。これにより、行をスキャンする際に CSV ファイル全体が解析され、CSV ファイルの表形式表現のカラム名とデータ型が動的に決定されます。ドキュメント全体をスキャンするとリクエストに時間がかかる場合がありますが、データモデルを反映する際にカラムのデータ型がより正確になります。
-
利用可能なテーブルを一覧表示する
接続で利用可能なテーブルを一覧表示するには、「sys_tables」システムテーブルにクエリを実行し、その結果を表示します。クエリ用の変数を作成し、「engine」接続オブジェクトと共に read_sql() メソッドで SELECT クエリを実行します:
query1 = f"SELECT TableName FROM sys_tables" df1 = pd.read_sql(query1, engine)Pandas がクエリを実行し、結果をデータフレームの形式で返します。使いやすくするために、結果をリストに変換し、ユーザーがテーブルを選択するための番号と共に表示します:
tables = df1["TableName"].tolist() # 利用可能なテーブルを表示 print("\nAvailable tables:") for idx, table in enumerate(tables, start=1): print(f"{idx}.{table}") -
ユーザーにテーブルの選択を求める
テーブルが一覧表示されたら、ユーザーにテーブル番号の入力を求める変数「table_choice」を作成し、別の変数「selected_table」でテーブル番号に基づいてテーブル名を取得します:
table_choice = int(input("\nSelect a table number from above: ")) - 1 selected_table = tables[table_choice]
-
SQL を実行して CSV データを可視化する
テーブル選択の入力を取得したら、選択したテーブルにクエリを実行してデータを表示します。再度、クエリ用の変数を作成し、「engine」接続オブジェクトと共に read_sql() メソッドで SELECT クエリを実行します:
query2 = f"SELECT * FROM [{selected_table}]" df2 = pd.read_sql(query2, engine)これで、クエリの結果を含むデータフレームを表示できます:
print("\nData from the selected table:") print(df2) exit()
データ開発者向け無料 Community License
CData Python Connector は、SaaS、NoSQL、ビッグデータシステムなど、従来のデータベースを超える 270 以上のデータソースへの一貫した SQL ベースの接続を提供し、Python DB-API と Pandas の機能をさらに強化します。
CData Python Community License を使用すると、個人の Python プロジェクトで使い慣れた SQL を通じてデータにアクセスするためのライブラリを永続的に無料で利用できます。ライセンスをリクエストして、今すぐより連携性の高いプロジェクトを始めましょう!
完成版スクリプト
import pandas as pd
import matplotlib.pyplot as plt
from sqlalchemy import create_engine
# ユーザーに CSV ファイルパスの入力を求める
file_path = input("Enter the full path to the folder that is holding your CSV file, for example 'C:/Users/Public/CSVFiles': ")
# SQLAlchemy エンジンを作成
conn_str = f"csv:///?URI={file_path};RowScanDepth=0"
engine = create_engine(conn_str)
# sys_tables にクエリして利用可能なテーブルを表示
query1 = f"SELECT TableName FROM sys_tables"
df1 = pd.read_sql(query1, engine)
tables = df1["TableName"].tolist()
# 利用可能なテーブルを表示
print("\nAvailable tables:")
for idx, table in enumerate(tables, start=1):
print(f"{idx}.{table}")
# ユーザーにテーブルの選択を求める
table_choice = int(input("\nSelect a table number from above: ")) - 1
selected_table = (tables[table_choice])
# 選択したテーブルにクエリを実行
query2 = f"SELECT * FROM [{selected_table}]"
df2 = pd.read_sql(query2, engine)
# 選択したテーブルのデータを表示
print("\nData from the selected table:")
print(df2)
exit()