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

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

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

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

:::note
2023/7/13 追記
この記事には、続編があります。

[`【UiPath】はなっち！の度数分布表アクティビティ(その２)`](https://qiita.com/HANACCHI/items/f7b5a9cb5ab4cb191f5f)

こちらも併せてご覧ください
:::

【初めに】
期せずして、**Legacyモード**となってしまったカスタムアクティビティ。
これらは、

https://qiita.com/HANACCHI/items/51d5a7f4fdca47132c77

でまとめたように、**Windowsモード**化し、審査、公開に至りました。

その中で、**はなっち！の度数分布表アクティビティ**は新顔になります。

今回は、その新顔の**はなっち！の度数分布表アクティビティ**をご紹介しようと思います。
- - - 
## １）はなっち！の度数分布表アクティビティって？
度数分布表とは、総務省統計局ホームページの [【１３　統計用語辞典】](https://www.stat.go.jp/naruhodo/13_yougo/ta-gyo.html)によれば、
`度数は、各階級に属するものの個数のこと。その属するデータがどのように散らばっているかを示す表のことを度数分布表という。`とあります。

先の総務省統計局ホームページの例示にあるように、身長140cm以上150cm未満の人数を数の表としてまとめる、まとめた表ですね。

この機能は、お客様案件で、`正確な分布ではなく、ある幅を持った分布`をメールに載せたいって事から、開発を着手したものです。当初、`ある幅`は固定でしたが、いずれ変更をしたいだろうなと思い、可変対応するようにしたのです。

ここまで来たら、カスタムアクティビティ化してみようと思い立ち、今回の公開に至ったのです。
- - - 
## ２）どんなデータを使用するのか？
無論、度数分布なので、数値のデータ群を扱います。例えば、試験結果ですね。
ここれは、サンプルデータとして、鹿児島大学の【データで学ぶ！統計活用授業のための教材サイト】

https://estat.sci.kagoshima-u.ac.jp/

にあった、
[成績サンプルデータ](https://estat.sci.kagoshima-u.ac.jp/data/cgi-bin/data/whats_data/data/img/932722923_9821.xls)
を使ってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/11124bad-6760-3712-55b6-9c72fe6f2a3a.png)

:::note warn
Googleで「試験 サンプルデータ」を検索した結果の中に、.xlsファイルのダイレクトリンクが張ってあったのでそれを使用しますが、その管理サイトには.xlsファイルのリンクは見つかりませんでした...
:::
- - - 
## ３）はなっち！の度数分布表アクティビティのインストール
インストールには２つの方法があります。
#### ３-1 MarketPlaceからダウンロードし、ローカルフォルダからインストール
- MarketPlace中の**はなっち！の度数分布表アクティビティ**が公開されているサイトへ行き、`ダウンロードボタン`をクリックし、`HANACCHI.FREQUENCY.ACTIVITIES.2.0.0.nupkg`をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/0ef02a1e-5f43-51a4-a93a-b0f2e0016ee9.png)
- インストールしたいプロセスの「パッケージを管理」から、ダウンロードした`HANACCHI.FREQUENCY.ACTIVITIES.2.0.0.nupkg`を、「パッケージを管理」の「設定」で定義されているローカルフォルダに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/530e8579-27bc-140b-0cd1-40a9fbb33abd.png)
- 改めて、インストール対象となる**はなっち！の度数分布表アクティビティ**のファイル名である`HANACCHI.FREQUENCY.ACTIVITIES`を選択し、「インストール」ボタンをクリックしてから、「保存」する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/4b6dd751-cb01-7770-d1b6-815456eff668.png)

#### ３-2 MarketPlaceから直接インストール
- MarketPlace中の**はなっち！の度数分布表アクティビティ**が公開されているサイトへ行き、`はなっち！の度数分布表アクティビティ`の隣にあるクリップボードへコピーアイコンをクリックし、ファイル名を取得します。（`HANACCHI.FREQUENCY.ACTIVITIES`がコピーされる)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/0ef02a1e-5f43-51a4-a93a-b0f2e0016ee9.png)
- インストールしたいプロセスの「パッケージを管理」から、コピペしたファイル名(`HANACCHI.FREQUENCY.ACTIVITIES`)を、「パッケージを管理」の「検索」部にペーストし、表示された、**はなっち！の度数分布表アクティビティ**のファイル名である`HANACCHI.FREQUENCY.ACTIVITIES`を選択し、「インストール」ボタンをクリックしてから、「保存」する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/3eee3211-f410-9f2d-92a8-8994d98d9db5.png)

#### ３-3 インストール完了確認
いずれの方法においても、インストールが完了すると、以下のアクティビティがインストールされます。
<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/37e82b62-0dbd-dbdb-e666-358a9375d48b.png">

:::note info
アクティビティパネルで「グループ化」を**パッケージ**とすると、上図のように、アクティビティがアクティビティパックの配下に表示されるようになります。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/7ee81314-d94b-bff2-2a6a-fca76df4edbb.png">
:::

- - - 
## ４）はなっち！の度数分布表アクティビティの使い方
#### ４-1 基本(度数表示)
- まずはドラッグ アンド ドロップしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/987f1af4-456e-f023-f8fa-d4d48f4d5a34.png)
- 引数の説明
ここでは、設定項目を表にまとめてあります。項目名が太字の項目が重要な項目となります。

|項目名|属性|説明|
|:-|:-|:-|
|**PercentMode**|Boolean|度数分布値を％とするか(True)、 **値とするか(False)**|
|**計測データ**|DataTable|測定対象とするデータテーブル|
|**測定列名**|String|度数分布を計測する対象列名|
|**階級**|[Double]|計測する階級値(n以上)を配列で指定|
|階級桁数|Int32|度数分布表としたときの階級の桁数(4)|
|度数桁数|Int32|度数分布表としたときの度数の桁数(4)|
|区切り文字|String|階級と度数の区切り文字(\|)|
|グラフ文字|String|度数を値ではなく横棒グラフとする時の文字|
|PrecentLevel|Int32|％計算する際の母数の属性<br>範囲内のみ(=0)<br>範囲外も含める(=1)<br>例外値も含めるか(=2)|
|PrecentDecimal|Int32|％計算の小数点以下の桁数|
|**度数分布表テキスト**|String|度数分布表の結果テキスト|
|階級昇順|Boolean|階級値の並びを指定する<br>昇順にする(True)<br> **降順にする(False)**|
|範囲内データ数|Int32|階級として計測範囲内のデータ件数|
|範囲外データ数|Int32|階級として計測範囲外のデータ件数|
|数値外データ数|Int32|階級として数値変換できなかったデータ件数|

- 先の[成績サンプルデータ](https://estat.sci.kagoshima-u.ac.jp/data/cgi-bin/data/whats_data/data/img/932722923_9821.xls)の中から、【化学】の度数分布を求めてみましょう。成績のサンプルデータですので、階級は以下のような**固定値**にします。
```
階級:{0.0,10,20,30,40,50,60,70,80,90,100}
``` 
属性は、Double型配列ですので、要素の一つに小数点を付けることで、Int32型配列ではなく、Double型に配列になります。

- 設定の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/c7a3e4db-15a9-1b68-0cb0-5c876a90375f.png)
- 実行結果
簡単にみせるため、度数分布表テキストを、**「メッセージ ボックス」アクティビティ**にて表示してみましょう。
```
テキスト:"【" & currentItem & "】" & ControlChars.Lf & 
度数分布表テキスト & ControlChars.lf & ControlChars.lf & 
"範囲内データ数:" & 範囲内データ数 & ControlChars.lf & 
"範囲外データ数:" & 範囲外データ数 & ControlChars.lf & 
"数値外データ数:" & 数値外データ数
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/17c14e68-93cb-31ab-e07b-c45daca893cb.png)

- 結果
70点以上は1名、60点以上は5名...。
範囲内データは50件、範囲外データは0件、数値外データは0件
と言う事がわかります。
`<U>`、`<N>`は利用者が置換できるようにつけていますので、適宜置換してください。
```
度数分布表テキスト ← 度数分布表テキスト.Replace("<U>", "点以上").Replace("<N>", "人")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/c380ecee-01e8-2383-b6a7-b07bb9ea1db1.png)

#### ４-2 基本(パーセント表示)
PercentModeを**True**にする事で、度数分布値が％表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/90ba3342-99b9-2822-82d3-530cb65f298c.png)
`<U>`、`<P>`は利用者が置換できるようにつけていますので、適宜置換してください。
```
度数分布表テキスト ← 度数分布表テキスト.Replace("<U>", "点以上").Replace("<P>", "％")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/d507bd04-b73e-61f8-ee97-98cffa5a13ad.png)

#### ４-3 応用(横棒グラフ)
今までは、**グラフ文字**は未設定でした。この**グラフ文字**に文字を設定することで、その文字を使った**横棒グラフ**を出力します。

- 設定の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/db8fbf5f-117a-83c2-4ffa-2e3b2acd4d77.png)

- 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/e1d0f5c2-429b-26bb-8211-0bb84cb67904.png)

- 結果
`<U>`、`<N>`は利用者が置換できるようにつけていますので、適宜置換してください。
```
度数分布表テキスト ← 度数分布表テキスト.Replace("<U>", "点以上").Replace("<N>", String.Empty)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/a44ae19c-a9cb-a19b-c259-f0b5ed5fdc6f.png)

- - - 

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

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

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