【数学IA】データの相関を初学者でも理解できる方法(データの分析の過去問解説も)

みなさん、こんにちは。今回は、数学Iのデータの分析の相関関係及び相関係数について初学者でも理解できるよう説明します。

 

たかしくん
たかしくん

本当に初心者でも理解できるの?

 

結論、大丈夫です。データの相関のテーマではグラフを通じて、いろんな指標で客観的に表す方法を知ることができます。そしてデータ分析の知識は、そのまま社会に出てもエクセルでゴリゴリ仕事に使ったりするので受験勉強が社会でそのまま役に立つ分野でもあります。

 

S先生
S先生

受験勉強が社会では役に立たない、なんて言わせません。むしろ社会の要請で始まったテーマです。

 

ですので、データ分析の相関についてきちんと勉強することは、直近の受験勉強だけではなく社会に出てからも役にたつ非常にコスパの良い学習領域です。

 

そして。数学Iのデータ分析においてデータ相関の図や分散の考え方は最初は馴染みもなく難しいと考えるかもしれません。また、相関係数など言葉の定義も難しく感じると思います。そこで、最初は、この記事を読んでなんとなくの理解をして、実際に過去のセンター試験の問題を解いてみましょう。

 

初学者でもデータ相関を理解できる方法は、この記事の理解をして、この記事の問題を解いてみると言うことです。

 

この記事を読むとできること・データ相関についての言葉の定義や内容を理解することができる

・センター試験で実際に出題されたデータ相関の問題演習を通じて実際に解答する力を身につけることができる。

まず、より正確な指標を取り入れましょう!

前回、箱ひげ図と四分位数によって、データの散らばり度合いを見る方法を勉強しました。今回は、散らばり度合いをより正確に表す指標を取り入れます。

 

まず、定義を紹介します。

\(n\) 個のデータ\(x_1, x_2, \cdots, x_n\) について、その平均値を\(\bar{x}\) とするとき、
分散 \(s^2=\dfrac{1}{n}\left\{(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_n-\bar{x})^2\right\}\)
標準偏差 \(s=\sqrt{s^2}\)
(正の平方根のみ。)

分散の式の意味を考えてみましょう。

 

よく見ると、それぞれのデータと平均値の差を取って\(2\) 乗しています。平均値との差を取るのは、平均値からそのデータがどれだけ離れているのかを数値的に捉えるためです。

 

ただ、データの中には平均値よりも小さい値も含まれており、その差がマイナスになることもあります。マイナスになった差も、平均値からどれだけ離れているか、つまり平均値からの距離で捉えるために、\(2\) 乗して符号をプラスに変えて足しています。

 

上のような理由で、分散はデータの差を\(2\) 乗するので単位が変わります。試験で分散を問われたときは単位をつけず、数値だけで答えます。こういった不具合を解消するために、標準偏差を考えます。こちらは正の平方根なので、元のデータと同じ単位をつけます。

 

また、分散も標準偏差もデータの散らばり度合いを示しています。どちらも、値が小さいということは、散らばり度合いが小さい、つまりデータが安定しているということを指します。

 

分散は、上の式以外にももう一つ表し方があります。例題で確認してみましょう。

例題\(n\) 個のデータを\(x_1, x_2, \cdots, x_n\) とし、このデータの平均値を\(\bar{x}\) 、分散を\(s_x^2\) で表すとき、分散\(s_x^2=\dfrac{1}{n}\left\{(x_1-\bar{x})^2+(x_2-\bar{x})^2+\cdots+(x_n-\bar{x})^2\right\}\) は\(s_x^2=\dfrac{1}{n}(x_1^2+x_2^2+\cdots+x_n^2)-(\bar{x})^2\) と表せることを示せ。

久しぶりに、ややこしい式変形の問題が出てきました。\((a-b)^2=a-2-2ab+b^2\) を思い出せるかどうかが、解けるかどうかの分かれ目です。

 

この公式を思い出せたら、次のポイントは\(-2x_1\bar{x}-2x_2\bar{x}-\cdots-2x_n\bar{x}\) をどう扱うかにあります。

$
\begin{array}{rcll}
s_x^2&=&\dfrac{1}{n}\left\{(x_1-\overline{x})^2+(x_2-\overline{x})^2+\cdots+(x_n-\overline{x})^2\right\}\\
&=&\dfrac{1}{n}\left\{(x_1^2+x_2^2+\cdots+x_n^2)-2\overline{x}(x_1+x_2+\cdots+x_n)+n(\overline{x})^2\right\}\\
&=&\dfrac{1}{n}(x_1^2+x_2^2+\cdots+x_n^2)-2\overline{x}\cdot\dfrac{x_1+x_2+\cdots+x_n}{n}+(\overline{x})^2\\
&=&\dfrac{1}{n}(x_1^2+x_2^2+\cdots+x_n^2)-2(\overline{x})^2+(\overline{x})^2\\
&=&\dfrac{1}{n}(x_1^2+x_2^2+\cdots+x_n^2)-(\overline{x})^2
\end{array}
$
たかしくん
たかしくん

この2つの公式は何が違うの?

 

扱うデータが具体的な数値の場合、各データ\(x_1, x_2,\cdots, x_n\) が整数であっても、平均値\(\bar{x}\) は小数になるが多いです。そうすると、\(x_1-\bar{x}, x_2-\bar{x},\cdots, x_n-\bar{x}\) も小数になり、前者では\(n\) 回小数の平方をすることになります。後者は、小数の計算は\((\bar{x})^2\) の\(1\) 度だけで済むので計算時間が短縮でき、計算ミスもしにくいです。

 

前者は分散がどういうものかという理解のために、後者は実際にデータを使って計算するために、どちらも重要です。使い分けできるようにしておきましょう。

 

散布図と相関とは?

例えば、数学と化学の成績など、\(2\) つのデータの間に関連性があるかどうかを調べるとき、散布図を描くとわかりやすくなります。

 

散布図の描き方は座標の考え方と同じです。数学と化学の成績に相関関係があるかどうかを調べるときは、数学のテストの結果を横軸に、化学のテストの結果を縦軸にとります。(逆でも問題ありません。)数学のテスト結果が\(80\) 点で、化学のテスト結果が\(75\) 点であれば、座標\((80, 75)\) のところに印をつけます。

 

そうして得られた結果は、下のようになり、データの分布のしかたによって、相関がある/ないと表現されます。

また、下の\(2\) つの散布図を比べたとき、左の散布図のほうが右より点が密集しています。このようなとき、左のほうが右より相関が強いと表現します。

 

また、相関を考えるときのデータは組になっています。この場合のデータの散らばり具合は共分散を、相関については相関係数を使って表します。

 

\(n\) 個のデータの組\((x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n)\) に対して、\((x_i-\overline{x})(y_i-\overline{y})\) の平均値を\(x\) と\(y\) の共分散という。

 

共分散 \(s_{xy}=\dfrac{1}{n}\left\{(x_1-\bar{x})(y_1-\bar{y})+(x_2-\bar{x})(y_2-\bar{y})+\cdots+(x_n-\bar{x})(y_n-\bar{y})\right\}\)

 

また、相関係数は、標準偏差\(s_x, s_y\) と共分散\(s_{xy}\) を用いて次のように表されます。

相関係数 \(r=\dfrac{s_{xy}}{s_x\cdot s_y}\)

 

「係数」とつく名前や式を見てもわかるとおり、相関係数には単位がありません。また、相関係数\(r\) は\(-1 \text{≦} r \text{≦} 1\)であり、\(r\) が\(1\) に近づくほど強い正の相関があるといい、\(-1\) に近づくほど強い負の相関があるといいます。

これで、データの散らばり度合いを数値で客観的に説明できるようになりました。

 

過去問を解いてみよう!

最後に、センター試験で以前出題された問題に挑戦してみます。

例題ある陸上競技大会に出場した選手の身長(単位はcm)と体重(単位はkg)のデータが得られた。男子短距離、男子長距離、女子短距離、女子長距離の四つのグループに分けると、それぞれのグループの選手数は、男子短距離が\(328\) 人、男子長距離が\(271\) 人、女子短距離が\(319\) 人、女子長距離が\(263\) 人である。
(1) 図\(1\) および図\(2\) は、男子短距離、男子長距離、女子短距離、女子長距離の四つのグループにおける、身長のヒストグラムおよび箱ひげ図である。
次の( ア )、( イ )に当てはまるものを、下の\(0\)~\(6\) のうちから一つずつ選べ。ただし、解答の順序は問わない。
図\(1\) および図\(2\) から読み取れる内容として正しいものは、( ア )と( イ )である。
\(0\):四つのグループのうちで範囲が最も大きいのは、女子短距離グループである。
\(1\):四つのグループのすべてにおいて、四分位範囲は\(12\) 未満である。
\(2\):男子長距離グループのヒストグラムでは、度数最大の階級に中央値が入っている。
\(3\):女子長距離グループのヒストグラムでは、度数最大の階級に第\(1\) 四分位数が入っている。
\(4\):すべての選手の中でもっとも身長の高い選手は、男子長距離グループの中にいる。
\(5\):すべての選手の中でもっとも身長の低い選手は、女子長距離グループの中にいる。
\(6\):男子短距離グループの中央値と男子長距離グループの第\(3\) 四分位数は、ともに\(180\) 以上\(182\) 未満である。


(2) 身長を\(H\)、体重を\(W\) とし、\(X\) を\(X=\displaystyle\left(\frac{H}{100}\right)^2\)で、\(Z\) を\(Z=\dfrac{W}{X}\) で定義する。図\(3\) は、男子短距離、男子長距離、女子短距離、女子長距離の四つのグループにおける\(X\) と\(W\) のデータの散布図である。ただし、原点を通り、傾きが\(15, 20, 25, 30\) である四つの直線\(l_1, l_2, l_3, l_4\) も補助的に描いている。また、次の図\(4\) の\((a), (b), (c), (d)\) で示す\(Z\) の四つの箱ひげ図は、男子短距離、男子長距離、女子短距離、女子長距離の四つのグループのいずれかの箱ひげ図に対応している。
次の( ウ )・( エ )に当てはまるものを、下の\(0\)~\(5\) のうちから一つ選べ。ただし、解答の順序は問わない。
図\(3\) および図\(4\) から読み取れる内容として正しいものは、( ウ )・( エ )である。
\(0\):四つのグループのすべてにおいて、\(X\) と\(W\) には負の相関がある。
\(1\):四つのグループのうちで\(Z\) の中央値が一番大きいのは、男子長距離グループである。
\(2\):四つのグループのうちで\(Z\) の範囲が最小なのは、男子長距離グループである。
\(3\):四つのグループのうちで\(Z\) の四分位範囲が最小なのは、男子短距離グループである。
\(4\):女子長距離グループのすべての\(Z\) の値は\(25\) より小さい。
\(5\):男子長距離グループの\(Z\) の箱ひげ図は(c) である。


(3) \(n\) を自然数とする。実数値のデータ\(x_1, x_2, \cdots, x_n\) および\(w_1, w_2, \cdots, w_n\) に対して、それぞれの平均値を\(\bar{x}=\dfrac{x_1+x_2+\cdots+x_n}{n}, \bar{w}=\dfrac{w_1+w_2+\cdots+w_n}{n}\) とおく。等式\((x_1+x_2+\cdots+x_n)\bar{w}=n\bar{x}\bar{w}\) などに注意すると、偏差の積の和は
$
\begin{array}{rcll}
(x_1-\bar{x})(w_1-\bar{w})+(x_2-\bar{x})(w_2-\bar{w})+\\
\cdots+(x_n-\bar{x})(w_n-\bar{w})\\
=x_1w_2+x_2+w_2+\cdots+x_nw_n-\text{( オ )}
\end{array}
$
となることがわかる。( オ )に当てはまるものを、次の\(0\)~\(3\) のうちから一つ選べ。
\(0\):\(\bar{x}\bar{w}\)   \(1\):\((\bar{x}\bar{w})^2\)   \(2\):\(n\bar{x}\bar{w}\)   \(3\):\(n^2\bar{x}\bar{w}\)
[2018 大学入試センター試験 【2】〔2〕]

前回説明した箱ひげ図も一緒に出題されています。思い出せない人は「【数学IA】四分位数と箱ひげ図について理解しましょう!(データの分析)」で復習しましょう。復習しただけ記憶に定着しますので、まったく時間の無駄にはなりません。

 

(1) 選択肢をひとつずつ確認します。

 

\(0\):図\(2\) より、範囲が最も大きいのは男子短距離。→誤

 

\(1\):四分位範囲は箱ひげ図のうち、箱の部分の横幅を確認します。図\(2\) から、箱の幅が最も大きい男子短距離でも、一目盛り\(2\) cmの表で約\(5\) 目盛分なので、約\(10\) cm。→正

 

\(2\):図\(2\) より、男子長距離の身長の中央値は\(176\) cm付近と読み取れます。図\(1\) のヒストグラムでは、度数最大の階級は\(170\) cm以上\(175\) cm未満です。この階級に中央値は含まれていません。→誤

 

\(3\):図\(2\) より、女子長距離の身長の第\(1\) 四分位数は\(161\) cm付近と読み取れます。図\(1\) のヒストグラムでは、度数最大の階級は\(165\) cm以上\(170\) cm未満です。この階級に第\(1\) 四分位数は含まれていません。→誤

 

\(4\):図\(2\) より、最大値が最も大きいのは男子短距離です。→誤

 

\(5\):図\(2\) より、最小値が最も小さいのは女子短距離です。→誤

 

\(5\):図\(2\) より、男子短距離の中央値も、男子長距離の第\(3\) 四分位数も\(181\) cm付近と読み取れます。→正

 

よって、

( ア )\(1\)、( イ )\(6\)(順は逆でもよい)

(2) 選択肢を確認する前に、図\(3\) や図\(4\) が何を表しているかを考えます。

 

\(Z=\dfrac{W}{X}\) と表されます。つまり、\(x\) 座標に\(X\)、\(y\) 座標に\(W\) をとった座標において、\(Z\) は原点とその点を結んだ直線の傾きと考えられます。

 

例えば、\((X, W)=(3.0, 60)\) の選手\(A\) がいるとします。この選手\(A\) の\(Z\) を計算すると、\(Z=\dfrac{W}{X}=\dfrac{60}{3.0}=20\) となります。

 

図\(3\) の散布図を見てみます。散布図には原点が含まれていませんが、問題文に四つの直線\(l_1, l_2, l_3, l_4\) は原点を通り、傾きが\(15, 20, 25, 30\) と書かれていますので、選手\(A\) の点は傾き\(20\) である直線\(l_2\) 上にあるということになります。

 

もう少し考えると、直線\(l_1\) と直線\(l_2\) の間にある点は、\(Z\) が\(15\) と\(20\) の間にあるということがわかります。

 

図\(3\) が何を表しているかがわかったので、次は図\(4\) と合わせて(a)~(d)がどのグループに当てはまるかを考えます。

 

図\(3\) における、それぞれのグループの、点の分布の中心がだいたいどの辺りにあるか読み取ります。そこから、\(Z\) の中央値を考えます。

 

男子短距離:\(l_2\) と\(l_3\) の間 → \(Z\) の中央値は\(20\) と\(25\) の間

男子長距離:\(l_2\) 付近 → \(Z\) の中央値は\(20\)付近

女子短距離:\(l_2\) の少し上 → \(Z\) の中央値は\(20\) より少し大きい

女子長距離:\(l_1\) と\(l_2\) の間 → \(Z\) の中央値は\(15\) と\(20\) の間

 

また、図\(3\) の最も左上にある点の位置から\(Z\) の最大値を読み取ります。

男子短距離:\(l_4\) 付近 → \(Z\) の最大値は\(30\) 付近

男子長距離:\(l_3\) と\(l_4\) の間で\(l_4\) 寄り → \(Z\) の最大値は\(25\) と\(30\) の間で\(30\) 寄り

女子短距離:\(l_3\) と\(l_4\) の真ん中 → \(Z\) の最大値は\(27\)~\(28\)

女子長距離:\(l_2\) と\(l_3\) の間 → \(Z\) の最大値は\(20\) と\(25\) の間

これらの情報を図\(4\) と照らし合わせると、(a)~(d)はそれぞれ、

男子短距離:(a)

男子長距離:(c)

女子短距離:(b)

女子長距離:(d)

となります。

 

では、選択肢をひとつずつ確認します。一歩ずつ地道に、です。

\(0\):\(X\) と\(W\) の分布図はどれも右肩上がりの分布になっています。ということは、正の相関があるということです。→誤

\(1\):図\(4\) より、中央値が最も大きいのは(a)、つまり男子短距離です。→誤

\(2\):図\(4\) より、範囲が最も小さいのは(d)で女子長距離です。→誤

\(3\):男子短距離つまり(a)は、図\(4\) において四分位範囲が最大です。→誤

\(4\):図\(4\) より、女子長距離つまり(d)の最大値は\(25\) より小さいです。→正

\(5\):図\(3\) と図\(4\) から、男子長距離の箱ひげ図は(c)と読み取りました。→正

 

( ウ )\(4\)、( エ )\(5\)(順は逆でもよい)

(3) 一つ前の例題とよく似た問題ですね。

偏差の積の和の式から、一つの項だけ取り出して考えてみます。

$
\begin{array}{rcll}
(x_1-\bar{x})(w_1-\bar{w})=x_1w_1-x_1\bar{w}-\bar{x}w_1+\bar{x}\bar{w}
\end{array}
$

これを\(1\) 番目から\(n\) 番目まで足します。

つまり、

① \(x_1w_1+x_2w_2+\cdots+x_nw_n\)

② \(-x_1\bar{w}-x_2\bar{w}-\cdots-x_n\bar{w}=-(x_1+x_2+\cdots+x_n)\bar{w}\)

③ \(-\bar{x}w_1-\bar{x}w_2-\cdots-\bar{x}w_n=-\bar{x}(w_1+w_2+\cdots+w_n)

④ \(\bar{x}\bar{w}\times n=n\bar{x}\bar{w}\)

をすべて足します。

 

①は偏差の積の和の式において、右辺の前半部分と一致しています。

では、後半部分はどうなるでしょう?

 

平均値の式を変形すると、\(x_1+x_2+\cdots+x_n=n\bar{x}\)、\(w_1+w_2+\cdots+w_n=n\bar{w}\) となり、これらをそれぞれ②、③に代入すると、それぞれ下のようになります。

② \(-n\bar{x}\cdot\bar{w}\)

③ \(-\bar{x}\cdot n\bar{w}\)

 

以上から、②から④を足すと、\(-n\bar{x}\bar{w}\)

よって、

( オ )\(2\)

以上です。

 

今回のまとめ

今回は、データの相関について説明しました。前回、前々回も言いましたが、データの分析は、ここしばらく何年も続けてセンター試験で出題されています。しかも、相関については出題の頻度がかなり高いです。周りから後れをとらないように、しっかり理解してしまいましょう。

 

データ分析のデータ整理の記事「【数学IA】データの整理について理解しましょう!(データの分析)

データ分析の四分位数・箱ひげ図の記事【数学IA】四分位数と箱ひげ図について理解しましょう!(データの分析)

にほんブログ村 受験ブログへ
にほんブログ村

にほんブログ村 受験ブログ 大学受験(本人・親)へ
にほんブログ村

コメント

");const o=ie?ie.createHTML(e):e;if(nt===tt)try{t=(new W).parseFromString(o,at)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(nt,"template",null);try{t.documentElement.innerHTML=ot?ae:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),nt===tt?ue.call(t,Ie?"html":"body")[0]:Ie?t.documentElement:i},bt=function(e){return ce.call(e.ownerDocument||e,e,H.SHOW_ELEMENT|H.SHOW_COMMENT|H.SHOW_TEXT|H.SHOW_PROCESSING_INSTRUCTION|H.SHOW_CDATA_SECTION,null)},St=function(e){return e instanceof B&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof z)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Rt=function(e){return"function"==typeof b&&e instanceof b},wt=function(e,t,n){pe[e]&&u(pe[e],(e=>{e.call(o,t,n,ut)}))},Ct=function(e){let t=null;if(wt("beforeSanitizeElements",e,null),St(e))return _t(e),!0;const n=st(e.nodeName);if(wt("uponSanitizeElement",e,{tagName:n,allowedTags:Ne}),e.hasChildNodes()&&!Rt(e.firstElementChild)&&_(/<[/\w]/g,e.innerHTML)&&_(/<[/\w]/g,e.textContent))return _t(e),!0;if(e.nodeType===J)return _t(e),!0;if(Me&&e.nodeType===Q&&_(/<[/\w]/g,e.data))return _t(e),!0;if(!Ne[n]||Ce[n]){if(!Ce[n]&&Dt(n)){if(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n))return!1;if(we.tagNameCheck instanceof Function&&we.tagNameCheck(n))return!1}if(Ye&&!qe[n]){const t=re(e)||e.parentNode,n=oe(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o){const r=X(n[o],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,$(e))}}}return _t(e),!0}return e instanceof R&&!Et(e)?(_t(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!_(/<\/no(script|embed|frames)/i,e.innerHTML)?(ke&&e.nodeType===Z&&(t=e.textContent,u([fe,de,he],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(o.removed,{element:e.cloneNode()}),e.textContent=t)),wt("afterSanitizeElements",e,null),!1):(_t(e),!0)},Lt=function(e,t,n){if(Be&&("id"===t||"name"===t)&&(n in r||n in mt))return!1;if(ve&&!Le[t]&&_(ge,t));else if(De&&_(Te,t));else if(!Se[t]||Le[t]){if(!(Dt(e)&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,e)||we.tagNameCheck instanceof Function&&we.tagNameCheck(e))&&(we.attributeNameCheck instanceof RegExp&&_(we.attributeNameCheck,t)||we.attributeNameCheck instanceof Function&&we.attributeNameCheck(t))||"is"===t&&we.allowCustomizedBuiltInElements&&(we.tagNameCheck instanceof RegExp&&_(we.tagNameCheck,n)||we.tagNameCheck instanceof Function&&we.tagNameCheck(n))))return!1}else if(Ze[t]);else if(_(Ae,g(n,Ee,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==T(n,"data:")||!Ke[e]){if(Oe&&!_(ye,g(n,Ee,"")));else if(n)return!1}return!0},Dt=function(e){return"annotation-xml"!==e&&h(e,_e)},vt=function(e){wt("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Se};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=st(a);let p="value"===a?c:y(c);if(n.attrName=s,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,wt("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(At(a,e),!n.keepAttr)continue;if(!xe&&_(/\/>/i,p)){At(a,e);continue}if(Me&&_(/((--!?|])>)|<\/(style|title)/i,p)){At(a,e);continue}ke&&u([fe,de,he],(e=>{p=g(p,e," ")}));const f=st(e.nodeName);if(Lt(f,s,p)){if(!We||"id"!==s&&"name"!==s||(At(a,e),p=Ge+p),ie&&"object"==typeof G&&"function"==typeof G.getAttributeType)if(l);else switch(G.getAttributeType(f,s)){case"TrustedHTML":p=ie.createHTML(p);break;case"TrustedScriptURL":p=ie.createScriptURL(p)}try{l?e.setAttributeNS(l,a,p):e.setAttribute(a,p),St(e)?_t(e):m(o.removed)}catch(e){}}}wt("afterSanitizeAttributes",e,null)},Ot=function e(t){let n=null;const o=bt(t);for(wt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)wt("uponSanitizeShadowNode",n,null),Ct(n)||(n.content instanceof s&&e(n.content),vt(n));wt("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(ot=!e,ot&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Rt(e)){if("function"!=typeof e.toString)throw A("toString is not a function");if("string"!=typeof(e=e.toString()))throw A("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Ue||ft(t),o.removed=[],"string"==typeof e&&(je=!1),je){if(e.nodeName){const t=st(e.nodeName);if(!Ne[t]||Ce[t])throw A("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof b)n=Nt("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),r.nodeType===V&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!Fe&&!ke&&!Ie&&-1===e.indexOf("<"))return ie&&ze?ie.createHTML(e):e;if(n=Nt(e),!n)return Fe?null:ze?ae:""}n&&Pe&&_t(n.firstChild);const c=bt(je?e:n);for(;i=c.nextNode();)Ct(i)||(i.content instanceof s&&Ot(i.content),vt(i));if(je)return e;if(Fe){if(He)for(l=se.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Se.shadowroot||Se.shadowrootmode)&&(l=me.call(a,l,!0)),l}let m=Ie?n.outerHTML:n.innerHTML;return Ie&&Ne["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&_(q,n.ownerDocument.doctype.name)&&(m="\n"+m),ke&&u([fe,de,he],(e=>{m=g(m,e," ")})),ie&&ze?ie.createHTML(m):m},o.setConfig=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ft(e),Ue=!0},o.clearConfig=function(){ut=null,Ue=!1},o.isValidAttribute=function(e,t,n){ut||ft({});const o=st(e),r=st(t);return Lt(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],p(pe[e],t))},o.removeHook=function(e){if(pe[e])return m(pe[e])},o.removeHooks=function(e){pe[e]&&(pe[e]=[])},o.removeAllHooks=function(){pe={}},o}();return oe}))
タイトルとURLをコピーしました