Maak een Ruby-script om CSV-gegevens te analyseren en inzichten te genereren
description
Door deze prompt te gebruiken, kun je het proces van gegevensanalyse in Ruby stroomlijnen, waardoor je waardevolle inzichten uit je CSV-bestanden kunt halen en tegelijkertijd robuuste foutafhandeling en duidelijke output garandeert.
prompt
try_prompt
Help me een Ruby-script schrijven dat een CSV-bestand leest met de volgende gegevens: {{csv_bestandspad}}. Ik wil dat het script de volgende analyses uitvoert: {{analyse_ta ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Ruby-script dat je kunt gebruiken om het CSV-bestand te lezen, de totale verkoop per maand te berekenen en een samenvatting te genereren. Het script bevat ook eenvoudige foutafhandeling en geeft duidelijke output.
```ruby
require 'csv'
require 'date'
# Pad naar het CSV-bestand
bestandspad = '/data/verkoopgegevens.csv'
# Hash om de verkoop per maand op te slaan
verkoop_per_maand = Hash.new(0)
begin
# Controleer of het bestand bestaat
unless File.exist?(bestandspad)
puts "Fout: Het bestand #{bestandspad} is niet gevonden."
exit
end
# Lees het CSV-bestand
CSV.foreach(bestandspad, headers: true) do |row|
# Veronderstel dat er kolommen zijn zoals 'datum' en 'verkoop'
datum_str = row['datum']
verkoop_str = row['verkoop']
# Parse de datum
datum = Date.parse(datum_str)
# Extract jaar en maand
maand = Date.new(datum.year, datum.month)
# Parse de verkoopwaarde
verkoop = verkoop_str.to_f
# Voeg de verkoop toe aan de juiste maand
verkoop_per_maand[maand] += verkoop
end
# Controleer of er data is
if verkoop_per_maand.empty?
puts "Geen gegevens gevonden in het bestand."
exit
end
# Bereken totalen en vind de maand met hoogste verkoop
totaal_verkoop = verkoop_per_maand.values.sum
top_maand, top_verkoop = verkoop_per_maand.max_by { |maand, verkoop| verkoop }
# Output de resultaten
puts "Samenvatting verkoopgegevens:"
puts "------------------------------"
verkoop_per_maand.sort.each do |maand, verkoop|
puts "Maand: #{maand.strftime('%B %Y')} - Totale verkoop: €#{'%.2f' % verkoop}"
end
puts "------------------------------"
puts "Totaalverkoop over alle maanden: €#{'%.2f' % totaal_verkoop}"
puts "Meest succesvolle maand: #{top_maand.strftime('%B %Y')} met €#{'%.2f' % top_verkoop}"
rescue CSV::MalformedCSVError => e
puts "Fout bij het lezen van het CSV-bestand: #{e.message}"
rescue ArgumentError => e
puts "Fout bij het verwerken van data: #{e.message}"
rescue => e
puts "Er is een onverwachte fout opgetreden: #{e.message}"
end
```
**Gebruik:**
- Zorg dat het bestand `/data/verkoopgegevens.csv` bestaat en de juiste kolomnamen heeft, bijvoorbeeld 'datum' en 'verkoop'.
- Pas indien nodig de kolomnamen aan in het script.
- Voer het script uit in een Ruby-omgeving.
Dit script leest de gegevens, berekent de totale verkoop per maand, geeft een overzicht per maand, en toont de maand met de hoogste verkoop. Fouten worden vriendelijk afgehandeld en gemeld.
provider: deepseek
model: deepseek-chat
Zeker, ik help je graag met een Ruby-script voor deze analyse. Hier is een complete oplossing:
```ruby
require 'csv'
require 'date'
begin
# Controleer of het bestand bestaat
file_path = '/data/verkoopgegevens.csv'
unless File.exist?(file_path)
puts "❌ Fout: Het bestand '#{file_path}' werd niet gevonden."
puts " Controleer of het pad correct is en het bestand bestaat."
exit
end
# Hash om verkoop per maand bij te houden
verkoop_per_maand = Hash.new(0)
totaal_verkoop = 0
aantal_records = 0
puts "📊 Verkoopgegevens analyseren..."
puts "=" * 50
# CSV-bestand lezen
CSV.foreach(file_path, headers: true, converters: [:numeric, :date]) do |row|
aantal_records += 1
# Controleer of vereiste kolommen aanwezig zijn
unless row['Datum'] && row['Bedrag']
puts "⚠️ Waarschuwing: Record #{aantal_records} heeft ontbrekende gegevens en wordt overgeslagen."
next
end
begin
datum = Date.parse(row['Datum'].to_s)
bedrag = row['Bedrag'].to_f
# Maand-sleutel in formaat "YYYY-MM"
maand_sleutel = datum.strftime("%Y-%m")
verkoop_per_maand[maand_sleutel] += bedrag
totaal_verkoop += bedrag
rescue ArgumentError => e
puts "⚠️ Waarschuwing: Ongeldige datum in record #{aantal_records}: #{row['Datum']}"
rescue => e
puts "⚠️ Waarschuwing: Fout bij verwerken record #{aantal_records}: #{e.message}"
end
end
# Controleer of er gegevens zijn verwerkt
if verkoop_per_maand.empty?
puts "❌ Geen geldige verkoopgegevens gevonden in het bestand."
puts " Controleer de inhoud van het CSV-bestand."
exit
end
# Sorteer de maanden chronologisch
gesorteerde_maanden = verkoop_per_maand.sort_by { |maand, _| maand }
# Toon resultaten
puts "\n📈 TOTAALVERKOOP PER MAAND:"
puts "-" * 30
gesorteerde_maanden.each do |maand, totaal|
puts "#{maand}: €#{'%.2f' % totaal}"
end
# Samenvatting met belangrijkste bevindingen
puts "\n🔍 SAMENVATTING EN BELANGRIJKSTE BEVINDINGEN:"
puts "=" * 50
hoogste_maand = gesorteerde_maanden.max_by { |_, totaal| totaal }
laagste_maand = gesorteerde_maanden.min_by { |_, totaal| totaal }
gemiddelde_maand = totaal_verkoop / gesorteerde_maanden.size
puts "• Totaal aantal verwerkte records: #{aantal_records}"
puts "• Aantal maanden geanalyseerd: #{gesorteerde_maanden.size}"
puts "• Totale omzet: €#{'%.2f' % totaal_verkoop}"
puts "• Hoogste maandomzet: #{hoogste_maand[0]} - €#{'%.2f' % hoogste_maand[1]}"
puts "• Laagste maandomzet: #{laagste_maand[0]} - €#{'%.2f' % laagste_maand[1]}"
puts "• Gemiddelde maandomzet: €#{'%.2f' % gemiddelde_maand}"
# Trendanalyse
if gesorteerde_maanden.size > 1
eerste_maand = gesorteerde_maanden.first[1]
laatste_maand = gesorteerde_maanden.last[1]
trend = ((laatste_maand - eerste_maand) / eerste_maand * 100).round(2)
puts "• Trend eerste vs laatste maand: #{trend}%"
if trend > 0
puts "• 📈 Positieve groeitrend waargenomen"
elsif trend < 0
puts "• 📉 Negatieve trend waargenomen"
else
puts "• ➡️ Stabiele verkoop"
end
end
puts "\n✅ Analyse voltooid!"
rescue CSV::MalformedCSVError => e
puts "❌ Fout: Het CSV-bestand is ongeldig of beschadigd."
puts " Details: #{e.message}"
rescue => e
puts "❌ Onverwachte fout: #{e.message}"
puts " Neem contact op met de beheerder."
end
```
**Belangrijke aannames over je CSV-bestand:**
- Het bevat kolommen `Datum` en `Bedrag`
- Datumformaat is herkenbaar (bijv. "2024-01-15", "15/01/2024")
- Bedragen zijn numerieke waarden
**Kenmerken van dit script:**
- ✅ **Foutafhandeling**: Controleert bestandsexistentie, CSV-validiteit en ontbrekende gegevens
- ✅ **Gebruikersvriendelijk**: Duidelijke berichten met emoji's voor betere leesbaarheid
- ✅ **Betekenisvolle output**: Toont niet alleen cijfers maar ook trends en inzichten
- ✅ **Flexibel**: Werkt met verschillende datumformaten
- ✅ **Robuust**: Slaat corrupte records over en gaat verder met analyse
**Voorbeeld van verwachte output:**
```
📊 Verkoopgegevens analyseren...
==================================================
📈 TOTAALVERKOOP PER MAAND:
------------------------------
2024-01: €12500.00
2024-02: €14200.00
2024-03: €11800.00
🔍 SAMENVATTING EN BELANGRIJKSTE BEVINDINGEN:
==================================================
• Totaal aantal verwerkte records: 285
• Aantal maanden geanalyseerd: 3
• Totale omzet: €38500.00
• Hoogste maandomzet: 2024-02 - €14200.00
• Laagste maandomzet: 2024-03 - €11800.00
• Gemiddelde maandomzet: €12833.33
• Trend eerste vs laatste maand: -5.6%
• 📉 Negatieve trend waargenomen
✅ Analyse voltooid!
```
Het script is klaar voor gebruik! Pas eventueel het bestandspad aan als nodig.

