忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【DS検定対策】データ加工の基本:派生変数の定義と具体例

データ分析において、既存のデータセットには直接存在しない項目を、既存のデータから作り出す工程は非常に重要です。

【問題】

問:データ分析において、元のデータセットには直接存在しないが、既存の変数を組み合わせて計算や加工を施すことで新しく作成した変数のことを何と呼ぶか。

① 目的変数
② 派生変数
③ 外れ値
④ 欠損値

【解説】

正解: ②

既存の変数(生データ)から、計算や加工によって導き出された新しい項目を「派生変数」と呼びます。単なる数値の羅列から、分析に役立つ「意味のある情報」を取り出す重要なステップです。


■ 派生変数の具体例(図解イメージ)

[元のデータ] → [加工] → [派生変数]
・売上、客数 → 割り算 → 客単価
・生年月日 → 計算 → 年齢
・購入商品名 → 分類 → カテゴリフラグ


■ 特徴量エンジニアリングとの関係

特徴量エンジニアリングとは、モデルの精度を高めるためにデータを最適化する工程全体の総称です。派生変数の作成は、その工程の中に含まれる代表的な手法のひとつです。


まとめ:

「既存のデータから導出(計算)できるもの = 派生変数」という定義をしっかり覚えておきましょう!


PR

【DS検定対策】条件付き確率をトランプ図解で攻略!「分母の絞り込み」が合格のカギ

数字だけで説明されると難しく感じる確率の問題も、図にしてみると驚くほどスッと理解できます。この記事では、トランプを題材に、DS検定の頻出項目である「条件付き確率」を解説します。

1. 問題:トランプのマークを当てる

【 問題 】

52枚のトランプから1枚引くとき、そのカードが「黒」であった場合、マークが「クラブ」である確率はいくらでしょうか?

2. 図解:条件付き確率は「世界の絞り込み」

条件付き確率を解く最大のコツは、「条件が示された瞬間に、分母(全体)を切り捨てること」です。


【 図解イメージ 】


[ 全52枚のカード ]

 |

 +-- 黒 (26枚) ---> ★新しい「全体(分母)」

 |    |

 |    +-- クラブ (13枚) ---> ◎ターゲット(分子)

 |    |

 |    +-- スペード (13枚)

 |

 +-- 赤 (26枚) ---> (※計算から除外)

3. 計算プロセス

1. 分母を絞る: 「黒の場合」により、分母は 52 ではなく 26

2. 分子を決める: 黒26枚の中に、クラブは 13枚

3. 答えを出す: 13 ÷ 26 = 1/2




4. DS検定形式:実戦4択クイズ

問:条件付き確率 P(A|B) において、記号「|」の右側にある事象 B が表す役割として、最も適切なものはどれか。


① 求めたいターゲットとなる結果(分子)

② 既に起こった、あるいは分かっている前提条件(分母)

③ 事象 A と事象 B が独立しているという保証

④ 事象 A が起こる確率を 2 倍にする係数


【 正解: ② 】


解説:

条件付き確率では、条件 B によって全体集合(分母)が制限されます。トランプの例で「黒の場合」と言ったとき、それは分母を26枚に絞り込む「前提条件」となりました。




5. まとめ

DS検定の計算問題では、「何を全体(分母)とするか」を読み間違えないことが大切です!「〜のとき」という言葉に注目して分母を絞り込みましょう。

【Python】文字化けを防ぐ!コーディング行(文字コード)の指定方法

Pythonでプログラムを書く際、コードの中に日本語(コメントや文字列)を含めると、実行環境によっては「文字化け」やエラーが発生することがあります。これを防ぐために、ファイルの先頭で「どの文字コードで書かれているか」を宣言するのがマジックコメントです。

1. 文法:マジックコメントの書き方

ファイルの1行目(または2行目)に以下の形式で記述します。Pythonはこの記述を見て、ファイル全体の文字コードを判別します。

# -- coding: エンコーディング名 --

[ 主な指定内容 ]
utf-8:世界標準の文字コード(推奨)
shift_jis:Windowsの日本語環境で古くから使われる形式
euc-jp:Unix系OSで使われることがある形式

2. Pythonサンプルプログラム

日本語を正しく扱うための標準的な記述例です。現在では、特別な理由がない限り utf-8 を使用するのが一般的です。

-- coding: utf-8 --
def main():
# 日本語のメッセージを変数に代入
message = 'hello'

print("プログラムを実行します。")
print(message)
if name == "main":
main()

3. 実行結果

プログラムを実行します。
hello

4. ステップアップ:なぜこれが必要なの?

Python 3系ではデフォルトの文字コードが UTF-8 に設定されていますが、古いエディタや特定のサーバー環境では、この一行がないと日本語が正しく解釈されず、SyntaxError を吐いて止まってしまうことがあります。

  • エラー防止:多人数で開発する際、環境の違いによるエラーを未然に防げます。
  • 明示性:どの文字コードで保存すべきファイルなのか、開発者に一目で伝わります。

5. Python 2 と Python 3 の違い

バージョンの違いによって、この指定の重要度が異なります。

バージョンデフォルト設定日本語の扱い
Python 3.x UTF-8 指定なしでも動くことが多いが、慣習として書くのが安全。
Python 2.x ASCII 必須。これがないと日本語を含むコードは即エラー。

6. まとめ

# -- coding: utf-8 --」は、いわばPythonファイルにおける「おまじない」のようなものです。最近のエディタでは自動で設定されることも多いですが、基礎として理解しておくことで、いざ日本語が化けた時のトラブルシューティングに役立ちます。常に1行目に書く癖をつけておきましょう!


【Python】file_read_backwardsでファイルを逆から読み込む

通常、ファイルは先頭から順に読み込みますが、最新のログを確認したい場合などは「末尾から」読み込めると効率的です。今回は file_read_backwards モジュールを使って、スマートに逆順出力を実装する方法を解説します。

1. 考え方:なぜ「逆順」読み込みが必要か?

通常の読み込みでは、ファイルの最後まで一度読み飛ばさないと末尾に到達できません。このモジュールを使うと、メモリを節約しながら効率よく後ろから一行ずつ取り出すことができます。

[ 準備 ]
ライブラリのインストールが必要です。
pip install file_read_backwards

[ サンプルデータ (sample.csv) ]
d
c
b
a

2. Pythonサンプルプログラム

FileReadBackwards クラスを with 構文で使用します。これだけで、for文が自動的に末尾から順にデータを処理してくれます。

-- coding: utf-8 --
from file_read_backwards import FileReadBackwards

def main():
filename = "sample.csv"

print(f"{filename} を逆順に読み込みます。")

# encodingは環境に合わせて指定(utf-8など)
with FileReadBackwards(filename, encoding="utf-8") as frb:
    for line in frb:
        print(line)
if name == "main":
main()

3. 実行結果

sample.csv を逆順に読み込みます。
a
b
c
d

4. ステップアップ:活用シーン

この手法は、単なる並べ替え以上に実務で威力を発揮します。

  • 最新ログの監視:巨大なログファイルの直近10件だけを素早く確認したいとき。
  • スタック処理:後入れ先出し(LIFO)のロジックをファイルベースで実装したいとき。

5. 標準機能との使い分け

逆順に読み込む方法は他にもありますが、状況に応じて選ぶのがプロのコツです。

手法特徴使い分け
今回紹介したモジュール 末尾から1行ずつスキャン 巨大なファイルを扱う場合。メモリに優しい。
reversed(f.readlines()) 全行を一度メモリに載せる ファイルサイズが小さい場合。標準機能で完結。

6. まとめ

外部モジュールを活用することで、本来複雑な「ファイルの逆引き」も、わずか数行で実装できます。特にデータ解析やシステム運用では、ファイルの読み込み方向を変えるだけで劇的に処理が速くなることもあるので、ぜひ覚えておきましょう!


【Python】math.gcdで最大公約数をスマートに求める

数学的な計算が必要なプログラムでは、複数の数値の「最大公約数」を求めたい場面が多々あります。Pythonでは標準ライブラリのmathモジュールを使うことで、複雑な計算式を書かずに一瞬で算出可能です。

1. 考え方:最大公約数(GCD)とは

最大公約数(Greatest Common Divisor)は、2つ以上の整数に共通する約数の中で、最も大きい数値のことです。分数の約分や、タイルの敷き詰め問題などのアルゴリズムで活用されます。

a = 12 (約数: 1, 2, 3, 4, 6, 12)
b = 8 (約数: 1, 2, 4, 8)

[ 判定ルール ]
・共通する約数(公約数)は 1, 2, 4
・その中で最大のもの4

2. Pythonサンプルプログラム

math.gcd() 関数を使用します。自分でループを回して計算する必要がないため、コードが非常にシンプルになります。

-- coding: utf-8 --
import math

def main():
a = 12
b = 8

print(f"{a} と {b} の最大公約数を求めます。")

# math.gcd() で計算
result = math.gcd(a, b)

print(f"結果: {result}")
if name == "main":
main()

3. 実行結果

12 と 8 の最大公約数を求めます。
結果: 4

4. ステップアップ:より高度な数学関数

mathモジュールには、GCD以外にも便利な関数が用意されています。

  • 最小公倍数(lcm):Python 3.9以降では math.lcm(a, b) で最小公倍数も求められます。
  • 絶対値(fabs)math.fabs(x) で数値の絶対値を取得できます。

5. リストと組み合わせた使い分け

複数の数値(3つ以上)の最大公約数を求めたい場合、リストと組み合わせるのが効率的です。

ケース実装方法メリット
2つの数値 math.gcd(a, b) 最もシンプルで基本の書き方。
3つ以上の数値 math.gcd(*list) 可変長引数を使って一気に算出可能。

6. まとめ

最大公約数の計算は、アルゴリズムの基礎です。Pythonなら import math を一行書くだけで、正確かつ高速に答えを導き出せます。数学的な処理が必要な際は、まず math モジュールに便利な道具がないか探してみるのが上達の近道です!