<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>数据统计 - tag - 沐木</title><link>https://oldletter.cn/tags/%E6%95%B0%E6%8D%AE%E7%BB%9F%E8%AE%A1/</link><description>数据统计 - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/%E6%95%B0%E6%8D%AE%E7%BB%9F%E8%AE%A1/" rel="self" type="application/rss+xml"/><item><title>问卷考试系统设计（七）：数据统计、可视化与系列总结</title><link>https://oldletter.cn/posts/qnr-07-statistics/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/qnr-07-statistics/</guid><description><![CDATA[<p><strong>上一篇：<a href="/posts/qnr-06-report-ai/" rel="">问卷考试系统设计（六）：报告生成</a></strong></p>
<p>数据采集只是起点。问卷系统真正产生价值的时刻，是数据沉淀之后，研究者打开统计面板，看到分组差异、趋势变化和数据质量。这篇聚焦数据统计分析、多格式导出、隐私脱敏、大屏可视化，以及常模的建立过程。</p>
<p>统计分析要区分离线口径和实时看板，避免把探索性分析塞进在线请求：</p>
<div class="mermaid" id="id-2" data-mermaid-definition="Zmxvd2NoYXJ0IExSCiAgICAgICAgICAgICAgICAgICAgQVsi562U5Y235riF5rSXIl0gLS0&#43;IEJbIue7tOW6puWIhuaxh&#43;aAuyJdCiAgICAgICAgICAgICAgICAgICAgQiAtLT4gQ1si5o&#43;P6L&#43;w57uf6K6hIl0KICAgICAgICAgICAgICAgICAgICBDIC0tPiBEWyLmmL7okZfmgKfmo4DpqowiXQogICAgICAgICAgICAgICAgICAgIEQgLS0&#43;IEVbIuW4uOaooeaehOW7uiJdCiAgICAgICAgICAgICAgICAgICAgRSAtLT4gRlsi56a757q/5a&#43;85Ye6Il0KICAgICAgICAgICAgICAgICAgICBCIC0tPiBHWyLlrp7ml7bmjIfmoIfogZrlkIgiXQogICAgICAgICAgICAgICAgICAgIEcgLS0&#43;IEhbIldlYlNvY2tldCDmjqjpgIEiXQogICAgICAgICAgICAgICAgICAgIEggLS0&#43;IElbIuWkp&#43;Wxj&#43;eci&#43;advyJdCiAgICAgICAgICAgICAgICAgICAgRSAtLT4gSlsi5bi45qih54mI5pysIl0KICAgICAgICAgICAgICAgICAgICBKIC0tPiBLWyLor4TliIblvJXmk47or7vlj5YiXQ==">flowchart LR
                    A[&#34;答卷清洗&#34;] --&gt; B[&#34;维度分汇总&#34;]
                    B --&gt; C[&#34;描述统计&#34;]
                    C --&gt; D[&#34;显著性检验&#34;]
                    D --&gt; E[&#34;常模构建&#34;]
                    E --&gt; F[&#34;离线导出&#34;]
                    B --&gt; G[&#34;实时指标聚合&#34;]
                    G --&gt; H[&#34;WebSocket 推送&#34;]
                    H --&gt; I[&#34;大屏看板&#34;]
                    E --&gt; J[&#34;常模版本&#34;]
                    J --&gt; K[&#34;评分引擎读取&#34;]</div><hr>
<h2 id="一描述性统计">一、描述性统计</h2>
<p>拿到一批量表分数，第一件事是看整体面貌：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-java">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title=""><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">public</span><span class="w"> </span><span class="n">DescriptiveStats</span><span class="w"> </span><span class="nf">descriptive</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">Double</span><span class="o">&gt;</span><span class="w"> </span><span class="n">scores</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">DoubleSummaryStatistics</span><span class="w"> </span><span class="n">stats</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">scores</span><span class="p">.</span><span class="na">stream</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="na">mapToDouble</span><span class="p">(</span><span class="n">Double</span><span class="p">::</span><span class="n">doubleValue</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">.</span><span class="na">summaryStatistics</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">double</span><span class="w"> </span><span class="n">mean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stats</span><span class="p">.</span><span class="na">getAverage</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">double</span><span class="w"> </span><span class="n">std</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Math</span><span class="p">.</span><span class="na">sqrt</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">scores</span><span class="p">.</span><span class="na">stream</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">.</span><span class="na">mapToDouble</span><span class="p">(</span><span class="n">v</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">Math</span><span class="p">.</span><span class="na">pow</span><span class="p">(</span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">mean</span><span class="p">,</span><span class="w"> </span><span class="n">2</span><span class="p">))</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="p">.</span><span class="na">average</span><span class="p">().</span><span class="na">orElse</span><span class="p">(</span><span class="n">0</span><span class="p">.</span><span class="na">0</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">List</span><span class="o">&lt;</span><span class="n">Double</span><span class="o">&gt;</span><span class="w"> </span><span class="n">sorted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">scores</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">sorted</span><span class="p">().</span><span class="na">collect</span><span class="p">(</span><span class="n">Collectors</span><span class="p">.</span><span class="na">toList</span><span class="p">());</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">double</span><span class="w"> </span><span class="n">median</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sorted</span><span class="p">.</span><span class="na">size</span><span class="p">()</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">?</span><span class="w"> </span><span class="p">(</span><span class="n">sorted</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">sorted</span><span class="p">.</span><span class="na">size</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">2</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">1</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">sorted</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">sorted</span><span class="p">.</span><span class="na">size</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">2</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">2</span><span class="p">.</span><span class="na">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">:</span><span class="w"> </span><span class="n">sorted</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">sorted</span><span class="p">.</span><span class="na">size</span><span class="p">()</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">2</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">DescriptiveStats</span><span class="p">(</span><span class="n">mean</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="p">,</span><span class="w"> </span><span class="n">median</span><span class="p">,</span><span class="w"> </span><span class="n">stats</span><span class="p">.</span><span class="na">getMin</span><span class="p">(),</span><span class="w"> </span><span class="n">stats</span><span class="p">.</span><span class="na">getMax</span><span class="p">(),</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">stats</span><span class="p">.</span><span class="na">getCount</span><span class="p">());</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span></span></span></code></pre></div></div>
<p>均值、标准差、中位数、极值，这几个数字能快速告诉研究者数据有没有异常、分布偏不偏。对于问卷系统这个体量的数据（通常几万条以内），纯 Java Stream 基本够用。</p>]]></description></item></channel></rss>