मुख्य सामग्री पर जाएँ

GitHub Actions और MakeFile: एक व्यावहारिक परिचय

Makefile और GitHub Actions का उपयोग करके डेटा रिपोर्ट जनरेशन को स्वचालित करना सीखें।
· 11 मि॰ पढ़ें

AI के साथ खोजें

डेटा वैज्ञानिकों के रूप में, हम आमतौर पर डिप्लॉयमेंट और मेंटेनेंस में शामिल नहीं होते—हम सांख्यिकीय मॉडल बनाते हैं, और बाकी काम इंजीनियर करते हैं।

हालांकि, अब चीजें बदल रही हैं!

ऐसे डेटा वैज्ञानिकों की बढ़ती मांग के साथ जो मॉडल निर्माण और प्रोडक्शन के बीच की खाई को पाट सकें, स्वचालन और CI/CD (कन्टीन्युअस इंटीग्रेशन/कन्टीन्युअस डिप्लॉयमेंट) टूल्स से खुद को परिचित कराना एक रणनीतिक बढ़त दे सकता है।

इस ट्यूटोरियल में, हम दो लोकप्रिय स्वचालन टूल्स के बारे में सीखेंगे: Make (लोकल ऑटोमेशन) और GitHub Actions (क्लाउड-आधारित ऑटोमेशन)। हमारा मुख्य फोकस इन टूल्स को अपने डेटा प्रोजेक्ट्स में शामिल करने पर होगा।

GitHub Actions and MakeFile tutorial cover

GitHub Action और Make. चित्र: अबिद अली अवान।

यदि आप डेटा साइंस के संदर्भ में स्वचालन के बारे में और सीखना चाहते हैं, तो Fully Automated MLOps कोर्स देखें।

MakeFile का परिचय

एक Makefile सॉफ्टवेयर प्रोजेक्ट्स को बनाने और मैनेज करने का ब्लूप्रिंट है। यह एक फ़ाइल होती है जिसमें कार्यों को स्वचालित करने, जटिल बिल्ड प्रक्रियाओं को सुव्यवस्थित करने, और निरंतरता सुनिश्चित करने के निर्देश होते हैं।

Makefile के भीतर मौजूद कमांड्स को चलाने के लिए हम make कमांड-लाइन टूल का उपयोग करते हैं। यह टूल Python प्रोग्राम की तरह तर्क (arguments) देकर या सीधे चलाकर उपयोग किया जा सकता है।

मुख्य घटक

एक Makefile आमतौर पर टार्गेट्स, डिपेंडेंसीज़, एक्शंस, और वैरिएबल्स की सूची से बना होता है:

  • Target: ये वांछित परिणाम होते हैं, जैसे "build," "test," या "clean"। इन्हें ऐसे लक्ष्यों की तरह समझें जिन्हें आप Makefile के माध्यम से प्राप्त करना चाहते हैं।
  • Dependencies: ये वे फ़ाइलें हैं जो टार्गेट को बनाने के लिए आवश्यक होती हैं। इन्हें हर रेसिपी (टार्गेट) की सामग्री के रूप में सोचें।
  • Actions: ये निर्देश या स्क्रिप्ट होते हैं जो सिस्टम को बताते हैं कि टार्गेट कैसे बनाना है। इनमें python test.py जैसे कमांड शामिल हो सकते हैं।
  • Variables: Makefiles ग्लोबल वैरिएबल्स प्रदान करते हैं जो एक्शंस को पास किए गए आर्गुमेंट्स की तरह काम करते हैं। ऊपर दिए गए एक्शन उदाहरण का उपयोग करते हुए, हमारे पास python test.py $variable_1 $variable_2 हो सकता है।

संक्षेप में, MakeFile का टेम्पलेट कुछ इस तरह दिख सकता है:

Variable = some_value

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

ऊपर दिए हमारे उदाहरणों का उपयोग करते हुए, MakeFile इस तरह दिख सकता है:

# 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

Make CLI टूल इंस्टॉल करना

हम सभी ऑपरेटिंग सिस्टम्स पर Make CLI टूल इंस्टॉल कर सकते हैं।

Linux

Linux के लिए, हमें टर्मिनल में निम्न कमांड का उपयोग करना होगा:

$ sudo apt install make

MacOS

macOS के लिए, हम homebrew का उपयोग करके make इंस्टॉल कर सकते हैं:

$ brew install make

Windows

Windows कुछ अलग है। Make टूल का उपयोग कई तरीकों से किया जा सकता है। सबसे लोकप्रिय विकल्प हैं WSL (Ubuntu Linux), w64devkit, और GnuWin32।

आइए SourceForge पेज से GnuWin32 डाउनलोड और इंस्टॉल करें।

इसे टर्मिनल में कमांड-लाइन टूल के रूप में उपयोग करने के लिए, हमें फ़ोल्डर का स्थान Windows environment variable में जोड़ना होगा। ये वे चरण हैं जो हम अपना सकते हैं:

  • स्टार्ट मेनू में "environment variables" खोजें—यह हमें System Properties विंडो पर रीडायरेक्ट करेगा।
  • System Properties विंडो के अंदर, Environment Variables बटन पर क्लिक करें।
  • सिस्टम वेरिएबल सेक्शन में, "Path" वेरिएबल ढूंढें और उसे एडिट करें—यह एक और विंडो खोलेगा जहाँ हम Make टूल डायरेक्टरी का नया पाथ जोड़ सकते हैं।

Setting environment variable in windows

जांचने के लिए कि Make सफलतापूर्वक इंस्टॉल हो गया है, हम PowerShell में make -h टाइप कर सकते हैं।

Make CLI tool in Windows PowerShell

डेटा साइंस प्रोजेक्ट के लिए MakeFile का उपयोग

इस सेक्शन में, हम सीखेंगे कि डेटा साइंस प्रोजेक्ट में Makefile और Make CLI टूल्स का उपयोग कैसे करें।

हम World Happiness Report 2023 डेटासेट का उपयोग डेटा प्रोसेसिंग, विश्लेषण, और डेटा सारांश व विज़ुअलाइज़ेशन सहेजने के लिए करेंगे।

सेटअप

हम प्रोजेक्ट डायरेक्टरी में जाकर Makefile-Action नाम का एक फ़ोल्डर बनाते हैं। इसके बाद, हम उस फ़ोल्डर के भीतर data_processing.py फ़ाइल बनाते हैं और VSCode एडिटर लॉन्च करते हैं।

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

डेटा प्रोसेसिंग

हम Python का उपयोग करके अपने डेटा को प्रोसेस करना शुरू करते हैं। नीचे दिए गए कोड ब्लॉक में, हम निम्न चरण लेते हैं (ध्यान दें: यह एक उदाहरण कोड है—वास्तविक दुनिया में, हमें संभवतः और चरण करने होंगे):

  1. उपयोगकर्ता द्वारा दिए गए डायरेक्टरी लोकेशन से कच्चा डेटासेट लोड करें।
  2. बेहतर पठनीयता के लिए सभी कॉलम का नाम बदलें।
  3. लापता मान भरें।
  4. साफ़ किया हुआ डेटासेट सहेजें।

फ़ाइल: 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)

डेटा विश्लेषण

अब हम डेटा का विश्लेषण जारी रखते हैं और अपना सारा कोड data_analysis.py नामक फ़ाइल में सहेजते हैं। हम निम्न टर्मिनल कमांड से यह फ़ाइल बना सकते हैं:

$ code data_analysis.py

हम echo कमांड का उपयोग करके भी Python फ़ाइल बना सकते हैं और इसे किसी अन्य कोड एडिटर में खोल सकते हैं।

$ echo "" > data_analysis.py

नीचे दिए गए कोड ब्लॉक में, हम:

  1. उपयोगकर्ता द्वारा दिए गए इनपुट का उपयोग करके साफ़ किया हुआ डेटासेट लोड करते हैं।
  2. डेटा सारांश, डेटा जानकारी, और DataFrame की शुरुआती 5 पंक्तियाँ जनरेट करते हैं और उन्हें TXT फ़ाइल में सहेजते हैं।
  3. इनके लिए विज़ुअलाइज़ेशन बनाते हैं:
    • हैप्पीनेस स्कोर का वितरण
    • हैप्पीनेस स्कोर के आधार पर शीर्ष 20 देश
    • हैप्पीनेस स्कोर बनाम प्रति व्यक्ति GDP
    • हैप्पीनेस स्कोर बनाम सामाजिक सहयोग
    • एक कोरिलेशन हीटमैप
  4. सभी विज़ुअलाइज़ेशन “figures” फ़ोल्डर में सहेजते हैं।

फ़ाइल: 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!")

Makefile बनाना

Makefile बनाने से पहले, हमें एक requirements.txt फ़ाइल सेटअप करनी होगी ताकि नई मशीन पर सभी आवश्यक Python पैकेज इंस्टॉल हो सकें। requirements.txt फ़ाइल कुछ इस तरह दिखेगी:

pandas
numpy
seaborn
matplotlib
black

हमारा Makefile वैरिएबल्स, डिपेंडेंसीज़, टार्गेट्स और एक्शंस से बना है—हम सभी बिल्डिंग ब्लॉक्स सीखेंगे। हम Makefile नाम की फ़ाइल बनाते हैं और टार्गेट्स के लिए एक्शंस जोड़ना शुरू करते हैं:

  • install: यह pip संस्करण को अपग्रेड करता है और requirements.txt फ़ाइल का उपयोग करके सभी आवश्यक Python पैकेज इंस्टॉल करता है।
  • format: यह Black टूल का उपयोग करके सभी Python फ़ाइलों को फॉर्मेट करता है।
  • process: यह `data_processing.py` Python फ़ाइल को कच्चे डेटा पाथ को एक वैरिएबल और डिपेंडेंसी के रूप में लेकर चलाता है।
  • analyze: यह `data_analysis.py` Python फ़ाइल को प्रोसेस्ड डेटा पाथ को एक वैरिएबल और डिपेंडेंसी के रूप में लेकर चलाता है।
  • clean: यह Python फ़ाइलें चलाते समय जनरेट हुई सभी फ़ाइलों और फ़िगर्स को हटाता है।
  • all: यह सभी वैध टार्गेट्स को क्रम में चलाता है।

फ़ाइल: 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

टार्गेट को चलाने के लिए, हम make टूल का उपयोग करेंगे और टर्मिनल में टार्गेट का नाम देंगे।

$ make format

Black स्क्रिप्ट सफलतापूर्वक चल गई।

running make command in terminal

आइए डेटा प्रोसेसिंग के लिए Python स्क्रिप्ट चलाने की कोशिश करें।

यह ध्यान रखना महत्वपूर्ण है कि यह process टार्गेट चलाने से पहले टार्गेट डिपेंडेंसीज़ की जाँच करता है। हमारे मामले में, यह जाँचता है कि कच्चा डेटा फ़ाइल मौजूद है या नहीं। यदि नहीं, तो कमांड शुरू नहीं होगा।

$ make process

जैसा कि हम देख सकते हैं, यह उतना ही सरल है।

running make command

आप make कमांड को एक अतिरिक्त आर्गुमेंट देकर मौजूदा वैरिएबल को ओवरराइड भी कर सकते हैं।

हमारे मामले में, हमने कच्चे डेटा का पाथ बदल दिया है।

$ make process RAW_DATA_PATH="WHR2022.csv"

Python स्क्रिप्ट अलग इनपुट आर्गुमेंट के साथ चली।

running make command with input argument

पूरे वर्कफ़्लो को स्वचालित करने के लिए, हम all को टार्गेट के रूप में उपयोग करेंगे, जो क्रमशः install, format, process, और analyze टार्गेट्स चलाएगा।

$ make all

make कमांड ने Python पैकेज इंस्टॉल किए, कोड फॉर्मेट किया, डेटा प्रोसेस किया, और सारांश व विज़ुअलाइज़ेशन सहेजे।

terminal output

data visualization on World Happiness dataset 2023

make all कमांड चलाने के बाद आपका प्रोजेक्ट डायरेक्टरी कुछ इस तरह दिखना चाहिए:

Project files and folders

GitHub Actions का परिचय

जहाँ Make हमारे डेवलपमेंट वातावरण में लोकल ऑटोमेशन में उत्कृष्ट है, वहीं GitHub Actions क्लाउड-आधारित विकल्प प्रदान करता है।

GitHub Actions आम तौर पर CI/CD के लिए उपयोग किया जाता है, जो डेवलपर्स को सीधे GitHub से एप्लिकेशन को कंपाइल, बिल्ड, टेस्ट और प्रोडक्शन में डिप्लॉय करने की अनुमति देता है।

उदाहरण के लिए, हम एक कस्टम वर्कफ़्लो बना सकते हैं जो push या pull request जैसे विशिष्ट इवेंट्स पर ट्रिगर होगा। वह वर्कफ़्लो शेल स्क्रिप्ट्स और Python स्क्रिप्ट्स चलाएगा, या हम प्री-बिल्ट एक्शंस का भी उपयोग कर सकते हैं। कस्टम वर्कफ़्लो एक YML फ़ाइल होता है, और आम तौर पर इसे समझना और कस्टम रन और एक्शंस लिखना काफ़ी सीधा होता है।

मुख्य घटक

आइए GitHub Actions के मुख्य घटकों का अन्वेषण करें:

  • Workflows YML फ़ाइलों का उपयोग करके परिभाषित किए जाते हैं, जो यह निर्दिष्ट करते हैं कि कौन से स्टेप्स चलने चाहिए और किन शर्तों पर।
  • Events वे विशेष गतिविधियाँ हैं जो वर्कफ़्लो रन को ट्रिगर करती हैं, जैसे push, pull_request, schedule, आदि।
  • Runners वे मशीनें हैं जो ट्रिगर होने पर वर्कफ़्लोज़ चलाती हैं। GitHub Linux, Windows और macOS के लिए होस्टेड, फ्री रनर्स प्रदान करता है।
  • Jobs एक ही रनर पर निष्पादित स्टेप्स का सेट होते हैं। डिफ़ॉल्ट रूप से, जॉब्स समानांतर में चलते हैं लेकिन उन्हें क्रमिक रूप से चलने के लिए कॉन्फ़िगर किया जा सकता है।
  • Steps वे टास्क हैं जो कमांड्स या एक्शंस चलाते हैं, जो Makefile एक्शंस के समान होते हैं।
  • Actions GitHub Actions प्लेटफ़ॉर्म के लिए कस्टम एप्लिकेशन होते हैं जो जटिल लेकिन अक्सर दोहराए जाने वाले कार्यों को संपन्न करते हैं। चुनने के लिए कई एक्शंस उपलब्ध हैं, जिनमें से अधिकांश ओपन-सोर्स समुदाय द्वारा समर्थित हैं।

GitHub Actions के साथ शुरुआत

इस सेक्शन में, हम GitHub Actions का उपयोग करना सीखेंगे और Makefile में पहले उपयोग किए गए कमांड्स को दोहराने की कोशिश करेंगे।

अपना कोड GitHub पर स्थानांतरित करने के लिए, हमें अपने प्रोजेक्ट फ़ोल्डर को Git रिपॉज़िटरी में बदलना होगा:

$ git init

फिर, हम GitHub में एक नई रिपॉज़िटरी बनाते हैं और URL कॉपी करते हैं।

Creating the new GitHub repository

टर्मिनल में, हम नीचे दिए गए कमांड्स टाइप करते हैं ताकि:

  1. रिमोट रिपॉज़िटरी लिंक जोड़ें।
  2. रिमोट रिपॉज़िटरी से फ़ाइलें पुल करें।
  3. सभी फ़ाइलें जोड़ें और कमिट मैसेज के साथ कमिट करें।
  4. लोकल master से रिमोट main ब्रांच पर फ़ाइलें पुश करें।
$ 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

साइड नोट के रूप में, यदि आपको GitHub या Git पर एक त्वरित रिकैप चाहिए, तो GitHub and Git पर यह शुरुआती-अनुकूल ट्यूटोरियल देखें। यह आपको Git CLI टूल का उपयोग करके अपने डेटा साइंस प्रोजेक्ट का वर्ज़न बनाने और टीम के साथ साझा करने में मदद करेगा।

हमारा पाठ जारी रखते हुए—हम देखते हैं कि सभी फ़ाइलें सफलतापूर्वक रिमोट रिपॉज़िटरी में ट्रांसफ़र हो गई हैं।

Pushing the files to remote repository

अगला, हम एक GitHub Action वर्कफ़्लो बनाएँगे। सबसे पहले हमें अपनी रिपॉज़िटरी kingabzpro/Makefile-Actions के Actions टैब पर जाना होगा। फिर, हम नीले टेक्स्ट “set up a workflow yourself.” पर क्लिक करते हैं।

getting started with GitHub actions

हमें YML फ़ाइल पर रीडायरेक्ट कर दिया जाएगा, जहाँ हम वातावरण सेट करने और कमांड्स चलाने के लिए सारा कोड लिखेंगे। हम:

  1. वर्कफ़्लो का नाम देंगे।
  2. ट्रिगर इवेंट्स सेट करेंगे ताकि main ब्रांच पर कोड पुश होने या main ब्रांच पर पुल रिक्वेस्ट आने पर वर्कफ़्लो चले।
  3. लेटेस्ट Ubuntu Linux मशीन के साथ एक जॉब सेट करेंगे।
  4. स्टेप सेक्शन में checkout v3 एक्शन का उपयोग करेंगे। यह हमारे वर्कफ़्लो को रिपॉज़िटरीज़ तक पहुँचने में मदद करता है।
  5. आवश्यक Python पैकेज इंस्टॉल करेंगे, कोड फॉर्मेट करेंगे, और दोनों Python स्क्रिप्ट्स वैरिएबल्स के साथ चलाएँगे।
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

वर्कफ़्लो फ़ाइल को संदेश के साथ कमिट करने के बाद, यह स्वतः वर्कफ़्लो चलाना शुरू कर देगा।

running the workflow

सभी चरण पूरे होने में कम से कम 20 सेकंड लगेंगे।

लॉग्स जांचने के लिए, हम पहले वर्कफ़्लो रन पर क्लिक करते हैं, फिर Build बटन पर, और फिर लॉग्स तक पहुँचने के लिए प्रत्येक जॉब पर क्लिक करते हैं।

Build logs of GitHub Actions

यदि आपको यह मज़ेदार लगा, तो आपको यह Beginner's Guide to CI/CD for Machine Learning ज़रूर पसंद आएगा, जो मशीन लर्निंग वर्कफ़्लो बनाने और स्वचालित करने की बुनियादी बातें कवर करता है।

GitHub Actions को MakeFile के साथ जोड़ना

GitHub Action वर्कफ़्लोज़ को सरल और मानकीकृत करने के लिए, डेवलपर्स वर्कफ़्लो फ़ाइल के भीतर Make कमांड्स का उपयोग करते हैं। इस सेक्शन में, हम Make कमांड का उपयोग करके अपने वर्कफ़्लो कोड को सरल बनाना सीखेंगे और continuous machine learning (CML) एक्शन का उपयोग करना सीखेंगे।

शुरू करने से पहले, हमें रिमोट रिपॉज़िटरी से वर्कफ़्लो फ़ाइल पुल करनी होगी।

$ git pull

CML का उपयोग

Continuous Machine Learning (CML) iterative.ai का एक ओपन-सोर्स लाइब्रेरी है जो हमें अपने डेटा साइंस प्रोजेक्ट में कंटीन्युअस इंटीग्रेशन लागू करने की अनुमति देता है।

इस प्रोजेक्ट में, हम iterative/setup-cml GitHub Action का उपयोग करेंगे, जो वर्कफ़्लो में CML फ़ंक्शंस का उपयोग करके फ़िगर्स और डेटा सांख्यिकी के माध्यम से विश्लेषण रिपोर्ट जनरेट करता है।

रिपोर्ट बनाई जाएगी और हमारे GitHub कमिट से संलग्न की जाएगी ताकि हमारी टीम मर्ज करने से पहले इसकी समीक्षा और अनुमोदन कर सके।

हम Makefile को संशोधित करेंगे और एक अन्य टार्गेट “summary” जोड़ेंगे। ध्यान दें:

  • टार्गेट एक मल्टी-लाइन स्क्रिप्ट है जो summary.txt से टेक्स्ट डेटा को report.md में ट्रांसफ़र करती है।
  • फिर, एक-एक करके, यह प्रत्येक फ़िगर के लिए हेडिंग्स और फ़िगर दिखाने के लिए Markdown कोड report.md फ़ाइल में जोड़ता है।
  • अंत में, हम cml टूल का उपयोग करके एक डेटा विश्लेषणात्मक रिपोर्ट बनाते हैं और इसे कमिट कमेंट्स के तहत प्रदर्शित करते हैं।

कल्पना करें कि GitHub वर्कफ़्लो फ़ाइल में इतनी सारी लाइन्स जोड़नी पड़ें—इसे पढ़ना और संशोधित करना कठिन होगा। इसके बजाय, हम make summary का उपयोग करेंगे।

फ़ाइल: 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

Editing the workflow file using make command.

GitHub Action फ़ाइल संशोधित करना

अब हम अपनी main.yml फ़ाइल को एडिट करेंगे, जो .github/workflows डायरेक्टरी में मिलती है।

हम सभी कमांड्स और Python स्क्रिप्ट्स को make कमांड से बदलते हैं और CML Action को कमिट कमेंट में डेटा रिपोर्ट बनाने की अनुमति देते हैं। इसके अलावा, सुनिश्चित करें कि हम अपने रन में iterative/setup-cml@v3 Action जोड़ना न भूलें।

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

वर्कफ़्लो चलाना

वर्कफ़्लो को चलाने के लिए, हमें केवल सभी बदलावों को कमिट करना है और उन्हें रिमोट main ब्रांच के साथ सिंक करना है।

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

running GitHub action workflow

वर्कफ़्लो चलने में 32 सेकंड लगे—हमारी रिपोर्ट समीक्षा के लिए तैयार है। ऐसा करने के लिए, हम बिल्ड सारांश पर जाते हैं, नीचे स्क्रॉल करके Data Summary टैब पर क्लिक करते हैं, और फिर कमेंट लिंक पर क्लिक करते हैं (वह लिंक जो आप नीचे दिए चित्र में लाइन 20 पर देखते हैं):

workflow successfully finished

जैसा कि हम देख सकते हैं, डेटा सारांश और डेटा विज़ुअलाइज़ेशन हमारे कमिट से संलग्न हैं।

Automated analytical report generated using the GitHub Actions "CML".

प्रोजेक्ट kingabzpro/Makefile-Actions पर उपलब्ध है, और जब आप अटकें तो इसे गाइड के रूप में उपयोग कर सकते हैं। रिपॉज़िटरी पब्लिक है, तो बस इसे फोर्क करें और खुद यह जादू अनुभव करें!

क्या आप GitHub प्रमाणित होना चाहते हैं? विभिन्न GitHub प्रमाणपत्रों पर हमारे व्यापक गाइड को देखें!

निष्कर्ष

इस ट्यूटोरियल में, हमने डेटा विश्लेषणात्मक रिपोर्ट के स्वचालित जनरेशन के लिए Makefile और GitHub Actions पर ध्यान केंद्रित किया।

हमने यह भी सीखा कि वर्कफ़्लो कैसे बनाएं और चलाएं और GitHub वर्कफ़्लो के भीतर Make टूल का उपयोग करके स्वचालन प्रक्रिया को कैसे अनुकूलित और सरल बनाया जाए। कई लाइनों का कोड लिखने के बजाय, हम make summary का उपयोग करके एक डेटा विश्लेषण रिपोर्ट जनरेट कर सकते हैं जो हमारे कमिट से संलग्न होगी।

यदि आप डेटा साइंस के लिए CI/CD की कला में महारत हासिल करना चाहते हैं, तो CI/CD for Machine Learning कोर्स आज़माएँ। यह CI/CD, GitHub Actions, डेटा वर्ज़निंग, और मॉडल हाइपरपैरामीटर ऑप्टिमाइज़ेशन व मूल्यांकन के स्वचालन की बुनियादी बातें कवर करता है।

Abid Ali Awan

लेखक

Abid Ali Awan

एक प्रमाणित डेटा साइंटिस्ट के रूप में, मैं अत्याधुनिक तकनीक का उपयोग करके नवाचारी मशीन लर्निंग अनुप्रयोग बनाने के लिए उत्साहित रहता/रहती हूँ। स्पीच रिकॉग्निशन, डेटा विश्लेषण और रिपोर्टिंग, MLOps, संवादात्मक AI और NLP में मजबूत पृष्ठभूमि के साथ, मैंने ऐसे बुद्धिमान सिस्टम विकसित करने में अपनी विशेषज्ञता निखारी है जो वास्तविक प्रभाव डाल सकें। तकनीकी दक्षता के अलावा, मैं जटिल अवधारणाओं को स्पष्ट और संक्षिप्त भाषा में प्रस्तुत करने में भी निपुण हूँ। परिणामस्वरूप, मैं डेटा साइंस पर एक मांग में रहने वाला/वाली ब्लॉगर बन गया/गई हूँ, और डेटा प्रोफेशनलों के बढ़ते समुदाय के साथ अपने अनुभव और विचार साझा करता/करती हूँ। वर्तमान में, मैं कंटेंट निर्माण और संपादन पर केंद्रित हूँ, बड़े भाषा मॉडलों के साथ काम करते हुए ऐसा प्रभावशाली और आकर्षक कंटेंट विकसित कर रहा/रही हूँ जो व्यवसायों और व्यक्तियों दोनों को अपने डेटा का अधिकतम लाभ उठाने में मदद कर सके।

विषय