新着記事一覧

転職エージェント

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職エージェントの選び方

転職活動を始めるとき、利用する人も多い「転職サイト」。 転職サイトに登録していると、様々な転職エージェントからスカウトや連絡があります。 私も今回の転職活動では、複数の転職サイトに登録し、その中でスカウトを送ってくれたいくつかの転職エージェントの担当者と実際に話をしました。 そこで感じたのが、「転職エージェントなら、どこでも同じというわけではない」ということです。 求人の紹介方法も違えば、書類添削や面接対策などのサポート内容も違います。 そして何より、担当者によって熱量や相性がかなり違うと感じました。 今 ...

続きを読む

ポケモン 遊び・趣味

2026/10/20

【ポケモン】ポケモンGo リアルイベントの醍醐味

ポケモンGOのリアルイベントに参加してみて、改めて感じたことがあります。 それは、「ポケモンGOって、こんなに人とつながれるゲームだったんだ!」ということ。 普段もポケモンGOをプレイしていますが、家の近所や通勤途中で遊んでいるときは、一人(もしくは子供と)で黙々とポケモンを捕まえています。 知らない人に話しかけることも、ほとんどありません。 ところが、リアルイベントになると、それがちょっと変わります。 そこには、同じようにポケモンが好きな人が全国、そして世界中から集まっている。 「ポケモンが好き」という ...

続きを読む

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職活動のスケジュールと進め方

海外営業からデジタルマーケティングへキャリアチェンジし、やりたい仕事に手応えを感じていたものの、組織変更によってデジタルマーケティングの仕事そのものがなくなってしまったことが、転職を考える大きなきっかけでした。 今回は、その後の転職活動のスケジュールと、実際にどのように転職活動を進めたのかを書いてみたいと思います。 結果的には、3月に本格的に転職活動を始め、4月に転職先を決定、4月22日を最終出社日として、5月は少しゆっくり過ごし、6月から新しい会社で働き始めました。 これから転職を考えている方の参考にな ...

続きを読む

ポケモン 遊び・趣味

2026/10/18

【ポケモン】Pokémon GO Fest 2026:東京!5月のリアルイベントの服装と持ち物まとめ

5月に開催されたPokémon GO Fest 東京に、小学2年生の息子と一緒に参加してきました!リアルイベントは初参加です! 今回が初めてのリアルイベント参加。 参加する前は、 「5月ならそこまで暑くないかな?」 「飲み物はどれくらい持っていけばいい?」 「スマホの充電は足りる?」 など、いろいろと気になることがありました。 実際に参加してみると、ポケモンGOのリアルイベントならではの準備がかなり重要! 特に、たくさんの人が集まるイベントなので、飲み物やモバイルバッテリーなどは「ちょっと多いかな?」くら ...

続きを読む

キャリア形成・転職 仕事・キャリア

2026/10/20

【40代の転職】転職のきっかけ

Haruは41歳で転職をしました。この記事では、40代の転職のきっかけをお伝えしようと思います。 なぜ転職を決めたのか 「なぜ転職したの?」 転職すると、よく聞かれる質問です。 私の場合、突然「今の会社が嫌になったから」というわけではありません。むしろ、これまでの会社で自分なりにやりたいことを見つけ、勉強して、部署異動まで実現させて、少しずつキャリアを変えてきました。 それでも最終的に転職を決めたのは、「この会社にいても、これ以上自分がやりたい方向には進めない」と思う出来事があったからです。 今回は、私が ...

続きを読む

ポケモン 遊び・趣味

2026/10/11

【ポケモン】豊橋ポケモン天文台に行ってきた話

三連休の土曜日、子どもたちと一緒にポケモン天文台へ行ってきました!ポケモンと宇宙が組み合わさった施設ということで、子どもたちは行く前から楽しみにしていました。今回は、実際に訪れてみて感じたことを中心に、アクセスや駐車場、混雑状況、館内の見どころ、グッズ購入までまとめてみます。(ネタばれしない範囲で) ポケモン天文台ってどんなところ? ポケモン天文台は、宇宙や星について楽しく学べる、ポケモン好きの子どもにはたまらないスポット。単に展示を見るだけではなく、ポケモンと一緒に太陽系や星、隕石などについて学べるので ...

続きを読む

Python 仕事・キャリア

2026/10/10

【Python】Pythonでの自然言語処理(日本語)

こちらの記事では、自然言語処理についてまとめています。 自然言語処理とは? 自然言語とは、日本語や英語のような自然発生的に生まれた言語です。日常的に使用している自然言語について、言葉が持つ意味を解析し処理します。活用事例としては、チャットボット、音声認識AI、文字認識(手書き文字をカメラが認識し文字データへと変換する技術)、検索エンジン、翻訳、感情分析、文章要約などがあります。 文章の意味を機械に理解させるには、単語分割を行う必要があります。手法は主に2つあります。 1.形態素解析形態素とは意味を持つ最小 ...

続きを読む

Python 仕事・キャリア

【Python】機械学習のデータ前処理 欠損値の扱いについて

こちらの記事では、欠損値の処理について紹介していきます。

欠損値が発生するケースと対応について

機械学習において欠損値がある場合は前処理が必要になります。前処理を行わないと、統計情報が正しく計算できなかったり、適切に分析ができません。
以下のようなケースで欠損値が発生します。

1.MCAR(Missing Completely At Random)
あるデータが欠損する確率がデータと全く無関係である場合。例えば、アンケート結果を記録したファイルが、不具合で欠損値になってしまった場合等があります。
欠損値が無作為に発生しているので、リストワイズ削除(欠損値が含まれるデータ行を全て削除する方法)で処理してもデータに偏りが発生することはありません。ただ、削除することによりデータ件数が大幅に減ってしまう場合は、代入法を使った欠損値の補完を行うこともできます。

2.MAR(Missing At Random)
ある因子が欠損値となるかどうかがその因子自体とは関係ありませんが、その他の因子と関係がある場合。例えば高齢であればあるほど収入に関数データを報告しない(=つまり欠損)が、収入の高さは報告の有無に関係しないといった場合です。
この場合、リストワイズ削除(欠損値が含まれるデータ行を全て削除する方法)で処理をするとデータに偏りがでる可能性があります。観測されたデータから欠損値に入る真の値を予測する代入法で欠損値を補完したほうがよいです。

3.NMAR(Not Missing At Random)
ある項目が欠損する確率がその項目そのものに依存し、その項目以外のデータ項目からもその欠損している項目の欠損率を推測できない場合。例えば、アンケートで年齢が高くなるほど年齢に関して答えなくなり、しかも男性・女性であるかが年齢の欠損には影響しておらず、性別の値からも予測はできない、という場合です。
上述の通り、他のデータ項目からも欠損値を推測できないので、基本的にはデータの再収集を検討する必要があります。

欠損値の代入法について

欠損値の代入法は大きく2種あります。

単一代入法

平均値代入法、確率的回帰代入法、ホットデック法を使って、欠損値を補完して完全なデータセットを1セットだけ作る方法です。

・平均値代入法:欠損しているデータ項目の平均値がわかればいい場合に使います。平均値を持つデータが増える分、対象データ項目の分散が小さくなり、分散や誤差を分析の考慮に入れたい場合は使えません。

・確率的回帰代入法
欠損しているデータ項目の分散をデータ分析で考慮にいれたい場合に使います。

・ホットデック法
質的データが多く、回帰等でパラメトリックに代入値を計算しにくい場合に使用します。

多重代入法

観測されたデータから欠損値を予測して、補完した状態を1セットとし、このセットを複数(=つまり多重)作成し、各セットごとに分析モデルを構築し、個別に構築したモデルを最終的に統合する方法です。

今回は、単一代入法であるホットデック法と、多重代入法を実装してみたいと思います。

ホットデック法の実装

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import missingno as msno
import knnimpute as knnimp

#Excelを読みこみ、データと欠損値を確認する
data = pd.read_excel("sampledata.xlsx")
print(data)
data.isnull().sum()

#欠損値を可視化する
msno.matrix(data)
plt.show()

#ホットデック法で欠損値を補完する
matrix = data.values
missing_mask = np.isnan(matrix)
result = knnimp.knn_impute_few_observed(matrix, missing_mask, 3)
pd.DataFrame(result, columns = data.columns)

解説

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import missingno as msno
import knnimpute as knnimp

#Excelを読みこみ、データと欠損値を確認する
data = pd.read_excel("sampledata.xlsx")
print(data.isnull().sum())
data

まず必要なライブラリをインポートし、サンプルで用意したExcelを読み込み、欠損値を確認します。今回は3カラムのサンプルデータです。
タイムに5つ欠損値があることがわかります。

#欠損値を可視化する
msno.matrix(data)
plt.show()

欠損値を可視化してみます。白い部分が欠損値です。
カラム名が日本語だったのでうまく表示されていないようですが、白い部分がある真ん中の列がタイムです。5か所白い部分=欠損値があります。

#ホットデック法で欠損値を補完する
matrix = data.values
missing_mask = np.isnan(matrix)
result = knnimp.knn_impute_few_observed(matrix, missing_mask, 3)
pd.DataFrame(result, columns = data.columns)

matrix = data.valuesでdataをNumpyの行列に変換し、"matrix"に代入します。
次に、missing_mask = np.isnan(matrix)でmatrix内の欠損値を検出し、それらの位置に対する要素が"True"であるブール型の行列を作成します。
missing_maskを表示させると以下のようになります。

result = knnimp.knn_impute_few_observed(matrix, missing_mask, 3)で、KNNアルゴリズムを用いて欠損値を補完します。
knn_impute_few_observed関数は、欠損値の数が少ない場合に使用されることが多いです。(欠損値が多い場合には向かない・・・
引数3は補完に使用される最近傍の観測値の数を指定します。
pd.DataFrame(result, columns=data.columns)は、補完された結果をdataFrameに変換し、元のデータフレームと同じカラム名を持つようにしています。中身を確認すると、欠損値が補完できていることがわかります。

多重代入法の実装

#必要なライブラリのインポート
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.imputation import mice

#Excelを読みこみ、データと欠損値を確認する
data = pd.read_excel("sampledata.xlsx")
print(data)
data.isnull().sum()

#多重代入法で欠損値を補完する
imp_data = mice.MICEData(data)
formula = "評価 ~ タイム + 距離"

#多重代入法のモデルを構築する
model = mice.MICE(formula, sm.OLS, imp_data)

#試行回数3回、データセットの作成は3回という意味
results = model.fit(3,3)
print(results.summary())

#補完した値を含むデータフレームを取得
completed_data = imp_data.data

# 補完されたデータを表示する
print(completed_data)

まず必要なライブラリをインポートし、サンプルで用意したExcelを読み込み、欠損値を確認します。今回は3カラムのサンプルデータです。
タイムに5つ欠損値があることがわかります。

#多重代入法で欠損値を補完する
imp_data = mice.MICEData(data)
formula = "評価 ~ タイム + 距離"

多重代入法(Multiple Imputation by Chained Equations)を使用して欠損値を補完するための準備を行います。

imp_data = mice.MICEData(data)にて、dataを多重代入法のオブジェクトに変換し、欠損値の補完が可能なデータ形式に整えます。
formula = "評価 ~ タイム + 距離"では、多重代入法のモデル式を指定します。評価を目的変数、タイム・距離を説明変数としてモデルを構築しています。

#多重代入法のモデルを構築する
model = mice.MICE(formula, sm.OLS, imp_data)

多重代入法のモデルを構築します。引数として、上で指定したformura式を指定。
sm.OLSは補完に使用されるモデルを指定しています。ここではstatsmodelsの最小二乗法(Ordinaly Least Squares, OLS)を使用しています。
他にも代表的なものとして、一般化線形モデル:sm.GLS(Generalized Linear Model、GLM)、ロバスト線形モデル:sm.RLM(Robust Linear Model、RLM)、重みつき最小二乗法:sm.WLS(Weighted Least Squares、WLS)などがあります。
最後にimp_dataを入れ、これに基づき補完モデルが構築されます。

#多重代入法モデルを実行し、欠損値の補完を行う
results = model.fit(3,3)
print(results.summary())

MICEを三回試行し、データセットを3回作成し、result.summary()で結果の統計量を確認してみます。

#補完した値を含むデータフレームを取得
completed_data = imp_data.data

# 補完されたデータを表示する
print(completed_data)

最後にMICEで補完された値を含むデータフレームを取得し、中身を確認してみます。補完できました。

  • この記事を書いた人

Haru

会社員。育休2回取得、40代で転職。
職種はデジタルマーケティング。
ポケモン、スノボ、IT系の学び、キャリア、育児について発信していきます。

-Python, 仕事・キャリア
-, ,