2022年12月13日 星期二

how to sort a pandas dataframe by two keys?

# 對於pandas資料框df如果須要依據主鍵文字欄位sentiment,

# 次鍵文字欄位text的長度進行紀錄排序,可參考如下寫法。 

def sort_by_two_columns(x): # x 表示某列資料的排序欄位值

    if x.name == 'sentiment': # 若詢問排序欄位為sentiment,回傳欄位值供排序
        return x
    elif x.name == 'text': # 若詢問排序欄位為text,回傳欄位長度值供排序
        return x.str.len()

# 先依據主鍵文字欄位sentiment由小到大,
# 再依據次鍵文字欄位text的長度由小到大,
# 排序結果重新回傳一個新資料框

sort_df = df.sort_values(by=['sentiment''text'], 
key=sort_by_two_columns, ascending=[TrueTrue], inplace=False)

pd.set_option('min_rows'100) # 資料框至少顯示100列

sorted_df = sort_df.drop_duplicates() # 去除重複記錄

2022年12月9日 星期五

how to install Ubuntu as subsystem of Windows with a ssh server?

 傳統一台 Windows 主機若要同時跑 Linux 作業系統,不是要安裝 Cygwin 套件,就是要透過 VirtualBox 等虛擬機軟體安裝 Linux。現在 Windows 的 WSL (Windows Subsystem for Linux) 技術逐漸成熟,可以在 Windows 環境中,啟用 Linux 子系統,方便雙方資料共享,及執行 Linux 程式和指令。以下簡短摘要步驟,說明如何透過 Microsoft Store 微軟商店,安裝 Ubuntu 22.04.1 LTS 作業系統。

1.啟動 Windows 的 Linux 子系統 (WSL) 功能

控制台/程式集/程式和功能: 開啟或關閉 Windows 功能

勾選: Windows 子系統 Linux

2.安裝 Ubuntu 作業系統

Microsoft Store: 找尋安裝 Ubuntu 22.04.1 LTS,建立帳戶myuser

3.啟動 Ubuntu 作業系統終端機

建立桌面捷徑圖示:

目標: C:\Windows\System32\wsl.exe

開始位置: \\wsl$\Ubuntu-22.04\home\myuser

或使用 SearchBox: ubuntu2204

4.安裝 ssh 終端機登入服務,供遠方登入本機之用

4.1.安裝 ssh 服務

              WSL終端機執行如下指令:

> sudo apt remove openssh-server

> sudo apt install openssh-server

> sudo service ssh start

4.2.設定 ssh 服務於 Windows 開機時自動啟動

4.2.1. 設定權限,允許不輸入密碼即可啟動服務

                 WSL終端機執行如下指令

      > sudo vim /etc/sudoers

%sudo ALL=NOPASSWD: /usr/sbin/service ssh start

4.2.2. Windows 工作排程器設定如下開機任務

設定工作排程器 (Task Scheduler),開機時自動啟動

Basic Task

Trigger: When the computer starts

Program: C:\Windows\System32\wsl.exe

Argument: sudo /usr/sbin/service ssh start

               參考: https://www.howtogeek.com/746532/how-to-launch-cron-automatically-in-wsl-on-windows-10-and-11/

4.3.設定金鑰目錄權限,拷貝遠方客戶的公鑰進來,供客戶登入本機時簽發訊息核對身份之用

              WSL終端機執行如下指令

> mkdir ~/.ssh            # 家目錄下建立金鑰目錄

> chmod 700 ~/.ssh # chmod 指令只對/根目錄 (wslfs) 有效,對/mnt/c (drvfs)掛載目錄無效

> scp -p user@host:.ssh/*pub .    # 拷貝遠方既有.pub公鑰到本機個人金鑰目錄,供身份核對之用


註: 
1. 若想要知道或切換目前 WSL 版本,可使用如下指令。
> wsl -l
Windows 子系統 Linux 版發佈:
Ubuntu-22.04 (預設值)

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         1

> wsl --set-default-version 2

2. 不從微軟商店,直接從CMD命令列也可查詢及安裝Linux,指令如下:
> wsl --list --online
以下是可安裝之有效發佈的清單。
使用 'wsl --install -d <Distro>' 安裝。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed