Compare várias condições de teste no mesmo eixo de tempo
Valide três arquivos CSV sintéticos de demonstração e depois sobreponha em um único gráfico as curvas que compartilham as mesmas amostras de tempo e unidades de aceleração.
Verifique unidades, valores ausentes, números finitos e timestamps duplicados ou invertidos em dados sintéticos de demonstração e depois salve os resultados da verificação e um gráfico.
A tradução foi feita com IA. Confira o código, as unidades e os valores junto com o original. A revisão por falantes nativos de cada idioma ainda não foi concluída. English
Para quem éEngenheiros e iniciantes lendo pela primeira vez um CSV de teste de veículo com Python
Primeiro verifique file structure, numbers, units e time order dos synthetic demonstration data. Conseguir ler os values não significa que as units estão corretas nem que os times estão certos. Este exemplo verifica se s e km/h estão declarados em cada input row e se time aumenta na original row order.
| Column | Valores incluídos e significado |
|---|---|
| dataset_note | Synthetic demonstration data |
| time | Elapsed time de 0.0 a 1.0 |
| time_unit | s |
| speed | Speed values de 0 a 22 |
| speed_unit | km/h |
Não anexe unit strings às numeric cells. Registre as units em uma column separada. time não pode ser negative e são necessários pelo menos dois samples. Este code não define um physically normal range para speed.
python --version
python -m pip install -r requirements.txt
python example.pyA installation exige internet connection. BASE no code define os input e output paths em relação a example.py, e não à current terminal folder.
Ao ler cada row do CSV, ele verifica missing values e units. math.isfinite rejeita NaN e infinity. Se o current time for menor ou igual ao previous time, ele para, portanto não esconde problemas por meio de sorting nem exclui arbitrariamente duplicate samples. outputs é criado somente depois que o input check termina.
"""Check time order and declared units in explanatory synthetic test data.
This demonstrates file checks only. It makes no vehicle safety assessment.
"""
import csv
import json
import math
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
BASE = Path(__file__).resolve().parent
HEADERS = ["dataset_note", "time", "time_unit", "speed", "speed_unit"]
NOTE = "설명용 합성 데이터"
def read_samples():
samples = []
with (BASE / "synthetic_test.csv").open(encoding="utf-8-sig", newline="") as file:
reader = csv.DictReader(file)
if reader.fieldnames != HEADERS:
raise ValueError(f"Expected headers: {HEADERS}")
for line, row in enumerate(reader, start=2):
if None in row or any(value is None or not value.strip() for value in row.values()):
raise ValueError(f"Row {line}: missing or extra field.")
if row["dataset_note"] != NOTE:
raise ValueError(f"Row {line}: explanatory synthetic-data label is required.")
if row["time_unit"] != "s" or row["speed_unit"] != "km/h":
raise ValueError(f"Row {line}: expected units s and km/h; no automatic conversion.")
time, speed = float(row["time"]), float(row["speed"])
if not math.isfinite(time) or not math.isfinite(speed):
raise ValueError(f"Row {line}: NaN and infinite values are not supported.")
if time < 0:
raise ValueError(f"Row {line}: elapsed time must be nonnegative.")
if samples and time <= samples[-1][0]:
raise ValueError(f"Row {line}: duplicate or decreasing time; check the source.")
samples.append((time, speed))
if len(samples) < 2:
raise ValueError("At least two samples are required.")
return samples
def main():
destination = BASE / "outputs"
if destination.exists():
raise ValueError("outputs already exists; rename it before running again.")
samples = read_samples()
times, speeds = zip(*samples)
intervals = [right - left for left, right in zip(times, times[1:])]
report = {
"dataset_note": NOTE,
"scope": "File structure and numeric checks only; no vehicle safety assessment.",
"sample_count": len(samples), "time_unit": "s", "speed_unit": "km/h",
"start_time": times[0], "end_time": times[-1],
"min_interval_s": min(intervals), "max_interval_s": max(intervals),
"min_speed_kmh": min(speeds), "max_speed_kmh": max(speeds),
"time_strictly_increasing": True,
}
figure, axis = plt.subplots(figsize=(8, 4.6), layout="constrained")
axis.plot(times, speeds, "o-", color="#2B6578", linewidth=2)
axis.set(title="Speed trace | Explanatory synthetic data", xlabel="Elapsed time (s)", ylabel="Speed (km/h)")
axis.spines[["top", "right"]].set_visible(False)
axis.grid(alpha=0.2)
destination.mkdir(exist_ok=False)
with (destination / "data_check.json").open("x", encoding="utf-8") as file:
json.dump(report, file, ensure_ascii=False, indent=2)
figure.savefig(destination / "synthetic_speed.png", dpi=160)
plt.close(figure)
print(f"Explanatory synthetic data: {len(samples)} samples, {times[0]:g}-{times[-1]:g} s.")
print(f"Sample interval: {min(intervals):g}-{max(intervals):g} s; units: s, km/h.")
print("Created outputs/data_check.json and outputs/synthetic_speed.png.")
if __name__ == "__main__":
try:
main()
except (OSError, ValueError, csv.Error) as error:
raise SystemExit(f"Stopped: {error}") from error
outputs/data_check.json registra units, number of samples, time range e os minimum e maximum sampling interval. outputs/synthetic_speed.png é um chart dos mesmos synthetic demonstration data.
| Item | Resultados dos dados sintéticos de demonstração incluídos |
|---|---|
| Samples | 6 |
| Time range | 0.0~1.0 s |
| Sampling interval | About 0.2 s |
| Speed minimum / maximum | 0 / 22 km/h |
| Time increasing | true |

Por causa de floating-point representation, o sampling interval no JSON pode aparecer como 0.19999999999999996. Isso não é um número que reivindica precision adicional dos input values ou da measurement resolution.
| Message | O que verificar no original |
|---|---|
| expected units s and km/h | Verifique se os export settings correspondem às units em cada row. O code não converte automaticamente. |
| duplicate or decreasing time | Verifique se o time order mudou durante um restart, duplicate samples ou file merging. |
| NaN and infinite values | Verifique o original quanto a missing samples ou calculation errors. |
| synthetic-data label is required | Mantenha a label que marca os dados como synthetic demonstration data somente para este tutorial. |
| missing or extra field | Verifique o número de commas, blank cells e column names. |
Windows 11 (10.0.26200), CPython 3.12.14 (64-bit). openpyxl 3.1.5, Matplotlib 3.10.8. As libraries usadas por cada exemplo estão fixadas em requirements.txt.
Inclui código, dados de entrada e instruções de execução. Extraia o ZIP e leia primeiro o README.txt.
Baixar ZIP de exemploO código de exemplo, os nomes de arquivos e as chaves de entrada são mantidos como no original. Consulte também os comandos e os procedimentos de conferência do texto traduzido.
Material de prática original · Guarde os arquivos originais separadamente antes de executar.
As explicações e os exemplos são de elaboração própria. Os comportamentos e conceitos relacionados podem ser consultados nas fontes oficiais abaixo.