Vinnaren i pepparkakshustävlingen!
2023-07-29, 01:44
  #85
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Retropropagation
Jag är inte så säker på det...

Min tanke just nu, är att man upp till filer på 100 GByte skall använda data.table i R.

Om man har tillräckligt med RAM... Jag har inte det, så jag gjorde ett Proof of Concept i R med endast 5 rader (observationer) indata. Men med väldigt realistisk indata...

Indata, "Allsvenskan.csv":
Kod:
No,Lag, S, V, O, F, M, B, D, P
14,IFK, 17, 9, 3, 5, 25, 25, 0, 30
2,Öis, 17, 11, 2, 4, 42, 19, +23, 35
1,Gais, 16, 12, 3, 1, 39, 11, 28, 39
16,Häcken, 16, 7, 4, 5, 24, 20, +4, 25
3,Malmö, 16, 11, 2, 3, 35, 14, +21, 35

Utdata, "Allsvenskan_sorted_dt.txt":
Kod:
No	Lag	S	V	O	F	M	B	D	P
1	Gais	16	12	3	1	39	11	28	39
3	Malmö	16	11	2	3	35	14	21	35
2	Öis	17	11	2	4	42	19	23	35
14	IFK	17	9	3	5	25	25	0	30
16	Häcken	16	7	4	5	24	20	4	25

Filen är som synes sorterad först med avseende på P(oäng) och sedan på S(pelade matcher).

R-skriptet:

Kod:
library(data.table)
df fread("./Allsvenskan.csv")
setorder(df, -PS)
fwrite(df"./Allsvenskan_sorted_dt.txt"sep="\t"

Obs! -P (minus P) för sjunkande.

PS
Stora fördelen med R, jämfört med allt annat (förutom möjligen Excel) är att det är grymt enkelt att utföra explorativ dataanalys. Exempel:

Kod:
barplot(height=df$P,  names.arg=df$Lag)

PPS
Eftersom Google och Stack Overflow är i stort sett oanvändbara när man vill ha svar på frågor som: "Vilken teknik skall jag använda för att...?", sökte jag på Hacker News, och fann:

https://news.ycombinator.com/item?id=26451894





PPPS
Vill man själv förbättra prestandan finns källkoden här:



PPPPS
I "vanlig" R kan man göra så här:

Kod:
df read.table("./Allsvenskan.csv"header=Tsep=",")
dfs df[order(-df$Pdf$S),]
write.table(dfs"./Allsvenskan_sorted_df.txt"sep="\t"row.names=Fquote=F

Men då går det ~10 gånger långsammare för "stora" filer. En professor på Karolinska jämför lite:

https://www.youtube.com/watch?v=1R5ljPBkVnE

Men Jesus Kristus! Jag har testat R, och om du inte kör via Hadoop eller liknande, så är loppet kört. Data Tables i R är väl motsvarigheten till Data Frames i Python? Eller missminner jag mig? R har aldrig fungerat över 1M records i en csv. R är bra för sin uppgift, men inte detta.
Citera
2023-07-29, 09:20
  #86
Avstängd
DrunkenZealots avatar
Citat:
Ursprungligen postat av Retropropagation
Jag är inte så säker på det...

Min tanke just nu, är att man upp till filer på 100 GByte skall använda data.table i R.

Om man har tillräckligt med RAM... Jag har inte det, så jag gjorde ett Proof of Concept i R med endast 5 rader (observationer) indata. Men med väldigt realistisk indata...

Indata, "Allsvenskan.csv":
Kod:
No,Lag, S, V, O, F, M, B, D, P
14,IFK, 17, 9, 3, 5, 25, 25, 0, 30
2,Öis, 17, 11, 2, 4, 42, 19, +23, 35
1,Gais, 16, 12, 3, 1, 39, 11, 28, 39
16,Häcken, 16, 7, 4, 5, 24, 20, +4, 25
3,Malmö, 16, 11, 2, 3, 35, 14, +21, 35

Utdata, "Allsvenskan_sorted_dt.txt":
Kod:
No	Lag	S	V	O	F	M	B	D	P
1	Gais	16	12	3	1	39	11	28	39
3	Malmö	16	11	2	3	35	14	21	35
2	Öis	17	11	2	4	42	19	23	35
14	IFK	17	9	3	5	25	25	0	30
16	Häcken	16	7	4	5	24	20	4	25

Filen är som synes sorterad först med avseende på P(oäng) och sedan på S(pelade matcher).

R-skriptet:

Kod:
library(data.table)
df fread("./Allsvenskan.csv")
setorder(df, -PS)
fwrite(df"./Allsvenskan_sorted_dt.txt"sep="\t"

Obs! -P (minus P) för sjunkande.

PS
Stora fördelen med R, jämfört med allt annat (förutom möjligen Excel) är att det är grymt enkelt att utföra explorativ dataanalys. Exempel:

Kod:
barplot(height=df$P,  names.arg=df$Lag)

PPS
Eftersom Google och Stack Overflow är i stort sett oanvändbara när man vill ha svar på frågor som: "Vilken teknik skall jag använda för att...?", sökte jag på Hacker News, och fann:

https://news.ycombinator.com/item?id=26451894





PPPS
Vill man själv förbättra prestandan finns källkoden här:



PPPPS
I "vanlig" R kan man göra så här:

Kod:
df read.table("./Allsvenskan.csv"header=Tsep=",")
dfs df[order(-df$Pdf$S),]
write.table(dfs"./Allsvenskan_sorted_df.txt"sep="\t"row.names=Fquote=F

Men då går det ~10 gånger långsammare för "stora" filer. En professor på Karolinska jämför lite:

https://www.youtube.com/watch?v=1R5ljPBkVnE
När jag talar om tid, så menar jag människotid. I java eller c#, så hade detta varit klart på 5 minuter. Att sedan själva exekveringen hade tagit(förmodligen) längre tid, ja vad spelar det för roll. Det hade ändå varit snabbare från startpunkten.
Citera
2023-07-29, 10:49
  #87
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Vad är en "sund csv" i detta sammanhang? Det enda riktiga kriteriet för en csv-fil är mig veterligen att den är kommaseparerad, eller har jag missat något där? Finns det någon bra källa för vidare läsning om ämnet?
Citat:
Among the causes of a corrupted CSV file are:

ASCII control characters at the end of line that cannot be printed
Separator characters in the text of the CSV files
Line breaks in the fields that have no double quotes enclosing them
Using invalid characters such as -, (), .,:, * and others
Blank lines at the end of the corrupted CSV file that have a separator
Long numbers that have leading zeros
An invalid CSV file format
CSV file not using UTS (8 encoding)
https://windowsreport.com/fix-corrupted-csv-file/

En klassiker är att det finns kommatecken i datan (utan användning av citationstecken), när kommatecken används som separator.

Ett annat vanligt problem när man skyfflar data fram och tillbaka mellan olika system genom CSV är att encoding blir fel så att bokstäver som å,ä och ö blir korrupta.
__________________
Senast redigerad av Enterprise 2023-07-29 kl. 10:51.
Citera
2023-07-29, 10:54
  #88
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av DrunkenZealot
När jag talar om tid, så menar jag människotid. I java eller c#, så hade detta varit klart på 5 minuter. Att sedan själva exekveringen hade tagit(förmodligen) längre tid, ja vad spelar det för roll. Det hade ändå varit snabbare från startpunkten.
Om man tar sig lite tid att lära sig CLI-verktygen så har man igen det många gånger om.
Citera
2023-07-29, 11:02
  #89
Avstängd
DrunkenZealots avatar
Citat:
Ursprungligen postat av Enterprise
Om man tar sig lite tid att lära sig CLI-verktygen så har man igen det många gånger om.
Eller så skiter man i att lära sig allt och använder ett språk till allt.

Har jobbat med gamla system. Det som man slås av, är att människor använder verktyg för att de vill lära sig dem, inte för att de gör så mycket mer nytta. Och att de är försvunna allt som oftast efter 10 år.

Den tiden kunde man använt att lata sig, eller att bli ännu bättre på java eller C#
Men vissa bara måste nosa runt i allt som finns antar jag.
Citera
2023-07-29, 11:16
  #90
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av Enterprise
https://windowsreport.com/fix-corrupted-csv-file/

En klassiker är att det finns kommatecken i datan (utan användning av citationstecken), när kommatecken används som separator.

Ett annat vanligt problem när man skyfflar data fram och tillbaka mellan olika system genom CSV är att encoding blir fel så att bokstäver som å,ä och ö blir korrupta.

Jag förstår. Tack för svaret. Tror inget av det stämde med min data dock.

Angående språk vs. CLI: man bör lära sig båda, och jag har påbörjat den processen. Mina val är Bash och C, eftersom jag kör Linux.
__________________
Senast redigerad av Kip.Kinkel 2023-07-29 kl. 11:19.
Citera
2023-07-29, 15:37
  #91
Avstängd
susanne43s avatar
Citat:
Ursprungligen postat av Retropropagation
Jag är inte så säker på det...

Min tanke just nu, är att man upp till filer på 100 GByte skall använda data.table i R.

Om man har tillräckligt med RAM... Jag har inte det, så jag gjorde ett Proof of Concept i R med endast 5 rader (observationer) indata. Men med väldigt realistisk indata...

Indata, "Allsvenskan.csv":
Kod:
No,Lag, S, V, O, F, M, B, D, P
14,IFK, 17, 9, 3, 5, 25, 25, 0, 30
2,Öis, 17, 11, 2, 4, 42, 19, +23, 35
1,Gais, 16, 12, 3, 1, 39, 11, 28, 39
16,Häcken, 16, 7, 4, 5, 24, 20, +4, 25
3,Malmö, 16, 11, 2, 3, 35, 14, +21, 35

Utdata, "Allsvenskan_sorted_dt.txt":
Kod:
No	Lag	S	V	O	F	M	B	D	P
1	Gais	16	12	3	1	39	11	28	39
3	Malmö	16	11	2	3	35	14	21	35
2	Öis	17	11	2	4	42	19	23	35
14	IFK	17	9	3	5	25	25	0	30
16	Häcken	16	7	4	5	24	20	4	25

Filen är som synes sorterad först med avseende på P(oäng) och sedan på S(pelade matcher).

R-skriptet:

Kod:
library(data.table)
df fread("./Allsvenskan.csv")
setorder(df, -PS)
fwrite(df"./Allsvenskan_sorted_dt.txt"sep="\t"

Obs! -P (minus P) för sjunkande.

PS
Stora fördelen med R, jämfört med allt annat (förutom möjligen Excel) är att det är grymt enkelt att utföra explorativ dataanalys. Exempel:

Kod:
barplot(height=df$P,  names.arg=df$Lag)

PPS
Eftersom Google och Stack Overflow är i stort sett oanvändbara när man vill ha svar på frågor som: "Vilken teknik skall jag använda för att...?", sökte jag på Hacker News, och fann:

https://news.ycombinator.com/item?id=26451894





PPPS
Vill man själv förbättra prestandan finns källkoden här:



PPPPS
I "vanlig" R kan man göra så här:

Kod:
df read.table("./Allsvenskan.csv"header=Tsep=",")
dfs df[order(-df$Pdf$S),]
write.table(dfs"./Allsvenskan_sorted_df.txt"sep="\t"row.names=Fquote=F

Men då går det ~10 gånger långsammare för "stora" filer. En professor på Karolinska jämför lite:

https://www.youtube.com/watch?v=1R5ljPBkVnE

Kod:
 awk -F'\t' 'NR==1{print $0} NR>1{a[NR]=$4;b[NR]=$5} END{asorti(a,indices);for(i=1;i<=NR;i++)if(a[i]>0)print b[indices[i]]}' ./Allsvenskan.csv > ./Allsvenskan_sorted_awk.txt

sort som använts här i tråden tidigare, är väl det mest optimala, 28 bokstäver inkl. space.

Kod:
sort -t $'\t' -k4,4nr -k5,5 ./Allsvenskan.csv > ./Allsvenskan_sorted.txt

Snabba upp processen med parallel som är skrivet i perl:

Kod:
parallel --pipepart -a ./Allsvenskan.csv -t $'\t' -k4,4nr -k5,5 sort -t $'\t' -k4,4nr -k5,5 > ./Allsvenskan_sorted.txt

Svårt att utmana sort i detta fallet och som om det vore nog, du kan ju göra det 250 gånger snabbare med rätt pipes från GNU/Parallel om man inte kan perl tillräckligt bra(som jag så jag fuskar med parallel) och har man flera datorer eller telefoner så är det ju bara att ta hjälp av dessa med -S för att få kraft, det räcker med en rad. R verkar inte optimalt. Men för att få det blixtsnabbt så får man splitta upp filerna, här kan man se det: https://unix.stackexchange.com/a/350068

Det är tre rader istället för 5[R] och där arbetar man med 180GB i csv data.

Jag tror nog sort som framkommit sedan tidigare är överlägset bäst för det som skall göras, det är ju skapat för detta specifikt.

Sort har ju egen egen parallel ser jag nu faktiskt det har jag inte vetat om så jag tar tillbaka det och jag skulle tro att sort inte går att slå på den korta kod och effektivitet metod som kan göras om man får till det där. TS hade nog kunnat snabba upp dom där 80 seknderna rejält om man får till en rätt variant men det är utanför min kunskap dock men går nog få ner dom till 10 sekunder om man har en vanlig i7 eller liknande med 8 cores.
__________________
Senast redigerad av susanne43 2023-07-29 kl. 15:50.
Citera
2023-07-29, 17:02
  #92
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av susanne43
Kod:
 awk -F'\t' 'NR==1{print $0} NR>1{a[NR]=$4;b[NR]=$5} END{asorti(a,indices);for(i=1;i<=NR;i++)if(a[i]>0)print b[indices[i]]}' ./Allsvenskan.csv > ./Allsvenskan_sorted_awk.txt

sort som använts här i tråden tidigare, är väl det mest optimala, 28 bokstäver inkl. space.

Kod:
sort -t $'\t' -k4,4nr -k5,5 ./Allsvenskan.csv > ./Allsvenskan_sorted.txt

Snabba upp processen med parallel som är skrivet i perl:

Kod:
parallel --pipepart -a ./Allsvenskan.csv -t $'\t' -k4,4nr -k5,5 sort -t $'\t' -k4,4nr -k5,5 > ./Allsvenskan_sorted.txt

Svårt att utmana sort i detta fallet och som om det vore nog, du kan ju göra det 250 gånger snabbare med rätt pipes från GNU/Parallel om man inte kan perl tillräckligt bra(som jag så jag fuskar med parallel) och har man flera datorer eller telefoner så är det ju bara att ta hjälp av dessa med -S för att få kraft, det räcker med en rad. R verkar inte optimalt. Men för att få det blixtsnabbt så får man splitta upp filerna, här kan man se det: https://unix.stackexchange.com/a/350068

Det är tre rader istället för 5[R] och där arbetar man med 180GB i csv data.

Jag tror nog sort som framkommit sedan tidigare är överlägset bäst för det som skall göras, det är ju skapat för detta specifikt.

Sort har ju egen egen parallel ser jag nu faktiskt det har jag inte vetat om så jag tar tillbaka det och jag skulle tro att sort inte går att slå på den korta kod och effektivitet metod som kan göras om man får till det där. TS hade nog kunnat snabba upp dom där 80 seknderna rejält om man får till en rätt variant men det är utanför min kunskap dock men går nog få ner dom till 10 sekunder om man har en vanlig i7 eller liknande med 8 cores.

Körde nyss ett bash script med parallel på motsvarande csv som tidigare. Jag använde fyra trådar i skriptet, och körningen tog 20 sekunder istället för 80 sekunder tidigare. 75 % tidsbesparing!
Citera
2023-07-29, 18:05
  #93
Medlem
Kip.Kinkels avatar
Nu prövade jag med en enda kommandorad istället för bashscript (båda med parallell exekvering):

Kod:
parallel --pipepart -a input.csv --block -1 --header : sort -t',' -k3 -r > parallel_sorted.csv

Sorteringen av hela csv tog bara 12 sekunder. Tidsbesparing 85 %...
Citera
2023-07-29, 18:13
  #94
Moderator
vhes avatar
Citat:
Ursprungligen postat av Kip.Kinkel
Vad är en "sund csv" i detta sammanhang? Det enda riktiga kriteriet för en csv-fil är mig veterligen att den är kommaseparerad, eller har jag missat något där? Finns det någon bra källa för vidare läsning om ämnet?

Mja, C:et står väl i grunden för "comma", ja, men det har gått över till att betyda "vilket separatortecken du vill", typ. I ditt fall var det förvisso just ett kommatecken.

Däremot så ingår ju också att strukturen skall vara utan överraskningar i övrigt; t.ex. att det inte förekommer några andra kommatecken som inte är separatorer. Det var därför jag klagade på att du hade ett fritext-fält i första kolumnen. Också att det inte förekommer annat brus. Exemplen du postade innehöll lite omotiverade mellanslag här och var har jag för mig (om det nu inte var ett annat skräptecken, minns inte riktigt). Fler felkällor skulle kunna vara att rader har olika antal kolumner, 8-bitarstecken när verktygen inblandade tror de arbetar med ASCII, multibyte-tecken av "fel" teckenuppsättning, kommatecken där det borde varit decimalpunkt eller tvärt om, andra typer av citationstecken än ASCII 34 för att escape:a text, säkert mer...

CSV är i stort ospecificerat, så vad som är OK och inte är mer eller mindre unikt för varje enskild uppsättning data (även om det finns konventioner).
Citera
2023-07-29, 18:17
  #95
Medlem
Kip.Kinkels avatar
Citat:
Ursprungligen postat av vhe
Mja, C:et står väl i grunden för "comma", ja, men det har gått över till att betyda "vilket separatortecken du vill", typ. I ditt fall var det förvisso just ett kommatecken.

Däremot så ingår ju också att strukturen skall vara utan överraskningar i övrigt; t.ex. att det inte förekommer några andra kommatecken som inte är separatorer. Det var därför jag klagade på att du hade ett fritext-fält i första kolumnen. Också att det inte förekommer annat brus. Exemplen du postade innehöll lite omotiverade mellanslag här och var har jag för mig (om det nu inte var ett annat skräptecken, minns inte riktigt). Fler felkällor skulle kunna vara att rader har olika antal kolumner, 8-bitarstecken när verktygen inblandade tror de arbetar med ASCII, multibyte-tecken av "fel" teckenuppsättning, kommatecken där det borde varit decimalpunkt eller tvärt om, andra typer av citationstecken än ASCII 34 för att escape:a text, säkert mer...

CSV är i stort ospecificerat, så vad som är OK och inte är mer eller mindre unikt för varje enskild uppsättning data (även om det finns konventioner).

Tack för all information! Problemet är inte bara löst nu, utan sorteringen klaras av på bara 12 sekunder! Jag är otroligt nöjd! Tack alla som bidragit, jag har lärt mig mycket!
Citera
2023-07-31, 14:27
  #96
Avstängd
Haha.

ChatGPT tråden.

Fråga Ole vad han tycker om ChatGPT's metoder för hans parallel.

Här har du..


Sluta använda ChatGPT och våldta kommandon.

Du har inte lärt dig mycket, du har kopierat och klistrat in ett uppenbart felaktigt sätt att använda ChatGPT.

Som hela tråden har gjort. Skulle man fråga användaren som spelar AWK mästare om det är gawk, mawk, nawk eller awk som används så kommer personen inte veta svaret, så dåligt är det skrivet.

- En som är jävligt trött på ChatGPT och hela jävla forumet Flashback.org där alla helt plötsligt blivit proffs på Linux och kommandon genom att bli sämst helt enkelt.

AMATÖRER!
__________________
Senast redigerad av jjjojooo 2023-07-31 kl. 14:47.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback