CSV/TSV

Analiza plików tabelarycznych zawierających wartości oddzielone przecinkami i wartości oddzielone tabulatorami

Repozytorium podejmie próbę analizy plików CSV i TSV przesłanych przez użytkownika i przekształcenia ich w dane tabelaryczne przy użyciu parsera Apache CSV, z jedną modyfikacją.

Informacja

W przypadku plików CSV zostaną wypróbowane dwa scenariusze. Najpierw parser postara się traktować średnik ; jako znak separatora. Jeśli ta próba zakończy się niepowodzeniem, wypróbowany zostanie przecinek ,. Dodaliśmy tę funkcjonalność, by wyjść naprzeciw potrzebom tych użytkowników, którzy eksportują swoje pliki CSV z oprogramowania Microsoft Windows. Tam domyślnym separatorem jest, niestety, średnik.

Wymagania dotyczące formatowania

Pierwszy wiersz w dokumencie będzie traktowany jak nagłówek CSV zawierający nazwy zmiennych w każdej kolumnie.

Każdy następny wiersz musi zawierać tę samą liczbę wartości oddzielonych przecinkami („komórek”), co ten nagłówek.

Od wersji Dataverse 4.8 dopuszczono przetwarzanie plików CSV z przecinkami i podziałami linii w komórkach. Ciąg z dowolną liczbą przecinków i podziałów wierszy zawartych w podwójnych cudzysłowach jest rozpoznawany jako pojedyncza komórka. Podwójne cudzysłowy można zakodować jako dwa podwójne cudzysłowy w wierszu ("").

Na przykład następujące linie:

a,b,"c,d
efgh""ijk""l",m,n

są rozpoznawane jako pojedynczy wiersz z 5 wartościami oddzielonymi przecinkami (komórkami):

a
b
c,d\nefgh"ijk"l
m
n

(gdzie \n jest znakiem nowej linii).

Ograniczenia

W porównaniu do innych formatów, z pliku CSV można wyodrębnić stosunkowo niewiele informacji o danych („metadanych na poziomie zmiennej”). Oprócz nazw zmiennych podanych w górnym wierszu przetwarzanie będzie domniemywać, jakiego typu dane zawierają kolumny oddzielone przecinkami. Należy użyć jednego z obsługiwanych formatów plików sformatowanych (Stata, SPSS i R), jeśli trzeba podać bardziej opisowe metadane na poziomie zmiennej (etykiety zmiennych, wartości kategorialne i etykiety, wyraźnie zdefiniowane typy danych itp.).

Rozpoznanawanie typów danych i formatowanie

Aplikacja będzie próbowała rozpoznać w poszczególnych kolumnach wartości: liczbowe, ciągi znaków oraz daty/godziny.

W przypadku dat rozpoznawany jest format rrrr-MM-dd.

W przypadku wartości daty i godziny rozpoznawane są następujące 2 formaty:

rrrr-MM-dd HH:mm:ss

rrrr-MM-dd HH:mm:ss z (taki sam format jak powyżej, z podaną strefą czasową)

W przypadku zmiennych numerycznych rozpoznawane są następujące wartości specjalne:

inf, +inf - jako specjalna wartość „dodatniej nieskończoności” według IEEE 754;

NaN - jako specjalna wartość „brak liczby” według IEEE 754;

Pusta wartość (tj. przecinek, po którym bezpośrednio następuje kolejny przecinek lub koniec linii), lub NA - jako brakująca wartość.

null - jako zero numeryczne.

(w powyższych notacjach dozwolone są dowolne kombinacje małych i wielkich liter).

W ciągach znaków pusta wartość (przecinek, po którym następuje kolejny przecinek lub koniec linii) jest traktowana jako pusty ciąg (NIE jako brakująca wartość).

W wartościach ciągów znaków dozwolone są wszelkie znaki spoza alfabetu łacińskiego, o ile są kodowane w UTF8.

Informacja

Gdy przetwarzanie rozpozna kolumnę CSV lub TSV jako wektor numeryczny lub wartość daty/godziny, informacje te zostaną odzwierciedlone i zapisane w bazie danych jako metadane zmiennych. Aby sprawdzić te metadane, kliknij przycisk Pobierz obok pliku danych tabelarycznych i wybierz Metadane zmiennych. Spowoduje to wyeksportowanie rekordów zmiennych w formacie DDI XML. (Alternatywnie ten fragment metadanych można pobrać za pośrednictwem interfejsu API Dostęp do Danych; na przykład: http://localhost:8080/api/access/datafile/<FILEID>/metadata /ddi).

Najbardziej bezpośrednią implikacją tego jest sposób obliczania sygnatur UNF dla wektorów danych, ponieważ różne zasady normalizacji są stosowane do wartości liczbowych, znakowych oraz daty/godziny. (więcej informacji znajduje się w części Universal Numerical Fingerprint (UNF)). Jeśli jest ważne, aby sumy kontrolne UNF danych zostały dokładnie obliczone, należy sprawdzić, czy kolumny liczbowe i te zawierające daty/godziny w danym pliku zostały rozpoznane jako takie (odpowiednio jako type=numeric i type=character, oraz category=date(time)). Jeśli np. kolumna, która miała być numeryczna, zostanie rozpoznana jako wektor wartości znakowych (ciągów znaków), należy dokładnie sprawdzić, czy formatowanie wartości jest spójne. Trzeba pamiętać, że jedna niepoprawnie sformatowana wartość w kolumnie zamieni ją w wektor ciągów znaków i spowoduje wygenerowanie innego UNF. Należy poprawić wszystkie znalezione błędy formatowania, usunąć plik z zestawu danych i ponownie podjąć próbę analizy.