メインコンテンツへ移動

例の値が入力されています。ご自身の値に置き換えてください。

パーセント

平均パーセント

75%

計算過程

  1. 2個のパーセントの合計 = 150
  2. 150 ÷ 2 = 75%
パーセントの合計
150
パーセントの個数
2

80%、90%、70%、85%という四回のテストの得点の平均は81.25%です。しかし、大きさの異なる集団のパーセントは、単純に足して割ることはできません。50人から得た割合は、20人から得た割合より重く扱うべきだからです。

このオンラインの平均パーセント計算機にパーセントのリストを入力すると、単純平均が求まります。標本の大きさや配点など、それぞれの重みを加えると、加重平均が求まり、二つの値が違ってくる理由もわかります。下には公式、六つの例題、成長率の平均についての短い解説があります。

パーセントの平均の求め方

結論: パーセントを足して、その個数で割ります。パーセントが大きさの異なる集団から来ている場合は、それぞれに重みを掛けて足し、重みの合計で割ります。

パーセントの単純平均

  1. すべてのパーセントを足します。
  2. 合計をパーセントの個数で割ります。
  3. パーセント記号を付けます。

これが相加平均です。すべてのパーセントを同じ重要度で扱うため、それぞれが同じ大きさの集団から来ている場合に適しています。たとえば、同じ満点で採点された四回のテストです。重みを指定しなければ、上のパーセント平均の計算機はこの計算を行い、単純モードのどのパーセント平均計算機も同様です。

パーセントの加重平均

加重平均は、各パーセントにその重みを掛けたものの和を、重みの和で割った値です。

加重平均 = (p1 × w1 + p2 × w2 + ... + pn × wn) ÷ (w1 + w2 + ... + wn)

ここで、pは各パーセント、wはその重みです。重みには、標本の大きさ、配点、成績に占める割合などを使えます。負でなければよく、重みの合計が100になる必要はありません。各パーセントがどれだけ効くかは、重みで決まります。

単純平均が間違いになるのは、このためです。50人の合格率90%は、20人の合格率60%よりも全体の数字を大きく動かすべきですが、単純平均では同じ影響力になります。もとになるグループの大きさが違うときは、上の計算機を加重モードに切り替えます。重み付きの割合の計算機としても、重みつきの平均パーセント計算機としても使えます。

加重平均を順を追って計算する方法

  1. 各パーセントに重みを掛けます。
  2. それらの積を足します。
  3. 重みを足します。
  4. 積の和を重みの和で割ります。

85%の平常点で重みが40、70%の試験で重みが60の場合を考えます。積は3,400と4,200で、合計は7,600です。重みの合計は100なので、平均は76%です。重みが標本の大きさのとき、各積はそのグループの成功数の100倍になります。そのため、合格率の加重平均は、合算した合格率と等しくなります。

パーセントを足し合わせる

パーセントを足し合わせられるかどうかは、全体によって決まります。足せるのは、同じ全体に対する割合どうしのときだけです。一つの市場で25%、30%、12%のシェアを合わせると、その市場の67%になります。異なる全体のパーセントを足しても意味はありません。20人の50%と80人の25%を合わせても、誰かの75%にはなりません。

異なるグループのパーセントをまとめるには、それぞれを個数に直し、個数を足して、合計で割ります。これは、グループの大きさを重みとする加重平均であり、全体のパーセントが求まります。下の例題4で確認できます。各パーセントにグループの大きさを重みとして入力すれば、上の計算機はパーセントをまとめる計算機として働きます。

複数の期間にわたる平均変化率

成長率には、別の平均が必要です。ある数値が10%上がってから10%下がる場合、単純平均は0%ですが、数値は最終的に最初の1.1 × 0.9 = 0.99になり、1%の減少です。実際の結果を再現する平均は、倍率の相乗平均です。

平均変化率 = ((1 + r1) × (1 + r2) × ... × (1 + rn))^(1/n) − 1

10%の上昇のあとに10%の下落となる場合は、0.99の平方根から1を引いた値で、期間あたり-0.50%です。二つの値の間の変化だけを求めるなら変化率計算機を、一回の上昇なら増加率計算機を使います。

ExcelとGoogle Sheetsでの平均パーセント

単純平均を求めるには、パーセントをA2:A5に入れて =AVERAGE(A2:A5) と入力します。加重平均を求めるには、パーセントをA2:A4、重みをB2:B4に入れて =SUMPRODUCT(A2:A4,B2:B4)/SUM(B2:B4) と入力します。ほかの数式はExcelのパーセントのガイドで扱っています。

誤差率の平均

平均誤差率は別の計算です。まず誤差率計算機で各誤差率を求め、その結果を上のように平均します。

丸めと結果の確認

丸めるのは最後の平均だけにします。すでに丸めた数値を平均すると、その丸め誤差が結果に引き継がれるので、できるかぎり正確な値を保ちます。必要でなければ、小数点以下は一桁か二桁で示します。計算機は、平均の横に合計と個数(または重みの合計)を表示するので、割り算を自分で確かめられます。

平均パーセントの例

例題1:四回のテストの得点

条件

得点は80%、90%、70%、85%で、いずれも同じ満点です。

答え

合計は325で、325 ÷ 4 = 81.25%です。

例題2:大きさの異なる集団

条件

三つのグループの合格率は60%、80%、90%で、生徒数は20人、30人、50人です。

答え

加重平均は81 ÷ 100 = 81%です。単純平均の(60 + 80 + 90) ÷ 3は76.67%で、20人のグループに50人のグループと同じ影響力を与えてしまうため、結果を低く見積もります。
平均パーセントの例
グループ合格率生徒数合格者数
A60%2012
B80%3024
C90%5045
合計81%10081

例題3:重み付きの科目の成績

条件

平常点は成績の40%、試験は60%を占めます。ある生徒は、平常点で85%、試験で70%を取りました。

答え

加重平均は(85 × 40 + 70 × 60) ÷ 100 = (3,400 + 4,200) ÷ 100 = 76%です。単純平均だと77.5%になります。

例題4:異なる全体のパーセント

条件

A組では、20人の50%が合格し、10人です。B組では、80人の25%が合格し、20人です。

答え

合わせて100人中30人が合格したので、30%です。50%と25%を足すと75%になり、単純平均だと37.5%になります。どちらも誤りです。

例題5:平均成長率

条件

ある数値が三つの期間で、+10%、+20%、+30%と変化します。
  1. 手順 1

    単純平均は20%です。

答え

相乗平均は(1.1 × 1.2 × 1.3)^(1/3) − 1で、期間あたり19.72%です。19.72%を三回複利で重ねると、実際の合計の成長は71.6%になりますが、20%だと72.8%になります。

例題6:満点の異なる得点

条件

ある生徒が、一つの試験で60点満点中45点を取り、これは75%です。別の試験では100点満点中70点を取り、これは70%です。
  1. 手順 1

    75%と70%の単純平均は72.5%です。

答え

正しい全体のパーセントは、点数の合計を使います。115 ÷ 160 = 71.88%です。100点満点の試験のほうを重く数えるべきだからです。これは満点を重みとする加重平均で、得点率の計算機はこの場合のために作られています。

平均パーセントのコード

どちらのバージョンも上の例題(81.25、81、76、76.67、19.72)を再現し、数値以外の入力を拒否し、個数の合わない重みやすべてゼロの重みも受け付けません。

JavaScript

JavaScript
function finite(name, v) {  if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}​function places(decimals) {  if (!Number.isInteger(decimals) || decimals < 0 || decimals > 10) throw new RangeError("decimals must be a whole number from 0 to 10");  return decimals;}​function list(name, values) {  if (!Array.isArray(values) || values.length < 1) throw new TypeError(`${name} must be a non-empty array of numbers`);  values.forEach((v) => finite(name, v));}​// Simple average: [80, 90, 70, 85] -> 81.25export function averagePercent(values, decimals = 2) {  list("values", values);  const d = places(decimals);  return Number((values.reduce((a, b) => a + b, 0) / values.length).toFixed(d));}​// Weighted average: weights can be sample sizes, marks or any non-negative numbersexport function weightedAveragePercent(values, weights, decimals = 2) {  list("values", values);  list("weights", weights);  if (values.length !== weights.length) throw new RangeError("values and weights must be the same length");  if (weights.some((w) => w < 0)) throw new RangeError("weights must not be negative");  const d = places(decimals);  const total = weights.reduce((a, b) => a + b, 0);  if (total === 0) throw new RangeError("the weights must not all be 0");  const sum = values.reduce((acc, v, i) => acc + v * weights[i], 0);  return Number((sum / total).toFixed(d));}​// Average percentage change per period over several periods (geometric mean)export function averageGrowth(ratesPercent, decimals = 2) {  list("rates", ratesPercent);  const d = places(decimals);  let product = 1;  for (const r of ratesPercent) {    if (r <= -100) throw new RangeError("a rate of -100% or less cannot be averaged this way");    product *= 1 + r / 100;  }  return Number(((Math.pow(product, 1 / ratesPercent.length) - 1) * 100).toFixed(d));}

Python

Python
from decimal import Decimal, ROUND_HALF_UPfrom math import isfinite​​def _num(name, v):    if isinstance(v, bool) or not isinstance(v, (int, float, Decimal)) or not isfinite(float(v)):        raise ValueError(f"{name} must be a finite number")    return Decimal(str(v))​​def _round(x, decimals):    if not isinstance(decimals, int) or isinstance(decimals, bool) or not 0 <= decimals <= 10:        raise ValueError("decimals must be a whole number from 0 to 10")    return x.quantize(Decimal(1).scaleb(-decimals), rounding=ROUND_HALF_UP)​​def _list(name, values):    if not isinstance(values, (list, tuple)) or len(values) < 1:        raise ValueError(f"{name} must be a non-empty list of numbers")    return [_num(name, v) for v in values]​​def average_percent(values, decimals=2):    nums = _list("values", values)    return _round(sum(nums) / len(nums), decimals)​​def weighted_average_percent(values, weights, decimals=2):    nums = _list("values", values)    w = _list("weights", weights)    if len(nums) != len(w):        raise ValueError("values and weights must be the same length")    if any(x < 0 for x in w):        raise ValueError("weights must not be negative")    total = sum(w)    if total == 0:        raise ValueError("the weights must not all be 0")    return _round(sum(n * x for n, x in zip(nums, w)) / total, decimals)​​def average_growth(rates_percent, decimals=2):    rates = _list("rates", rates_percent)    product = Decimal(1)    for r in rates:        if r <= -100:            raise ValueError("a rate of -100% or less cannot be averaged this way")        product *= 1 + r / 100    return _round((product ** (Decimal(1) / len(rates)) - 1) * 100, decimals)

weightedAveragePercent([60, 80, 90], [20, 30, 50]) は、グループの大きさの例である81を返し、averageGrowth([10, 20, 30]) は19.72を返します。丸めるのは表示のときだけにします。Python版は学校で一般的な四捨五入で丸め、Decimal の値を返すので、81は81.00と表示されます。

プライバシーと入力の安全性

  • 値の計算はブラウザー内で行われます。入力した数値がサーバーに送られたり、保存されたりすることはありません。
  • 入力欄は数値のみ受け付けます。パーセントには末尾に%記号を付けることもできます。文字、空欄、NaN、Infinityはメッセージを表示して拒否され、入力した内容がコードとして実行されることは一切ありません。
  • パーセントがあって重みがない行は、加重モードでは重み1として扱われます。完全に空の行は無視されます。
  • 重みは負であってはいけません。すべての重みが0の場合、合計がゼロになるので、計算機は正の重みを少なくとも一つ入力するよう求めます。
  • 単純モードと加重モードでは、100より大きいパーセントや0より小さいパーセントも受け付けます。そうしたデータもあるからです。平均成長率では、-100%以下の率は拒否されます。数値がすべて消えてしまうからです。
  • 小数点以下の桁数は、0から10までの整数に限られます。
  • カンマの直後にちょうど3桁が続く場合は千の位の区切りとして読み、1,200 は 1200 になります。それ以外のカンマは小数点として扱うため、12,50 は 12.50 で、0 で始まる 0,500 のような数は小数として読みます。1.234,5 のような混在形式や 1,2,3 のようなあいまいな入力は、推測せずに拒否します。桁区切りの空白(改行されない空白を含む)は無視します。
  • 非常に長い貼り付けでも、ページがフリーズすることはありません。

平均パーセントでよくある間違い

平均パーセントでよくある間違い
間違い何が起こるか計算機の動作
大きさの異なる集団に単純平均を使う20人、30人、50人の60%、80%、90%の平均は、81%ではなく76.67%になりますグループの大きさを重みとする加重モードを備えています
異なる全体のパーセントを足す20人の50%と80人の25%を合わせても75%にはなりません個数を合算してから、合計で割ります
成長率を単純平均で平均する+10%のあとに-10%の平均は0%ですが、数値は最終的に1%下がります成長率には相乗平均を使います
リストから0%を外す80%と0%の平均は80%ではなく40%です値のあるすべての行を、0も含めて数えます
小数とパーセントを混ぜる一つのリストに0.8と90を入れると、85ではなく45.4になりますすべての値をパーセントとして扱う
重みを、合計が100になるパーセントでなければならないと考える標本の大きさ20、30、50は、何も調整しなくても使えます重みの合計で割ります
重みがすべて0合計がゼロなので、平均は定義されません正の重みを求めます
平均する前に各パーセントを丸める早い段階で丸めると結果がずれます丸めるのは最終的な平均だけです

どの平均を使うか

どの平均を使うか
方法使う場面例結果
単純平均すべてのパーセントが同じ大きさの集団から来ている80%、90%、70%、85%81.25%
加重平均集団の大きさが異なる、または項目ごとに重みが異なる20人、30人、50人の60%、80%、90%81%
パーセントの和パーセントが一つの全体に対する割合一つの市場の25% + 30% + 12%67%
個数から合成パーセントが異なる全体から来ていて、個数がわかっている20人中10人と80人中20人30%
相乗平均パーセントが連続する期間の成長率+10%と-10%期間あたり-0.50%

よくある質問

パーセントを足し合わせるにはどうしますか?

同じ全体に対するパーセントは、そのまま足せます。10% + 20% = 30%です。異なる全体のパーセントは足せません。まず各パーセントを量に直し、量を足して、合計で割ります。50の20%は10、150の40%は60で、70 ÷ 200 = 35%です。

時間をかけた平均の増加率や減少率はどう計算しますか?

相加平均ではなく、各期間の倍率の相乗平均を使います。+10%、+20%、+30%なら倍率は1.1、1.2、1.3で、1.716の三乗根は1.1972なので、平均成長率は期間あたり19.72%です。単純平均は20%となり、複利の成長を過大に見積もります。

平均誤差率はどう計算しますか?

測定ごとに誤差率を計算し、それらの値の平均を取ります。2%、4%、6%の誤差の平均は4%です。誤差の典型的な大きさを知りたい場合は、絶対値を使います。符号付きの+4%と−4%は打ち消し合って0%になります。一つの測定については誤差率計算機を使います。

平均パーセントはどう計算しますか?

パーセントを足して、その個数で割ります。80%、75%、90%、80%の得点の合計は325で、325 ÷ 4 = 81.25%です。この方法が正しいのは、すべてのパーセントの重みが同じ場合だけです。

全体のパーセントはどう計算しますか?

部分を足し、全体を足してから割ります。ある生徒の得点が45/60、40/50、30/50なら、160点中115点で71.88%です。満点が異なる場合は、三つのパーセントの平均とは一致しません。

パーセントをまとめる、または集計するにはどうしますか?

パーセントではなく、個数を集計します。ある集団が100人中10人、別の集団が100人中20人なら、合わせて200人中30人で、15%です。パーセントをそのまま足せるのは、最初の質問のように、一つの全体に対する割合のときだけです。

パーセントの加重平均とは何ですか?

各パーセントに重みを掛けて足し、重みの合計で割ったものです。重み60の90%と、重み40の70%なら、(90 × 60 + 70 × 40) ÷ 100 = 82%です。単純平均だと80%になります。