Flutter数据统计插件statistics的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter数据统计插件statistics的使用

简介

statistics 是一个用于Flutter和Dart的数据统计库,提供了丰富的数学函数和工具,支持贝叶斯网络(Bayes Net)等高级功能。以下是该库的一些关键特性:

  • 数值扩展:为数值列表提供扩展方法,如均值、标准差等。
  • 统计数据类:提供了一个Statistics类,可以生成包含多种统计信息的对象。
  • 贝叶斯网络:支持构建和分析贝叶斯网络,用于理解事件之间的依赖关系并分配概率。
  • CSV生成:可以将数据集合转换为CSV格式。
  • 高精度算术:支持高精度整数和小数运算。

安装

在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  statistics: ^latest_version

替换latest_version为最新版本号,可以在pub.dev上查找。

使用示例

数值扩展

import 'package:statistics/statistics.dart';

void main() {
  var ns = [10, 20.0, 25, 30];
  print('ns: $ns');

  var mean = ns.mean;
  print('mean: $mean');

  var sdv = ns.standardDeviation;
  print('sdv: $sdv');

  var squares = ns.square;
  print('squares: $squares');
}

统计数据类

import 'package:statistics/statistics.dart';

void main() {
  var ns = [10, 20.0, 25, 30];
  var statistics = ns.statistics;

  print('Statistics.max: ${statistics.max}');
  print('Statistics.min: ${statistics.min}');
  print('Statistics.mean: ${statistics.mean}');
  print('Statistics.standardDeviation: ${statistics.standardDeviation}');
  print('Statistics.sum: ${statistics.sum}');
  print('Statistics.center: ${statistics.center}');
  print('Statistics.median: ${statistics.median} -> ${statistics.medianLow} , ${statistics.medianHigh}');
  print('Statistics.squaresSum: ${statistics.squaresSum}');

  print('Statistics: $statistics');
}

贝叶斯网络

import 'package:statistics/statistics.dart';

void main() {
  var bayesNet = BayesianNetwork('cancer');

  // C (cancer) = T (true) ; F (false)
  bayesNet.addVariable("C", [
    'F',
    'T',
  ], [], [
    "C = F: 0.99",
    "C = T: 0.01",
  ]);

  // X (exam) = P (positive) ; N (negative)
  bayesNet.addVariable("X", [
    '+P',
    '-N',
  ], [
    "C"
  ], [
    "X = N, C = F: 0.91",
    "X = P, C = F: 0.09",
    "X = N, C = T: 0.10",
    "X = P, C = T: 0.90",
  ]);

  // Show the network nodes and probabilities:
  print(bayesNet);

  var analyser = bayesNet.analyser;

  // Ask the probability to have cancer with a positive exam (X = P):
  var answer1 = analyser.ask('P(c|x)');
  print(answer1); // P(c|x) -> C = T | X = P -> 0.09174311926605506 (0.009000000000000001) >> 917.43%

  // Ask the probability to have cancer with a negative exam (X = N):
  var answer2 = analyser.ask('P(c|-x)');
  print(answer2); // P(c|-x) -> C = T | X = N -> 0.0011087703736556158 (0.001) >> 11.09%
}

CSV生成

import 'package:statistics/statistics.dart';

void main() {
  var categories = <String, List<double?>>{
    'a': [10.0, 20.0, null],
    'b': [100.0, 200.0, 300.0]
  };

  var csv = categories.generateCSV();
  print(csv);
}

高精度算术

import 'package:statistics/statistics.dart';

void main() {
  var n1 = DynamicInt.fromInt(123) + Decimal.parse('0.456');
  print(n1); // 123.456

  var n2 = Decimal.parse('0.1') + Decimal.parse('0.2');
  print(n2); // 0.3

  // Using `toDecimal` extension to convert an `int` to `Decimal`:
  var n3 = 123.toDecimal().powerInt(41); // power with an integer exponent.
  print(n3); // 48541095000524544750127162673405880068636916264012200797813591925035550682238127143323.0

  var n4 = 2.toDecimal().powerDouble(2.2); // power with a double exponent.
  print(n4); // 4.594793419988

  // Using `toDynamicInt` extension to convert an `int` to `DynamicInt`:
  var n5 = 2.toDynamicInt().powerInt(-1); // power with a negative exponent.
  print(n5); // 0.5
}

输出示例

ns: [10, 20.0, 25, 30]
mean: 21.25
sdv: 6.931585316505886
squares: [100, 400.0, 625, 900]
Statistics.max: 30
Statistics.min: 10
Statistics.mean: 21.25
Statistics.standardDeviation: 7.39509972887452
Statistics.sum: 85.0
Statistics.center: 25
Statistics.median: 22.5 -> 20.0 , 25
Statistics.squaresSum: 2025.0
Statistics: {~21.25 +-7.3950 [10..(25)..30] #4}
---
CSV:
#,a,b
1,10,100
2,20,200
3,0,300

总结

statistics 插件为Flutter和Dart开发者提供了一套强大的数据统计工具,包括数值扩展、统计数据类、贝叶斯网络、CSV生成和高精度算术等功能。通过这些功能,你可以轻松地进行数据处理和分析。希望本文档能帮助你更好地理解和使用这个插件。


更多关于Flutter数据统计插件statistics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据统计插件statistics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用statistics插件进行数据统计的示例代码。不过需要注意的是,Flutter本身并没有一个官方的statistics插件,所以我将假设你指的是一个第三方库或者自定义的统计功能。为了演示目的,我将创建一个简单的统计功能,比如计算一组数字的平均值、最大值和最小值。

首先,你需要在你的Flutter项目中创建一个统计功能的Dart文件,比如statistics.dart

// statistics.dart

class Statistics {
  List<num> numbers;

  Statistics(this.numbers);

  num getAverage() {
    if (numbers.isEmpty) return 0.0;
    num sum = numbers.reduce((a, b) => a + b);
    return sum / numbers.length;
  }

  num getMax() {
    return numbers.isEmpty ? 0.0 : numbers.reduce((a, b) => math.max(a, b));
  }

  num getMin() {
    return numbers.isEmpty ? 0.0 : numbers.reduce((a, b) => math.min(a, b));
  }
}

然后,在你的主应用程序文件中(比如main.dart),你可以使用这个统计功能来计算一组数字的平均值、最大值和最小值:

import 'package:flutter/material.dart';
import 'statistics.dart'; // 导入自定义的统计功能

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Statistics Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<num> numbers = [10, 20, 30, 40, 50];
  late Statistics statistics;

  @override
  void initState() {
    super.initState();
    statistics = Statistics(numbers);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Statistics Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Average: ${statistics.getAverage()}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            Text(
              'Max: ${statistics.getMax()}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            Text(
              'Min: ${statistics.getMin()}',
              style: TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个Statistics类,它接受一个数字列表作为参数,并提供了计算平均值、最大值和最小值的方法。然后,在MyHomePage中,我们初始化了一个Statistics对象,并使用它来计算和显示一组数字的平均值、最大值和最小值。

请注意,这只是一个简单的示例,用于展示如何在Flutter项目中实现自定义的统计功能。如果你指的是一个具体的第三方statistics插件,请提供更多详细信息,以便我能给出更具体的代码示例。

回到顶部