Flutter数据处理与分析插件dartaframe的使用

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

Flutter数据处理与分析插件dartaframe的使用

简介

dartaframe 是一个用于在 Dart 中进行数据处理和分析的库。它是 df 数据框架的一个分支版本,专为 Flutter 和 Dart 应用程序设计。

相关链接

  • 上游项目: df
  • 构建状态: Build Status
  • 覆盖率状态: Coverage Status

使用方法

创建数据框

可以使用 CSV 文件或记录列表来创建数据框。

从CSV文件创建

final df = await DataFrame.fromCsv('dataset/stocks.csv');

从CSV文件读取时,类型会根据数据自动推断。CSV文件的第一行必须包含列名。可选参数包括:

  • dateFormat: 日期字符串格式。例如:'MMM dd yyyy'
  • timestampCol: 将某一列作为时间戳列。例如:'timestamp'
  • timestampFormat: 时间戳格式。例如:TimestampFormat.microseconds
  • verbose: 是否打印一些信息

从记录列表创建

final rows = [
   {'col1': 21, 'col2': 'foo', 'col3': DateTime.now()},
   {'col1': 22, 'col2': 'bar', 'col3': DateTime.now()},
];
final df = DataFrame.fromRows(rows);

选择数据

可以使用多种方式选择数据框中的数据。

选择子集

// 选择前100行
final List<Map<String, dynamic>> rows = df.subset(0, 100);

// 选择某一列的数据
final List<double> values = df.colRecords<double>('col2');

// 选择所有记录
final List<List<dynamic>> records = df.records;

修改数据

可以添加或删除数据框中的数据。

添加数据

// 添加一行数据
df.addRow({'col1': 1, 'col2': 2.0});

// 添加一条记录
df.addRecord([1, 2.0]);

删除数据

// 删除第一行
df.removeFirstRow();

// 删除最后一行
df.removeLastRow();

// 删除第三行
df.removeRowAt(2);

// 限制数据框到前100行,从第30行开始
df.limit(100, startIndex: 30);

复制数据框

// 获取一个基于现有数据框的新数据框
final DataFrame df2 = df.copy_();

// 获取一个基于现有数据框的新数据框,限制数据量
final DataFrame df2 = df.limit_(100);

统计信息

可以获取数据框中的统计信息。

统计空值和零值

final int n = df.countNulls_('col1');
final int n = df.countZeros_('col1');

统计列信息

final int mean = df.mean('col1');
final int sum = df.sum('col1');
final int max = df.max('col1');
final int min = df.min('col1');

数据框信息

可以查看数据框的基本信息。

final int numRecords = df.length;
final List<DataFrameColumn> cols = df.columns;
final List<String> colNames = df.columnsNames;

// 打印基本信息和样本数据
df.head();

// 更详细的信息
df.show();

常规约定

所有数据框操作都是就地执行的。返回对象的方法以下划线结尾。例如:

// 就地操作
df.limit(30);

// 获取一个新的有限数据框
final DataFrame df2 = df.limit_(30);

词汇约定

  • : 键值对映射
  • 记录: 单个单元格值
  • 索引: 行位置
  • 指标: 列位置

示例代码

以下是一个完整的示例代码,展示了如何使用 dartaframe 插件进行数据处理。

import 'package:dartaframe/dartaframe.dart';

Future<void> main() async {
  // 从CSV文件加载数据
  final df = await DataFrame.fromCsv(
    'dataset/stocks.csv',
    dateFormat: 'MMM dd yyyy',
    verbose: true,
  );

  // 打印数据框信息
  df.show();

  // 打印列名
  print(df.columns);
}

更多关于Flutter数据处理与分析插件dartaframe的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据处理与分析插件dartaframe的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用dart:dataframe插件进行数据处理与分析的示例代码。需要注意的是,目前Flutter并没有官方的dart:dataframe库,但有一个类似功能的第三方库dart-dataframe,我们可以基于这个库来演示。

首先,确保你已经在pubspec.yaml文件中添加了dart-dataframe依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_dataframe: ^0.4.0  # 请检查最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们编写一个示例Flutter应用,展示如何使用dart-dataframe进行数据处理与分析。

import 'package:flutter/material.dart';
import 'package:dart_dataframe/dart_dataframe.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('DataFrame 示例'),
        ),
        body: DataFrameExample(),
      ),
    );
  }
}

class DataFrameExample extends StatefulWidget {
  @override
  _DataFrameExampleState createState() => _DataFrameExampleState();
}

class _DataFrameExampleState extends State<DataFrameExample> {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text('创建 DataFrame 示例', style: TextStyle(fontSize: 20)),
          SizedBox(height: 16),
          Expanded(
            child: SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  _buildDataFrame(),
                  SizedBox(height: 16),
                  _buildAnalysis(),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildDataFrame() {
    // 创建示例数据
    List<List<dynamic>> data = [
      ['Name', 'Age', 'Height', 'Weight'],
      ['Alice', 30, 5.5, 130],
      ['Bob', 25, 6.0, 180],
      ['Charlie', 35, 5.9, 170],
    ];

    // 创建 DataFrame
    var df = DataFrame.fromList(data);

    // 打印 DataFrame
    print('DataFrame:\n${df.toString()}');

    return Text('DataFrame 已创建,查看控制台输出。', style: TextStyle(fontSize: 16));
  }

  Widget _buildAnalysis() {
    // 创建示例数据
    List<List<dynamic>> data = [
      ['Name', 'Age', 'Height', 'Weight'],
      ['Alice', 30, 5.5, 130],
      ['Bob', 25, 6.0, 180],
      ['Charlie', 35, 5.9, 170],
    ];

    // 创建 DataFrame
    var df = DataFrame.fromList(data);

    // 示例分析:计算平均年龄
    var averageAge = df['Age'].mean();

    // 示例分析:筛选体重超过150的人
    var heavyPeople = df.filterRows((row) => row['Weight'] > 150);

    // 打印分析结果
    print('平均年龄: ${averageAge}');
    print('体重超过150的人:\n${heavyPeople.toString()}');

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('平均年龄: $averageAge', style: TextStyle(fontSize: 16)),
        SizedBox(height: 8),
        Text('体重超过150的人:', style: TextStyle(fontSize: 16)),
        SizedBox(height: 4),
        Text(heavyPeople.toString().replaceAll('\n', '\n\t'), style: TextStyle(fontSize: 14)),
      ],
    );
  }
}

这个示例代码做了以下几件事:

  1. pubspec.yaml中添加了dart_dataframe依赖。
  2. 创建了一个Flutter应用,其中包含一个用于展示DataFrame创建和分析结果的页面。
  3. _buildDataFrame方法中,创建了一个包含人员信息的DataFrame,并将其打印到控制台。
  4. _buildAnalysis方法中,进行了两个分析操作:计算平均年龄和筛选体重超过150的人,并将结果打印到控制台和显示在UI上。

请注意,由于dart_dataframe库的具体实现和API可能会随着时间发生变化,因此建议查阅最新的文档和示例代码以获取最准确的信息。

回到顶部