Lewati ke konten utama

GitHub Actions dan MakeFile: Pengenalan Praktis

Pelajari mengotomatiskan pembuatan laporan data menggunakan Makefile dan GitHub Actions.
· 11 mnt Baca

Jelajahi bersama AI

Sebagai data scientist, kita biasanya tidak terlibat dalam deployment dan maintenance—kita membangun model statistik, dan para engineer yang mengurus sisanya.

Namun, keadaan mulai berubah!

Dengan meningkatnya permintaan terhadap data scientist yang mampu menjembatani pembuatan model hingga ke produksi, membiasakan diri dengan alat automasi dan CI/CD (Continuous Integration/Continuous Deployment) dapat menjadi keunggulan strategis.

Dalam tutorial ini, kita akan mempelajari dua alat automasi populer: Make (automasi lokal) dan GitHub Actions (automasi berbasis cloud). Fokus utama kita adalah mengintegrasikan alat-alat ini ke dalam proyek data kita.

Sampul tutorial GitHub Actions dan MakeFile

GitHub Action dan Make. Gambar oleh Abid Ali Awan.

Jika Anda ingin mempelajari lebih lanjut tentang automasi dalam konteks data science, lihat kursus Fully Automated MLOps ini.

Mengenal MakeFile

Makefile adalah cetak biru untuk membangun dan mengelola proyek perangkat lunak. Ini adalah berkas yang berisi instruksi untuk mengotomatiskan tugas, menyederhanakan proses build yang kompleks, dan memastikan konsistensi.

Untuk mengeksekusi perintah dalam Makefile, kita menggunakan alat baris perintah make. Alat ini dapat dijalankan seperti program Python dengan memberikan argumen atau menjalankannya begitu saja.

Komponen inti

Sebuah Makefile biasanya terdiri dari daftar target, dependensi, aksi, dan variabel:

  • Target: Hasil yang diinginkan, seperti "build," "test," atau "clean." Anggap saja sebagai tujuan yang ingin dicapai melalui Makefile.
  • Dependensi: Berkas-berkas yang dibutuhkan untuk membangun target. Pikirkan sebagai bahan yang diperlukan untuk setiap resep (target).
  • Aksi: Instruksi atau skrip yang memberi tahu sistem cara membangun target. Dapat berupa perintah seperti python test.py.
  • Variabel: Makefile menyediakan variabel global yang bertindak seperti argumen yang diteruskan ke aksi. Menggunakan contoh aksi di atas, kita bisa memiliki python test.py $variable_1 $variable_2.

Singkatnya, berikut adalah tampilan template MakeFile:

Variable = some_value

Target: Dependencies
    Actions (commands to build the target) $Variable

Menggunakan contoh kita di atas, MakeFile dapat terlihat seperti ini:

# Define variables
variable_1 = 5
variable_2 = 10

# Target to run a test with variables
test: test_data.txt # Dependency on test data file
	python test.py $variable_1 $variable_2

Menginstal Alat CLI Make

Kita dapat menginstal alat CLI Make di semua sistem operasi.

Linux

Untuk Linux, kita perlu menggunakan perintah berikut di terminal:

$ sudo apt install make

MacOS

Untuk macOS, kita dapat menggunakan homebrew untuk memasang make:

$ brew install make

Windows

Windows sedikit berbeda. Alat Make dapat digunakan dengan beberapa cara. Opsi paling populer adalah WSL (Ubuntu Linxus), w64devkit, dan GnuWin32.

Mari unduh dan instal GnuWin32 dari halaman SourceForge.

Untuk menggunakannya sebagai alat baris perintah di terminal, kita perlu menambahkan lokasi folder ke variabel lingkungan Windows. Berikut langkah-langkah yang dapat kita lakukan:

  • Cari "environment variables" di menu Start—ini akan mengarahkan kita ke jendela System Properties.
  • Di dalam jendela System Properties, klik tombol Environment Variables.
  • Pada bagian variabel sistem, temukan variabel "Path" dan edit—ini akan meluncurkan jendela lain tempat kita dapat menambahkan path baru ke direktori alat Make.

Menetapkan environment variable di Windows

Untuk menguji apakah Make berhasil diinstal, kita dapat mengetik make -h di PowerShell.

Alat CLI Make di Windows PowerShell

Menggunakan MakeFile untuk Proyek Data Science

Di bagian ini, kita akan mempelajari cara menggunakan Makefile dan alat CLI Make dalam proyek data science.

Kita akan menggunakan dataset World Happiness Report 2023 untuk mencakup pemrosesan data, analisis, serta penyimpanan ringkasan data dan visualisasi.

Menyiapkan

Kita mulai dengan masuk ke direktori proyek dan membuat folder bernama Makefile-Action. Lalu kita membuat berkas data_processing.py di dalam folder tersebut dan meluncurkan editor VSCode.

$ cd GitHub
$ mkdir Makefile-Action
$ cd .\Makefile-Action\
$ code data_processing.py

Pemrosesan data

Kita mulai memproses data menggunakan Python. Pada blok kode di bawah, kita melakukan langkah-langkah berikut (catatan: ini adalah kode contoh—dalam skenario nyata, kita mungkin perlu melakukan lebih banyak langkah):

  1. Memuat dataset mentah dari lokasi direktori yang diberikan oleh pengguna.
  2. Mengganti nama semua kolom agar lebih mudah dibaca.
  3. Mengisi nilai yang hilang.
  4. Menyimpan dataset yang telah dibersihkan.

Berkas: data_processing.py

import sys
import pandas as pd

# Check if the data location argument is provided
if len(sys.argv) != 2:
    print("Usage: python data_processing.py <data_location>")
    sys.exit(1)

# Load the raw dataset (step 1)
df = pd.read_csv(sys.argv[1])

# Rename columns to more descriptive names (step 2)
df.columns = [
    "Country",
    "Happiness Score",
    "Happiness Score Error",
    "Upper Whisker",
    "Lower Whisker",
    "GDP per Capita",
    "Social Support",
    "Healthy Life Expectancy",
    "Freedom to Make Life Choices",
    "Generosity",
    "Perceptions of Corruption",
    "Dystopia Happiness Score",
    "GDP per Capita",
    "Social Support",
    "Healthy Life Expectancy",
    "Freedom to Make Life Choices",
    "Generosity",
    "Perceptions of Corruption",
    "Dystopia Residual",
]

# Handle missing values by replacing them with the mean (step 3)
df.fillna(df.mean(numeric_only=True), inplace=True)

# Check for missing values after cleaning
print("Missing values after cleaning:")
print(df.isnull().sum())

print(df.head())

# Save the cleaned and normalized dataset to a new CSV file (step 4)
df.to_csv("processed_data\WHR2023_cleaned.csv", index=False)

Analisis data

Sekarang kita lanjut menganalisis data dan menyimpan seluruh kode kita ke dalam berkas bernama data_analysis.py. Kita dapat membuat berkas ini dengan perintah terminal berikut:

$ code data_analysis.py

Kita juga dapat menggunakan perintah echo untuk membuat berkas Python dan membukanya di editor kode lain.

$ echo "" > data_analysis.py

Pada blok kode di bawah, kita:

  1. Memuat dataset bersih menggunakan input yang diberikan pengguna.
  2. Menghasilkan ringkasan data, informasi data, dan 5 baris pertama DataFrame lalu menyimpannya dalam berkas TXT.
  3. Memplot visualisasi untuk:
    • Distribusi skor kebahagiaan
    • 20 negara teratas berdasarkan skor kebahagiaan
    • Skor kebahagiaan versus PDB per kapita
    • Skor kebahagiaan versus dukungan sosial
    • Peta panas korelasi
  4. Menyimpan semua visualisasi di folder “figures”.

Berkas: data_analysis.py

import io
import sys

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

# Check if the data location argument is provided
if len(sys.argv) != 2:
    print("Usage: python data_analysis.py <data_location>")
    sys.exit(1)

# Load the clean dataset (step 1)
df = pd.read_csv(sys.argv[1])

# Data summary (step 2)
print("Data Summary:")
summary = df.describe()
data_head = df.head()
print(summary)
print(data_head)

# Collecting data information
buffer = io.StringIO()
df.info(buf=buffer)
info = buffer.getvalue()

## Write metrics to file
with open("processed_data/summary.txt", "w") as outfile:
    f"\n## Data Summary\n\n{summary}\n\n## Data Info\n\n{info}\n\n## Dataframe\n\n{data_head}"

print("Data summary saved in processed_data folder!")

# Distribution of Happiness Score (step 3)
plt.figure(figsize=(10, 6))
sns.displot(df["Happiness Score"])
plt.title("Distribution of Happiness Score")
plt.xlabel("Happiness Score")
plt.ylabel("Frequency")
plt.savefig("figures/happiness_score_distribution.png")

# Top 20 countries by Happiness Score
top_20_countries = df.nlargest(20, "Happiness Score")
plt.figure(figsize=(10, 6))
sns.barplot(x="Country", y="Happiness Score", data=top_20_countries)
plt.title("Top 20 Countries by Happiness Score")
plt.xlabel("Country")
plt.ylabel("Happiness Score")
plt.xticks(rotation=90)
plt.savefig("figures/top_20_countries_by_happiness_score.png")

# Scatter plot of Happiness Score vs GDP per Capita
plt.figure(figsize=(10, 6))
sns.scatterplot(x="GDP per Capita", y="Happiness Score", data=df)
plt.title("Happiness Score vs GDP per Capita")
plt.xlabel("GDP per Capita")
plt.ylabel("Happiness Score")
plt.savefig("figures/happiness_score_vs_gdp_per_capita.png")

# Visualize the relationship between Happiness Score and Social Support
plt.figure(figsize=(10, 6))
plt.scatter(x="Social Support", y="Happiness Score", data=df)
plt.xlabel("Social Support")
plt.ylabel("Happiness Score")
plt.title("Relationship between Social Support and Happiness Score")
plt.savefig("figures/social_support_happiness_relationship.png")

# Heatmap of correlations between variables
corr_matrix = df.drop("Country", axis=1).corr()
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", square=True)
plt.title("Correlation Heatmap")
plt.savefig("figures/correlation_heatmap.png")
print("Visualizations saved to figures folder!")

Membuat Makefile

Sebelum kita membuat Makefile, kita perlu menyiapkan berkas requirements.txt untuk memasang semua paket Python yang diperlukan pada mesin baru. Berikut tampilan berkas requirements.txt:

pandas
numpy
seaborn
matplotlib
black

Makefile kita terdiri dari variabel, dependensi, target, dan aksi—kita akan mempelajari semua blok pembangunnya. Kita membuat berkas bernama Makefile dan mulai menambahkan aksi untuk target:

  • install: Ini memperbarui versi pip dan memasang semua paket Python yang diperlukan menggunakan berkas requirements.txt.
  • format: Ini memformat semua berkas Python menggunakan alat Black.
  • process: Ini menjalankan berkas Python `data_processing.py` dengan path data mentah sebagai variabel dan dependensi.
  • analyze: Ini menjalankan berkas Python `data_analysis.py` dengan path data yang sudah diproses sebagai variabel dan dependensi.
  • clean: Ini menghapus semua berkas dan gambar yang dihasilkan saat menjalankan berkas Python.
  • all: Ini menjalankan semua target yang valid secara berurutan.

Berkas: Makefile

RAW_DATA_PATH = "raw_data/WHR2023.csv"
PROCESSED_DATA = "processed_data/WHR2023_cleaned.csv"

install:
    pip install --upgrade pip &&\
        pip install -r requirements.txt

format:
        black *.py --line-length 88

process: ./raw_data/WHR2023.csv
        python data_processing.py $(RAW_DATA_PATH)

analyze: ./processed_data/WHR2023_cleaned.csv
        python data_analysis.py $(PROCESSED_DATA)

clean:
        rm -f processed_data/* **/*.png

all: install format process analyze

Untuk mengeksekusi target, kita akan menggunakan alat make dan memberikan nama target di terminal.

$ make format

Skrip Black berjalan dengan sukses.

menjalankan perintah make di terminal

Mari coba menjalankan skrip Python untuk pemrosesan data.

Penting untuk dicatat bahwa ia memeriksa dependensi target sebelum menjalankan target process. Dalam kasus kita, ia memeriksa apakah berkas data mentah ada. Jika tidak, perintah tidak akan dijalankan.

$ make process

Seperti yang kita lihat, semudah itu.

menjalankan perintah make

Anda bahkan dapat menimpa variabel yang ada dengan memberikan argumen tambahan pada perintah make.

Dalam kasus kita, kita mengubah path data mentah.

$ make process RAW_DATA_PATH="WHR2022.csv"

Skrip Python berjalan dengan argumen input yang berbeda.

menjalankan perintah make dengan argumen input

Untuk mengotomatiskan seluruh workflow, kita akan menggunakan all sebagai target, yang akan menjalankan install, format, process, dan analyze satu per satu.

$ make all

Perintah make memasang paket Python, memformat kode, memproses data, serta menyimpan ringkasan dan visualisasi.

output terminal

visualisasi data pada dataset World Happiness 2023

Beginilah tampilan direktori proyek Anda setelah menjalankan perintah make all:

Berkas dan folder proyek

Mengenal GitHub Actions

Sementara Make unggul untuk automasi lokal dalam lingkungan pengembangan kita, GitHub Actions menawarkan alternatif berbasis cloud.

GitHub Actions umumnya digunakan untuk CI/CD, yang memungkinkan developer mengompilasi, membangun, menguji, dan men-deploy aplikasi ke produksi langsung dari GitHub.

Sebagai contoh, kita dapat membuat workflow kustom yang akan dipicu berdasarkan peristiwa spesifik seperti push atau pull request. Workflow tersebut akan menjalankan shell script dan skrip Python, atau kita bahkan dapat menggunakan action siap pakai. Workflow kustom adalah berkas YML, dan biasanya cukup mudah dipahami dan mulai menulis run serta action kustom.

Komponen inti

Mari telusuri komponen inti GitHub Actions:

  • Workflows didefinisikan menggunakan berkas YML, yang menentukan langkah-langkah yang harus dijalankan dan kondisi kapan langkah-langkah tersebut dijalankan.
  • Events adalah aktivitas spesifik yang memicu menjalankan workflow seperti push, pull_request, schedule, dan lainnya.
  • Runners adalah mesin yang menjalankan workflow saat dipicu. GitHub menyediakan runner terhosting gratis untuk Linux, Windows, dan macOS.
  • Jobs adalah sekumpulan langkah yang dijalankan pada runner yang sama. Secara default, job berjalan paralel tetapi bisa diatur untuk berjalan berurutan.
  • Steps adalah tugas yang menjalankan perintah atau action mirip dengan aksi dalam Makefile.
  • Actions adalah aplikasi kustom untuk platform GitHub Actions yang melakukan tugas kompleks namun sering diulang. Ada banyak action yang bisa dipilih, sebagian besar didukung oleh komunitas open-source.

Mulai Menggunakan GitHub Actions

Di bagian ini, kita akan belajar menggunakan GitHub Actions dan mencoba mereplikasi perintah yang sebelumnya kita gunakan dalam Makefile.

Untuk mentransfer kode kita ke GitHub, kita harus mengonversi folder proyek menjadi repositori Git menggunakan:

$ git init

Lalu, kita membuat repositori baru di GitHub dan menyalin URL-nya.

Membuat repositori GitHub baru

Di terminal, kita ketik perintah di bawah untuk:

  1. Menambahkan tautan repositori remote.
  2. Menarik berkas dari repositori remote.
  3. Menambahkan dan melakukan commit semua berkas dengan pesan commit.
  4. Mendorong berkas dari master lokal ke branch main remote.
$ git remote add github https://github.com/kingabzpro/Makefile-Actions.git
$ git pull github main
$ git add . 
$ git commit -m "adding all the files"
$ git push github master:main

Sebagai catatan, jika Anda memerlukan kilas balik singkat tentang GitHub atau Git, lihat tutorial ramah pemula ini tentang GitHub dan Git. Ini akan membantu Anda melakukan versioning proyek data science dan membagikannya dengan tim menggunakan alat Git CLI.

Melanjutkan pelajaran kita—kita melihat bahwa semua berkas telah berhasil ditransfer ke repositori remote.

Mendorong berkas ke repositori remote

Selanjutnya, kita akan membuat workflow GitHub Action. Pertama kita perlu pergi ke tab Actions pada repositori kingabzpro/Makefile-Actions. Lalu, klik teks biru “set up a workflow yourself.”

mulai menggunakan GitHub actions

Kita akan diarahkan ke berkas YML, tempat kita akan menulis semua kode untuk menyiapkan lingkungan dan mengeksekusi perintah. Kita akan:

  1. Memberikan nama workflow.
  2. Menyiapkan event pemicu untuk mengeksekusi workflow saat kode didorong ke branch main atau ada pull request pada branch main.
  3. Menyiapkan job dengan mesin Ubuntu Linux terbaru.
  4. Menggunakan checkout v3 action pada bagian step. Ini membantu workflow kita mengakses repositori.
  5. Memasang paket Python yang diperlukan, memformat kode, dan menjalankan kedua skrip Python dengan variabel.
name: Data Processing and Analysis

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install Packages
        run: |
          pip install --upgrade pip
          pip install -r requirements.txt
      - name: Format
        run: black *.py --line-length 88
      - name: Data Processing
        env:
          RAW_DATA_DIR: "./raw_data/WHR2023.csv"
        run: python data_processing.py $RAW_DATA_DIR
      - name: Data Analysis
        env:
          CLEAN_DATA_DIR: "./processed_data/WHR2023_cleaned.csv"
        run: python data_analysis.py $CLEAN_DATA_DIR

Setelah melakukan commit pada berkas workflow dengan pesan, ia akan otomatis mulai menjalankan workflow.

menjalankan workflow

Akan butuh setidaknya 20 detik untuk menyelesaikan semua langkah.

Untuk memeriksa log, pertama kita klik pada workflow run, lalu tombol Build, kemudian klik pada setiap job untuk mengakses log.

Log Build GitHub Actions

Jika ini menyenangkan bagi Anda, Anda pasti akan menikmati Panduan Pemula CI/CD untuk Machine Learning ini, yang membahas dasar-dasar membangun dan mengotomatiskan workflow machine learning.

Menggabungkan GitHub Actions dengan MakeFile

Untuk menyederhanakan dan menstandarkan workflow GitHub Action, developer menggunakan perintah Make di dalam berkas workflow. Di bagian ini, kita akan belajar menyederhanakan kode workflow menggunakan perintah Make dan belajar menggunakan action continuous machine learning (CML).

Sebelum mulai, kita harus menarik berkas workflow dari repositori remote.

$ git pull

Menggunakan CML

Continuous Machine Learning (CML) adalah pustaka open-source oleh iterative.ai yang memungkinkan kita menerapkan continuous integration dalam proyek data science.

Dalam proyek ini, kita akan menggunakan GitHub Action iterative/setup-cml yang menggunakan fungsi CML dalam workflow untuk menghasilkan laporan analisis menggunakan gambar dan statistik data.

Laporan akan dibuat dan dilampirkan ke commit GitHub kita untuk ditinjau dan disetujui tim sebelum digabungkan.

Kita akan memodifikasi Makefile dan menambahkan target lain “summary.” Perhatikan bahwa:

  • Target adalah skrip multi-baris yang memindahkan data teks dari summary.txt ke report.md.
  • Kemudian, satu per satu, ia menambahkan heading untuk setiap gambar dan kode Markdown untuk menampilkan gambar di berkas report.md.
  • Di akhir, kita akan menggunakan alat cml untuk membuat laporan analitis data dan menampilkannya di bawah komentar commit.

Bayangkan menambahkan begitu banyak baris ke berkas workflow GitHub—itu akan sulit dibaca dan diubah. Sebagai gantinya, kita akan menggunakan make summary.

Berkas: Makefile

summary: ./processed_data/summary.txt
    echo "# Data Summary" > report.md
    cat ./processed_data/summary.txt >> report.md
   
    echo '\n# Data Analysis' >> report.md
    echo '\n## Correlation Heatmap' >> report.md
    echo '![Correlation Heatmap](./figures/correlation_heatmap.png)' >> report.md

    echo '\n## Happiness Score Distribution' >> report.md
    echo '![Happiness Score Distribution](./figures/happiness_score_distribution.png)' >> report.md

    echo '\n## Happiness Score vs GDP per Capita' >> report.md
    echo '![Happiness Score vs GDP per Capita](./figures/happiness_score_vs_gdp_per_capita.png)' >> report.md
   
    echo '\n## Social Support vs Happiness Relationship' >> report.md
    echo '![Social Support Happiness Relationship](./figures/social_support_happiness_relationship.png)' >> report.md
   
    echo '\n## Top 20 Countries by Happiness Score' >> report.md
    echo '![Top 20 Countries by Happiness Score](./figures/top_20_countries_by_happiness_score.png)' >> report.md
   
    cml comment create report.md

Mengedit berkas workflow menggunakan perintah make.

Memodifikasi berkas GiHub Action

Sekarang kita akan mengedit berkas main.yml, yang dapat kita temukan di direktori .github/workflows.

Kita mengubah semua perintah dan skrip Python dengan perintah make dan memberikan izin untuk CML Action agar membuat laporan data di komentar commit. Selain itu, pastikan kita tidak lupa menambahkan Action iterative/setup-cml@v3 ke run kita.

name: Data Processing and Analysis

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions: write-all

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: iterative/setup-cml@v3
      - name: Install Packages
        run: make install
      - name: Format
        run: make format
      - name: Data Processing
        env:
          RAW_DATA_DIR: "./raw_data/WHR2023.csv"
        run: make process RAW_DATA_PATH=$RAW_DATA_DIR
      - name: Data Analysis
        env:
          CLEAN_DATA_DIR: "./processed_data/WHR2023_cleaned.csv"
        run: make analyze PROCESSED_DATA=$CLEAN_DATA_DIR
      - name: Data Summary
        env:
          REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: make summary

Menjalankan workflow

Untuk mengeksekusi workflow, kita hanya perlu melakukan commit semua perubahan dan menyinkronkannya dengan branch main remote.

$ git commit -am "makefile and github action combo"
$ git push github master:main

menjalankan workflow GitHub action

Butuh 32 detik untuk menjalankan workflow—laporan kita siap ditinjau. Untuk melakukannya, kita pergi ke ringkasan build, gulir ke bawah untuk klik tab Data Summary , lalu klik tautan komentar (tautan yang Anda lihat pada baris 20 pada gambar di bawah):

workflow berhasil diselesaikan

Seperti yang kita lihat, ringkasan data dan visualisasi data dilampirkan ke commit kita.

Laporan analitis otomatis yang dihasilkan menggunakan GitHub Actions "CML".

Proyek tersedia di kingabzpro/Makefile-Actions, dan Anda dapat menggunakannya sebagai panduan saat mengalami kendala. Repositori ini bersifat publik, jadi silakan fork dan rasakan sendiri kemudahannya!

Ingin mendapatkan sertifikasi GitHub? Lihat panduan komprehensif kami tentang berbagai sertifikasi GitHub!

Kesimpulan

Dalam tutorial ini, kita berfokus pada Makefile dan GitHub Actions untuk mengotomatiskan pembuatan laporan analitis data.

Kita juga mempelajari cara membangun dan menjalankan workflow serta menggunakan alat Make di dalam workflow GitHub untuk mengoptimalkan dan menyederhanakan proses automasi. Alih-alih menulis banyak baris kode, kita dapat menggunakan make summary untuk menghasilkan laporan analisis data yang akan dilampirkan pada commit kita.

Jika Anda ingin menguasai seni CI/CD untuk data science, coba kursus CI/CD for Machine Learning ini. Kursus ini membahas dasar-dasar CI/CD, GitHub Actions, versioning data, serta automasi optimasi dan evaluasi hyperparameter model.

Abid Ali Awan

Penulis

Abid Ali Awan

Sebagai data scientist tersertifikasi, saya bersemangat memanfaatkan teknologi mutakhir untuk menciptakan aplikasi machine learning yang inovatif. Dengan latar belakang kuat di pengenalan ucapan, analisis dan pelaporan data, MLOps, conversational AI, dan NLP, saya mengasah keterampilan dalam mengembangkan sistem cerdas yang berdampak nyata. Selain keahlian teknis, saya juga komunikator andal yang mampu menyederhanakan konsep kompleks menjadi bahasa yang jelas dan ringkas. Karena itu, saya menjadi blogger yang dicari di bidang data science, membagikan wawasan dan pengalaman kepada komunitas profesional data yang terus berkembang. Saat ini, saya berfokus pada pembuatan dan penyuntingan konten, bekerja dengan large language model untuk mengembangkan konten yang kuat dan menarik agar membantu bisnis dan individu memaksimalkan data mereka.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai