matthew as a q.

競技プログラミングメイン

今日学んだこと(11/18)

map

pythonで各リストの要素に同じ処理を加えたいときに使える。
ここではラムダ関数を使用しているが、もともと存在する関数を使用することも可能。

例えば、pandasのread_csvで読み込んだdataframeに同じカラム名がついている場合、下記にように番号付きに書き換えられる。

あらかじめ、「df」という名前のdataframeがあるものとする。

  cols = list(map(lambda x: "column_" + str(x), range(len(df.columns))))
  df.columns = cols

pandas.concat

読み込んだリストを結合して、dataframeを返す。
axis=1とした場合、横方向に連結。

  import pandas as pd

  #同じ形式の表を読み込む
  list_of_list = [pd.read_csv(os.path.join(input_path, f), index_col = 0) for f in file_names]
  df = pd.concat(list_of_list, axis = 1)

dataframe.rank()

dataframe中の各カラムについて、各行に入っている値の順位を返す。


サービスとして起動しているJenkinsを停止する

環境

現在起動しているJenkinsの停止方法

1. タスクマネージャーを起動。
2. 「サービス」タブから「Jenkins」を探す。
3. 右クリック→停止。

スタートアッププログラムから外す

1. 「Jenkins」サービスを見つけるところまで同様。
2. 「Jenkins」で右クリック。「サービス管理ツールを開く」を選択。
3. 左上に「サービス」と書かれたウィンドウが開くので、そこで「Jenkins」を探す
4. 見つけた「Jenkins」を右クリック→「プロパティ」
5. 「スタートアップの種類」を「無効」、もしくは「手動」に変更する。

kaggleを戦う基礎知識

随時追記。

Cross Validation

やり方の一例

sklearnのStraitifiedKFoldを使う方法
from sklearn.model_selection import StratifiedKFold

cv = StratifiedKFold(n_splits=3, shuffle=True, random_seed=seed)

for train_idx, target_idx in cv.split(train_x, target):
    ....

EDA

基礎集計。kaggleでデータの性質を見るようなkernelのタイトルについていることが多い。
どんな分析をしているか、どんなデータであるかを確認することを目的として読んだら良い。

optional

tmuxの使い方

AWSGCPを借りて作業する場合、セッションを維持したまま別の作業をするために、tmuxは必須。

  • 前提

- 作業環境
Ubuntu 16.04 LST

  • インストール
sudo apt-get install tmux
  • 水平分割で別のpaneを開く
Ctrl b + "
  • 垂直分割で別のpaneを開く
Ctrl b + %
  • 別のpaneへ移動
Ctrl b + o

Pythonの使い方

Dictionaryをキーワード引数として渡す方法
  • test_funcへDictionaryのparams引数を渡す場合
test_func(**params)

Compute Engineにストレージのファイルをコピーする

何の記事?

Google Cloud Platform(以下、GCP)の「Compute Engine」に立てたインスタンスに、GCPの「ストレージ」に置いたファイルをコピーしてくる方法の解説。

前提

事前にGCP のストレージ内に「test/input」フォルダを作成しているものとする。
そのフォルダ内にコピーしたいファイルがアップロードされているとする。

実際の作業

現在のディレクトリに「input」フォルダが存在するとして、その「input」フォルダ内に、Google Cloud Platform内「test/input」内のファイルをコピーする。

gsutil -m cp -r gs://test/input ./

NUnitを使った自動テスト環境

今回はVisutal Studio 2015でNUnitを使えるようにしようという話。
最終的に、コマンドプロンプトからテスト実行できるようになるのが目標。

  • 前提条件;
    • 環境:OS: Windows 10
    • NUnitのテストは既に書けているものとする。

NUnitを使ってVisual Studioでユニットテスト自動化的なやつやる - 残像ブログ




以下の記事の2番目の方法「Using NuGet Packages」でインストールをする。

Installation · nunit/docs Wiki · GitHub

  • インストール

1. Visual Studio 2015を立ち上げる。
2. 「ツール(T)」→「NuGetパッケージマネージャー(N)」→「ソリューションのNuGetパッケージの管理(N)」
3. 画面内、「参照」タブを選び、パッケージの検索窓へ、NUnitと入力
4. 検索結果から、「NUnit」、「NUnit.Console」をインストール(複数のProjectで使用するのであれば、ソリューション下へインストール)


これでインストール完了。

  • テスト実行

GUIで実行する方法と、CUIで実行する方法があるが、今回はCUIで実行する方法を紹介。

上に書いた方法でインストールを行うと、インストールしたソリューションフォルダの直下に「packages」フォルダが出来上がっている。

「packages」→「NUnit.ConsoleRunner.3.5.0」→「tools」→「nunit3-console.exe」を、テストを含んだプロジェクトの「dll」、「exe」を引数にして実行することで、テストを実行できる。

C4996を回避する

環境

Windows 10, Visual Studio 2015

エラーメッセージ

C4996 'std::_Fill_n': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' DPDPLibrary c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 2810

回避方法

エラーメッセージにあるようにコンパイルオプション「_SCL_SECURE_NO_WARNINGS」を指定する。

Visual Studio 2015でのコンパイルオプションの設定は以下から行う。

該当プロジェクトを右クリック
→プロパティ
→構成プロパティ
C/C++
プリプロセッサ
プリプロセッサの定義の欄に、エラーメッセージの通りにコンパイルオプションを追加する。

c++の親クラスへのコンストラクタ引数受け渡し

継承関係にある以下のような2つのクラスがあるとしよう。

//定義
class IHoge {
    IHoge(const double a);
};

class Hoge {
    Hoge(const double b);
}

//実装
IHoge::IHoge(const double a)
{
}

Hoge::Hoge(const double b)
{
}

このコードはエラーとなる。

error: constructor for 'Hoge' must explicitly initialize the base class
      'IHoge' which does not have a default constructor

なぜエラーとなるのかを考えるためには継承関係の子クラスが生成されるときの仕様を知る必要がある。

まず前提として、子クラスを生成するときには、「子クラスのコンストラクタ→親クラスのコンストラクタ」という順序で親クラスのコンストラクタも呼ばれる。

そのとき、今回のように子クラスHogeコンストラクタが引数aをとって、その親クラスIHogeのコンストラクタも引数bをとるような場合、子クラスを生成したときには、親クラスIHogeのコンストラクタの引数として暗黙的にbが渡されることはない。そこで明示的に渡してやる必要がある。

//definition
class IHoge {
public:
    IHoge(const double a);

};

class Hoge : public IHoge {
public:
    Hoge(const double b);
};

//implementation
IHoge::IHoge(const double a)
{
}

Hoge::Hoge(const double b)
:IHoge(b)
{
}


int main()
{
    Hoge h(1.0);
    return 0;
}

独習C++にも書いてある話。