概要
VS Code 利用時に Github Copilot にてコード全体に対する変更が実施可能であることを YouTube の動画(本記事の内容とは別の内容です)にて知りました。今までメソッドごとに修正作業を確認しながら実施していたため、そんな便利な方法があったのかと驚きました。本記事では、サンプルとして用意したサンプルコードの修正を実施する手順を紹介します。
引用元:https://youtu.be/9ngQFuAsiiM?si=sX1cOCjysoQEUlyM&t=78
手順
1. 修正作業のコードを準備
下記のコードは Github Copilot にて生成した検証用のコードです。
class Sample:
def __init__(self):
pass
def sample_method1(self, path: str) -> pd.DataFrame:
data = pd.read_csv(path)
print(data.head())
return data
def add_current_date_column(self, data: pd.DataFrame, col_name: str) -> pd.DataFrame:
data[col_name] = pd.to_datetime('today').date()
return data
def convert_to_spark_dataframe(self, data: pd.DataFrame) -> pd.DataFrame:
spark = SparkSession.builder.getOrCreate()
spark_df = spark.createDataFrame(data)
spark_df = spark_df.withColumn("audit_column", F.current_timestamp())
return spark_df.toPandas()
2. インラインチャット(Ctrl + I
)を起動してプロンプトをリクエスト(Enter
)
後述する理由により同一コードに対する処理を2度行うため、コード全体を選択しています。全体を選択しない場合でも、コード全体に対する修正が実施されました。
コード全体に対して、次の条件を満たす改善を実施してください。
- 英語で記述する
- 不足しているライブラリを import する
- Google スタイルの Docstring を記述する
- メソッド内のコードに Docstring だけでなく、適切なソースコードコメントを追加する
- パラメータにデータ型ヒントを記述する
3. 変更内容を Accept する
一度目の提案ではコードに対するコメントが実施されなかったため、再度プロンプトをリクエストしました。
4. 変更されたコードを確認
import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
class Sample:
def __init__(self):
pass
def sample_method1(self, path: str) -> pd.DataFrame:
"""
Reads a CSV file from the given path and returns the data as a pandas DataFrame.
Args:
path (str): The path to the CSV file.
Returns:
pd.DataFrame: The data read from the CSV file.
"""
# Read the CSV file
data = pd.read_csv(path)
print(data.head())
return data
def add_current_date_column(self, data: pd.DataFrame, col_name: str) -> pd.DataFrame:
"""
Adds a new column with the current date to the given DataFrame.
Args:
data (pd.DataFrame): The input DataFrame.
col_name (str): The name of the new column.
Returns:
pd.DataFrame: The DataFrame with the new column added.
"""
# Add a new column with the current date
data[col_name] = pd.to_datetime('today').date()
return data
def convert_to_spark_dataframe(self, data: pd.DataFrame) -> pd.DataFrame:
"""
Converts the given pandas DataFrame to a Spark DataFrame.
Args:
data (pd.DataFrame): The input DataFrame.
Returns:
pd.DataFrame: The converted Spark DataFrame.
"""
# Create a SparkSession
spark = SparkSession.builder.getOrCreate()
# Convert pandas DataFrame to Spark DataFrame
spark_df = spark.createDataFrame(data)
# Add an audit column with the current timestamp
spark_df = spark_df.withColumn("audit_column", F.current_timestamp())
return spark_df.toPandas()
まとめ
GitHub Copilotを使用して、Pythonプログラムに対してDocstringや不足しているライブラリのインポートなど、コード全体の修正を行いました。GitHub Copilotは非常に便利であり、この記事のようなテクニックを使用することで生産性を向上させることができます。