index.html•10.9 kB
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>f0_make_randomvalues 解説レポート</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
max-width: 900px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
line-height: 1.6;
}
h1 {
color: #2c3e50;
border-bottom: 3px solid #3498db;
padding-bottom: 10px;
}
h2 {
color: #34495e;
margin-top: 30px;
border-left: 4px solid #3498db;
padding-left: 10px;
}
h3 {
color: #7f8c8d;
margin-top: 20px;
}
.code-block {
background-color: #2c3e50;
color: #ecf0f1;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
font-family: 'Courier New', monospace;
font-size: 14px;
}
.output-block {
background-color: #ecf0f1;
padding: 15px;
border-radius: 5px;
border-left: 4px solid #27ae60;
margin: 10px 0;
}
.info-box {
background-color: #e8f4f8;
border-left: 4px solid #3498db;
padding: 15px;
margin: 15px 0;
border-radius: 3px;
}
.function-signature {
background-color: #fff;
padding: 10px;
border-radius: 5px;
border: 1px solid #bdc3c7;
margin: 10px 0;
font-family: 'Courier New', monospace;
}
table {
width: 100%;
border-collapse: collapse;
margin: 15px 0;
background-color: #fff;
}
th, td {
border: 1px solid #bdc3c7;
padding: 10px;
text-align: left;
}
th {
background-color: #3498db;
color: white;
}
.section {
background-color: #fff;
padding: 20px;
margin: 20px 0;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<h1>f0_make_randomvalues 解説レポート</h1>
<div class="section">
<h2>1. 概要</h2>
<p>
<code>f0_make_randomvalues</code>は、FGDBシステムにおける乱数生成ファンクションブロックです。
指定された個数の乱数整数値を生成し、CSVファイルとして保存する機能を提供します。
</p>
<div class="info-box">
<strong>主な機能:</strong>
<ul>
<li>0〜999の範囲で乱数整数を生成</li>
<li>生成データをCSVファイルに保存</li>
<li>CSVファイルからデータを読み込み</li>
<li>データの表示</li>
<li>FGDB関数記法の出力</li>
</ul>
</div>
</div>
<div class="section">
<h2>2. 使用方法</h2>
<h3>2.1 コマンドライン実行</h3>
<div class="code-block">
python func.py -o {output_folder} [-n {number}]
</div>
<h3>2.2 パラメータ</h3>
<table>
<tr>
<th>パラメータ</th>
<th>説明</th>
<th>必須/オプション</th>
<th>デフォルト値</th>
</tr>
<tr>
<td>-o, --output</td>
<td>出力フォルダのパス</td>
<td>必須</td>
<td>-</td>
</tr>
<tr>
<td>-n, --number</td>
<td>生成する乱数の個数</td>
<td>オプション</td>
<td>5</td>
</tr>
</table>
<h3>2.3 実行例</h3>
<div class="code-block">
python func.py -o ./output -n 10
</div>
<div class="output-block">
<strong>実行結果:</strong>
<pre>Generating 10 random numbers...
Saving data to output\data.csv...
Writing function notation to output\func.txt...
Loading and displaying data...
data
404
971
885
618
518
406
328
662
653
712
Execution completed successfully.</pre>
</div>
</div>
<div class="section">
<h2>3. プログラム構成</h2>
<h3>3.1 メインモジュール (func.py)</h3>
<p>
func.py:19〜68でメイン処理が実装されています。以下の処理フローで実行されます:
</p>
<ol>
<li>コマンドライン引数の解析</li>
<li>出力ディレクトリの作成</li>
<li>乱数生成</li>
<li>CSVファイルへの保存</li>
<li>関数記法ファイルの出力</li>
<li>データの読み込みと表示</li>
</ol>
<h3>3.2 ライブラリモジュール (lib.py)</h3>
<p>以下の5つの関数を提供します:</p>
<h4>① generate_random_numbers(count: int) → List[int]</h4>
<div class="function-signature">
def generate_random_numbers(count: int) -> List[int]
</div>
<p>
指定された個数の乱数を生成します。各乱数は0〜999の範囲の整数値です。
</p>
<p>
数学的には、各要素 \( x_i \) は以下の範囲で一様分布に従います:
</p>
<p>
$$ x_i \in \mathbb{Z}, \quad 0 \leq x_i \leq 999, \quad i = 1, 2, \ldots, n $$
</p>
<h4>② save_data_to_csv(data: List[int], filepath: str) → None</h4>
<div class="function-signature">
def save_data_to_csv(data: List[int], filepath: str) -> None
</div>
<p>
生成されたデータをCSV形式でファイルに保存します。ヘッダー行として"data"が付加されます。
</p>
<h4>③ load_data_from_csv(filepath: str) → List[int]</h4>
<div class="function-signature">
def load_data_from_csv(filepath: str) -> List[int]
</div>
<p>
CSVファイルからデータを読み込みます。ヘッダー行はスキップされ、整数値のリストとして返されます。
</p>
<h4>④ display_data(data: List[int]) → None</h4>
<div class="function-signature">
def display_data(data: List[int]) -> None
</div>
<p>
データを標準出力に表示します。ヘッダー"data"の後に各値が1行ずつ出力されます。
</p>
<h4>⑤ write_function_notation(filepath: str) → None</h4>
<div class="function-signature">
def write_function_notation(filepath: str) -> None
</div>
<p>
FGDB関数記法をファイルに書き込みます。この関数ブロックは以下のように表現されます:
</p>
<p>
$$ y = f_0() $$
</p>
<p>
ここで、\( y \) は出力データセット、\( f_0 \) は乱数生成関数を表します。
</p>
</div>
<div class="section">
<h2>4. 生成結果の例</h2>
<h3>4.1 data.csv</h3>
<p>実行により以下のようなCSVファイルが生成されます:</p>
<table>
<tr>
<th>data</th>
</tr>
<tr><td>404</td></tr>
<tr><td>971</td></tr>
<tr><td>885</td></tr>
<tr><td>618</td></tr>
<tr><td>518</td></tr>
<tr><td>406</td></tr>
<tr><td>328</td></tr>
<tr><td>662</td></tr>
<tr><td>653</td></tr>
<tr><td>712</td></tr>
</table>
<h3>4.2 func.txt</h3>
<p>関数記法ファイルには以下の内容が記述されます:</p>
<div class="code-block">
y=f0()
</div>
<h3>4.3 統計情報</h3>
<p>上記の10個の乱数データについて基本統計量を計算すると:</p>
<table>
<tr>
<th>統計量</th>
<th>値</th>
<th>数式表現</th>
</tr>
<tr>
<td>合計</td>
<td>6157</td>
<td>\( \sum_{i=1}^{10} x_i = 6157 \)</td>
</tr>
<tr>
<td>平均値</td>
<td>615.7</td>
<td>\( \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i = 615.7 \)</td>
</tr>
<tr>
<td>最小値</td>
<td>328</td>
<td>\( \min(x_i) = 328 \)</td>
</tr>
<tr>
<td>最大値</td>
<td>971</td>
<td>\( \max(x_i) = 971 \)</td>
</tr>
</table>
</div>
<div class="section">
<h2>5. データフロー図</h2>
<div class="info-box">
<pre>
[コマンドライン引数]
↓
[argparse による解析]
↓
[出力ディレクトリ作成]
↓
[generate_random_numbers()] ← 乱数生成 (0-999の整数)
↓
[data]
↓
┌─────────┴─────────┐
↓ ↓
[save_data_to_csv()] [write_function_notation()]
↓ ↓
[data.csv] [func.txt]
↓
[load_data_from_csv()]
↓
[display_data()]
↓
[標準出力に表示]
</pre>
</div>
</div>
<div class="section">
<h2>6. まとめ</h2>
<p>
<code>f0_make_randomvalues</code>は、乱数生成を中心としたシンプルながら実用的な
ファンクションブロックです。CSVファイルへの入出力機能を備え、生成されたデータの
保存・読み込み・表示を一連の流れで実行できます。
</p>
<p>
FGDB関数記法 \( y = f_0() \) により、他のファンクションブロックと組み合わせて
データ処理パイプラインを構築することが可能です。
</p>
</div>
<footer style="text-align: center; margin-top: 40px; padding: 20px; color: #7f8c8d;">
<p>f0_make_randomvalues 解説レポート</p>
<p>生成日時: 2025-10-02</p>
</footer>
</body>
</html>