| 194 | } |
| 195 | |
| 196 | void StatisticsColumnWidget::showOverview() { |
| 197 | const Column::ColumnStatistics& statistics = m_column->statistics(); |
| 198 | |
| 199 | if (m_column->isNumeric()) { |
| 200 | m_teOverview->setHtml(m_htmlOverview |
| 201 | .arg(QString::number(statistics.size), |
| 202 | isNanValue(statistics.minimum == INFINITY ? NAN : statistics.minimum), |
| 203 | isNanValue(statistics.maximum == -INFINITY ? NAN : statistics.maximum), |
| 204 | isNanValue(statistics.arithmeticMean), |
| 205 | isNanValue(statistics.geometricMean), |
| 206 | isNanValue(statistics.harmonicMean), |
| 207 | isNanValue(statistics.contraharmonicMean), |
| 208 | modeValue(m_column, statistics.mode), |
| 209 | isNanValue(statistics.firstQuartile)) |
| 210 | .arg(isNanValue(statistics.median), |
| 211 | isNanValue(statistics.thirdQuartile), |
| 212 | isNanValue(statistics.trimean), |
| 213 | isNanValue(statistics.maximum - statistics.minimum), |
| 214 | isNanValue(statistics.variance), |
| 215 | isNanValue(statistics.standardDeviation), |
| 216 | isNanValue(statistics.meanDeviation), |
| 217 | isNanValue(statistics.meanDeviationAroundMedian), |
| 218 | isNanValue(statistics.medianDeviation), |
| 219 | isNanValue(statistics.iqr)) |
| 220 | .arg(isNanValue(statistics.skewness), isNanValue(statistics.kurtosis), isNanValue(statistics.entropy))); |
| 221 | } else if (m_column->columnMode() == AbstractColumn::ColumnMode::Text) { |
| 222 | // add the frequencies table |
| 223 | const auto& frequencies = m_column->frequencies(); |
| 224 | const QString htmlColor = GuiTools::isDarkMode() ? QStringLiteral("#5f5f5f") : QStringLiteral("#D1D1D1"); |
| 225 | m_htmlOverview += QStringLiteral("<br><table border=0 width=100%>") + QStringLiteral("<tr>") + QStringLiteral("<td colspan=3 align=center bgcolor=") |
| 226 | + htmlColor + QStringLiteral("><b><big>") + i18n("Frequency Table") + QStringLiteral("</big><b></td>") + QStringLiteral("</tr>") |
| 227 | + QStringLiteral("<tr>") + QStringLiteral("<td width=60%></td>") + QStringLiteral("<td>") + i18n("Frequency") + QStringLiteral("</td>") |
| 228 | + QStringLiteral("<td>") + i18n("Percent") + QStringLiteral("</td>") + QStringLiteral("</tr>"); |
| 229 | |
| 230 | auto i = frequencies.constBegin(); |
| 231 | while (i != frequencies.constEnd()) { |
| 232 | int count = i.value(); |
| 233 | double percent = (double)count / statistics.size * 100; |
| 234 | m_htmlOverview += QStringLiteral("<tr>") + QStringLiteral("<td>") + i.key() + QStringLiteral("</td>") + QStringLiteral("<td>") |
| 235 | + QString::number(count) + QStringLiteral("</td>") + QStringLiteral("<td>") + QString::number(percent) + QStringLiteral("%</td>") |
| 236 | + QStringLiteral("</tr>"); |
| 237 | ++i; |
| 238 | } |
| 239 | |
| 240 | m_htmlOverview += QStringLiteral("</table>"); |
| 241 | m_teOverview->setHtml(m_htmlOverview.arg(QString::number(statistics.size), QString::number(statistics.unique))); |
| 242 | } else { // datetime |
| 243 | auto* filter = static_cast<DateTime2StringFilter*>(m_column->outputFilter()); |
| 244 | m_teOverview->setHtml(m_htmlOverview.arg(QString::number(statistics.size), |
| 245 | QDateTime::fromMSecsSinceEpoch(statistics.minimum).toString(filter->format()), |
| 246 | QDateTime::fromMSecsSinceEpoch(statistics.maximum).toString(filter->format()))); |
| 247 | } |
| 248 | |
| 249 | showOverviewPlot(); |
| 250 | m_overviewInitialized = true; |
| 251 | } |
| 252 | |
| 253 | void StatisticsColumnWidget::showOverviewPlot() { |
nothing calls this directly
no test coverage detected