BigQueryで財務データを覗いてみた - Day 2
たき@財務RAGチャレンジ中です。 BigQueryを使って財務データを分析する環境を整えました。最初の一歩は想像以上に手こずりましたが、何とか動くところまで来ました!
🔧 環境構築の流れ
1. 必要なパッケージのインストール
# pipの更新
python -m pip install --upgrade pip
# 必要なパッケージをインストール
pip install pandas
pip install google-cloud-bigquery
pip install google-cloud-bigquery[pandas]
pip install db-dtypes
2. Google Cloud Platformの設定
プロジェクトの作成
Google Cloud Consoleにアクセス
新しいプロジェクトを作成(今回は"taki-sample001-202402")
サービスアカウントの設定
IAMと管理 → サービスアカウント
「サービスアカウントを作成」をクリック
必要な権限を付与:
BigQuery 管理者
BigQuery データ閲覧者
BigQuery ジョブユーザー
認証用JSONキーの取得
サービスアカウントの詳細画面で「キーを追加」
新しい鍵を作成(JSON形式)
ダウンロードしたJSONファイルを安全な場所に保存
💻 最初のPythonコード
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
# 認証情報の設定
credentials = service_account.Credentials.from_service_account_file(
'your-key.json' # ダウンロードしたJSONファイルのパス
)
# BigQueryクライアントの初期化
client = bigquery.Client(
credentials=credentials,
project='taki-sample001-202402' # プロジェクトID
)
# サンプルクエリ
query = """
SELECT current_datetime() as now
"""
# クエリ実行とデータフレーム化
df = client.query(query).to_dataframe()
print(df)
📊 テーブル設計とデータ登録
テストデータ用に以下のテーブルを作成しました:
CREATE TABLE `taki-sample001-202402.accounting.journal_entries`
(
journal_id STRING, -- 仕訳番号
entry_date DATE, -- 仕訳日付
accounting_date DATE, -- 会計日付
debit_account STRING, -- 借方科目コード
debit_account_name STRING, -- 借方科目名
credit_account STRING, -- 貸方科目コード
credit_account_name STRING, -- 貸方科目名
amount NUMERIC, -- 金額
department_code STRING, -- 部門コード
department_name STRING, -- 部門名
description STRING, -- 摘要
created_at TIMESTAMP, -- 登録日時
updated_at TIMESTAMP -- 更新日時
)
テストデータとして以下のような取引を登録してみました:
-- テストデータ登録
INSERT INTO `taki-sample001-202402.accounting.journal_entries`
VALUES
-- 売上に関する仕訳
('J230401001', '2023-04-01', '2023-04-01', '1131', '普通預金',
'5111', '売上高', 550000, 'SALES01', '営業1部',
'3月分売上入金 A社', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
('J230401002', '2023-04-01', '2023-04-01', '1131', '普通預金',
'5111', '売上高', 320000, 'SALES02', '営業2部',
'3月分売上入金 B社', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
-- 経費の仕訳
('J230402001', '2023-04-02', '2023-04-02', '6111', '給与手当',
'1131', '普通預金', 2800000, 'HR001', '人事部',
'3月分給与支払', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
-- 固定資産購入
('J230405001', '2023-04-05', '2023-04-05', '1211', '建物付属設備',
'1131', '普通預金', 1200000, 'ADMIN01', '総務部',
'オフィス内装工事', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
登録したデータを確認するクエリを実行:
query = """
SELECT
entry_date,
debit_account_name,
credit_account_name,
amount,
description
FROM `taki-sample001-202402.accounting.journal_entries`
ORDER BY entry_date DESC
LIMIT 5
"""
df = client.query(query).to_dataframe()
print(df)
🤔 ハマったポイント
パッケージ関連
db-dtypesが必要だったのは盲点でした
パッケージのインストール順序が重要
pipの更新後に必要なパッケージをインストールすることで問題が解決しました。
権限周り
最初「BigQuery閲覧者」権限のみで403エラー
以下の権限追加で解決
BigQuery 管理者
BigQuery データ閲覧者
BigQuery ジョブユーザー
JSONキーの扱い
パスは絶対パスで指定するのが無難
機密情報なのでGitには絶対コミットしないように注意
📝 明日に向けて
明日はこのテストデータを使って、以下のような分析をしてみたいと思います:
部門別の収支分析
科目別の月次推移
仕訳パターンの分類
特に、Pandasを使った集計・分析手法を試してみる予定です。
質問やアドバイスがあればコメントください!
#Python #BigQuery #財務分析 #AdventCalendar
Written by たき@財務RAGチャレンジ中