【UiPath】はなっち！の度数分布表アクティビティ(その２)

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

この記事はUiPathブログ発信チャレンジ2023サマーの13日目の記事です。

【初めに】
前回は、**はなっち！の度数分布表アクティビティ**の基本的な使い方の紹介をお届けしました。

https://qiita.com/HANACCHI/items/54da25129a9d5c8565ea

今回は、**はなっち！の度数分布表アクティビティ**には他にもアクティビティを提供しており、ご紹介しようと思います。

- - - 
## １）はなっち！の度数分布表アクティビティの他のアクティビティ
**はなっち！の度数分布表アクティビティ**には、以下のアクティビティが存在しています。
|アクティビティ名|説明|紹介|
|:-|:-|:-:|
|度数分布表|度数分布表を作成する|[その１](https://qiita.com/HANACCHI/items/54da25129a9d5c8565ea)|
|**最大値最小値を求める**|対象列の最大値、最小値を求める|今回|
|**階級を求める**|度数分布表の階級値を求める|今回|

#### １-1）「最大値最小値を求める」アクティビティ
100点満点の試験の結果を度数分布表として求める際に使用する得点の範囲は0点～100点と幅が決まっており、階級値は、自ずと`{0点,10点(,20点...),90点,100点}`と決められますが、どのような値が推測できないような場合、**最小値**、**最大値**を求め、値の傾向をつかんだ方が、綺麗な度数分布表が作成できると思います。

**「最大値最小値を求める」アクティビティ**は、その**最小値**、**最大値**を求めるためものです。
- まずはドラッグ アンド ドロップしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/a4906560-f414-a82a-f0c3-c9ab5a50e6f2.png)
- 引数の説明
ここでは、設定項目を表にまとめてあります。項目名が太字の項目が重要な項目となります。

|項目名|属性|説明|
|:-|:-|:-|
|**計測データ**|DataTable|測定対象とするデータテーブル|
|**測定列名**|String|度数分布を計測する対象列名|
|最大値|Double|有効データ中の最大値|
|最小値|Double|有効データ中の最大値|
|有効データ数|Int32|階級として数値変換できたデータ件数|
|数値外データ数|Int32|階級として数値変換できなかったデータ件数|

- 設定の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/579f6d6c-d2ae-9c99-f254-5a2e4af60926.png)

- 実行結果
簡単にみせるため、**最大値**、**最小値**を、**「メッセージ ボックス」アクティビティ**にて表示してみましょう。
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/292b60f4-07c0-5e4e-5b37-b1d88b6804da.png">

下図は、EXCELのPivot機能で求めた、化学の**最大値**、**最小値**です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/7c3ca081-a326-8794-5862-605943fc58ee.png)
一致していますね。

#### １-2）「階級を求める」アクティビティ
対象とするデータの**最大値**、**最小値**がわかりました。そのデータから度数分布表を作成する際の**階級**は、どんな値を設定すればいいのか。

その**最大値**、**最小値**から**階級**を求めるためのアクティビティです。
- まずはドラッグ アンド ドロップしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/6dbea427-cc42-fff8-02a8-84d457a63e4a.png)
- 引数の説明
ここでは、設定項目を表にまとめてあります。項目名が太字の項目が重要な項目となります。

|項目名|属性|説明|
|:-|:-|:-|
|**最大値**|Double|有効データ中の最大値|
|**最大値**|Double|有効データ中の最小値|
|**階級数**|Int32|階級としての数|
|階級|Double[]|階級値|

- 設定の例
**最小値**から**最大値**まで、3階級にて階級値を求める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/687b2ead-1777-31a1-35aa-ddcf0919ab30.png)

- 実行結果
簡単にみせるため、求められた**階級値**を、**「メッセージ ボックス」アクティビティ**にて表示してみましょう。
```
String.Join(ControlChars.Lf, CLASSes.Reverse)
```
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/30d9a7c0-fee7-b4b0-36fe-c5390d1c1a38.png">

:::note warn
※3階級としても4階級見えてしまうのは、最大値として1つの階級としてしまうからです。`仕様です！`
:::

#### １-3）「度数分布表」アクティビティ
自動算出した**階級値**を使って、度数分布表を作ってみました。当然のことながら、**階級**は小数点を保有しているので、見にくくなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/4e349d3f-7e89-aa25-809a-d235dd02d2e5.png)

#### １-4）階級を綺麗にする
**「階級を求める」アクティビティ**を使用すると、**最小値**と**最大値**から、単純に計算しているだけなので、小数点を持つ**階級**が出てしまいましたね。

見栄えも悪いので、これを綺麗にしていきましょう。

**「度数分布表」アクティビティ**の**階級**の属性は、`Double型配列`ですので、綺麗にした結果も`Double型配列`でなければなりません。

ここは、Linqを使って、やってみましょう。

- `Int32型`にキャストし、更に`Double型`にキャストする。
```
CLASSes ← (CLASSes
    .Select(Function(d) CInt(d)).ToArray())
    .Select(Function(i) CDbl(i)).ToArray()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/24a7f8e0-ba79-e0c3-16ec-98ffe129d17d.png)⇒![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/4295bc53-c1a5-9736-44e2-7308901fb4a2.png)
小数点以下は、`四捨五入`されています。

- `Int32型`にキャストする際、指定した基準値の倍数に近い値で`切り捨て`し、その後`Double型`にキャストする。
```
CLASSes ← (CLASSes
    .Select(Function(d) CInt(Math.Floor(d))).ToArray())
    .Select(Function(i) CDbl(i)).ToArray()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/24a7f8e0-ba79-e0c3-16ec-98ffe129d17d.png)⇒![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/fc29f5da-2e6f-05a6-6842-09cdec7287b0.png)
小数点以下は、切り捨てられています。

- `Int32型`にキャストする際、指定した基準値の倍数で最も近い値に`切り上げ`し、その後`Double型`にキャストする。
```
CLASSes ← (CLASSes
    .Select(Function(d) CInt(Math.Ceiling(d))).ToArray())
    .Select(Function(i) CDbl(i)).ToArray()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/24a7f8e0-ba79-e0c3-16ec-98ffe129d17d.png)⇒![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/8e577675-c748-4234-c606-15510ed1b3a4.png)
小数点以下は、切り上げられています。

- 小数点１桁まで有効にしたい！
```
CLASSes ← (CLASSes
    .Select(Function(d) CInt(d * 10)).ToArray())
    .Select(Function(i) CDbl(i / 10)).ToArray()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/24a7f8e0-ba79-e0c3-16ec-98ffe129d17d.png)⇒![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/ea488171-3a86-11a8-a557-d3fa596bceed.png)

10倍してから、10で割っているので、小数点１桁までが階級となっています。

「度数分布表」アクティビティの結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/51b37344-cfae-a628-f15f-98fb999966b3.png)

- - - 
## おわりに
いかがでした？

今回も読んでいただきありがとうございました！
是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！