0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Julia]Pythonと速度比較

Last updated at Posted at 2025-04-06

はじめに

 データ分析や機械学習などに利用できるプログラムとして、Juliaがあると知った。
 以下3点のメリットから今後利用することがあるかもしれないので、備忘録として初歩的なことから欲しかった資料をまとめていく。
 [1]Pythonと同じようにライブラリを利用できる
 [2]実行速度がC言語よりも速い
 [3]PythonやC言語と連携することもできる

実行環境

 参考資料[1]で構築したVSCにおけるWSL2で実行している。

検証したプログラム

比較検証対象のプログラム

 参考資料[2]で作成した平均値補完およびkNN補完をするプログラム

python仮想環境

reuirements.txt(クリックで展開)
reuirements.txt
joblib==1.4.2
numpy==2.2.4
pandas==2.2.3
python-dateutil==2.9.0.post0
pytz==2025.2
scikit-learn==1.6.1
scipy==1.15.2
setuptools==75.8.0
six==1.17.0
threadpoolctl==3.6.0
tzdata==2025.2
wheel==0.45.1

pythonプログラム

main.py(クリックで展開)
main.py
import sys
import os
import time

# `process` ディレクトリをパスに追加
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../process")))

from read import read_csv
from completion_numeric_data import completion_mean
from knn_imputation import fill_missing_data_with_knn

def main():
    #開始時刻
    start = time.time()  

    file_path = "../data/raw/random_data_100.csv"

    #CSVファイルのデータフレーム登録
    df_hunter = read_csv(file_path)

    column = "play_time"

    #平均値で欠損値を補完
    df_hunter = completion_mean(df_hunter, column)

    k = 5
    column = "sub_weapon"
    features = ["HR", "gender", "area", "main_weapon", "play_time"]

    #knnで欠損値を補う
    df_hunter = fill_missing_data_with_knn(df_hunter, column, features, k)

    print(df_hunter)

    #終了時刻
    end = time.time()  
    
    print(f"\n🕒 実行時間: {end - start:.3f}")

if __name__ == '__main__':
    main()

read.py(クリックで展開)
read.py
import pandas as pd

#csvファイルを読み込み、データフレームに登録
def read_csv(csv_file):
    df = pd.read_csv(csv_file,encoding="utf_8")

    return df
completion_numeric_data.py(クリックで展開)
completion_numeric_data.py
import pandas as pd

def completion_mean(df, column):
    # play_time列の平均値を計算(NaNを除く)
    mean_play_time = df[column].mean()

    # NaNを平均値で補完
    df[column] = df[column].fillna(mean_play_time)

    return df
knn_imputation.py(クリックで展開)
knn_imputation.py
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd

def fill_missing_data_with_knn(df, column, features, k):
    # 欠損値が存在するか確認
    if df[column].isna().sum() == 0:
        print(f"[INFO] {column} に欠損値はありません。")
        return df

    # 特徴量とターゲット列のデータを準備
    df_features = df[features + [column]].copy()

    # One-Hot Encoding(欠損のある列は除いてエンコード)
    df_encoded = pd.get_dummies(df_features[features])

    # 欠損のない行(学習用)
    train_df = df_encoded[df[column].notna()]
    train_target = df.loc[df[column].notna(), column]

    # 欠損のある行(予測対象)
    test_df = df_encoded[df[column].isna()]

    # KNN分類器で学習・予測
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(train_df, train_target)
    predictions = model.predict(test_df)

    # 元のDataFrameに予測結果を補完
    df.loc[df[column].isna(), column] = predictions

    return df

結果

実行結果

 1つ目の画像が実行前だが、2つ目の実行画像のように欠損値が補完されていることを確認できた。
image.png

image.png

比較結果

 処理時間について以下のような結果となった。
 ①初回実行時はPythonの方が処理時間が短かったが、2回目以降はJuliaの方が安定して高速だった。
  ②データ件数が10000件において、JuliaよりもPythonのほうが高速だった。

image.png
image.png
image.png

image.png

 ①の要因として、Pythonはキャッシュを利用しているため初回から速かったが、Juliaは2回目以降JITコンパイルした情報をITコンパイルしたネイティブコードを「プロセスのメモリ上」にキャッシュしているため、2回目以降の処理時間が早くなる。この違いによって、2回目以降はJuliaのほうが速かったと考えられる。
 ②について、データ件数が少なすぎるためJuliaの処理よりもPythonのほうが適切だった可能性がある。また、Pandasの中身はC/C++で記載されているため、大きく速度に差分が出なかったと考えられる。

まとめ

 JuliaのほうがPythonよりも動作が速いと一般的に言われているが、データ件数が10000件程度ではPythonのほうが処理が速く、金融時系列分析や治療法のシミュレーションなど、大規模なデータや複雑な計算を解くためには有効のようだ。  

参考資料

[1]svoboda, 『[Julia]VSCにおけるWSL2でのJulia 環境構築~サンプルコード実行まで』, https://qiita.com/svoboda/private/6a0ad624bc58a354edb3
[2]svoboda, 『[Julia]kNN実装と速度検証 Part2 (ソースコード~検証結果)』, https://qiita.com/svoboda/private/21d1562dd689992dd658
[3]JuliaHub, 『Pharmaceutical Development』, https://juliahub.com/industries/case-studies/pfizer
[4]JuliaHub, 『Julia for Banking & Finance』, https://juliahub.com/industries/banking-and-finance

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?