Cloud Storageに保存したCSVファイルをDataFrameとしてPython上で呼び出してみた

Cloud Storageに保存したCSVファイルをPython上でDataFrameとして呼び出してみました。
2023.06.30

クラスメソッド株式会社データアナリティクス事業本部所属のニューシロです。
今回はGoogle CloudのサービスであるCloud Storageに保存したCSVファイルをDataFrameとしてPython上で呼び出してみました。 以前に書いた以下の記事と方向性は同じです。

やりたいこと

Python上でCloud Storageに保存したCSVファイルを読み込んでDataFrameを作成し、inputの値に対応するデータを出力します。

本題

環境

ツールはGoogle CloudのCloud Shell Editorを使用しました。

CSVファイル

こちらのCSVファイルをCloud Storageに保存し、Python上で呼び出したいと思います。
CSVファイルには動物の英語名、日本語名、鳴き声、場所を書いてみました。

animals.csv

en_name,jp_name,cry,place
dog,"いぬ","ワン","外"
cat,"ねこ","ニャー","家"
horse,"うま","ヒヒーン","牧場"

保存したバケット名はdevelopersioで、オブジェクト名はanimals.csvです。

Pythonコード

流れとしては、Cloud Storageからdownload_as_bytesでCSVファイルを読み込み、
io.BytesIOpandas.read_csvでPandasのDataFrameオブジェクトを作成しています。

今回はinputを用いて、入力された英語の動物名に対応する行を取得するようにしました。
df.queryでDataFrameから該当する行を検索します。変数はdf.locでそれぞれ取得しています。

また、該当するデータがなかった場合用のprint文もifで用意しました。

以下が使用するPythonのコードです。

from io import BytesIO

import pandas as pd
from google.cloud import storage


def search_animal(input_en_name):

    #CSVファイルをCloud Storageからbytes型として取得
    storage_client = storage.Client()
    bucket = storage_client.get_bucket("developersio")
    blob = bucket.blob("animals.csv")
    bytes_object = blob.download_as_bytes()

    # 取得したCSVファイルからDataFrameオブジェクトを作成
    stream = BytesIO(bytes_object)
    animals_df = pd.read_csv(stream)

    target_df = animals_df.query(f"en_name == '{input_en_name}'")

    # 全データと一致しなかった場合
    if len(target_df) == 0:
        print("その動物はいなかったよ!")
    
    # 一致した場合は他の変数も取得しprint文で出力
    else:
        jp_name = target_df.loc[0, "jp_name"]
        cry = target_df.loc[0, "cry"]
        place = target_df.loc[0, "place"]

        print(f"{jp_name}だよ! {cry}! {place}にいるよ!")


input_en_name = input("動物名を英語で入力してね!")

search_animal(input_en_name)

実行

このコードを実行してみます。

new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py
動物名を英語で入力してね!

試しにcatと入力してみます。

new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py
動物名を英語で入力してね!cat
ねこだよ! ニャー! 家にいるよ!

このようにCloud StorageのCSVファイルから該当する情報を出力してくれます。

animals.csvに追記する

また、このように管理するファイルを分けておくと、情報を追加したい際にとても便利です。
新たに以下の動物を追加してみます。

dolphin,"いるか","キューキュー","海"

もちろん元のPythonコードを触らずにanimals.csvに追記するだけで済みます。

animals.csv

en_name,jp_name,cry,place
dog,"いぬ","ワン","外"
cat,"ねこ","ニャー","家"
horse,"うま","ヒヒーン","牧場"
dolphin,"いるか","キューキュー","海"

確認のためPythonコードを実行し、dolphinと入力します。

new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py
動物名を英語で入力してね!dolphin
いるかだよ! キューキュー! 海にいるよ!

もちろん出力されますね!

最後に

このように、必要な情報はPythonコード外から取得しましょう!
今回はわかりやすいように動物をテーマにしておりますが、configファイルとして利用すると入力値に対して適切な値やパス等を返してくれるので便利ですね。

また、今回コード内で使用したread_csvは直接gsutil URIを参照することもできるそうなので、次はそちらを調べてみようと思います。

以上です。ここまでお読みいただきありがとうございました。

引用・参照まとめ