Sesi 7: String dan Pemrosesan Teks Dasar
Mengelola Data Non-Numerik: Memformat laporan, membersihkan label data, dan mem-parsing metadata.
I. Ulasan: Teks sebagai Data Saintifik
String (teks) adalah urutan karakter. Meskipun Matematika dan Fisika fokus pada angka, String sangat penting untuk:
- Pelaporan: Menyajikan hasil perhitungan dengan presisi dan label yang benar (menggunakan f-string).
- Parsing Data: Membaca data dari *log file* atau *header* berkas CSV, di mana metadata sering digabung dalam satu baris teks.
- Input/Output: Memastikan input pengguna diformat dengan benar (misalnya, nama file atau jenis eksperimen).
Metode String Kunci:
String memiliki banyak metode bawaan yang bersifat *immutable* (tidak mengubah string asli, melainkan mengembalikan string baru):
- split(): Memecah string menjadi List berdasarkan *delimiter* (pemisah), ideal untuk *parsing*.
- join(): Menggabungkan elemen List menjadi satu string dengan *delimiter* tertentu.
- strip(): Menghapus spasi putih (whitespace) di awal dan akhir string.
- upper(), lower(), title(): Mengatur kapitalisasi.
Pemformatan Tingkat Lanjut (f-string)
Gunakan f-string untuk mengontrol presisi angka desimal, sangat penting dalam output ilmiah (misalnya, menampilkan 5 angka di belakang koma).
II. Contoh Manual: Parsing Metadata Eksperimen
Kita menerima metadata eksperimen dalam format string tunggal: 'Temp:27.5|Sensor:T-101|Tanggal:2025-11-20'. Kita harus memisahkan informasi ini menjadi variabel yang dapat diolah.
2.1. Langkah Manual Parsing Teks
meta_string = 'Temp:27.5|Sensor:T-101|Tanggal:2025-11-20'
LANGKAH 1: Split Berdasarkan '|'
Hasil List: ['Temp:27.5', 'Sensor:T-101', 'Tanggal:2025-11-20']
LANGKAH 2: Iterasi dan Split Berdasarkan ':'
Ambil elemen pertama (Temp:27.5) -> Split jadi ['Temp', '27.5'].
Variabel T = '27.5' (kemudian dikonversi ke float).
Proses ini menunjukkan bagaimana List dan String bekerja bersama untuk mengubah teks mentah menjadi data terstruktur (Structured Data) yang dapat digunakan dalam kalkulasi.
III. Kode Praktik (Google Colab)
3.1. Kode Sederhana: Pemformatan Ilmiah (f-string)
Mengontrol jumlah angka desimal dan menyajikan hasil perhitungan float dengan rapi.
import math
# Nilai Pi dari modul math
pi_val = math.pi
# Hasil perhitungan panjang (meter)
panjang_kawat = 15.0 / 7.0
koefisien_pemanasan = 0.0001234567
# Pemformatan f-string
print(f"Nilai Pi (2 desimal): {pi_val:.2f}")
print(f"Panjang Kawat (4 desimal): {panjang_kawat:.4f} meter")
# Format Notasi Ilmiah (E)
print(f"Koefisien (Notasi E): {koefisien_pemanasan:.3e}")
Nilai Pi (2 desimal): 3.14 Panjang Kawat (4 desimal): 2.1429 meter Koefisien (Notasi E): 1.235e-04
3.2. Kode Kompleks: Parsing dan List Comprehension
Menggunakan split() untuk memecah data sensor yang dikirim dalam satu baris teks, dan konversi ke List numerik.
# Data mentah dari sensor, dipisahkan oleh koma (,)
data_sensor_mentah = " 102.5, 103.1, 101.9, 104.0, 102.8 "
# 1. Membersihkan spasi di awal/akhir dan memisahkan menjadi List String
data_string_list = data_sensor_mentah.strip().split(',')
print(f"List String Mentah: {data_string_list}")
# 2. List Comprehension: Iterasi, menghapus spasi (strip()), dan konversi ke Float
data_numerik = [float(s.strip()) for s in data_string_list]
# 3. Hitung Statistik (Rata-rata)
rata_rata = sum(data_numerik) / len(data_numerik)
print("-" * 30)
print(f"List Numerik Terstruktur: {data_numerik}")
print(f"Rata-Rata Tekanan: {rata_rata:.2f} kPa")
List String Mentah: ['102.5', '103.1', '101.9', '104.0', '102.8'] ------------------------------ List Numerik Terstruktur: [102.5, 103.1, 101.9, 104.0, 102.8] Rata-Rata Tekanan: 102.86 kPa
3.3. Kode Kompleks: Menghasilkan Laporan CSV (join())
Menggunakan join() untuk menggabungkan data List menjadi satu baris teks yang siap ditulis ke berkas CSV.
# Data hasil simulasi
waktu = [1.0, 2.0, 3.0]
posisi = [5.5, 10.2, 16.8]
kecepatan = [4.5, 5.1, 6.0]
# 1. Siapkan header CSV
header = ["Waktu (s)", "Posisi (m)", "Kecepatan (m/s)"]
csv_header = ",".join(header)
# 2. Siapkan data baris (List of Lists/Tuples)
data_laporan = []
for t, p, v in zip(waktu, posisi, kecepatan):
# Konversi float ke string dengan 1 desimal
row = [f"{t:.1f}", f"{p:.1f}", f"{v:.1f}"]
data_laporan.append(",".join(row))
print(f"Header CSV:\n{csv_header}")
print("-" * 30)
print(f"Baris Data CSV (Row 1):\n{data_laporan[0]}")
Header CSV: Waktu (s),Posisi (m),Kecepatan (m/s) ------------------------------ Baris Data CSV (Row 1): 1.0,5.5,4.5
IV. Penugasan / PR Sesi 7: Pembersihan Label Partikel
Dalam identifikasi partikel, sering ada label data yang tidak konsisten (spasi berlebih, kapitalisasi acak). Tugas Anda adalah membersihkan List label ini:
- Data Mentah: LABEL_PARTIKEL_MENTAH = [" Elektron ", " Proton", "NEUTRON ", "elektron"]
- Pembersihan: Gunakan List Comprehension (Sesi 6) bersama dengan metode strip() dan lower().
- Output: Hasilkan List baru bernama LABEL_PARTIKEL_BERSIH, di mana semua label diubah menjadi huruf kecil dan semua spasi di awal/akhir dihilangkan.
- Analisis: Hitung berapa banyak label unik (gunakan set()) yang tersisa setelah dibersihkan.