अध्याय ४ · खण्ड I · 26 मिनेट
अन्वेषणात्मक विश्लेषण: तालिकालाई प्रश्न सोध्ने
कुनै मोडेलले तपाईंको डाटा छुनुअघि, तीस मिनेट यससँग बस्नुहोस् र वास्तविक प्रश्न सोध्नुहोस्। EDA — Exploratory Data Analysis — त्यो अभ्यास हो जसले बग-आकारका अचम्म सस्ता हुँदै पक्रन्छ।
कुनै पनि मोडेलअघि, कुनै पनि फिचर इन्जिनियरिङअघि, कुनै पनि चलाख विचारअघि, तपाईं डाटासँग बस्नुहुन्छ। घण्टौं होइन। तीस मिनेट। तपाईंले यसलाई प्रश्न — साना, विशिष्ट प्रश्न जसका उत्तर तपाईं अग्रिम अनुमान गर्न सक्नुहुन्छ — सोध्नुहुन्छ र डाटा सहमत छ कि छैन जाँच्नुहुन्छ। यो अन्वेषणात्मक डाटा विश्लेषण, वा EDA हो, र यसलाई स्किप गर्नु “मोडेलले अनौठा नतिजा उत्पादन गर्दैछ” तीन हप्तापछिको सबैभन्दा सामान्य कारण हो। यो खण्ड EDA बानी हो, संक्षिप्तमा।
तीस मिनेटको बानी
हरेक EDA सत्रको संरचना झन्डै उही देखिन्छ:
- साइज र आकार — कति पङ्क्ति, कति स्तम्भ?
- प्रकार — के हरेक स्तम्भ अपेक्षित प्रकारको छ?
- सारांश —
head(),tail(),describe()ले के देखाउँछन्? - छुटेका — के छुटेको छ, र कहाँ?
- श्रेणीगत सन्तुलन — हरेक श्रेणीगत स्तम्भका लागि, कुन मान कति पटक देखापर्छन्?
- तीन अनुमान-र-जाँच प्रश्न — डाटाबारे तपाईंलाई थाहा भएको ठानेका तीन कुरा छान्नुहोस् र प्रमाणित गर्नुहोस्।
आधा घण्टा सामान्य सानो डाटासेटका लागि यो गर्न पर्याप्त छ। फाइदा ठूलो छ: बग सतहमा आउँछन्, धारणा सुधारिन्छन्, र तपाईं मोडेलिङ चरणमा डाटाले के समावेश गर्छ र गर्दैन पहिले नै थाहा पाएर पस्नुहुन्छ।
पहिलो चार प्रश्न
काल्पनिक विद्यालय-उपस्थिति डाटासेटसँग काम गर्दै:
import pandas as pd
df = pd.read_csv("data/schools.csv")
print(df.shape) # (पङ्क्ति, स्तम्भ)
print(df.dtypes) # हरेक स्तम्भको प्रकार
print(df.head()) # पहिलो 5 पङ्क्ति
print(df.describe()) # सङ्ख्यात्मक स्तम्भको सारांश तथ्याङ्क
सामान्य सत्र:
df.shapeले(12847, 8)फिर्ता गर्छ। सम्भाव्य — नेपालमा 12,000-30,000 विद्यालय छन् तपाईंले के गन्नुहुन्छ निर्भर।df.dtypesलेstudentsलाईint64,districtलाईobject,dateलाईobjectदेखाउँछ। मितिobjectहुनु सङ्केत हो: मैले अझै पार्स गरेको छैन।df.head()ले पहिलो पाँच विद्यालय देखाउँछ — पठनीय, तुरुन्तै कुनै अनौठो छैन।df.describe()लेstudentsको दायरा 0 देखि 2,847 सम्म औसत 156 देखाउँछ। 0 शङ्कास्पद छ — 0 विद्यार्थी भएको विद्यालय? 2,847 पनि शङ्कास्पद छ — औसतभन्दा निकै माथि। दुवै छानबिन चाहिन्छ।
तपाईंले चार लाइनबाटै केही सिक्नुभयो।
छुटेका — र कहाँ
सधैं छुटेका मान तिनी देखापर्ने संरचनासँग हेर्नुहोस्:
df.isna().sum()
df.isna().mean() * 100 # प्रति स्तम्भ छुटेको प्रतिशत
यदि students 0.4% छुटेको छ — ठीक छ। यदि district 30% छुटेको छ — संरचनात्मक रूपमा केही गलत छ।
उपयोगी ढाँचा: छुटेकालाई अर्को स्तम्भ द्वारा हेर्नुहोस्:
df.groupby("province")["students"].apply(lambda s: s.isna().mean() * 100)
यसले छुटेको समान रूपमा वितरित (अनियमित छुटेको, प्रायः सुरक्षित imputation योग्य) वा एक प्रदेशमा थुप्रिएको (संरचनात्मक — त्यो प्रदेशको डाटा फरक तरिकाले सङ्कलन गरिएको थियो र केही गर्नुअघि तपाईंले बुझ्नुपर्छ) बताउँछ।
श्रेणीगत सन्तुलन
हरेक श्रेणीगत स्तम्भका लागि चलाउनुहोस्:
print(df["province"].value_counts())
print(df["province"].value_counts(normalize=True) * 100)
पहिलोले कच्चा गन्ती देखाउँछ। दोस्रोले प्रतिशत। सँगै, यिनले प्रकट गर्छन्:
- श्रेणी सन्तुलित छन् कि छैनन् (हरेक प्रदेश ~14% — नेपालमा 7 प्रदेश छन्)।
- तपाईंले अपेक्षा गरेका श्रेणी वास्तवमा देखापर्छन् कि देखापर्दैनन् (सबै 7 प्रदेश छन्? वा केवल 6?)।
- अध्याय 3 मा तपाईंले छुटाएको अनौठो मानको “लामो पुच्छर” छ कि छैन (
provinceस्तम्भमा सातका सट्टा आठ प्रविष्टि — आठौँ"province 1"लोवरकेसमा, एउटा सामान्यीकरण चरण बिर्सेर अध्याय 3 बाँचेको)।
हरेक श्रेणीगत स्तम्भमा value_counts() चलाउनुहोस्। आउटपुट पढ्नुहोस्। अनौठो जे पनि नोट गर्नुहोस्।
तीन अनुमान-र-जाँच प्रश्न
EDA को सबैभन्दा उपयोगी भाग प्रश्न सोध्नु हो जसको उत्तर तपाईं अनुमान गर्न सक्नुहुन्छ। यदि तपाईंको अनुमान सही छ — तपाईं विश्वास निर्माण गर्नुहुन्छ। यदि गलत छ — तपाईंले महत्त्वपूर्ण केही भेट्नुभयो।
हाम्रो विद्यालय डाटासेटका लागि:
प्रश्न 1: प्रदेशले औसत विद्यालय साइज फरक हुन्छ?
अनुमान: बागमती (शहरी) ले कर्णाली (ग्रामीण) भन्दा सम्भवतः ठूला औसत विद्यालय छन्। सायद 200 बनाम 100।
df.groupby("province")["students"].mean()
यदि उत्तर तपाईंको अनुमानसँग मेल खान्छ — राम्रो। यदि कर्णालीले बागमतीभन्दा ठूला विद्यालय भएको देखाउँछ भने, केही गडबड छ। सम्भवतः डाटासेटमा कर्णालीका निजी आवासीय विद्यालय मात्र छन्। सम्भवतः एकाइ त्रुटि।
प्रश्न 2: बागमतीभित्र जिल्लाअनुसार विद्यालय कसरी वितरित छन्?
अनुमान: काठमाडौंमा सबैभन्दा बढी विद्यालय छन्। सम्भवतः बागमतीका विद्यालयको 20-30%।
bagmati = df[df["province"] == "Bagmati"]
print(bagmati["district"].value_counts().head(5))
शीर्ष पाँच र तिनले लिने प्रतिशत जाँच्नुहोस्।
प्रश्न 3: मिति स्तम्भ घनो छ कि खाडल छन्?
अनुमान: “विद्यालय सर्वेक्षण” डाटासेट वर्षमा एक पटक सङ्कलन गरिएको हुनसक्छ; हामीले प्रति विद्यालय एक मिति, धेरै विद्यालयमा दोहोरिएको देख्नुपर्छ।
print(df["date"].value_counts().head(10))
यदि हामीले वर्षभर समान वितरणसहित 365 अद्वितीय मिति देख्यौं भने, डाटा एकल सर्वेक्षण दिनमा सङ्कलन गरिएको थिएन — यो निरन्तर सङ्कलन गरिएको थियो, जुनले व्याख्या गर्ने तरिका बदल्छ।
यो लय हो। तीन साना अनुमान, तीन साना जाँच, तीस मिनेटको काम।
pandas-profiling सर्टकट
साना डाटासेटमा पहिलो-प्रहार EDA का लागि, ydata-profiling पुस्तकालयले अधिकांश माथिको स्वचालित रूपमा HTML रिपोर्ट उत्पादन गर्छ:
pip install ydata-profiling
from ydata_profiling import ProfileReport
profile = ProfileReport(df, title="Schools dataset")
profile.to_file("eda/schools_report.html")
रिपोर्टमा स्तम्भ वितरण, छुटेको, सहसम्बन्ध, र आधारभूत चेतावनी छन्। सुरुवात बिन्दुका रूपमा उपयोगी — आफ्ना प्रश्न सोध्ने प्रतिस्थापनका रूपमा कहिल्यै होइन। पुस्तकालयलाई तपाईं के सिक्न खोज्दै हुनुहुन्छ थाहा छैन; तपाईंलाई छ।
लेखेर राख्ने
जम्मा हुने सानो बानी: आफ्नो परियोजनामा eda/ फोल्डर राख्नुहोस्। हरेक EDA सत्रपछि बचाउनुहोस्:
- नोटबुक (
eda/schools_first_pass.ipynb) — तपाईंले चलाएका वास्तविक सेल। - छोटो पाठ सारांश (
eda/schools_first_pass.md) — तपाईंले सिकेका तीन-पाँच बुलेट, तीन-पाँच अचम्म, र डाटा मालिकका लागि तीन-पाँच प्रश्न।
पाठ सारांश तीन हप्तापछि तपाईंले मिति स्तम्भ कहिल्यै जाँच्नुभयो कि भएन सम्झन नसक्दा फेरि पढ्ने हो। नोटबुक तपाईंले फेरि चलाउन चाहँदा फेरि चलाउने हो। सँगै तिनले परियोजनाभर EDA काम जम्मा हुने बनाउँछन्।
आफ्नो बुझाइ जाँच्नुहोस्
Quick check
—तपाईंले 50,000 माइक्रोफाइनान्स ऋणको नयाँ डाटासेट लोड गर्नुभयो र `df.describe()` चलाउनुभयो। `loan_amount` स्तम्भले min = -3,500 र max = 45,000,000 देखाउँछ। सही व्याख्या के हो?
Quick check
—एक टिम सदस्यले सोध्छिन्: 'अनुमान-र-जाँच प्रश्नसँग किन झमेला? म मोडेल चलाएर के हुन्छ हेर्न सक्छु।' यो खण्डको आत्मामा, पहिले EDA गर्ने सबैभन्दा बलियो तर्क के हो?
अब के आउँछ
EDA ले तपाईंलाई भूगोलको परिचय दिन्छ। अर्को दुई खण्ड गहिरो जान्छन्: वितरण (हरेक स्तम्भले लिने आकार — समान, बाङ्गो, द्विमोडल, र हरेक आकारले के सङ्केत गर्छ) र सम्बन्ध (स्तम्भहरू सँगै कसरी फरक हुन्छन् — र त्यो भिन्नता वास्तविक सङ्केत हो कि आकस्मिक सहसम्बन्ध)। यो खण्डसँग मिलेर, तिनी तीनै मिलेर ध्यानवान् निर्माता बनाउने त्रिकोणी हुन्।