🔎 유용한 정보
1. 강의 개요
이번 강의에서는 CSV 데이터를 분석하고, 그 결과를 차트로 시각화하는 애플리케이션을 제작합니다.
CSV 파일은 다양한 데이터 소스에서 널리 사용되는 형식이며,
이를 활용해 통계를 계산하고 데이터를 시각적으로 표시하는 방법을 배워봅니다.
특히 LINQ와 Chart 컨트롤을 활용해 데이터를 다루는 실습을 진행합니다.
2. 학습 목표
- CSV 파일 읽기 및 데이터 로드
- LINQ를 사용해 데이터 분석(최대값, 평균 등)
- Chart 컨트롤을 사용해 분석 결과를 시각화
- 파일 열기 대화 상자를 통해 CSV 파일 선택
3. 기능 요구사항
필수 기능
1️⃣ CSV 파일 로드:
- CSV 파일에서 데이터를 읽어와 DataGridView에 표시
2️⃣ 데이터 분석:
- 읽어온 데이터를 기반으로 최대값, 최소값, 평균 등을 계산
3️⃣ 데이터 시각화:
- 분석 결과를 Chart 컨트롤을 통해 그래프로 표시
4️⃣ UI 구성 및 동작:
- 파일 로드, 데이터 분석, 그래프 표시 기능 구현
4. 실습: CSV 데이터 분석 애플리케이션 제작
1️⃣ 폼 구성
- 폼(Form) 이름: Form1
- 컨트롤 배치
컨트롤 타입 이름 위치 크기
Button | btnLoadCsv | 폼 상단 왼쪽 | (100 x 30) |
DataGridView | dgvData | 폼 중앙 | (500 x 300) |
Button | btnAnalyze | 폼 하단 왼쪽 | (100 x 30) |
Chart | chartResult | 폼 하단 전체 | (500 x 300) |
📌 폼 디자인 예시:
--------------------------------------------------
| [Load CSV 버튼] |
--------------------------------------------------
| [DataGridView - CSV 데이터 표시] |
--------------------------------------------------
| [Analyze 버튼] |
--------------------------------------------------
| [Chart - 분석 결과 시각화] |
--------------------------------------------------
2️⃣ 코드 작성
(1) CSV 파일 로드
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApp_CSVAnalysis
{
public partial class Form1 : Form
{
private List<DataRecord> _data; // CSV 데이터를 저장할 리스트
public Form1()
{
InitializeComponent();
}
// CSV 파일 로드
private void btnLoadCsv_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "CSV 파일 (*.csv)|*.csv";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog.FileName;
LoadCsvData(filePath);
}
}
}
private void LoadCsvData(string filePath)
{
try
{
var lines = File.ReadAllLines(filePath);
_data = lines
.Skip(1) // 헤더 제외
.Select(line =>
{
var parts = line.Split(',');
return new DataRecord
{
Name = parts[0],
Value = double.Parse(parts[1])
};
})
.ToList();
dgvData.DataSource = _data; // DataGridView에 데이터 바인딩
MessageBox.Show("CSV 파일을 성공적으로 로드했습니다.", "완료", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"CSV 파일 로드 실패: {ex.Message}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
// 데이터 모델 클래스
public class DataRecord
{
public string Name { get; set; }
public double Value { get; set; }
}
}
(2) 데이터 분석 구현
// 데이터 분석
private void btnAnalyze_Click(object sender, EventArgs e)
{
if (_data == null || !_data.Any())
{
MessageBox.Show("분석할 데이터를 먼저 로드하세요.", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// LINQ를 사용한 데이터 분석
var maxValue = _data.Max(record => record.Value);
var minValue = _data.Min(record => record.Value);
var averageValue = _data.Average(record => record.Value);
// Chart에 데이터 표시
DisplayChart(maxValue, minValue, averageValue);
}
// 차트 표시
private void DisplayChart(double maxValue, double minValue, double averageValue)
{
chartResult.Series.Clear();
var series = chartResult.Series.Add("Analysis");
series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Column;
series.Points.AddXY("Max", maxValue);
series.Points.AddXY("Min", minValue);
series.Points.AddXY("Average", averageValue);
chartResult.Titles.Clear();
chartResult.Titles.Add("Data Analysis Results");
}
(3) Designer 코드
private void InitializeComponent()
{
this.btnLoadCsv = new Button();
this.dgvData = new DataGridView();
this.btnAnalyze = new Button();
this.chartResult = new System.Windows.Forms.DataVisualization.Charting.Chart();
// Load CSV Button 설정
this.btnLoadCsv.Location = new System.Drawing.Point(10, 10);
this.btnLoadCsv.Size = new System.Drawing.Size(100, 30);
this.btnLoadCsv.Text = "Load CSV";
this.btnLoadCsv.Click += new EventHandler(this.btnLoadCsv_Click);
// DataGridView 설정
this.dgvData.Location = new System.Drawing.Point(10, 50);
this.dgvData.Size = new System.Drawing.Size(500, 300);
// Analyze Button 설정
this.btnAnalyze.Location = new System.Drawing.Point(10, 360);
this.btnAnalyze.Size = new System.Drawing.Size(100, 30);
this.btnAnalyze.Text = "Analyze";
this.btnAnalyze.Click += new EventHandler(this.btnAnalyze_Click);
// Chart 설정
this.chartResult.Location = new System.Drawing.Point(10, 400);
this.chartResult.Size = new System.Drawing.Size(500, 300);
// Form 설정
this.ClientSize = new System.Drawing.Size(540, 720);
this.Controls.Add(this.btnLoadCsv);
this.Controls.Add(this.dgvData);
this.Controls.Add(this.btnAnalyze);
this.Controls.Add(this.chartResult);
this.Text = "CSV 데이터 분석";
}
3️⃣ 실행 결과
1️⃣ CSV 파일 로드
- "Load CSV" 버튼 클릭 → 파일 열기 대화 상자를 통해 CSV 파일 선택 → DataGridView에 데이터 표시
2️⃣ 데이터 분석
- "Analyze" 버튼 클릭 → 최대값, 최소값, 평균 계산 → Chart에 분석 결과 표시
3️⃣ 시각적 분석 결과
- 차트에 분석 결과(최대값, 최소값, 평균)가 막대그래프로 표시
5. 주요 개념 요약
- LINQ: 데이터 집계 및 분석(최대값, 최소값, 평균) 처리
- Chart 컨트롤: 데이터를 그래프로 시각화
- CSV 파일 처리: 텍스트 데이터를 리스트로 변환
📌 #CSharp #WindowsForms #CSV #데이터분석 #LINQ #Chart
'📁 [4] 개발자 정보 & 코드 노트 > C#' 카테고리의 다른 글
C# Windows Forms 강의 79편: 이미지 처리 애플리케이션 제작 - OpenCvSharp 활용 (0) | 2025.04.22 |
---|---|
C# Windows Forms 강의 78편: PDF 파일 생성 및 읽기 - iTextSharp 활용 (0) | 2025.04.21 |
C# Windows Forms 강의 75편: 실시간 대시보드 - 센서 데이터를 활용한 시각화 (0) | 2025.04.19 |
C# Windows Forms 강의 74편: MQTT 프로토콜을 활용한 IoT 애플리케이션 제작 (0) | 2025.04.18 |
C# Windows Forms 강의 73편: SignalR 클라이언트를 활용한 실시간 채팅 애플리케이션 제작 (0) | 2025.04.17 |
🔎 유용한 정보