FAQ

Author

Ryo Nakagami

Modified

2025-12-19

統計分析

Note統計スキル習得の5つの観点
  1. 統計手法そのものの理解と,その背後にある数学を用いた理論の理解
  2. 実際のデータに対して統計手法を用いた分析を実行するためのプログラミングスキル
  3. データの前処理,環境構築,ソースコードのテストや管理,実装した推定量のデプロイなどのエンジニアリングスキル
  4. 統計学の考え方や発想(例:データ分析のお作法や結果の解釈方法など)
  5. そもそも解くべきの問題の見つけ方とその問題を解くにあたっての方法論

統計学の考え方や発想

「統計学の考え方や発想」を身につけることは

  • データを取得したときに最初にすべきこと
  • データ解析で意識しておくべきこと
  • 結果を解釈するときに肝に銘じておきたいこと

へ繋がってきます.

Linux

NoteOSの役割

OSは以下の役割を担う:

  • ユーザとのインタフェース機能(入力の受付・結果表示など)
  • 記憶装置(ハードディスク,テープ等)やプリンタなどへのデータ入出力の管理
  • メモリの管理やリソースの割り当て
  • アプリケーションソフトウェアの実行管理(OSが存在しないと,アプリケーションは動作できない)
  • システム全体を統括する中心部分としてカーネルを持ち,GNU/LinuxシステムではLinuxがそのカーネルにあたる
Noteカーネル情報の確認
% uname -a
Linux kirby-Desktop 6.14.0-35-generic #35~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Oct 14 13:55:17 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

表示フィールドは

kernel-name nodename kernel-release kernel-version
machine processor hardware-platform operating-system
フィールド 例(あなたの環境) 説明
Kernel name Linux カーネルの種類(通常 Linux)
Hostname ryo-billiken-Desktop ホスト名(マシン名)
Kernel release 6.14.0-35-generic カーネルのリリースバージョン
Kernel version #35~24.04.1-Ubuntu カーネルのビルド番号+ディストリビューション情報
Build date Tue Oct 14 13:55:17 UTC カーネルがビルドされた日時
Build number / ABI 2 ABI 番号や追加のビルドメタ情報
Machine hardware name x86_64 CPU アーキテクチャ(ハードウェア)
Processor type x86_64 プロセッサタイプ(多くの Linux は machine と同じ値)
Hardware platform x86_64 ハードウェアプラットフォーム(多くの環境で machine と同じ)
Operating system GNU/Linux OS 種別
NoteLinuxを学ぶ意義は?
  • Linuxは世界でもっとも使われているOSであり,サーバやクラウド環境で広く採用されている
  • コンピューターはOS上で動作し,多くの機器がLinuxを搭載していることから,身の回りのコンピュータがどのような仕組みで動いているか理解する上でLinuxを学ぶ意義がある
  • データ分析実践の場面では,分析サーバやクラウド環境の多くがLinuxを基盤としており,操作や管理能力は実務上重要
  • Linuxの知識を身につけることで,効率的なデータ処理,自動化,環境構築など幅広いタスクを自力で行えるようになる
NoteUbuntuとは?
  • Debian GNU/Linuxをベースとしたディストリビューション
  • パッケージはDebianと同じく .deb 形式,パッケージマネージャも APT(Advanced Packaging Tool) を基本的には用いる
  • Canonical社から支援を受けつつ,コミュニティーベースで開発

Ubuntuにもいろいろなバリエ=ションがあり,代表例は以下

バリエーション 用途・特徴 デスクトップ環境 サポート期間
Ubuntu Desktop 一般ユーザー向けデスクトップ GNOME LTS: 5年
Ubuntu Server サーバー向け,GUIなし なし(CLI中心) LTS: 5年
Ubuntu Cloud クラウド環境向け(AWS, Azure, OpenStackなど) なし LTS: 5年
Ubuntu Core IoT・組み込み向け,スナップ中心 なし リリースによる

LTS系を使うときは,初回リリースには「未知のバグやハードウェア非対応」がある場合があるので基本的には 22.04.2 のような .2 ポイントリリース以降を用いること

Noteディレクトリ構造の理解が必須
  1. データ取得・前処理・Notebookの配置・スクリプト実行など分析の中心はファイルやフォルダの操作
  • CLI のほうが正確で速い
  • CLI はパス指定で動くためディレクトリ構造の把握が必須
  1. サーバーやクラウドは GUI が使えない
  2. 再現性と品質管理にディレクトリ設計が不可欠
  3. CLI コマンドはそのまま自動化できるが,GUI 操作はできない
  4. そもそもUnix / Linux システムでは,「UNIXがインストールされたコンピューター(ホスト)に,ネットワーク経由で複数の別のコンピューター(ターミナル)から接続して作業を行う」という利用方法が基本なので,CLI利用が基本
NoteUbuntuセットアップ命名規則
<username>@<hostname>
  • username: 小文字英数字, 先頭文字は英字, - は避ける,_ はOK
  • hostname: アンダースコア _ は避ける,小文字英数字
NoteUbuntu Hostname Guideline
カテゴリー 特徴
① 動物・神話生物 ryo-griffin
ryo-pegasus
ryo-dragon
・印象に残る
・長期運用向き
② プロジェクト名 ryo-regmonkey
ryo-digitaltwin
ryo-hvac
・用途が明確
・ワークスペースや実験環境に最適
③ 英語の形容詞+名詞 ryo-silverfox
ryo-blueoak
・自由度が高い
NoteLinuxディストリビューションのインストール基本手順
  1. インストーラーの作成(USBメモリ等)
  2. インストーラーの起動(BIOS / UEFI 設定)
  3. インストール方法の選択(GUI / CLI,言語など)
  4. ストレージ設定
    • パーティション分割(必要に応じて LVM / 暗号化)
  5. ネットワーク設定
    • DHCP / 固定IP(※ディストリビューションにより前後する)
  6. キーボード配列・タイムゾーンの設定
  7. 初期ユーザー設定
    • root パスワード
    • 一般ユーザー
    • hostname
  8. インストールの実行
  9. システムの起動(再起動)
Noteアプリケーションの導入(ソースコードから)
  1. ソースコードの入手
  2. ソースコードの配置と展開
    • 一時ディレクトリ(/tmp など)に配置し,アーカイブを展開
  3. 事前準備(依存関係の確認・導入)
  4. 設定(./configure の実行)と Makefile の生成
  5. コンパイル(make
  6. インストール(make install
  7. 動作確認
NoteSysV init の runlevel

古い Fedora Coreでは rhgb quiet 3 と知っていするとCUI環境でのログイン画面が表示されますが,これはSysV initのrunlevelの指定に対応しています.

  • rhgb: Red Hat Graphical Boot
  • quiet: カーネルのログ出力量を減らすオプション
  • 3: SysV init における マルチユーザーモード(ネットワーク有効・GUIなし) を指定
runlevel 意味
0 halt(電源断)
1 single user mode(保守用, rootのみ)
2 ネットワークなしのmulti-user
3 multi-user + network(CUI)
4 未定義
5 multi-user + network + X(GUI) = グラフィカルログインによるマルチユーザーモード
6 システムの再起動(reboot)

環境構築

Noteなぜデータサイエンティストにとって,ネットワークやサーバーなどの基盤知識が必要なのか?
  • 自分で好きなように分析環境を整えられるようになる
  • リソース不足時に,アルゴリズムの最適化のほか,スケールアップなどのインフラ計画まで踏み込んだ包括的な対応ができるようになる
  • システムトラブル時にどこに問題があるか,どのように対策すれば良いかが判断できるようになる

ネットワーク環境

Python分析環境

NoteQuick setup for ad-hoc analysis
  • pytestruffをこだわりなくクイックに用いたい場合は uvx(or uv tool run) を用いる
  • Pyproject.tomlで管理されていないディレクトリでもコマンド自体は利用可能

プログラミング

Note哲学としてのオブジェクト指向設計(OOD)
  • 解決しようとする現実の問題を上手く理解できる形に整理・表現(モデリング)した上で,自分の経験やベストプラクティスをパターンという形に結晶化し,それを再利用すること
  • 問題をどう捉え,どう構造化するかという思考法そのものを重視
  • 「オブジェクト指向設計」自体に拘るのではなく「問題解決に使えるオブジェクト指向設計」という考えが重要
NoteCLIコマンドの引数とオプションの順番
  • 「通常は オプション → 引数 の順番」だが,あくまで慣習
  • サブコマンド型CLIでは「コマンド → サブコマンド → オプション → 引数」とかもあり得る
command [options] [arguments]
NotePythonの特徴
  • Javaのようにオブジェクト指向を全面に出さないため,クラスに属さない関数やグローバル変数が定義可能
  • 一方,データ型はすべてクラスであり,個々のデータ値はインスタンス
Noteデーモンからのメール

Gmailを使用していると mailer-daemon@googlemail.com が差出人となっているメールが届くことがあります.大抵の場合, メールの送信にかんするエラーが発生し,メールサーバーがそのことを知らせるためにメールを送ってくれています.

ここでいう DAEMONは常駐プログラム的な意味のデーモンのことです.つまり,メールサーバーのプログラムが自動的に送信しているメールなので, DAEMONからのメールに返事を出しても意味がありません.

正規表現

メタ文字 意味 記述例 マッチする文字列例
. 任意の1文字 a.b acb, a9b
^ 行頭 ^abc abcxxx
$ 行末 abc$ xxxabc
\ エスケープ \. .
| OR cat|dog cat, dog
* 0回以上 ab* a, ab, abbb
+ 1回以上 ab+ ab, abbb
? 0または1回 colou?r color, colour
{n} n回 a{3} aaa
{n,} n回以上 a{2,} aa, aaaa
{n,m} n〜m回 a{2,4} aa, aaa, aaaa
[abc] いずれか1文字 b[ae]t bat, bet
[^abc] 否定クラス [^0-9] a, #
[a-z] 範囲指定 [a-z]+ hello
[A-Z] 英大文字 [A-Z]{2} US, JP
[0-9] 数字 [0-9]+ 123
\d 数字 \d{4} 2026
\D 数字以外 \D+ abc
\w 英数字+_ \w+ var_1
\W \w以外 \W+ !!!
\s 空白 \s+ , \t
\S 非空白 \S+ text
(…) グループ (ab)+ ab, abab
^ 行の先頭 ^# # comment
$ 行の末尾 ;$ end;
Noteワイルドカードと正規表現の違い
  • ワイルドカード(globパターン)はシェルでのファイル名マッチングに使用
  • 正規表現はテキスト内のパターンマッチングに使用
項目 ワイルドカード(glob) 正規表現
主な用途 シェルでのファイル名・パス指定 テキスト検索・置換(grep, sed, etc.)
* の意味 0文字以上の任意の文字列 直前の文字の0回以上の繰り返し
. の意味 ただのドット文字 任意の1文字(メタ文字)
? の意味 任意の1文字 直前の文字の0または1回
使用例 ls *.txt
cp file?.log /tmp/
grep "a.*b" file.txt
sed 's/[0-9]\+/X/g'

具体例

# ワイルドカード(シェル)
ls *.txt          # file1.txt, data.txt などにマッチ
rm test?.log      # test1.log, testA.log などにマッチ

# 正規表現(grep)
grep "test.*log" file.txt   # "test" と "log" の間に任意の文字列
grep "file[0-9]+" file.txt  # "file" の後に1つ以上の数字

シェル

Note内部コマンドと外部コマンド

シェルには 内部コマンド(builtin)外部コマンド の2種類があります.

種類
内部コマンド cd, export, set, echo, read
外部コマンド ls, cp, mv, grep, awk

内部コマンド

  • シェルの本体が持っているコマンド
  • シェル自身が処理するコマンドで,外部プログラムを起動しない
  • 高速で,カレントディレクトリ・変数・ジョブ状態などシェル自身の状態を直接変更できる

外部コマンド - /bin/usr/bin などに存在する実行ファイルで,シェルは fork/exec によって別プロセスとして実行. - 多くの場合,「実行ファイル名 = コマンド名」

判定方法

内部コマンドかどうかは type で確認できます(which でも可能)

$ type cd
cd is a shell builtin

$ type cp
cp is /usr/bin/cp
Noteシェル特殊変数

$ がつく特殊変数

変数 意味 example
$0 実行中のスクリプト名 echo $0
$1$9 位置パラメータ ./script.sh foo$1=foo
$# 引数の個数 echo $#
$@ 全引数(配列的) for a in "$@"; do echo $a; done
$* 全引数(1文字列) echo "$*"
$$ 自分のPID echo $$
$? 直前コマンドの終了コード ls /nope; echo $?
$! 直前バックグラウンドPID sleep 10 & echo $!
$_ 直前コマンドの最後の引数 ls /tmp; echo $_

bashの展開系

変数 意味 example
$RANDOM 乱数 (0–32767) echo $RANDOM
$SECONDS シェル起動後の秒数 sleep 2; echo $SECONDS
$LINENO 現在の行番号 echo $LINENO
$FUNCNAME 関数名 関数内で echo $FUNCNAME

履歴展開

書き方 意味 example
!^ 直前コマンドの 最初の引数 cmd var1 var2echo !^var1
!$ 直前コマンドの 最後の引数 cmd var1 var2echo !$var2
!* 直前コマンドの 全引数 cmd var1 var2echo !*var1 var2
!:n n番目の引数 cmd var1 var2 var3echo !:2var2
!:n-m n〜m番目 cmd var1 var2 var3echo !:2-3var2 var3
!:^ 最初の引数(!^ と同じ) cmd var1 var2echo !:^var1
!:$ 最後の引数(!$ と同じ) cmd var1 var2echo !:$var2

条件式

条件式 説明
-d <PATH> 指定した PATH が存在し,ディレクトリである場合に true
-f <PATH> 通常ファイルが存在する場合に true.ブロックデバイスの場合は false
-e <PATH> ファイルまたはディレクトリが存在すれば true
-L <PATH> シンボリックリンクの場合に true
-x <PATH> 実行可能な場合に true
数値1 -eq 数値2 2つの数値が同じ場合に true
数値1 -le 数値2 数値1 less than or equal to 数値2, then true
数値1 -ge 数値2 数値1 greater than or equal to 数値2, then true

ドキュメント

Noteman ドキュメント
man [section] [command/file name]
  • デフォルトでは less を用いて表示される
  • passwd コマンドと /etc/passwd ファイルなど,同じ名前のコマンドやファイルはセクションによって区別します
  • コマンドやファイル名の一部しかわからない場合は,apropos コマンドを用いると見出し一部部分マッチで候補を検索することができる
セクション番号 セクション名 内容
1 User Commands 一般ユーザ向けコマンド(例:ls, cat, grep
2 System Calls カーネルが提供するシステムコール(例:open, read
3 Library Calls ライブラリ関数(例:printf, malloc
4 Special Files デバイスファイル・特殊ファイル(例:/dev/null
5 File Formats 設定ファイル・ファイル形式(例:passwd, fstab
6 Games ゲーム・娯楽プログラム
7 Miscellaneous 規約・標準・マクロ・プロトコル等
8 System Administration 管理者向けコマンド(例:mount, iptables
9 Kernel Routines カーネル内部 API(主に開発者向け)

vimコマンド

Insertモードへ

vimコマンド 動作
i カーソル前に文字を挿入
a カーソル後に文字を挿入
o カーソル行の下に新しい行を作成し,その先頭から挿入が開始
I カーソル行の先頭に文字を挿入
A カーソル行の末尾に文字を挿入

コマンドモード - general

vimコマンド 動作
:w ファイルを保存する
:w! 強制的に保存する(読み取り専用などを無視)
:q vimを終了する(未保存変更があると失敗)
:q! 変更を破棄して終了する
:wq 保存して終了する
:wq! 強制的に保存して終了する
:x 変更があれば保存して終了
ZZ 保存して終了(:wqと同じ)
ZQ 保存せずに終了
:e! 変更を破棄してファイルを再読み込み
:! <command> vimから抜けずにコマンドを実行する

編集コマンド

vimコマンド 動作
dd カーソル行を削除
^ 空白文字を除く,行頭への移動
0 行頭への移動
G ファイル末への移動
$ 行末への移動

OSSライセンス

Noteライセンス早見表
ライセンス OSI分類 個人利用 組織内利用 著作権表示の保持 免責事項の保持 特徴
GPL コピーレフト(強) 適用外 適用外 必須 必須 バイナリを配布する場合は,そのソースコードも公開しなくてはならない
Apache License 2.0 パーミッシブ 必須(NOTICE含む) 必須 特許ライセンス条項あり
NOTICE保持が必要
改変箇所は別ライセンスでも配布可能
改変再配布でもソース公開義務なし
MIT パーミッシブ 必須 必須 著作権表示を残せば再配布・商用利用OK
改変再配布でもソース公開義務なし
Mozilla 2.0 コピーレフト(弱・ファイル単位) 必須 必須 変更したファイルのみソース公開が必要(file-level copyleft)
単独ソフトの場合は再配布時にソース公開が必要

Business Communication Skill

NoteなぜWriting Skillsを学ぶ必要があるのか?
  • writingは重要なコミュニケーションツールの一つ
  • writing skillがなければどのような才能があっても,自分の考えはvoicelessになってしまう
  It is important for you to recognize that academic success depends not only on the content of 
  your written work but also on the way you write your reports and papers.
Note語彙の重要性
  • word(語彙)は言語や文章,パラグラフの重要なbuilding blocks(構成要素)
  • どのような語彙が適切かはどのような場面でのコミュニケーションを想定しているかに依存する