본문 바로가기
Dart/Dart 100제

Dart 100제 91 ~ 95 (데이터 처리)

by Maccrey Coding 2024. 8. 26.
반응형

91. CSV 파일 읽기: CSV 파일을 읽어 각 행을 리스트로 변환하세요.

문제
CSV 파일에서 데이터를 읽어와 각 행을 리스트로 변환하는 프로그램을 작성하세요.

풀이
Dart의 dart:io와 dart:convert 패키지를 사용하여 CSV 파일을 읽고, 데이터를 처리할 수 있습니다.

import 'dart:io';
import 'dart:convert';

Future<List<List<String>>> readCsv(String filePath) async {
  final file = File(filePath);
  final lines = await file.readAsLines();

  return lines.map((line) => line.split(',')).toList();
}

void main() async {
  final csvData = await readCsv('data.csv');
  print(csvData);
}

설명

  • File 클래스를 사용해 CSV 파일의 내용을 읽습니다.
  • readAsLines 메서드는 파일을 줄 단위로 읽어 리스트로 반환합니다.
  • 각 줄을 split(',')을 통해 콤마로 분리하여 리스트로 변환합니다.

92. CSV 파일 쓰기: 리스트를 CSV 형식으로 변환하여 파일에 저장하세요.

문제
리스트 데이터를 CSV 형식으로 변환하여 파일에 저장하는 프로그램을 작성하세요.

풀이
Dart의 dart:io 패키지를 사용하여 데이터를 CSV 파일로 저장할 수 있습니다.

import 'dart:io';

Future<void> writeCsv(String filePath, List<List<String>> data) async {
  final file = File(filePath);
  final csvData = data.map((row) => row.join(',')).join('\n');

  await file.writeAsString(csvData);
}

void main() async {
  final data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'San Francisco'],
    ['Charlie', '35', 'Los Angeles']
  ];

  await writeCsv('output.csv', data);
  print("CSV 파일 저장 완료");
}

설명

  • 데이터를 CSV 형식으로 변환하기 위해 각 리스트의 요소를 join(',')을 통해 결합합니다.
  • 줄바꿈(\n)을 사용하여 각 행을 구분합니다.
  • 변환된 데이터를 파일에 저장합니다.

93. 데이터 필터링: 데이터 리스트에서 특정 조건을 만족하는 항목만 필터링하여 출력하세요.

문제
주어진 리스트에서 특정 조건을 만족하는 데이터만 필터링하여 출력하는 프로그램을 작성하세요.

풀이
Dart의 where 메서드를 사용하여 리스트에서 조건을 만족하는 항목만 필터링할 수 있습니다.

void main() {
  final data = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
  ];

  final filteredData = data.where((person) => person['age']! > 30).toList();
  print(filteredData);
}

설명

  • where 메서드를 사용해 각 항목을 조건에 따라 필터링합니다.
  • age가 30보다 큰 항목들만 필터링하여 새로운 리스트로 반환합니다.

94. 데이터 정렬: 데이터를 정렬하여 출력하세요.

문제
리스트 데이터를 특정 필드를 기준으로 정렬하여 출력하는 프로그램을 작성하세요.

풀이
Dart의 sort 메서드를 사용하여 데이터를 특정 기준에 따라 정렬할 수 있습니다.

void main() {
  final data = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
  ];

  data.sort((a, b) => a['age']!.compareTo(b['age']!));
  print(data);
}

설명

  • sort 메서드는 리스트를 제자리에서 정렬합니다.
  • 여기서는 age 필드를 기준으로 데이터를 오름차순으로 정렬합니다.

95. 데이터 통계 계산하기: 데이터의 평균, 중앙값, 표준편차를 계산하여 출력하세요.

문제
주어진 숫자 리스트에서 평균, 중앙값, 표준편차를 계산하여 출력하는 프로그램을 작성하세요.

풀이
Dart에서 기본적인 통계 계산은 직접 구현할 수 있습니다.

import 'dart:math';

double calculateMean(List<int> data) {
  final sum = data.reduce((a, b) => a + b);
  return sum / data.length;
}

double calculateMedian(List<int> data) {
  data.sort();
  final mid = data.length ~/ 2;
  return (data.length % 2 == 0)
      ? (data[mid - 1] + data[mid]) / 2
      : data[mid].toDouble();
}

double calculateStdDev(List<int> data) {
  final mean = calculateMean(data);
  final sumOfSquaredDiffs =
      data.map((value) => pow(value - mean, 2)).reduce((a, b) => a + b);
  return sqrt(sumOfSquaredDiffs / data.length);
}

void main() {
  final data = [10, 20, 30, 40, 50];

  final mean = calculateMean(data);
  final median = calculateMedian(data);
  final stdDev = calculateStdDev(data);

  print("평균: $mean");
  print("중앙값: $median");
  print("표준편차: $stdDev");
}

설명

  • calculateMean: 리스트의 평균을 계산합니다.
  • calculateMedian: 리스트의 중앙값을 계산합니다. 리스트를 정렬한 후, 홀수 길이 리스트의 경우 중앙값을 반환하고, 짝수 길이 리스트의 경우 중간 두 값의 평균을 반환합니다.
  • calculateStdDev: 평균과의 차이 제곱의 평균으로 표준편차를 계산합니다.

공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형