見出し画像

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の設定

  1. プロジェクトの作成

    • Google Cloud Consoleにアクセス

    • 新しいプロジェクトを作成(今回は"taki-sample001-202402")

  2. サービスアカウントの設定

    • IAMと管理 → サービスアカウント

    • 「サービスアカウントを作成」をクリック

    • 必要な権限を付与:

      • BigQuery 管理者

      • BigQuery データ閲覧者

      • BigQuery ジョブユーザー

  3. 認証用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)

🤔 ハマったポイント

  1. パッケージ関連

    • db-dtypesが必要だったのは盲点でした

    • パッケージのインストール順序が重要

    • pipの更新後に必要なパッケージをインストールすることで問題が解決しました。

  2. 権限周り

    • 最初「BigQuery閲覧者」権限のみで403エラー

    • 以下の権限追加で解決

      • BigQuery 管理者

      • BigQuery データ閲覧者

      • BigQuery ジョブユーザー

  3. JSONキーの扱い

    • パスは絶対パスで指定するのが無難

    • 機密情報なのでGitには絶対コミットしないように注意

📝 明日に向けて

明日はこのテストデータを使って、以下のような分析をしてみたいと思います:

  • 部門別の収支分析

  • 科目別の月次推移

  • 仕訳パターンの分類

特に、Pandasを使った集計・分析手法を試してみる予定です。

質問やアドバイスがあればコメントください!

#Python #BigQuery #財務分析 #AdventCalendar

Written by たき@財務RAGチャレンジ中

いいなと思ったら応援しよう!