こんにちは、数強塾代表の藤原進之介です。この記事は参考書『藤原進之介の最強120講義』の第82講「データの整理・整形(欠損値・外れ値)」のWeb版です。共通テスト「情報Ⅰ」での重要度はA(頻出。得点差がつく)、情報Ⅱでの接続先は(3)情報とデータサイエンスです。
分析の講というと、平均や相関を計算するところから始まると思われがちです。しかし現場の実感を正直に言えば、分析の大半は前処理です。 そして前処理には、教科書があまり書かない厳しい事実があります。どの選び方にも代償があり、無害な選択肢は存在しないということです。この講では、わざと汚したデータを自分で作って、同じデータから3つの違う結論が出るところを実際にお見せします。
1. この講の問い
同じ20人分のデータから、平均が 8.75 にも 10.9375 にもなりました。どちらも計算ミスではありません。では、どちらが正しいのでしょうか。
2. 結論
1. 分析の前に「整理」と「整形」という工程があり、国はこの2語を別の意味で定義しています。
2. 欠損値の扱い方(そのまま/行ごと削除/平均で補完)で結論は変わります。どの方法にも代償があり、無害な選択肢は存在しません。
3. 外れ値は消してはいけません。原因を特定できたものだけが「異常値」であり、除外の理由になります。
3. なぜそうなるのか
3-1. 「きれいなデータ」は現実には存在しない
国の教材が、これをはっきり書いています。情報Ⅰ教員研修用教材 第4章、データの分析に関する総合演習の項です。
使用するデータはきれいに整形したデータではなく,多少加工が必要なデータを用いて,実際のデータがどのようなものであるか,理解させることも必要である。
文部科学省「情報Ⅰ」教員研修用教材 第4章(令和2年)
同じ章には、なぜそうなるのかの理由も書いてあります。
表計算ソフトウェアに入力されたデータであっても,印刷するための書式では,データを活用するために整形することが必要となる。
つまり、世の中に出ているデータの多くは人が読むために作られています。機械に読ませるために作られていません。ここに前処理が要る理由の全部があります。
3-2. 国は「整理」と「整形」を別の作業として定義している
多くの参考書は「整理・整形」を1語のように扱います。しかし学習指導要領解説は、この2つをきちんと定義し分けています。しかもその定義が置かれているのは情報Ⅱ(3)の側です。
ここで扱うデータの整理とは,データを処理しやすいように欠損値や外れ値に関して適切な処理を施したり,不要なデータなどを削除したり,適当な長さに分割,調整,結合したり,値や単位の変換を行うことであり,データの整形とは,必要に応じて表形式のデータなどに変換したり,必要な項目を追加,削除したり,あらかじめ必要な値を計算するなどのデータ全体の加工を意味している。
高等学校学習指導要領(平成30年告示)解説 情報編、情報Ⅱ(3)ア(ア)
読み替えるとこうなります。
| 語 | 対象 | 具体例 |
|---|---|---|
| 整理 | 1つ1つの値 | 欠損値・外れ値の処理、不要データの削除、値や単位の変換 |
| 整形 | 表全体の形 | 表形式への変換、項目の追加・削除、必要な値の事前計算 |
整理は値をいじる。整形は形をいじる。 この区別は試験で直接問われるものではありませんが、自分が今どちらをやっているのかを意識できると、作業の妥当性を自分で説明できるようになります。
3-3. 機械は「東京都」と「東京」を別物として数える
人間なら同じだと分かります。機械は文字列を1バイトずつ比べているだけなので、末尾に半角スペースが1個あるだけで別のカテゴリになります。これは抽象論ではなく、国が府省向けの申合せにまでした実務問題です。
総務省は令和2年12月18日、統計企画会議申合せとして「統計表における機械判読可能なデータ作成に関する表記方法」を定めました。目的の条文はこうです。
本申合せは、統計利用者の利便性を一層高める観点から、各府省がインターネット上に公表する統計表における機械判読可能なデータの表記について、標準的な方法を定めるものである。
総務省「統計表における機械判読可能なデータ作成に関する表記方法について」令和2年12月18日 統計企画会議申合せ
別紙のチェック項目は15個あります。並べると、そのまま「前処理で人が苦しむこと一覧」になっています。
1. ファイル形式は Excel か CSV となっているか/2. 1セル1データとなっているか/3. 数値データは数値属性とし、文字列を含まないこと/4. セルの結合をしていないか/5. スペースや改行等で体裁を整えていないか/6. 項目名等を省略していないか/7. 数式を使用している場合は、数値データに修正しているか/8. オブジェクトを使用していないか/9. データの単位を記載しているか/10. 機種依存文字を使用していないか/11. e-Stat の時間軸コードの表記、西暦表記又は和暦に西暦の併記がされているか/12. 地域コード又は地域名称が表記されているか/13. 数値データの同一列内に特殊記号(秘匿等)が含まれる場合/14. データが分断されていないか/15. 1シートに複数の表が掲載されていないか
特に受験生に効くのは3番と5番と11番の理由づけです。
Python 等でデータを読み込む際は、1つの列は単一のデータの型(整数、小数、文字列といったもの)であることを前提としているため、注釈・脚注等の文字列が混在すると、その列は数値を含めて、全て文字列として扱われてしまい、その後の処理で思わぬ挙動を示すことがある。
本来の情報とは無関係な情報が入力されているため、他の統計データと結合しようとしても(関数の VLOOKUP 等)同じ分類がマッチせずに結合ができないなどの可能性がある。
ソフトウェア等のプログラムは、年の値の大小により認識することが多いため、和暦表示のみでは、元号が切り替わる際に手作業で西暦等に変換する必要がある。
「1列は1つの型」——これが表記ゆれ・単位混在・全角半角・日付形式がすべて同じ1つの問題である理由です。列の中に1個でも異物が入ると、その列全体が文字列に落ちます。 数値として計算できなくなる。だから整形が要るのです。
3-4. 欠損値——どの道を選んでも代償を払う
ここが本講の心臓部です。欠損値の扱いには主に3つの道があり、そのどれもが結論を動かします。
(a) そのまま集計する
表計算ソフトの AVERAGE は空欄を無視します。一方、プログラムで空欄を0として読み込んでしまうと、平均は一気に下がります。同じ「そのまま」でも、道具によって答えが変わる。 これが一番危ない。自分が何を選んだのか自覚していないからです。
情報Ⅰ教員研修用教材 第4章(p.184相当)は、この危険を先回りして書いています。
欠測値は,何も記入しないでおく,もしくは欠測コード(例えば 999)を入力してデータとして区別できるようにしておく。その際,空白が数値の 0 や欠測コードが数値と混同して演算されないように注意する。
文部科学省「情報Ⅰ」教員研修用教材 第4章(令和2年)
「欠けている」と「0である」は違います。 学習時間が0時間だった人と、答えなかった人は、別の意味を持ちます。ところが CSV の空欄は、読み込み方ひとつでどちらにもなる。しかも欠測コードに 999 のような数値を使うと、今度はその 999 が平均に混ざります。教材が「混同して演算されないように」とわざわざ注意するのは、そこまで含めての話です。
(b) 欠損のある行を丸ごと削除する
一見いちばん安全に見えます。しかし欠損が偏っていた場合、残った標本そのものが歪みます。
総務省政策統括官(統計基準担当)が令和3年3月26日に示した資料「欠測値の補完に係る主な方法等について」は、これを式で書いています。項目に欠測があるとして、母集団を回答する層と回答しない層に分け、それぞれの平均を 、回答する層の構成割合を とすると、
であり、欠測のない標本だけから平均を推定すると になるので、偏りは
となります。同資料の原文はこう述べています。
単純に欠測のない標本のみを用いて母平均を推定する場合、欠測のメカニズムが完全にランダムな場合以外は結果に偏りが生じる。
総務省政策統括官(統計基準担当)「欠測値の補完に係る主な方法等について(素案)」令和3年3月26日
式が言っていることは単純です。「答えた人の平均」と「答えなかった人の平均」がずれていれば、その差に欠測の割合を掛けただけ、必ず答えがずれる。 欠測が完全にランダムなときだけ となって偏りが0になります。
これは第92講 標本調査で扱う選択バイアスとまったく同じ構造です。標本を選ぶ段階で偏るのが選択バイアス、集計する段階で偏りを自分で作ってしまうのが行削除。原因は違っても、起きることは同じ「母集団の代表性が損なわれる」です。実際、同資料も「そのままで集計すると母集団としての代表性が損なわれ、平均値などの結果に偏りが発生するおそれがあり」と書いています。
(c) 平均で埋める
情報Ⅱの教材が df.fillna(df.mean()) として示す方法です。これは平均を動かしません——動かさないからこそ危ない。動くのは散らばりのほうです。同じ総務省資料の「(層化)平均値代入」の項に、次の1行があります。
なお、平均値の補完に伴い、標本分散については過小に評価される。
理由は考えれば当たり前で、平均ちょうどの値を何個も足し込むのだから、平均からの距離が0のデータが増えます。偏差の2乗和は増えないのに、割る個数だけが増える。だから分散は必ず下がります。「散らばりが小さい=そろっている」と読み間違えたら、結論はまるごと反転します。
なお、回帰で埋める方法についても同資料は「線形回帰モデルによる理論値の代入に伴い、標本分散については過小に評価される」と同じ指摘をしています。単一の値を代入する方法は、構造的にばらつきを殺します。
(d) 「なぜ欠けたのか」で扱いが変わる
同資料は「欠測が何に依存して発生しているか(欠測データメカニズム)も考慮して適切な対応をとることが必要である」と書きます。センサの故障で欠けたのか、答えたくない人が答えなかったのか。前者はランダムに近く、後者は確実に偏ります。 数字だけ見ていても、この違いは分かりません。データがどう生まれたかを知らないと、前処理は決められないのです。
だから情報Ⅱの教材はこう結びます。
欠損値を無視するのがよいのか,除外するのがよいのか,それらしい値を用いるのがよいのかを検討する必要がある。この判断によってバイアスが生じることもあるため,慎重に扱う必要がある。
文部科学省「情報Ⅱ」教員研修用教材 第3章前半 学習12
「慎重に扱う」としか書けない。これが正直な書き方です。 唯一の正解が存在しないからです。受験生がここで覚えるべきなのは手順ではなく、選んだ以上は代償を引き受け、何を選んだかを明示するという態度です。
3-5. 外れ値を消してはいけない理由
情報Ⅱ教員研修用教材 学習12(p.122)に、教科書では見かけない一文があります。
データの中には,多くのデータからかけ離れた値である外れ値がある。外れ値の中でも原因を特定できるものを異常値という。外れ値は,四分位範囲などの統計量を用いたり,データ間の距離を用いたり,学習16のクラスタリングを用いたりして検出することができる。
文部科学省「情報Ⅱ」教員研修用教材 第3章前半 学習12
この定義が本講の芯です。包含関係を図にするとこうなります。
図1 外れ値と異常値の包含関係。境目にあるのは計算ではなく人の調査。
つまり、IQRの計算は「外れ値である」までしか言えません。「異常値である」は計算では出てきません。 原因の特定は、機械ではなく人の仕事です。
同教材は続けてこう釘を刺します。
外れ値が有益なデータの可能性もあるため,その値がどのような原因や理由によって得られたかを考察することが必要である。
同じ章の別の箇所には、さらに踏み込んだ一文もあります。
何らかの原因により,収集したデータの中で他と大きく異なる値を外れ値という。外れ値からデータ全体の重大な欠陥や特徴が見えることもあるため,外れ値には注意を払う必要がある。
外れ値は、しばしばデータの中でいちばん価値のある1点です。 測定器の故障を教えてくれるのも、新しい現象を教えてくれるのも、その1点です。
3-6. 「グラフがきれいになるから消す」は改ざんである
ここが本講の倫理的な線引きです。同じ「40という値を除いた」という操作でも、
測定ミスだと原因を特定できた → 異常値として除外してよい。ただし除外したことと理由を書く
本当に起きた極端な事象だった → 残す。都合が悪くても残す
原因は分からないが、消すと相関がきれいになる → これをやったら改ざんである
3つ目が恐ろしいのは、操作としては1つ目とまったく同じで、外から見分けがつかないことです。見分けられるのは本人だけ。だから「なぜ除いたか」を書くという手続きが、ルールとして要ります。書けない除外はしてはいけません。
そしてこれは、私が言い出したことではありません。情報Ⅰの教材が、情報Ⅰの段階ではっきり要求しています。
欠測値は分析に際して,(ア)欠測値を含む対象全体の行(レコード)を削除する,(イ)欠測値を近いと思われる値で埋める等の処理を行うが,分析結果を提示する際にはその処理を明記する必要がある。
文部科学省「情報Ⅰ」教員研修用教材 第4章(p.184相当、令和2年)
(ア)行削除と(イ)補完という2つの道を挙げたうえで、どちらを選んだかを書けと命じています。処理の正解を示すのではなく、開示を義務づける——これが国の側の答えの出し方です。本講で見てきた「無害な選択肢は無い」は、だからこそ「だが明記すれば誠実でいられる」と続きます。
この線引きは受験のためのお説教ではありません。学習指導要領解説 情報Ⅰ(4)ア(ウ)は、データの整理を「データに含まれる欠損値や外れ値の扱いやデータを整理,変換する必要性を理解するようにする」と定め、イ(ウ)では数学科と連携して「外れ値の扱いについて確認したり」と、扱いそのものを検討対象に指定しています。国は「除き方」を教えろとは書いていません。「扱いを確認せよ」と書いています。
4. 手で確かめる
論より数字です。わざと汚したデータを20行自作して、同じデータから違う結論が出るところを実際に見ます。以下の数値はすべて Python の fractions.Fraction(分数の厳密計算)と statistics モジュールの両方で独立に検算しました(2026年8月3日実行)。
4-1. 汚れた生データ(架空・20行)
架空の「ある高校1年生20人・1週間の学習時間アンケート」です。回収したままの姿を再現しています。
id,area,study,date
1,東京都,12,2026-04-06
2,東京,10,2026/4/6
3,東京都 ,14,令和8年4月6日
4,神奈川県,600分,2026-04-06
5,東京都,9,2026/4/6
6,千葉県,,2026-04-06
7,東京都,8時間,2026-04-06
8,東京,7,令和8年4月6日
9,神奈川県,13,2026-04-06
10,東京都 ,6,2026/4/6
11,東京都,-,2026-04-06
12,千葉県,40,2026-04-06
13,東京,11,2026-04-06
14,神奈川県,,2026/4/6
15,東京都,9時間,2026-04-06
16,千葉県,420分,令和8年4月6日
17,神奈川県,5,2026-04-06
18,東京都,8,2026-04-06
19,神奈川県,,2026/4/6
20,東京都,6,2026-04-06
汚れは4種類あります。表記ゆれ(東京都/東京/東京都+末尾スペース)、単位混在(600分と12)、全角半角(9と9)、日付形式(3通り)。そして欠損が4個(空欄が3つと - が1つ)です。
4-2. 表記ゆれ:同じ県が3つに割れる
素のまま数えるとこうなります。
{'東京都': 7, '東京': 3, '東京都 ': 2, '神奈川県': 5, '千葉県': 3}
「最多は東京都の7人」という結論が出ます。整形してから数え直すとこうなります。
{'東京都': 12, '神奈川県': 5, '千葉県': 3}
7人が12人になりました。 20人中12人=6割が東京都です。前者から「東京都は3割強」と書いたら、それは誤りです。しかも計算は1つも間違っていません。間違っているのは、数える前の準備です。
やった整形は2つだけです。Unicode 正規化(unicodedata.normalize('NFKC', s))で全角を半角にそろえ、strip() と replace(' ','') で空白を落とす。あとは「東京」を「東京都」に寄せる対応表を書く。この対応表は人間が意味を知らないと書けません。ここが自動化の限界です。
4-3. 単位と全角:600分は10時間である
600分 を単位を無視して 600 と読めば、平均は跳ね上がります。600 ÷ 60 = 10 と直して初めて他と比べられます。総務省のチェック項目9「データの単位を記載しているか」が「データ処理に必須である」と言い切るのは、このためです。単位を書いていない数値は、数値ではありません。
全角の 9 も同じです。見た目は9でも符号位置が違うので、int() はエラーになるか、文字列のまま放置されます。NFKC 正規化を1行かませば直ります。
4-4. 日付:同じ日が3通りに見える
このデータの記録日は、実は全部同じ日です。しかし文字列としては3通りあります。
['2026-04-06', '2026/4/6', '令和8年4月6日']
素直に「日付の種類を数えよ」と機械に頼めば「3日分ある」と答えます。時系列に並べ替えれば、令和… は文字コード順で数字より後ろに来るので、いちばん新しい日付として扱われます。和暦のまま置くと元号が変わった瞬間に順序が壊れる——総務省がチェック項目11で西暦の併記を求める理由がこれです。
4-5. 3通りの集計——ここが本講の目玉
整形後、観測できた学習時間は16人分でこうなりました(単位: 時間)。
5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 40
欠損は id = 6, 11, 14, 19 の4人です。ここで3つの道を全部歩いてみます。
このデータには仕掛けがあります。私はこの20人分を先に決めてから、そのうち4人分をわざと欠損させて作りました。 欠けさせたのは学習時間が短い側の4人(本当の値は 3, 2, 4, 3)です。「あまり勉強していない人ほどアンケートに答えない」という、現実にいくらでもある偏り方を再現しました。だから答え合わせができます。
| 方法 | n | 平均 | 分散 | 標準偏差 |
|---|---|---|---|---|
| ① 欠損を0として読む | 20 | 8.75 | 69.1875 | 8.3179 |
| ② 欠損のある行を削除 | 16 | 10.9375 | 62.5586 | 7.9094 |
| ③ 平均で補完 | 20 | 10.9375 | 50.0469 | 7.0744 |
| ★ 本当の20人分 | 20 | 9.35 | 60.2275 | 7.7606 |
読み取れることが3つあります。
第一に、平均が 8.75 と 10.9375 に割れました。 どちらも計算は正しい。違うのは欠損の読み方だけです。差は 2.19 時間——週の学習時間の2割強にあたります。ここから「本校生の学習時間は週9時間弱」と書くか「11時間弱」と書くかが分かれます。
第二に、②と③の平均はぴったり同じです。 平均で埋めても平均は1ミリも動きません。当たり前で、平均そのものを足しているのだから重心は動かない。「平均で埋めれば穴が埋まって精度が上がる」というのは幻想です。
第三に、③の標準偏差だけが目に見えて下がりました。 7.9094 → 7.0744。本当の値 7.7606 より小さい。総務省が書いた「平均値の補完に伴い、標本分散については過小に評価される」が、そのまま数字で出ました。しかも①(0で埋める)では逆に 8.3179 に増えています。埋め方1つで、ばらつきは増えも減りもします。
そして最後に、②も③も、本当の平均 9.35 より高い。低い側だけが欠けたのだから当然です。行削除は「安全」ではありません。
図2 同じデータ、同じ正しい計算。それでも結論は3通りに分かれる。
4-6. 総務省の式で答え合わせをする
上の偏りが、本当にあの式どおりになるかを確かめます。
回答した層の割合
回答した層の平均
回答しなかった層の平均
式に入れます。
本当の平均 9.35 と一致しました。 偏りのほうも確かめます。
直接引き算しても 。一致します。国が資料に書いた式が、自分の作ったデータで再現できました。 式を暗記する必要はありませんが、「答えた人と答えなかった人が違えば、その差の分だけ必ずずれる」という感覚は持っておきたいところです。
4-7. IQR で外れ値を判定する
道具立ては第84講 データの散らばりで作った四分位です。観測された16個に対して、高校流(中央値でデータを二分し、各半分の中央値を取る)で計算します。
、、
下側の境界
上側の境界
外れ値は 40 の1個だけ。 最小値の5は 0.25 より大きいので外れ値ではありません。
| n | 平均 | 標準偏差 | |
|---|---|---|---|
| 40 を含む | 16 | 10.9375 | 7.9094 |
| 40 を除く | 15 | 9.0 | 2.5820 |
平均は約1.9時間下がり、標準偏差は3分の1になりました。 たった1個の値を抜くだけでこれです。だからこそ、抜いてよいかどうかの判断が重いのです。
なお、四分位数の定義は1つではありません。Excel の QUARTILE.INC 相当(Python の statistics.quantiles(method='inclusive'))で計算すると 、IQR = 4.25、上側の境界は 17.625 になります。数字は少しずれますが、40 が外れ値だという結論は変わりません。境界の近くに値があるときだけ、どの定義を使ったかが効いてきます。第85講 箱ひげ図で扱ったとおりです。
4-8. ここで判断が要る——40は異常値か
40時間は「1週間の学習時間」としてありえない値でしょうか。1日あたり約5.7時間。受験直前期なら普通にあります。 つまりこれは「かけ離れているが、起こりうる値」です。
アンケートの単位を取り違えて「1か月分」を書いた → 原因を特定できたので異常値。除外してよい
本人に確認したら本当に週40時間だった → 外れ値だが正しいデータ。残す
確認しなかった → 除外してはいけない。除くなら「確認できなかったので除いた」と書く
計算は3行で終わりますが、判断はここからです。IQRは容疑者を挙げるところまでしかやってくれません。有罪にするのは人間の仕事です。
4-9. 通しで検算する Python
標準ライブラリだけで動きます。実行して出力を確認済みです。
from fractions import Fraction as F
import statistics, unicodedata, re
raw = ["12","10","14","600分","9","","8時間","7","13","6",
"-","40","11","","9時間","420分","5","8","","6"]
hidden = {6: F(3), 11: F(2), 14: F(4), 19: F(3)} # 欠けた4人の本当の値
def to_hours(s):
s = unicodedata.normalize('NFKC', s).strip() # 全角→半角
if s in ('', '-'):
return None # 欠損
m = re.fullmatch(r'(\d+)分', s)
if m:
return F(int(m.group(1)), 60) # 分→時間
return F(int(re.fullmatch(r'(\d+)(?:時間)?', s).group(1)))
vals = [to_hours(s) for s in raw]
obs = [v for v in vals if v is not None]
mean = lambda xs: sum(xs, F(0)) / len(xs)
sd = lambda xs: statistics.pstdev([float(v) for v in xs])
m_obs = mean(obs)
zero = [v if v is not None else F(0) for v in vals]
fill = [v if v is not None else m_obs for v in vals]
true = [v if v is not None else hidden[i+1] for i, v in enumerate(vals)]
print('観測値(n=%d)' % len(obs), [str(v) for v in sorted(obs)])
print('① 0で埋める ', mean(zero), sd(zero))
print('② 行削除 ', m_obs, sd(obs))
print('③ 平均で補完 ', mean(fill), sd(fill))
print('★ 本当の値 ', mean(true), sd(true))
出力(Python 3.9.6 で実行して確認)。
観測値(n=16) ['5', '6', '6', '7', '7', '8', '8', '9', '9', '10', '10', '11', '12', '13', '14', '40']
① 0で埋める 35/4 8.317902379807062
② 行削除 175/16 7.90939907641535
③ 平均で補完 175/16 7.074381598415511
★ 本当の値 187/20 7.760637860382354
平均のほうは Fraction で計算しているので、途中に小数の誤差が入りません。35/4 = 8.75、175/16 = 10.9375、187/20 = 9.35 です。
分を時間に直すところを F(m.group(1), 60) と書くと TypeError で落ちます。Fraction は分子・分母に文字列を受け取らないので、int() を挟む必要があります。単位変換は前処理でいちばん事故が起きる場所で、しかもエラーで落ちてくれるのはまだ親切なほうです。黙って通ってしまう間違い——600分 を 600 と読むほう——のほうが、よほど怖い。
4-10. 国の教材の実データで確かめる——744という数字
情報Ⅱ教員研修用教材 学習12 の演習6は、環境省の大気汚染物質広域監視システム「そらまめ君」から2019年12月の東京都のデータを取り、df.isnull().sum() で欠損数を数えさせます。教材が示す出力には、次の値が並びます。
SO2(ppm) 12
NO(ppm) 12
NO2(ppm) 12
NOx(ppm) 12
CO(ppm) 744
Ox(ppm) 13
NMHC(ppmC) 744
CH4(ppmC) 744
THC(ppmC) 744
SPM(mg/m3) 5
PM2.5(ug/m3) 4
SP(mg/m3) 744
WD(16Dir) 1
WS(m/s) 1
TEMP 1
HUM 1
ここで手を動かしてほしいのです。2019年12月は31日あります。1時間ごとのデータなら 31 × 24 = 744 行。 つまり CO・NMHC・CH4・THC・SP の5項目は、1件も測られていません。この測定局にその測定器が無いのです。
すると重大なことが起きます。教材が最初の選択肢として挙げる
df1 = df.dropna()
は「すべての列にデータがある行だけを使う」という意味なので、どの行にも必ず欠損がある以上、残る行は0行になります。教材はこの点を明記していませんが、示された欠損数からそう導けます。だから教材の次の選択肢は
df2 = df[['日付','時','NOx(ppm)']].dropna()
——先に列を選んでから行を落とす、という形になっています。「欠損のある行を削除」は、列を選ばずに打つと全滅します。 これは実データを触った人だけが知っている落とし穴で、教科書には書いていません。
(教材が示す取得先URL http://soramame.taiki.go.jp/DownLoad.php は現在つながりません。環境省の現行サイトは https://soramame.env.go.jp/ です。2026年8月3日に当方で確認しました。一次資料のURLも時間とともに壊れます——これも前処理の現実です。)
5. 共通テストではこう出る(重要度 A)
前処理は「作業」に見えるので軽く見られがちですが、共通テストは判断を問う形で出してきます。設問文を写すことはできませんので、型として整理します。
型1:前処理の妥当性を選ばせる
「このデータをこう処理した。この処理は適切か」「この目的のためにはどの処理を選ぶべきか」を問う型。選択肢は「行を削除する」「0で埋める」「平均で埋める」「そのまま使う」のように並びます。正解を決めるのは処理の名前ではなく、目的と欠損の理由です。 「欠損が偏っているか」「その項目が分析の主役か」を本文から読み取ります。
型2:外れ値の扱いを選ばせる
「かけ離れた値が1つある。どうすべきか」。「必ず除外する」は原則として誤りです。 正解は「原因を確認する」「原因が特定できれば除外を検討する」「除外した場合としない場合を比較する」の側にあります。ここで第84講のIQRの計算が計算問題として同時に出ることが多いです。
型3:集計結果の食い違いの原因を探す
同じ元データから作った2つの集計表・グラフの数字が合わない。原因はどれか——という型。候補は、表記ゆれで別カテゴリに分かれた、欠損の扱いが違う、単位が違う、期間の区切りが違う、重複データが残っている。「計算ミス」は選択肢に入っていても正解ではないことがほとんどです。
型4:オープンデータと欠損の読み取り
2026年度(令和8年度)本試験の第4問は、桜の開花日を題材にオープンデータの定義から始め、実データにおける欠損値の扱いと可視化を問う構成だったと報告されています(情報処理学会 学会誌「情報処理」note、2026年2月27日=二次情報のため設問構造の紹介にとどめます)。前処理が単独の大問の入口に置かれた形で、この単元がもう「おまけ」ではないことを示しています。
引っかけの急所
「外れ値=異常値」と読み替えてしまう。 定義が違います。原因の特定が挟まります
行削除を「情報を捨てていないから安全」と考える。 逆で、標本を歪めます
平均で埋めれば平均が改善すると考える。 平均は動きません。動くのはばらつきです
欠損の数だけ見て、偏りを見ない。 4個の欠損でも、偏っていれば結論は動きます
単位をそろえずに比べる。 600 と 10 を同じ列で足してしまいます
私が作った類題
ある高校が20人にアンケートを取り、週の学習時間(時間)を集めた。4人が未回答だった。回答した16人の平均は10.94時間だった。
(1) 未回答の4人が「学習時間が短い層」に偏っていたとする。16人だけの平均は、20人全体の平均より大きいか小さいか。理由も述べよ。
(2) 未回答の4人に 10.94 を代入して20人の平均と標準偏差を求めると、16人だけで求めた場合と比べてそれぞれどう変わるか。
(3) 回答の中に「600」という値があった。これを外れ値として除くべきか。判断の前に確認すべきことを1つ挙げよ。
解答の要点:(1) 大きい。回答者の平均と未回答者の平均の差に、未回答の割合を掛けただけ上振れするから。(2) 平均は変わらない。標準偏差は小さくなる。(3) 単位。分で書かれた可能性があり、その場合は10時間であって外れ値ではない。
6. 情報Ⅱではこうなる
6-1. 語数調査——同じ工程が、別の名前で呼ばれている
同じ語が①学習指導要領解説 情報編 ②情報Ⅰ教員研修用教材 ③情報Ⅱ教員研修用教材で何回出てくるかを、PDFの全文から数えました(2026年8月3日、当方で機械的に計数)。
数えた範囲を先に宣言しておきます。 ①は解説 情報編の全文ですが、第1部(共通教科情報科=情報Ⅰ・情報Ⅱ)と第2部(主として専門学科で開設される教科「情報」)を分けて数えました。②は序章+第1〜4章(章ごとに別PDF)。③は序章+第1章・第2章・第3章前半・第3章後半・第4章・第5章(第3章が2分冊であることに注意)。「0件」はすべてこの範囲での0件です。
| 語 | ①解説 (共通教科) |
①解説 (専門教科) |
②情報Ⅰ 教材 |
③情報Ⅱ 教材 |
|---|---|---|---|---|
| 欠損値 | 2 | 0 | 0 | 17 |
| 欠測値 | 0 | 0 | 8 | 0 |
| 外れ値 | 3 | 0 | 4 | 9 |
| 異常値 | 0 | 0 | 0 | 4(統計の用法 3) |
| 前処理 | 0 | 0 | 0 | 2 |
| データ変容 | 0 | 0 | 1 | 0 |
| 層別 | 0 | 0 | 4(第4章 2) | 0 |
| 水準化 | 0 | 0 | 2 | 0 |
| 基準化 | 0 | 0 | 0 | 16 |
| 整形 | 14 | 1 | 13 | 38 |
| データクリーニング | 0 | 0 | 1 | 8 |
情報Ⅱ教材の「異常値」4件のうち1件は第4章のソフトウェアテストの「正常値・異常値の判定」で、統計の異常値ではありません。統計の用法は3件(第3章前半2・後半1)です。同じく情報Ⅱ第5章に1件ある「外れ」は「視界から少し外れていても」という日常語で、外れ値ではありません(上表の9件からは除いてあります)。件数だけを数えると、どちらも扱いを実際より大きく見積もることになります。
読み取れることは3つあります。
第一に、これがこの講でいちばん驚いた発見です。「欠損値」と「欠測値」が、きれいに入れ替わっています。
情報Ⅰ教員研修用教材:欠損値 0件/欠測値 8件
情報Ⅱ教員研修用教材:欠損値 17件/欠測値 0件
完全な相補分布です。 私は最初、「欠損値」が情報Ⅰ教材に0件だと知って、「制度が要求しているのに教材に実物が無い」と書きかけました。それは誤りでした。 情報Ⅰ教材 第4章(p.184相当)は、この単元をきちんと扱っています。ただし「欠測値」という別の語で書いていたので、「欠損値」で検索した私の目には見えなかったのです。
しかも情報Ⅰ教材の記述は薄くありません。3-4 と 3-6 で引いたとおり、欠測コード(999)の注意・(ア)行削除・(イ)近い値で埋める・処理を明記する義務まで、本講の骨格がそのまま入っています。情報Ⅰの段階で、もう全部書いてあるのです。
面白いのは、学習指導要領解説は情報Ⅰ(4)ア(ウ)で「欠損値」と書いていることです。つまり、
解説が「欠損値」と指示 → 情報Ⅰ教材は「欠測値」と書いた → 情報Ⅱ教材は「欠損値」に戻した
という食い違いが、国の3つの文書の間に実在します。理由は推測できます。「欠測値」は公的統計の用語(総務省の資料も一貫して「欠測」を使います)、「欠損値」はデータサイエンス・pandas 側の用語です。情報Ⅰ教材 第4章は統計の作法で書かれ、情報Ⅱ教材 学習12 は pandas で書かれた。書き手の出身分野が、そのまま語彙に出ています。
受験生への実害は具体的です。参考書や問題集で「欠損値」だけを覚えていると、「欠測値」と書かれた文章を読んだときに別物だと思ってしまいます。 同じものです。分野で呼び名が違うだけです。
第二に、情報Ⅰには情報Ⅰの前処理語彙があります。 「前処理」という語は情報Ⅰ側に0件ですが、代わりに情報Ⅰ教材 第4章は「データ変容(マネジメント)」という語を立て、その中身として欠測値の処理・層別・変数変換・水準化の4つを挙げます。
データ分析では,記録されたデータをそのまま統計処理するだけではなく,適時,欠測値の処理や層別,変数変換,水準化などのデータ変容(マネジメント)を行う。
文部科学省「情報Ⅰ」教員研修用教材 第4章(令和2年)
そしてこの3語は、情報Ⅱ教材には1件も出てきません(層別0・変数変換は第3章前半に1件・水準化0・データ変容0)。逆に情報Ⅱの「基準化」16件は情報Ⅰ側に0件です。工程は同じなのに、語彙がまるごと入れ替わります。 前処理という工程が消えたり生まれたりするのではなく、呼び名が乗り換わるというのが正確な記述です。
ちなみに「水準化(レベル化)」は、教材の定義では「量的データをある値でいくつかに区切って、順序尺度(質的データ)に変換すること」——気温から夏日・真夏日を作る、所得から高・中・低を作る、といった操作です。第80講 データの種類と尺度が、ここで前処理の道具になります。 尺度は分類のための知識ではなく、どの処理が使えるかを決めるものでした。教材が「尺度が異なれば,分析処理やグラフ表現に違いが出てくる」と書き、その直後に不適切な例(名義尺度の平均を計算してしまう等)を並べてから欠測値の話に入るのは、この順序に理由があるからです。
第三に、「外れ値」は情報Ⅰ側にもありますが、役割が違います。 情報Ⅰ教材の4件は全部第4章で、うち3件は箱ひげ図の作図規則の説明です(数学Ⅰで学習する、と書かれています)。情報Ⅰ側の外れ値は「グラフに点で描かれるもの」であって、「除くかどうか判断するもの」ではありません。そして「異常値」は情報Ⅰ側に完全に0件——外れ値と異常値を区別する目は、情報Ⅱで初めて渡されます。ここは語彙の乗り換えではなく、正真正銘の上積みです。
6-2. 「整理」と「整形」の定義は情報Ⅱ側にある
3-2 で引いた定義文——「データの整理とは…値や単位の変換を行うことであり、データの整形とは…データ全体の加工を意味している」——は、学習指導要領解説の情報Ⅱ(3)ア(ア)の解説文です。情報Ⅰ(4)ア(ウ)の側にこの定義はありません。
さらに情報Ⅱ側は、同じ段落の直後にこう続けます。
なお,データの収集,整理,整形に関しては,関係データベースの関係演算を扱うとともにデータベースの管理や操作を行うプログラミング言語についても触れる。
前処理が SQL と地続きになります。 表計算の「フィルタで抜き出す」が、情報Ⅱでは関係演算(選択・射影・結合)という名前を持ち、SQL という言語を持つ。第90講 データベースの基礎の話と、本講がここで合流します。
6-3. 学習12 の実物——前処理が正式な工程として名前を持つ
情報Ⅱ教員研修用教材 第3章 学習12「大量のデータの収集と整理・整形」の【研修の目的】は、こう書かれています。
データの形式の変換やデータの単位,欠損値や外れ値の処理を行う方法について理解し,目的に応じたデータを整形・整理する知識や技能を…
情報Ⅰでは「データの整理も大事だ」で終わる話が、情報Ⅱでは独立した1学習項目(8学習中の第2)として時間を割り当てられます。第3章の構成は 学習11 データと関係データベース/12 大量のデータの収集と整理・整形/13 重回帰分析とモデルの決定/14 主成分分析による次元削減/15 分類による予測/16 クラスタリングによる分類/17 ニューラルネットワークとその仕組み/18 テキストマイニングと画像認識。分析手法が並ぶ列の2番目に、前処理が座っています。
具体的に何をやるか。教材の演習3は、e-Stat で「都道府県の指標 基礎データ 人口・世帯 2020」をダウンロードして前処理させる課題で、必要な修正としてこれらを列挙します。
不要な行や列を削除/項目名を修正/不要なカンマが付与されないようセルの書式を「通貨」から「標準」に変更/CSV UTF-8形式で保存/表記のゆれを修正(大文字と小文字,西暦と和暦,正式名称と略称,空白の有無)/重複するデータを除去
そして理由を1文で書きます。
公開されているデータには,印刷することを前提に整形されているものも多く,このようなデータを,プログラムを用いて処理するには,このように前処理をする必要がある。
「印刷することを前提に整形されている」——総務省の申合せが府省に禁じた行為が、そのまま生徒の前処理課題になっています。 国の2つの文書が、表と裏でつながっています。
なお「CSV UTF-8形式で保存する」は文字コードの話であり、第31講 文字コードで扱った符号化方式がここで分析パイプラインの第1工程として顔を出します。文字コードを知らないと、前処理の1行目でつまずきます。
欠損値の処理として教材が挙げる方法は5つあります。
df1 = df.dropna() # 全ての列にデータがあるものを使う
df2 = df[['日付','時','NOx(ppm)']].dropna() # 必要な列を選び欠損値がある行を除く
df3 = df.fillna(0) # 欠損値を0として扱う
df4 = df.fillna(method='ffill') # 前の値で埋める
df5 = df.fillna(df.mean()) # 平均値で埋める
本講の 4-5 で数値で見た①②③は、この df3・df1・df5 に対応します。教材は5つ並べるだけで、どれが正解とは書きません。書けないからです。
6-4. 情報Ⅱで新しく増えるもの
情報Ⅰでは出てこない、情報Ⅱ固有の前処理概念が3つあります。
(1) ワイドフォーマットとロングフォーマット。 教材は pivot_table で表の形そのものを変換させ、そのうえでこう書きます。「ロングフォーマットのデータをワイドフォーマットに変換したときに,完全に表が埋まらないことにより欠損値となる場合がある」。変換という操作そのものが欠損値を生みます。 元データには存在しなかった穴が、形を変えた瞬間に生まれる。これは情報Ⅰの範囲には無い発想です。
(2) 外れ値の検出手段が増える。 情報Ⅰは四分位範囲だけですが、情報Ⅱ教材は「四分位範囲などの統計量を用いたり,データ間の距離を用いたり,学習16のクラスタリングを用いたりして検出することができる」と3つ挙げます。1変数の外れ値から、多変数の「どのかたまりにも属さない点」へ。 距離を使うということは、その前に基準化が要るということでもあります。
(3) 欠損値の扱いが公的統計の技術に接続する。 総務省の資料が挙げる補完方法は、平均値代入・回帰代入・比率補完・ホットデック法と続きます。情報Ⅱの fillna(df.mean()) は、この列のいちばん手前にある1つにすぎません。同資料はさらに、単一の値を代入する方法が分散を過小評価する問題への答えとして多重代入法(補完値を複数発生させて複数のデータセットを作り、それらを基に推定する)を挙げています。「1つに決められないなら、決めないまま複数持つ」という発想で、本講の「どの道にも代償がある」の、その先にある道です。
6-5. 情報Ⅰと情報Ⅱの扱いの違い
| 観点 | 情報Ⅰ | 情報Ⅱ |
|---|---|---|
| 工程の呼び名 | データ変容(マネジメント) | 前処理 |
| 値が無いことの呼び名 | 欠測値(公的統計の語) | 欠損値(pandas の語) |
| 工程の位置 | 分析手順の途中の一段落 | 学習12 という独立した学習項目 |
| 欠損への対処 | (ア)行削除 (イ)近い値で埋める の2つ | dropna / fillna の5通り |
| 欠損の作り方 | 記録が無い場合だけ | 形式変換でも発生する |
| 外れ値 | 箱ひげ図に点で描くもの | 除くか残すかを判断するもの |
| 異常値 | 語が存在しない(0件) | 外れ値のうち原因を特定できたもの |
| 外れ値の検出 | 四分位範囲(1変数) | IQR+距離+クラスタリング |
| そろえる操作 | 水準化・変数変換・層別 | 基準化(16件) |
| 表の形 | 与えられた表を使う | ワイド⇄ロングを自分で変換する |
| 道具 | 表計算ソフト | Python(pandas)・SQL・関係演算 |
| 開示の要求 | 「処理を明記する必要がある」 | 同じ(+バイアスの明示) |
| 誤りの意味 | グラフが読みにくい | 間違った結論を出す |
情報Ⅰは、やることを一通り書いています。情報Ⅱは、それを「工程」として名付け、道具を渡し、選択の代償を突きつけます。 情報Ⅰの記述は薄いのではなく、手順として書かれていて、判断として書かれていない。本講で見た「同じデータから3つの答え」は、情報Ⅱでは毎回起きることです。
7. まとめ
世に出ているデータの多くは人が読むために作られている。機械に読ませるには前処理が要る
国は「整理」(値を直す)と「整形」(形を直す)を定義し分けている。ただしその定義は情報Ⅱ側にある
機械は「東京都」と「東京」を別物として数える。7人が12人になった
欠損値の3つの道はどれも代償を払う。0で埋めると平均が下がり、行削除は標本を歪め、平均で埋めるとばらつきが不当に小さくなる
行削除の偏りは で決まる。自作データで一致を確認した
外れ値は誤りとは限らない。原因を特定できたものだけが「異常値」で、除外の理由になる
「グラフがきれいになるから消す」は改ざんである。 除いたなら理由を書く
「欠損値」と「欠測値」は同じもの。 情報Ⅰ教材は欠測値8件・欠損値0件、情報Ⅱ教材は欠損値17件・欠測値0件できれいに入れ替わっている
情報Ⅰは「データ変容(層別・変数変換・水準化)」、情報Ⅱは「前処理(基準化)」。工程は同じで、語彙が乗り換わる。ただし「異常値」は情報Ⅰ側に0件で、これは本物の上積み
出典
すべて2026年8月3日に取得。
- 文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月 https://www.mext.go.jp/content/1407073_11_1_2.pdf
- 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第4章 情報通信ネットワークとデータの活用(令和2年) https://www.mext.go.jp/content/20200722-mxt_jogai02-100013300_006.pdf
- 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第3章 情報とデータサイエンス 前半(令和2年7月) https://www.mext.go.jp/content/20200702-mxt_jogai01-000007843_004.pdf
- 総務省「統計表における機械判読可能なデータ作成に関する表記方法について」令和2年12月18日 統計企画会議申合せ https://www.soumu.go.jp/main_content/000723697.pdf
- 同 別紙「統計表における機械判読可能なデータ作成に関する表記方法」 https://www.soumu.go.jp/main_content/000723626.pdf
- 総務省政策統括官(統計基準担当)「欠測値の補完に係る主な方法等について(素案)」令和3年3月26日 https://www.soumu.go.jp/main_content/000741247.pdf
- 環境省 大気汚染物質広域監視システム「そらまめ君」 https://soramame.env.go.jp/
- 情報処理学会 学会誌「情報処理」note「令和8年度大学入学共通テスト『情報Ⅰ』第4問の分析」(大橋真也、2026年2月27日)=二次情報。設問構造の紹介にのみ使用 https://note.com/ipsj/n/n1f1fb760e00c
本文中の計算はすべて Python の fractions.Fraction と statistics で独立に検算しています。共通テストの問題文・選択肢・図表は転載していません(大学入試センターの著作物)。制度に関する記述は2026年8月時点のものです。
この講は情報Ⅰ 最強120講義(全講一覧)の第82講です。データをどこから取ってくるかは第81講 データの収集とオープンデータ、扱う値の型は第80講 データの種類と尺度、整えたあとの代表値は第83講 代表値、散らばりとIQRは第84講 データの散らばりへ進みます。
執筆:藤原進之介(数強塾グループ代表)
オンライン数学専門塾「数強塾」代表。累計3,500名以上の中高一貫校生を指導。東進ハイスクール・東進衛星予備校・代々木ゼミナールなど出講実績あり。情報Ⅰの参考書を複数執筆しており、KADOKAWA『ゼロから始める情報I』、Gakken『きめる!共通テスト 情報Ⅰ』などがあります。本記事は参考書『藤原進之介の最強120講義』第82講のWeb版です。
「情報Ⅰのデータ分野、独学で大丈夫か不安」という方へ
数強塾では数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。学習相談は無料、体験授業は3,000円(税込)でお受けしています。
