statcpp ライブラリの各機能を示すサンプルプログラムが examples-ja/ ディレクトリに用意されています。
| ファイル名 | 内容 |
|---|---|
example_basic_statistics.cpp |
平均、中央値、最頻値などの基本統計量 |
example_dispersion_spread.cpp |
分散、標準偏差、範囲などの散布度 |
example_order_statistics.cpp |
四分位数、パーセンタイル、五数要約 |
example_shape_of_distribution.cpp |
歪度、尖度などの分布の形状 |
example_frequency_distribution.cpp |
度数分布、ヒストグラム |
| ファイル名 | 内容 |
|---|---|
example_correlation_covariance.cpp |
相関係数、共分散の計算 |
| ファイル名 | 内容 |
|---|---|
example_special_functions.cpp |
ガンマ関数、ベータ関数、誤差関数など |
example_numerical_utils.cpp |
数値計算ユーティリティ(Kahan加算など) |
| ファイル名 | 内容 |
|---|---|
example_random_engine.cpp |
乱数生成エンジン |
example_continuous_distributions.cpp |
正規分布、t分布、F分布などの連続分布 |
example_discrete_distributions.cpp |
二項分布、ポアソン分布などの離散分布 |
| ファイル名 | 内容 |
|---|---|
example_estimation.cpp |
信頼区間の推定 |
example_parametric_tests.cpp |
t検定、z検定などのパラメトリック検定 |
example_nonparametric_tests.cpp |
Wilcoxon検定、Mann-Whitney検定などのノンパラメトリック検定 |
example_effect_size.cpp |
Cohen's d、相関比などの効果量 |
example_power_analysis.cpp |
検出力分析、サンプルサイズ計算 |
| ファイル名 | 内容 |
|---|---|
example_resampling.cpp |
ブートストラップ、置換検定 |
example_linear_regression.cpp |
単回帰、重回帰分析 |
example_anova.cpp |
分散分析(ANOVA) |
example_glm.cpp |
一般化線形モデル(GLM) |
| ファイル名 | 内容 |
|---|---|
example_multivariate.cpp |
多変量解析 |
example_clustering.cpp |
k-means、階層的クラスタリング |
example_distance_metrics.cpp |
ユークリッド距離、マンハッタン距離などの距離尺度 |
| ファイル名 | 内容 |
|---|---|
example_time_series.cpp |
時系列分析 |
example_categorical.cpp |
カテゴリカルデータ分析 |
| ファイル名 | 内容 |
|---|---|
example_data_wrangling.cpp |
データ変換、欠損値処理 |
example_missing_data.cpp |
欠損値の高度な処理 |
example_robust.cpp |
ロバスト統計(外れ値の影響を受けにくい統計量) |
example_survival.cpp |
生存時間解析 |
| ファイル名 | 内容 |
|---|---|
example_model_selection.cpp |
モデル選択(AIC、BICなど) |
すべてのサンプルプログラムを一括でビルドして実行:
cd examples-ja
./build.shこのスクリプトは:
- すべての
.cppファイルをコンパイル - 実行ファイルを生成
- 各プログラムを実行して出力を表示
特定のサンプルプログラムだけをビルド:
cd examples-ja
# GCC を使用
g++ -std=c++17 -I../include-ja example_basic_statistics.cpp -o example_basic_statistics
# Clang を使用
clang++ -std=c++17 -I../include-ja example_basic_statistics.cpp -o example_basic_statistics
# 実行
./example_basic_statisticsCMake を使ってすべてのサンプルをビルド:
cd examples-ja
mkdir build
cd build
cmake ..
cmake --build .
# 実行
./example_basic_statistics
./example_dispersion_spread
# ...各サンプルプログラムは以下の構成になっています:
- ヘッダーのインクルード: 使用する機能のヘッダーファイルをインクルード
- データの準備: サンプルデータの定義
- 関数の呼び出し: statcpp の関数を使用した計算
- 結果の表示: 計算結果の出力
#include <iostream>
#include <vector>
#include "statcpp/basic_statistics.hpp"
int main() {
// 1. データの準備
std::vector<double> data = {1.0, 2.0, 3.0, 4.0, 5.0};
// 2. 関数の呼び出し
double avg = statcpp::mean(data.begin(), data.end());
double total = statcpp::sum(data.begin(), data.end());
std::size_t n = statcpp::count(data.begin(), data.end());
// 3. 結果の表示
std::cout << "データ数: " << n << std::endl;
std::cout << "合計: " << total << std::endl;
std::cout << "平均: " << avg << std::endl;
return 0;
}サンプルプログラムは学習用に設計されています。自分のデータやユースケースに合わせて以下のようにカスタマイズできます:
// サンプルデータを自分のデータに置き換え
std::vector<double> data = {1.0, 2.0, 3.0, 4.0, 5.0};
// ↓
std::vector<double> data = {/* あなたのデータ */};#include <fstream>
#include <vector>
std::vector<double> read_data(const std::string& filename) {
std::vector<double> data;
std::ifstream file(filename);
double value;
while (file >> value) {
data.push_back(value);
}
return data;
}
int main() {
auto data = read_data("data.txt");
double avg = statcpp::mean(data.begin(), data.end());
// ...
}#include "statcpp/basic_statistics.hpp"
#include "statcpp/dispersion_spread.hpp"
#include "statcpp/order_statistics.hpp"
void analyze_data(const std::vector<double>& data) {
double avg = statcpp::mean(data.begin(), data.end());
double sd = statcpp::stddev(data.begin(), data.end());
auto sorted_data = data;
std::sort(sorted_data.begin(), sorted_data.end());
double med = statcpp::median(sorted_data.begin(), sorted_data.end());
std::cout << "平均: " << avg << std::endl;
std::cout << "標準偏差: " << sd << std::endl;
std::cout << "中央値: " << med << std::endl;
}インクルードパスが正しく指定されているか確認してください:
g++ -std=c++17 -I/path/to/statcpp/include example.cpp -o example多くの統計関数は空のデータや不正な引数で例外を投げます。データが適切か確認してください:
std::vector<double> data = {/* データ */};
if (data.empty()) {
std::cerr << "データが空です" << std::endl;
return 1;
}
double avg = statcpp::mean(data.begin(), data.end());中央値や四分位数を計算する関数はソート済みのデータを要求します:
std::vector<double> data = {5.0, 2.0, 8.0, 1.0, 3.0};
// ソートが必要
std::sort(data.begin(), data.end());
double med = statcpp::median(data.begin(), data.end());- 各関数の詳細な仕様は API リファレンス を参照してください
- 基本的な使い方は 使い方ガイド を参照してください
- テストの実行方法は ビルドガイド を参照してください