Code Log

プログラミングの勉強メモを残していきます。

回帰分析の概要のざっくりとしたまとめ

回帰とは何か?

回帰とは、「依存変数」という一つの数値と、「独立変数」という一つ以上の数値の関係を規定すること。

依存変数は独立変数の値に依存している。

依存変数は目的変数とも呼ばれ、独立変数は説明変数と呼ばれる。

回帰分析は一般にデータ要素の間の複雑な関係をモデリングし、処理が結果に与える影響を予測し、将来に起きることを推定するために使われる。

独立変数が一つしかない場合を「単純線形回帰」、独立変数が複数あるときには多重線形回帰あるいは重回帰と呼ぶ。

最も基本的な単純回帰モデルは以下のように定義される。

y = α + βx

回帰は何かを分類するときにも使うことができる。

ロジスティック回帰は2値のの分類結果をモデリングし、ポアソン回帰は整数の度数データをモデリングする。

多項ロジスティック回帰はカテゴリをモデリングするので分類に使える。

さて、上で書いた

y = α + βx

のα、βの最適な推計値は、最小二乗回帰(Ordinary Least Squares: OLS)と呼ばれる方法で決める。

最小二乗回帰では、傾きと切片は、誤差(error)の2乗の総和が最小になるように選ばれる。

誤差とは、yの予測値と実測値の縦の距離のこと。残差(risidual)とも呼ばれる。

matplotlibをimportしたら"Python is not installed as a framework."というエラーが出た

matplotlibをimportしたら以下のようなエラーが出ました。

>>> from pylab import plot, show
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/pylab.py", line 1, in <module>
    from matplotlib.pylab import *
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/pylab.py", line 252, in <module>
    from matplotlib import cbook, mlab, pyplot as plt
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
    [backend_name], 0)
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 17, in <module>
    from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
>>> 

これを解決するには、

vim ~/.matplotlib/matplotlibrc

matplotlibrcというファイルを作り、ファイルの中にbackend: TkAggと書けばOKです。

https://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

matplotlibをimportしたら"Python is not installed as a framework."というエラーが出た

matplotlibをimportしたら以下のようなエラーが出ました。

>>> from pylab import plot, show
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/pylab.py", line 1, in <module>
    from matplotlib.pylab import *
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/pylab.py", line 252, in <module>
    from matplotlib import cbook, mlab, pyplot as plt
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup
    [backend_name], 0)
  File "/Users/UserName/.local/share/virtualenvs/chap2-U29tY3uW/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 17, in <module>
    from matplotlib.backends import _macosx
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
>>> 

これを解決するには、

vim ~/.matplotlib/matplotlibrc

matplotlibrcというファイルを作り、ファイルの中にbackend: TkAggと書けばOKです。

https://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

ペネトレーションテスト用の特化されたオペレーションシステム「Kali」をインストールするために参考にしたサイト

ダウンロードサイト
https://www.kali.org/downloads/

以下のサイトにVirtual Boxにインストールする方法や日本語キーボードの設定方法が記載されている。
https://doruby.jp/users/r357_on_rails/entries/KaliLinux


https://qiita.com/wyokobe/items/ff65dee449f2383a83d8

Chromeのアドレスバーの検索結果をとにかく英語にする方法


右上の設定ボタンから設定画面に移動します。

それから、「検索エンジンの管理」をクリック。

で、その他の「検索エンジン」の一覧のところにある「追加」をクリック。

検索エンジン:google_en
キーワード:google_en
のように入れて、

URLに以下をコピペして「追加」を押します。

https://www.google.com/search?q=%s&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:iOSSearchLanguage}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}{google:contextualSearchVersion}ie={inputEncoding}


んで、追加された検索エンジンの右側の縦丸3つのボタンを押して、「デフォルトに設定」

これでアドレスバーから検索した結果はだいたい英語になります。
日本語のサイトを探したいときは、日本語を入れればけっこう出てきます。

「~とは」みたいな。

NW.jsでhello worldアプリを作ってみる


NW.jsはHTML、CSS、JavaScriptでデスクトップアプリケーションを作るためのフレームワークです。
2011年にRoger Wangによって作られました。

RogerはNode.jsとChromiumを融合させる試みの中で、単にHTMLやJavaScriptを読み込むだけではなく、JavaScript APIを使ってOSのリソースにアクセスする方法を考えました。

これは従来のウェブアプリケーションではできなかったことです。

それでは、NW.jsのサンプルを作ってみましょう。

まずはNW.jsをインストールします。

npm install -g nw

次に作業ディレクトリを作り、package.jsonを置きます。


package.jsonはこんな感じ。

{
	"name": "hello-world-nwjs",
	"main": "index.html",
	"version": "1.0,0"
}

package.jsonと同じディレクトリでindex.htmlを作りましょう。

<html>
  <head>
  	<title>hello world</title>
  	<style>
	  	body {
	  		background-image: linear-gradient(45deg, #EAD790 0%, #EF8C53 100%);
	  		text-align: center;
	  	}

	  	button {
	  		background: rgba(0,0,0,0.40);
	  		box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.50);
	  		border-radius: 8px;
	  		color: white;
	  		padding: 1em 2em;
	  		border: none;
	  		font-family: 'Roboto', sans-serif;
	  		font-weight: 100;
	  		font-size: 14pt;
	  		position: relative;
	  		top: 40%;
	  		cursor: pointer;
	  		outline:none;
	  	}

	  	button:hover {
	  		background: rgba(0,0,0,0.30);
	  	}

  	</style>
  	<link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
  	<script>
  		function sayHello() {
  			alert('Hello world');
  		} 
  	</script>
  </head>
  <body>
  	<button onclick="sayHello()">Say Hello</button>
  </body>
</html>


で、同じディレクトリで

nw

というコマンドを実行すれば、以下のような画面が表示されます。

f:id:sho322:20170702094716j:plain

Pythonでファイルの読み書きを行う

Pythonでファイルの読み書きを行ってみます。
フォルダ構成はこちらです。


service.file_operation_service.py

class FileOperationService:

    def __init__(self, name):
        self.name = name
        print("FileOperationService is created")

    def file_read(self):
        try:
            text = open("C:\\0.dev\\sample.txt", encoding="utf-8")
            contents = text.read()
        finally:
            text.close()

        print(contents)

    def file_write(self):

        try:
            file = open("C:\\0.dev\\write.txt", mode="w", encoding="utf-8")
            file.write("僕の名前はキラだ \n")
            file.write("私の名前はLだ \n")
            file.write("私はニアだ \n")
        finally:
            file.close()

    def file_write2(self, fileName):
        with open(fileName, mode="w") as f:
            f.write("信頼せよ。\n")
            f.write("そうすれば彼らはあなたに正直になる\n")

withを使っても使わなくてもファイル処理は賭けますが、with構文を使うことで、try~finallyを使うことなく、自動的に処理の最後にclose()メソッドを呼んでくれます。

次に上のサービスを実行するスクリプトです。

from service.file_operation_service import FileOperationService


fileService = FileOperationService("test")
fileService.file_read()
fileService.file_write()

fileName = "C:\\0.dev\\write2.txt"

fileService.file_write2(fileName)

open()関数のmode引数に与える値は以下のとおりです。
w:書き込みモード
r:読み込みモード(デフォルト)
a:書き込み用に開き、ファイルが存在すれば末尾に追記
b:バイナリモード
t:テキストモード

TypeScriptの関数の使い方

TypeScriptのインストール方法

TypeScriptをインストールするには以下のコマンドを実行します。

npm install -g typescript

-gオプションは、TypeScriptコンパイラをグローバルにインストールするということです。

TypeScriptコンパイラのバージョンを確認するには以下のコマンドを実行します。

$ tsc --version
Version 2.2.1

TypeScriptで書かれたコードをJavaScriptに変換するには、以下のコマンドを実行します。

tsc main.ts

生成されたJavaScriptとTypeScriptをマッピングするには、以下のコマンドを実行します。

tsc --sourcemap main.ts

TypeScriptコンパイラに-wオプションを渡せば、ソースコードが変更されるたびに自動的にJavaScriptファイルに変換します。

tsc -w *.ts

関数の書き方

TypeScriptでは関数に型を指定することができます。

function calcTax(state: string, income: number, dependents: number): number {
    if (state == 'NY') {
        return income * 0.06 - dependents * 500;
    } else if (state == 'NJ') {
        return income * 0.05 - dependents * 300;
    }   
}

var tax: number = calcTax('NJ', 50000, 2);
console.log(tax);

無名関数の使い方

無名関数を使うときはfunctionキーワードは必要ありません。

function StockQuoteGeneratorArrow(symbol: string) {
    this.symbol = symbol;
    setInterval(() => {
        console.log("StockQuoteGeneratorArrow the price quote for is " + Math.random());
    }, 1000);
}

var stockQuoteGeneratorArrow = new StockQuoteGeneratorArrow("IBM");

Spring Bootで簡単なRESTアプリを作成する


Spring Bootを使ってREST Serviceを作るのは非常に簡単です。


まず、Beanクラスを作成します。

package com.example;

import java.io.Serializable;

public class Message implements Serializable {
	private String text;

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
}

次に、RESTコントローラーを作ります。

package com.example;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/messages")
public class MessageController {
	final List<Message> messages = new CopyOnWriteArrayList<>();
	
	@RequestMapping(method = RequestMethod.GET)
	public List<Message> getMessages() {
		if (messages.size() == 0) {
			Message msg = new Message();
			msg.setText("this is example");
			messages.add(msg);
		}
		return messages;
	}
	
	@RequestMapping(method = RequestMethod.POST)
	public Message postMessages(@RequestBody Message message) {
		messages.add(message);
		return message;
	}
}

これだけ。
で、

http://localhost:8080/messages

にリクエストを投げると、

[{"text":"this is example"}]

というJSONが返ってきます。

C#でシャットダウンのイベントを受け取って処理を実行する

シャットダウンする直前に処理を走らせる作業を実行したいと考えています。

ProエディションならGroup Policyに記述を追加すればシャットダウンに引っかけてスクリプトを実行することができるのですが、Home Editionだとうまくいきません。
なので、自作スクリプトでなんとかするしかなさそうです。

こんな感じで.NETのプログラムを作ります。
これで出力したexeを走らせておけば大丈夫です。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;

namespace folder_backup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Hide();
        }
        private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
        {
            string s = "";
            if (e.Reason == SessionEndReasons.Logoff)
            {
                s = "ログオフしようとしています。";
            }
            else if (e.Reason == SessionEndReasons.SystemShutdown)
            {
                s = "シャットダウンしようとしています。";
            }
            if (MessageBox.Show(s + "\n\nキャンセルしますか?",
                "質問", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //キャンセルする
                e.Cancel = true;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SystemEvents.SessionEnding +=
            new SessionEndingEventHandler(SystemEvents_SessionEnding);
        }
    }

}