めも

メモ.

MacでのCLIPSTUDIOプラグイン開発時のメモ

情報が少なかったのとプラグインも少なかったので後継の方の役に立てればと思いメモします。ただし、最新の情報はCLIPSTUDIO SDK配布サイト、および同封のドキュメントを参照してください。

関連リンク

公式SDK・ドキュメント

プラグイン/SDK | CLIP STUDIO PAINT

pdfドキュメントが添付されています。

他の開発例

3〜5年前の記事はいくつか見つけられました。 これらを参照にしつつ進めたので、自分もメモを残そうと思います。

サンプルプロジェクトのビルドまでの流れ

環境の確認

macOS Catalina 10.15.6、Xcode11.7を使用します。 CLIP STUDIOはCLIP STUDIO PAIN EX 1.9.11を使用します。 C++のバージョン確認は

$ c++ --version

Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix

です。

Xcode起動

ダウンロードしたzipファイル内部のプロジェクトファイルをXcodeにて開きます。 Xcode起動>「Open...」>ダウンロードしたzipファイルを展開したものから「FilterPlugin.xcodeproj」を選択します。 開いたファイルはおそらく日本語が文字化けした状態になっているので文字コードを変えてファイルを読み込みなおします。「Command+Option+1」でText Settingを開いてText Encodingの指定を「Japanese(Shift-Jis)」に変更して「Reinterpret」をクリックすることでファイルを別の文字コードで読み込みなおします。ただし、自分の環境ではこの指定をしても文字化けが修正されず、VsCode上にてファイルをShift-Jisで読み込みUTF-8で保存し直すことで文字化けを修正しました。

FilterPluginConfig.xcconfigの編集

プラグイン例では libstdc++ が使用されていますが、Xcode10以降では libstdc++ を使用したプロジェクトがビルドできません。

CLANG_CXX_LIBRARY = libc++

と指定してください。

自分の環境では

MACOSX_DEPLOYMENT_TARGET = 10.6

となっている箇所を

MACOSX_DEPLOYMENT_TARGET = 10.15

に変更しました。最終的に FilterPluginConfig.xcconfig の内容は

GCC_VERSION =
SDKROOT = macosx
MACOSX_DEPLOYMENT_TARGET = 10.15
ARCHS = $(ARCHS_STANDARD_64_BIT)
VALID_ARCHS = x86_64
ENABLE_OPENMP_SUPPORT = NO
WRAPPER_EXTENSION = cpm
GCC_C_LANGUAGE_STANDARD = gnu99
CLANG_CXX_LANGUAGE_STANDARD = gnu++98
CLANG_CXX_LIBRARY = libc++

として、この状態でビルドが成功しました。

プラグインをCLIPSTUDIOで使用する

ビルドに成功すると FilterPlugIn/FilterPlugIn/OutputMac/FilterPlugIn/Debug 以下に HSV.cpm が出力されます。このファイルを /Users/{ユーザー名}/Library/CELSYS/ CLIPStudioModule PlugIn/PAINT/以下に配置します。

※配置するフォルダはSDK同封のドキュメントに指定されています

配置後にCLIPSTUDIOを再起動してください。プラグインが無事読み込まれると、以下の画像のように「色調補正>色相・彩度・明度」プラグインが追加されます。

f:id:misos:20200915201136p:plain

独自の機能の追加

C++のテスト環境の構築

直接実装→動作確認は無理がある+製品に載せるものとしてテストは必要だと思われるので、一度MacでのC++の開発・テスト環境を整理します。

opencvを使用したいので Header Search Pathに /usr/local/Cellar/opencv/4.4.0/include/を指定。

その後、/usr/local/Cellar/opencv/4.4.0/lib/以下のライブラリをXcodeの共有ライブラリに指定します。

次に、Gtestを実行できるようにセットアップします。

cocos2d-xプロジェクトにGoogleTestを導入してみた | GCREST DEVELOPERS BLOG

以降TODO。後ほど追記します。

勉強用のdiscordのサーバーを作ってみました

何となく普段目にした資料・機械学習の論文・リンクは自分の個人チャットに貼り付けていたのですが、 色々やり取りできたらいいかと思ってdiscordサーバーを作ってみました。

と言っても、人が入ってくるかは不明なのでしばらくはゆったりとリンクはったりチャットベースでの会話ができたらそれで御の字かな〜と思っています。

入退室自由・ROM専可能です。

python3を使用する上での細かいメモ

調べた際のリンクをメモします。順番に特に意味はないです、何か調べるたびに下に追記する予定です。※一部 python3.8 でのみ使用できる機能に関するメモも混ざってます。

簡単な処理の実行はpaizaなどを利用すればすぐに試せます。

メモ

PythonでのFalse判定

print(bool(False))
print(bool(0))
print(bool(0.0))
print(bool(0.00))
print(bool(""))
print(bool(()))
print(bool({}))
print(bool([]))
print(bool(None))

出力は

False
False
False
False
False
False
False
False
False

リストが空であることを分かりやすくするために x == [] などと記述しても良いかもしれない。

walrus operator

What’s New In Python 3.8 — Python 3.8.5 documentation

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

nに対して len(a) が代入され、それがif文内のスコープで使用できる。if文の手前で n=len(a) としたり、if n==len(a)などと二回 lenを実行する必要がなくなる。

スタイルガイド

paper.hatenadiary.jp

スタイルガイドに準拠しているかは、VSCodeなどのエディターに適切なリンターを導入してチェックさせる。

Pythonのスタイルガイドとそれを守るための各種Lint・解析ツール5種まとめ! - Sider Blog

speakerdeck.com

awsome-python

awesome XXX = 便利ライブラリ・人気プロジェクトに関するリンク集やTIPSのまとめを指しています。

GitHub - vinta/awesome-python: A curated list of awesome Python frameworks, libraries, software and resources

GitHub - trananhkma/fucking-awesome-python: awesome-python with and

コードのライセンス表記

そもそも、ライセンスや著作権について調べる。

コピーレフト - Wikipedia

www.slideshare.net

CopyleftとPermissiveというまとまりがあり、後者は改変したコードの再配布を認めている。改変したソースコードを公開する場合にどのようなライセンスを選択するべきかはライセンスに従う。

また、スタイルガイドによってどのような形でライセンスやコード作成者を記述しておくか指定されている場合もある。

Every file should contain license boilerplate. Choose the appropriate boilerplate for the license used by the project (for example, Apache 2.0, BSD, LGPL, GPL) (引用元)

配列のストライド

[start:end:何個とばしか]を指定する、-は逆順になる。

l1 = [i for i in range(10)]
l2 = l1[::2]
l3 = l1[::3]
l4 = l1[::-1]
l5 = l1[::-2]

print(f'list is {l1}')
print(f'list is {l2}')
print(f'list is {l3}')
print(f'list is {l4}')
print(f'list is {l5}')

出力

list is [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list is [0, 2, 4, 6, 8]
list is [0, 3, 6, 9]
list is [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
list is [9, 7, 5, 3, 1]

システムがデフォルトで使用する符号化

locale --- 国際化サービス — Python 3.8.5 ドキュメント

テキストデータをエンコードする方法を、ユーザの設定に基づいて返します。ユーザの設定は異なるシステム間では異なった方法で表現され、システムによってはプログラミング的に得ることができないこともあるので、この関数が返すのはただの推測です。

macでの実行結果。

import locale
locale.getpreferredencoding()

出力は

'UTF-8'

Extended Iterable Unpacking

PEP 3132 -- Extended Iterable Unpacking | Python.org

*をつけることで、代入する変数の対応が取れない箇所は全て*のついた変数に入れられる。下の例では、a/b/dに一つずつ値が入れられ、残りのリストがcに入る。対応する値がない場合は空のリストになる。

l1 = [i for i in range(10)]

a, b, *c, d = l1
print(f'a is {a}, b is {b}, c is {c}, d is {d}')

a, b, *c = [1, 2,]
print(f'a is {a}, b is {b}, c is {c}')

出力:

a is 0, b is 1, c is [2, 3, 4, 5, 6, 7, 8], d is 9
a is 1, b is 2, c is []

str.formatの使い方

string --- 一般的な文字列操作 — Python 3.8.5 ドキュメント

上記ドキュメントの「書式指定例」にて指定例がある。 フォーマット済み文字列リテラルについては

2. 字句解析 — Python 3.8.5 ドキュメント

を参照する。

pandas.DataFrame のデータの可視化

Visualization — pandas 1.1.1 documentation

pandas ecosystem — pandas 1.1.1 documentation

import numpy as np
import pandas as pd

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
ts.plot()

基本的なプロットはmatplotlibをインポートせずともプロットできる。

GitHub - pandas-profiling/pandas-profiling: Create HTML profiling reports from pandas DataFrame objects

pandas-profilingにとりあえずデータを入れれば、基本的なグラフは確認することができる。

pandasで読み書き可能なファイルのフォーマット

ドキュメントの以下の項目を参照する。

pandas.pydata.org

read_clipboard()to_clipboard() などを用いてクリップボードの読み書きもできる。

関係ないですが、調べている途中で以下のすごくいいイラストをたまたま見つけました。

「ご主人!わすれもの!」www.pixiv.net

ソートの順番を保ったまま値を挿入

numpy.searchsortedと同じく、元あるソート済みリストに対してソートの順番を保ったまま値を挿入したい。

bisect --- 配列二分法アルゴリズム — Python 3.8.5 ドキュメント

numpy.searchsorted — NumPy v1.19 Manual

qiita.com

numpy や pandasで条件にあったインデックス・条件にあった値を取得する

numpy

extract

numpy.extract — NumPy v1.19 Manual

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 4,])
condition = arr % 2 == 0
print(np.extract(condition, arr))
[2 4 4]

place

numpy.place — NumPy v1.19 Manual

placeは条件にあったものを指定の値に置き換える。

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 4,])
print(arr)

condition = arr % 2 == 0
print(np.extract(condition, arr))

np.place(arr, arr % 2 == 0, -1)
print(arr)

出力

[1 2 3 4 5 4]
[2 4 4]
[ 1 -1  3 -1  5 -1]

where/argwhere

numpy.where — NumPy v1.19 Manual

numpy.argwhere — NumPy v1.19 Manual

条件にあった箇所の値を置き換える・条件にあった箇所のインデックスを取得する。

import numpy as np

matrix = np.array([[0, 3, 6],
                            [1, 4, 7],
                            [2, 5, 8]])
res = np.where(matrix < 6, matrix, 0)
print(res)

res = np.argwhere(matrix < 6)
print(res)

出力、6より小さいところだけが残りあとは0になるように np.where(matrix < 6, matrix, 0) と指定した。

[[0 3 0]
 [1 4 0]
 [2 5 0]]
[[0 0]
 [0 1]
 [1 0]
 [1 1]
 [2 0]
 [2 1]]

pandas

ドキュメントのインデックスと選択に関するページを参照しつつ使えば良いと思われる。

コードの静的解析

GitHub - trananhkma/fucking-awesome-python: awesome-python with and

https://github.com/analysis-tools-dev/static-analysis

vscodeでは "python.linting.<linter>Enabled": true を設定し、linterごとに詳細設定を行えば自動でチェックが行われる。

Linting Python in Visual Studio Code

asyncio

www.youtube.com

Pythonにおける非同期処理: asyncio逆引きリファレンス - Qiita

ディレクトリを作成する

実験環境で特によく使用するのでメモ。以下の関数を用いて再帰的にディレクトリを作成する、既に存在する場合は作成しないように指定できる(exist_ok=Trueを指定する)ので if os.path.exists(...)などと指定しなくて良い。

os --- 雑多なオペレーティングシステムインタフェース — Python 3.8.5 ドキュメント

再帰的にディレクトリを作成する関数です。mkdir() と似ていますが、末端ディレクトリを作成するために必要なすべての中間ディレクトリも作成する。

関連記事・参考文献

Effective Python 第2版 ―Pythonプログラムを改良する90項目

Effective Python 第2版 ―Pythonプログラムを改良する90項目

  • 作者:Brett Slatkin
  • 発売日: 2020/07/16
  • メディア: 単行本(ソフトカバー)

統計検定2級の勉強時のメモ

統計検定

初めは準一級を受けたかったのですが、昨今の情勢の関係で準一級が中止になったため試しに二級を受けることに。内容としては大学の一般教養の数値統計〜その発展、までが範囲だと思います。

勉強方法

先駆者様がどのような内容を勉強すれば良いかを指南されていたので大きな参考に。

2級は大学の教養科目の数理統計の範囲が中心となり出題される。

各大学の数理統計学の試験問題も過去問として有用だと思われます。特に、以下の研究室の資料を参考にしつつ進めたいと思います。

中級統計学

参考書

大学では東京大学教養学部統計学教室編 (1991) 『統計学入門』 東京大学出版会を使用していましたが、試験範囲を明確にするために日本統計学会編の以下の本を使用します。1級の本も出版されています。

メモ

参考書を読みつつ、調べた内容・リンクをメモします。 jupyter-bookも試しに使ってみようと思います。

データの記述法・要約

変数 調査対象を個体・ケースなどと呼び、調査する項目を変数と呼ぶ。変数には質的変数(カテゴリカル変数)と量的変数の二種類がある。呼び方は文献や文脈によって変わる場合あり。

  • 原因側:独立変数・説明変数
  • 結果側:従属変数・目的変数・被説明変数

変数の種類によって適切な調査方法を選択する。

尺度

  • 名義尺度
  • 順序尺度
  • 間隔尺度:等間隔のメモリが存在し、その差分に意味がある尺度
  • 比例尺度:値0を基準とした比率に意味がある尺度

1-4. 変数の尺度 | 統計学の時間 | 統計WEB

分布・関連性の調査

量的変数の可視化

ヒストグラム・幹葉表示・度数分布表などが考えられる。二つの量的変数の比較には散布図を用いる。可視化を行う前に何を分析したいのかを明確にすること。

量的変数の関連性を数値で表現する指標として

  • 共分散
  • ピアソン積率相関係数

経済指標

量的変数の可視化は経済にて多く用いられている。

ローレンツ曲線=所得と人数の累積相対度数をプロットしたもの。完全に平等ならばローレンツ曲線は直線になる。

経済指標の見方・使い方<H17.4>

ジニ係数=ローレンツ曲線の右下方向への膨らみ具合を数値化した指標。そのためジニ係数0ならば所得格差0であり、最大で1になる=ローレンツ曲線以下の領域を取り除いた下三角の面積の二倍。

決定木の分岐の基準としても用いることができる。Gini係数=ある特徴が特定の値を取った時に特定のクラスに所属する確率を元に分岐を決める(CART)。

sklearn.tree.DecisionTreeClassifier — scikit-learn 0.23.2 documentation

質的変数の可視化

棒グラフ・円グラフを用いる。二つの質的変数の比較にはクロス表などを用いる。関連性を説明する指標として

  • リスク比
  • オッズ比
  • ファイ係数

などがある。

分布の特徴を説明する指標

  • 位置
    • 平均
      • 算術:足してデータ数で割る。
      • 幾何:かけてデータ数の冪根をとる、指数関数的な変化をする値に用いることが多い。
      • 調和:率・比の平均を求める際に使用する。平均の時速などを求める場合は調和平均を用いる。例:F値=適合率と再現率の調和平均。
    • 中央値
  • 分散
    • 偏差
    • 標準偏差
    • 決定係数
    • 共分散
    • 変動係数:標準偏差/算術平均であり、相対的なばらつきを示した指標。平均の異なる二つの集団のばらつきの比較に用いる。
  • モーメント(=E((X −μ)k)で表現される確率変数Xの特性値)から求まる指標
    • 分散
    • 歪度
    • 尖度
  • 標準化得点=母集団の中で特定のデータが相対的にどの位置に存在するかを表現した数値
    • Z得点=平均0・標準偏差1に変換した値
    • 偏差値=平均50・標準偏差10に変換した値
    • 偏差IQ

相関係数

二つの変数X、Yに対して共分散はXの偏差とYの偏差を掛け合わせたものの平均値を共分散と呼ぶ。

  • 共分散が+=Xが大きい時Yも平均から大きく離れる
  • 共分散がー=Xが大きい時Yは平均より小さくなる

つまり、散布図状のXの平均値・Yの平均値の点を中心に4つの領域に分割した時にどの領域にデータが存在するかで「Xの偏差とYの偏差を掛け合わせたもの」の符号が決まり、その平均値で全体的な傾向を見ることができる。

相関係数=XとYの共分散を(Xの標準偏差 × Yの標準偏差)で割ったもの

偏相関係数=XとYの相関についてX、Yとは別の第三の因子の影響を取り除いた時のXのYの関係性を示したもの、-1≦r≦1の値をとり第三の因子が全く関係ない場合は1になる。

参考文献:相関分析・偏相関分析 http://cogpsy.educ.kyoto-u.ac.jp/personal/Kusumi/datasem11/tanaka.pdf

統計図表

Wikipedia>統計図表以下の各グラフの説明を参照する。

棒グラフ - Wikipedia

時系列データの分析

指数化=特定の時間の値で全データを割り、指数化する操作。 時系列データは、時間に沿って変動する要素が複数含まれている。

  • 傾向変動:長期間にわたる変動、移動平均などで傾向変動を捉える
  • 循環変動:長期間にわたる変動であり、傾向変動の一部として扱うこともある
  • 季節変動:1年周期に繰り返し発生する変動
  • 不規則変動:規則的ではない変動や変化点、偶然変動を含む

時系列データから移動平均にて傾向変動を取り除き、残された季節変動+不規則変動が残る。

時系列の指標・代表値

自己相関・自己共分散

伸び率の幾何平均 時系列では伸び率の幾何平均を使用する例がある。期間ごとに増加率・減少率が異なるデータを比較するため、複数期間の増減を平均増加率という代表値にまとめる際に使用する。

参考文献

回帰分析

最小二乗法 残差=y軸方向の差であり、残差の二乗を最小にするように係数を求める。二乗誤差を最小にするために、全データ点の二乗誤差の和の式を係数α・βで偏微分したものを正規方程式と呼ぶ。

性質として - 推定された回帰直線は標本平均点を通り - 残差の平均値は0 - 残差は説明変数と相関がなく、yの推定値とも相関がない=回帰直線の周辺に偏りなく残差が分布している状態になる - 残差平方和を最小にしようとするため、外れ値が含まれるとその影響を大きく受ける

平方和分解 yの周辺の変動量は説明変数の変動量+残差の平方和に分解することができる。

参考文献

確率変数と確率分布

確率変数

以下のサイト様の第2-3回「確率変数と確率分布(1)」を参照しつつ、参考書を進めた。

統計基礎 - 慶應義塾大学 湘南藤沢キャンパス(SFC)

ベイズの定理

P(X|Y) = P(Y|X)P(X)/p(Y)

Xを原因、Yを結果と見たとき、

  • 左辺P(X|Y)=Yが得られたときに原因がXだった確率
  • 右辺分子のP(Y|X)=Xが発生したときにYになる確率

両辺でこの順序が入れ替わっていることが重要。P(X)は事前確率、P(X|Y)はYを見たときにXだった確率を示しており事後確率と呼ぶ。

逐次ベイズ推定、ベイズ更新とは

確率密度関数

離散・連続型それぞれについて理解する。

累積分布関数が連続かつ微分可能ならば、その導関数=確率密度関数(増加幅が大きい=その区間に確率変数が含まれる確率が高い)。

モーメント・中心モーメント

異なる確率変数XとYに対してモーメントが一致するなら、分布関数も一致する。この性質をモーメント母関数の一意性と呼ぶことがある。

4.8.積率と積率母関数 | My Interests

再生性

確率分布Fについて2つの独立な確率変数XとYがFに従えばそれらの和Zも常にFに従うとき、確率分布Fは再生性をもつという。再生性を持つ分布の例として、正規分布・二項分布・ポアソン分布がある。

正規分布の性質(再生性など)とその証明 | AVILEN AI Trend

確率分布の具体例

Wiki参照: 確率分布 - Wikipedia

また、冒頭のQiita記事にも紹介されていた Larry Leemis教授のページ内の「Univariate distribution relationship chart」のページも参照する。

種々の確率分布

離散・連続値をとる種々の確率変数についてその特徴とそのような分布をもつデータ例を把握する。

離散確率分布

0 でない確率をとる確率変数値の種類が可算個しかない確率分布(引用元)。

ベルヌーイ分布

確率 p で 1 を、確率 q = 1 − p で 0 をとる離散確率分布。

二項分布

ベルヌーイ試行を独立にn回行った時の回数を確率変数とした離散確率分布。pを成功確率 とするとき、最頻値は(n + 1)p 以下の最大の整数となる。

ポアソン分布

確率離散事象論などの講義でよく見る分布。一定時間の中でランダムに発生する出来事が何回起こるかを示している分布。

幾何分布

幾何分布 - Wikipedia

ベルヌーイ試行を繰り返して初めて成功させるまでの試行回数 X の分布

連続確率分布

正規分布

  • 平均値・最頻値・中央値が一致する分布
  • あらゆる分布について、その分布から無作為標本を独立に繰り返し取ってくる標本平均の分布は、正規分布になる

一様分布

確率密度関数が常に一定となるような分布。

ガンベル分布

さまざまな分布に従う確率変数の最大値が漸近的に従う分布 (引用元:ガンベル分布 - Wikipedia)

であり、極値分布のタイプI・ガンベル型に該当する分布。

フォン・ミーゼス分布

円上の正規分布とみなせる分布(だが、正規分布と異なり再生性はない)。実数 θ (0 ≤ θ < 2π) を確率変数とする確率密度関数をもつ。

多変量の フォン・ミーゼス–フィッシャー分布はベクトルの向きに対して確率を定義したもの。μベクトルに近い方向ほど確率が高くなる。

指数分布

ポアソン分布にしたがってイベントが発生するとき、イベントが発生してから次にイベントが発生するまでの時間間隔の分布。

多変量の分布

  • 多項分布(離散)
  • 多変量正規分布(連続)
  • ディリクレ分布(連続)

標本分布

  • 母数(パラメータ):母集団の確率分布を決定する変数の名前
  • 統計量:母集団から得た互いに独立なn個の標本を確率変数とみなして、 これらの標本から計算される量
  • 標本分布:統計量が従う確率分布

t分布、カイ二乗分布、F分布が代表として挙げられる。

統計的推定

母集団は「知りたいもの」、標本は「知ることができるもの」(参考文献[1]99pより)

  • 全数調査:母集団のサイズが少ないため全ての特性値を確認できる時
  • 標本調査:全数調査ができず、得られた標本から母集団の母数を統計的推定する

母数と統計量

www.slideshare.net

フィッシャーの3原則 フィッシャーによる実験計画法を進める上での原則。

  • 無作為化:無作為に選択することで、実験者本人が気づいていない外部の要因の影響を最小限にする
  • 反復:繰り返し標本を得ることで、系統誤差なのか偶然誤差なのかを区別する
  • 局所管理:実験を行う上で、実験ごとの環境を合わせることで、その影響による系統誤差を最小限に抑える

データの抽出法

非確率抽出法と確率抽出法に分けることができる。 確率抽出法は母集団から得られる可能性のある標本が全て等確率で得られる可能性のある時の抽出法。何らかの指針に基づいて母集団の標本を取得して、そこから判断・推定する方法を非確率抽出法と呼ぶ。

  • 非確率抽出法
    • 募集法
    • 典型法
    • インターセプト法
  • 確率抽出法
    • 単純無作為抽出法
    • 層化抽出法
    • クラスター抽出法
    • 多段抽出法

点推定と区間推定

  • 一致推定量=大数の法則に基づいて、標本の観測が多ければ推定量が母数に一致するような推定量
  • 普遍性=推定量の期待値が常に母数と等しくなるような性質を持つもの、普遍性がないものは「推定量の期待値 - 母数」の分だけの偏りが存在している
  • 標準誤差=分散の推定量の平方根

不偏推定量とは?平均と分散を例に分かりやすく解説 | AVILEN AI Trend

仮説検定

www.slideshare.net

用語

  • 帰無仮説:ある仮説が正しいかを判断すつために立てる仮説、この仮説の下で得られた標本がどれほど珍しいかを測り、仮説を棄却するかどうかを決定する
  • 対立仮説:帰無仮説に対立する仮説。例えば、一般に考えられている仮説を帰無仮説に、それに対して実験によって証明したい仮説を対立仮説に置く。
    • 片側対立仮説:対立仮説が!=で表現される
    • 両側対立仮説:不等号で表現される
  • 有意水準:仮説を棄却すべきと判断する基準となる確率
  • 棄却・採択(受容・accept):有意水準を元にして、帰無仮説を偽と判断することを棄却と呼ぶ. 棄却されない=帰無仮説が正しい、とは言っていないことに注意すること.
  • 第一種過誤・第二種過誤

第一種過誤と第二種過誤 - Wikipedia

検定統計量

  • Z:標本の平均と母集団の平均が有意に異なるかを検定するために用いる
  • t:独立した二つの郡の平均値の差に対する検定 or 平均値が特定の値μに等しいかの検定に用いる
  • χ2:カイ二乗検定 - Wikipedia
  • F:正規分布に従う二つの郡の標準偏差・平均が等しいかを検定する際に使用する
  • U:ウィルコクソンの順位和検定に同じ。二つの郡から得られた標本のペアの有意差に対する検定。

線形モデル分析

www.slideshare.net

分散分析

分散分析

2つより群の数が多い時、それらの平均値が等しいかどうかを検定するには、二つの群を比較するt検定は適切ではない。検定統計量である水準間平方和・残差平方和がF分布に従うことを利用して、郡の間に差が存在しているかを検定することを分散分析と呼ぶ。1元・2元(もしくは2限以上を含む多元配置)の設定がある。

正規性の検定

分散分析など平均値を比較するパラメトリックな検定では、母集団が正規分布していることを仮定しているものがある。そのため、このような分析を行う前に母集団が正規分布にしたがっているかを検定する検定を行う必要が出てくる(帰無仮説:変数は正規分布をしている、として検定する)。

正規分布であるかを確認する方法として

  • 標本尖度・標本歪度が0であるかを確認する
  • Q-Qプロットが対角線上にプロットされるかを確認する
  • Kolmogorov-Smirnov・Shapiro-Wilkなどの正規性を確認するための検定

Q-Qプロット

Q-Qプロット - Wikipedia

観測値から作成した累積密度関数(=経験分布関数)と、現在想定している分布の確率密度関数にどれくらいズレがあるかを確認するためのグラフ。

適合度検定

観測された度数(=数値ではないカテゴリカル変数)が,ある特定の理論分布に適合しているかを判断するための検定。検定統計量が {カテゴリ数-1} の自由度を持つカイ二乗分布に従う。

独立性検定

二つの属性が独立であるかを判断するための検定。

  • 検定の対象としているに変数に対して分割表を作成
  • 独立であると仮定して、分割表の各セルに対して期待度数を求める
  • {属性1のカテゴリ数-1} {属性2のカテゴリ数-1}の自由度を持つカイ二乗分布に従う検定統計量を用いて検定を行う

参考文献

【エラー解決】「CondaValueError: Value error: prefix already exists」のため環境を作成できない

概要

conda env create -f environment.yml をコマンドラインで実行し、.ymlファイルに指定した設定で環境を作成したい。environment.ymlは以下のような記述になっている。

name: example
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.7.*
  - jupyter
  - sphinx=2.4.4
  - (以下略)

しかしconda env create -f environment.yml 実行後、

CondaValueError: Value error: prefix already exists:

のエラーが出て環境作成に失敗した。

conda info -e を用いて現在存在する環境を確認したが、「prefix already exists」に言われるような環境名の重複は存在していない。

原因

/Users/XXX/anaconda3/envs/ 以下に作成したい環境名と同一の名前をもつフォルダが残された状態になっている。フォルダは存在するが何らかの原因で環境の作成には失敗しており、conda info -eでは表示されていなかった。

解決法

/Users/XXX/anaconda3/envs/ 以下の不要な環境のフォルダを削除する。今回は「example」という名の環境を作成できなかったので「/Users/XXX/anaconda3/envs/example」フォルダを削除した(削除する場合は、それが実際には使用されていない環境であることを確認すること)。上記 /Users/XXX/anaconda3/envs/ のパスは conda info -e からでも確認できる。

不要な環境のフォルダを削除したのち、conda env create -f environment.ymlにて作成できることを確認した。

クリップスタジオで使用するカラーセットを画像から自動で抽出する

やりたいこと

画像を指定して、画像から色をピックアップしてクリップスタジオで使用できるカラーセットを自動的に抽出したい。

f:id:misos:20200730205635p:plain
左の画像から、右のようなカラーセットを作成したい

そのために、画像からクリップスタジオで読み込める形式のカラーセットファイルを作成したい。 最終的に、https://img-to-aoc.herokuapp.com/ (初回アクセス時のみ十数秒ページのロード時間が発生します)でクリップスタジオで読み込めるカラーセットのファイルをダウンロードできるようにしました。

カラーセット

クリップスタジオのカラーセットは独自の.cls形式のファイルか、Adobe Color Swatches(.acoファイル)の読み込みに対応している。

CLIP STUDIO PAINT リファレンスガイド - カラーセットパレット

Adobe Color Swatches(.acoファイル)は以下のページに仕様がある。

Color Swatches : Color swatch files are loaded and saved in Photoshop's Color Swatches palette. These are typically stored in the Color Swatches sub-directory in the Presets directory....(省略)

.cls形式のファイルは内部の仕様が不明だったため、.acoファイルでカラーセットを作成し、クリップスタジオで読み込む。

実装

カラーセットの出力

pythonにて実装。画像を読み込み、色をクラスタリングし、.aco で出力する。出力する色の作り方については色についてもう少し勉強したり、他の方の作成したカラーセットを参考にしながら決めていきたい。作ると決めてからクリップスタジオで読み込んで動作確認するまで約1時間かかりました。

Webアプリとしてのリリース

Herokuで行います。

はじめに、documentation に従いHeroku CLIをインストール。 The Heroku CLI | Heroku Dev Center

以降はHerokuのドキュメント通りに実行まで行います。

色の抽出とカラーセットの作成

画像に対してクラスタリングを行い、そのセントロイドのデータを指定された基準でソートします。

colorsys --- 色体系間の変換 — Python 3.8.5 ドキュメント

完成したWebアプリケーション

画像の通信+画像処理が行われるため、一度の処理に数秒〜10秒前後待機時間が発生します。ウェブアプリケーションフレームワークはFlaskを使用しました。

https://img-to-aoc.herokuapp.com/

f:id:misos:20200801021605p:plain
画像から作成したカラーセットのプレビュー

最後に.acoファイルをダウンロードし、クリップスタジオのカラーセットから読み込みを行います。クリップスタジオで先ほどプレビューした色が読み込めていることを確認します。

f:id:misos:20200801021742p:plain

参考文献

sklearn.cluster.KMeans — scikit-learn 0.23.1 documentation

Adobe Photoshop File Formats Specification

リファレンス一覧 - リファレンス - CLIP STUDIO | 創作応援サイト