Scatter Plot Smoothing

y <- cars$dist
x <- 1:length(y)
plot(x, y, pch = 20)
lines(lowess(y~x, f = 0.9), col="green", lwd=2)
lines(lowess(y~x, f = 0.5), col="blue", lwd=2)
lines(lowess(y~x, f = 0.1), col="red", lwd=2)

Details: https://youtu.be/zPafVva9BwE

Fitting Linear Models

y <- cars$dist
x <- 1:length(y)
plot(x, y, pch = 20)
fit <- lm(y~x)
abline(fit, col="blue", lwd=2)
fit_last_ten <- lm(y[40:50]~x[40:50])
abline(fit_last_ten, col="red", lwd=2)

Cyberduck und SFTP

Benutzer „abc“ für Gruppenverzeichnis „def“ anlegen und Kennwort setzen.

sudo groupadd def
sudo useradd abc -d /home/sftp/def -g def -s /bin/false
sudo passwd abc

Gruppenverzeichnis anlegen und passende Rechte setzen. Alle Elemente von ChrootDirectory müssen „root“ gehören und dürfen auch nur von „root“ beschreibbar sein. Im ChrootDirectory liegt das Arbeitsverzeichnis für die Benutzer.

mkdir -p /home/sftp/def
sudo namei -om /home/sftp/def
f: /home/sftp/def
 dr-xr-xr-x root  root  /
 drwxr-xr-x root  root  sftp
 drwxrwxr-x abc   def   def

Datei „/etc/ssh/sshd_config“ editieren und SSHD mit „sudo systemctl restart sshd“ neustarten.

...
Subsystem  sftp  /usr/libexec/openssh/sftp-server
Match Group def
   ChrootDirectory /home/sftp
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand internal-sftp

CSV nach XLSX mit Python

Das Modul XlsxWriter mit pip install XlsxWriter installieren. Weitere Infos zum Lesen und Schreiben von CSV-Dateien hier.

import os
import glob
import csv
from xlsxwriter.workbook import Workbook
 
 
for csvfile in glob.glob(os.path.join('.', '*.csv')):
          print ("csvfile:", csvfile)
          workbook = Workbook(csvfile + '.xlsx')
          worksheet = workbook.add_worksheet()
          with open(csvfile, 'rt', encoding="ascii") as f:
                    reader = csv.reader(f, \
                    delimiter=';', quotechar='"')
                    for r, row in enumerate(reader):
                              for c, col in enumerate(row):
                                        worksheet.write(
                                        r, c, col)
          workbook.close()