CSV/TSV¶
Zawartość:
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.