satopoooonのブログ

自分向けの備忘録

C#覚書、staticとかThisとかなにそれ

C#の覚書、

以下参考サイト、

http://ufcpp.net/study/csharp/oo_static.html

静的メンバとかなんだそれ?

 

C#だと、変数やクラスにstaticをつけると、

静的メンバとよぶらしい。

static 変数と宣言されたら、

それはいわゆるクラス変数(クラス内で共通の変数)のことみたい。

 

static クラスと宣言されたら、

それはインスタンスを作る必要のないクラスみたい。

メソッドしか持たない。

構造化言語でいう関数に近い。

 

 

 

 

 

 

ノンパラメトリックな検定、ウィルコクソン検定

特定の分布を過程する検定はパラメトリックな検定、

→母集団の分布がわかっている場合はパラメトリックな検定をすればよい、

  正規分布しているなら、t検定

 

特定の分布を過程しない場合は、ノンパラメトリックな検定、

→母集団の分布がよくわからん、、、そういうときはt分布ではなくて、

ノンパラメトリックな検定(例えばウィルコクソン検定、Mann-Whiteny検定など)

 

正規分布しているかどうか怪しいものに、

t分布などを使うと検出力が下がる、

特にn数が少ない場合は顕著、

以下参考文献

パラメトリック検定の検出力

 

t検定,プールした分散

対応がない場合のt検定

参考文献は以下、

http://www012.upp.so-net.ne.jp/doi/biostat/CT39/ttest.pdf

 

二つのグループをt検定する。

まず前提として、二つのグループ等分散、母分散は不明であるとする。

等分散じゃないと、t検定が使えない。

二つのグループのそれぞれの偏差平方和(s1,s2)から、プールした不偏分散を作る。

 

等分散なんだから、

二つのグループのデータを使って分散を求めた方が精度が良くね、

っていうモチベーションでプールする。

 

二つのグループをまとめた偏差平方和s = s1+s2

自由度はn = (n_1-1)+(n_2-1) 

よって、プールした分散はs = (s1+s2) / {(n_1-1)+(n_2-1)} 

となる。 

これを使ってt検定する。

 

なお、等分散じゃない場合はウェルチの検定となる。

等分散じゃなくてかつ母分散も不明の場合、

厳密に従う統計量は存在しない。

→近似的にはウェルチの検定でいける、

 

このへんは、

永田本「統計的方法の仕組み」p.185に記載している。

 

 

SQLで文字列を置換する方法

以下で可能、

REPLACE(column名,"置換前の文字列","置換後の文字列")

 

条件が複数の場合は、

REPLACE(REPLACE(column名,"置換前の文字列","置換後の文字列"),"置換前の文字列","置換後の文字列")

というように入れ子にする。

 

上記の方法だと、いちいちcolumn名を指定する必要がある。

→テーブルすべてに同一処理をしたい場合は、columnの数だけ上記の処理をする必要がありそう。

下のリンクでも、同じような悩みを持っている人が質問している。

回答としては、やっぱりcolumnの数だけsqlを書く必要がありそう。

全てのフィールドを一括置換する方法

C#、VB.NETでエクセル操作

#エクセルを操作
C#でエクセル操作をする.
開発環境は、Visual studio2017です。

エクセル操作のためのdllがあるんですが、
それはつかいませんでした。
今回は、NPOIというモジュール(?)を使います。
以下参考サイトです。

【C#】NPOIを使ってExcelファイルを作成・編集する - Qiita

Excelファイルを C# と VB.NET で読み込む "正しい" 方法 - Qiita

NPOIのインストール方法から掲載しています。

拡張子がxlsとxlsm両方に対応できているのがgood、

古いエクセル(EXCEL2013)しか対応していないPC用にPGを作成しようと思ったんですが、
Visual sturio2017からは対応のdll(Microsoft.Office.Interop.Excel)がインストールできなさそう。
調べてみたら、NPIOというものがあるぞということで使うことにしました

Sourcetree,Bitbucketの環境構築

ソースコードのver管理をどうする?

以下、Sourcetree、Bitbucketの環境構築および使い方についてのメモです。
参考サイトは以下です。

【連載Git入門 第2回】SourceTreeでGitを始めよう!まずは試しに使ってみよう! | naichilab - Android iOSアプリ開発メモ

ローカルリポジトリの作成

ソースコードの編集自体は、適当なIDEを使ってます。
pythonの編集の場合、僕はpycharmを使用しています。
pycharmでもgitの機能は使えるみたいですが、
Sourcetreeが使いやすいそうなので、そちらを使用することにしました。

以下、sourcetree使用の流れです。
まずは、pycharmで適当なプロジェクトを作成します。
プロジェクトは特定のフォルダ下に置かれます。

次にSourcetreeを立ち上げて、
「新規/ローカルリポジトリを作成」を選択します。
プロジェクトのパスを聞かれるので、
入力してあげるとローカルリポジトリが作成されます。
f:id:satopoooon:20180513134016p:plain

コミット、チェックアウト

ソースコードをpycharm上で編集します。
コミットしてあげると、それがブランチとして繋がります。
コミット履歴が羅列していますが、前のコミットを選択すると、
pycharm上のソースコードも、前のものに変わります(チェックアウト)。
詳細は参考サイトに書いてあります。

注意点として、前のコミットに戻した状態(チェックアウト)で新たにコミットすると、
以下のようになります。
最新版であるコミットの新1から、コミット古にチェックアウトします。
その状態で、新たにコミットすると、コミット新1は消えて、新2しか残りません。
これを防ぐには、チェックアウトしたときに、新2用のブランチを作成してからコミットすることです。

古→新1

→→新2
新2しか残らない。

ブランチを切る、mergeする、

ブランチを切ることで、サブの枝を作ることができます。
メインの枝が安定verのPGだとすると、サブの枝は開発verの枝というイメージです。
詳細は参考サイトに書いてあります。

リモートリポジトリを作成する。リモートリポジトリからクローンを作成する。

まずはBitbucketにアカウントを作成します。
アカウトを作成したら、sourcetreeからリモートリポジトリを作成します。
まずは、メニューバーの「Sorcetree/環境設定/アカウント/追加」で先ほど作成したBitbucketのアカウントを追加します。
通信方法がsshhttpsと設定できますが、とりあえずhttpsにしました。

アカウントを追加したら、
「新規/リモートリポジトリを作成」でリモートリポジトリを作成できます。
f:id:satopoooon:20180513134016p:plain

このとき、下記のエラーがでました。
「Too many invalid password attempts.〜〜〜〜〜(以下省略)」
Bitbucketのサイトに、ログインしなおしたら解決できました。

また、リモートタブを選択すると(上図参照)、リモートリポジトリの一覧が表示されます。 ここから、ローカルリポジトリにクローンすることができます。

一人で開発する分にはこれくらい使いこなせれば良いかと思います。

また、以下別の参考サイトも書いておきます。

Gitのインストール【チュートリアル1 Gitの基本】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

絶対できる!Source Treeの使い方を初心者向けに説明してみた! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

複数のグラフを一度に書く

seabornのグラフを一度に複数書く、

あるパラメータで層別して、複数のグラフを一度に描きたいです。 seabornのfacetgridを使います。 参考サイトは以下です。

Python でデータ可視化 - "Facet"で属性別グラフを一気に描く方法が便利すぎる - Qiita Python - seaborn.facetgridでの文字追加|teratail seaborn.FacetGrid — seaborn 0.9.0 documentation

以下コード

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

bins = np.arange(0, 65, 5)
tips = sns.load_dataset("tips")

#層別のパラメータが2種類ある場合は、col、rowで指定します。
#1種類の場合は、colのみで良いと思います。
g = sns.FacetGrid(tips, col="time",  row="smoker")
g = g.map(sns.distplot, "total_bill", bins=bins, color="r")

#各gridに対する、axisを読んで、テキストを埋め込みます。平均値とかを記載したときに良いかと、
for i in range(2):
    for j in range(2):
        ax = g.facet_axis(i, j)
        ax.text(40,0.04,"hoge")

plt.show()

f:id:satopoooon:20180416173350p:plain