Theory
वह shape जिसमें statistics असल में रहती है
Vectors अकेले columns ले जाते थे। पर CampusPulse survey चार columns चौड़ा है: roll (numbers), city (text), stay (categories), screen time (numbers): अलग-अलग types, साथ यात्रा करते हुए, प्रति student एक row।
इसके लिए R का container data frame है: वह type जो read.csv पहले ही आपको दे चुकी है, pandas के DataFrame का ancestor, और वह shape जिस पर इस subject का बचा हर lesson काम करता है।
आज: एक बनाइए, inspect कीजिए, measure कीजिए, और save कीजिए: daily verbs।
Theory
Stapled vectors का एक register
Class register की कल्पना कीजिए: roll numbers का एक column, names का एक, attendance का एक: हर column अपनी तरह का data, सभी rows aligned ताकि row 7 हर जगह वही student हो।
एक data frame बिल्कुल यही है: बराबर length के vectors पहलू से stapled: हर column एक type (एक vector), पूरी चीज़ एक table। एक column बाहर खींचिए ($) और आप वापस एक vector पर हैं, हर vector skill अभी भी काम करते हुए।
Practical
बनाना, inspect करना, measure करना, save करना
# build one by hand (usually read.csv does this for you)
survey <- data.frame(
roll = c(101, 102, 103, 104),
city = c("Surat", "Navsari", "Surat", "Bardoli"),
screen = c(120, 90, 240, 150)
)
# inspect
head(survey, 2) # first 2 rows
str(survey) # structure: types per column
summary(survey) # per-column statistics (see below)
View(survey) # RStudio spreadsheet window: CAPITAL V
# measure
nrow(survey) # [1] 4
ncol(survey) # [1] 3
dim(survey) # [1] 4 3
names(survey) # "roll" "city" "screen"
# a column is just a vector again
mean(survey$screen) # [1] 150
# save: row.names = FALSE, always
write.csv(survey, "survey_out.csv", row.names = FALSE)
Theory
summary(): एक command में पुराने दोस्त
Screen column के लिए, summary(survey) print करता है:
Min. 1st Qu. Median Mean 3rd Qu. Max.
90 112.5 135 150 172.5 240
उस row को फिर से धीरे-धीरे पढ़िए: minimum, Q1, median, Q3, maximum: box-plot lesson का five-number summary, plus mean: हर numeric column के लिए एक साथ compute हुआ।
Mean (150) median (135) से ऊपर? Right skew, आपकी Unit 1 training कहती है। एक command, और पूरी descriptive-statistics toolkit report करती है।
Quiz
एक student write.csv(survey, "out.csv") से save करता है (कोई row.names argument नहीं)। कल reload करने पर एक mystery पहला column X दिखता है जिसमें 1, 2, 3, 4 है। क्या हुआ?
- R ने अपने row numbers file में लिख दिए; write.csv(..., row.names = FALSE) इसे रोकता है
- Saving के दौरान file corrupt हो गई
- read.csv हमेशा एक X column जोड़ता है
- Roll column का नाम X कर दिया गया
Show the answer
R ने अपने row numbers file में लिख दिए; write.csv(..., row.names = FALSE) इसे रोकता है
Default रूप से write.csv data frame के ROW NAMES (1, 2, 3...) को एक असली column के रूप में export करता है, जो reload पर invented नाम X के नीचे आता है: फिर से save कीजिए और वे बढ़ते हैं। इलाज है आदत row.names = FALSE: BCA303 के pandas वाले to_csv index=False जैसी ही बीमारी और इलाज (वहाँ mystery column को 'Unnamed: 0' कहा जाता था)। वही lesson, दूसरी language: exporters को बताना ज़रूरी है कि अपनी internal numbering न भेजें।
Think first
चार outputs अंदाज़ा लगाइए
ऊपर वाले survey data frame का इस्तेमाल करते हुए (4 rows: screens 120, 90, 240, 150), अंदाज़ा लगाइए हर एक क्या print करता है, फिर tap कीजिए:
1. dim(survey)
2. survey$screen > 100
3. mean(survey$screen > 100)
4. view(survey)
Show the answer
1. [1] 4 3: rows फिर columns।
2. TRUE FALSE TRUE TRUE: एक logical vector ($ ने एक vector खींचा; comparisons vectorise होते हैं)।
3. 0.75: 100 से ऊपर का proportion: mean-of-condition idiom फिर वापस।
4. Error: could not find function "view": viewer View() है, capital V: case sensitivity कभी नहीं सोती।
अगर आपने सभी चार सही किए, तो vector lessons और data frame अभी click हुए: columns VECTORS हैं।
Watch out
रोज़ की चूकें
view() बनाम View(): lowercase fail होता है: वह एक capital letter जो beginners सबसे ज़्यादा भूलते हैं।
हर write.csv पर row.names = FALSE, वरना हर reload पर X column परेशान करता है।
$ भी case-sensitive है: survey$Screen NULL देता है (error नहीं!) जब column screen है: एक silent NULL जो अगली line crash कर देता है। जब कोई column "ग़ायब" हो जाए तो names(df) check कीजिए।
Theory
असली काम तक पुल
अब आप data को round-trip कर सकते हैं: read.csv अंदर, str/summary से audit, $ से compute, write.csv बाहर: वही loop जो आपने pandas में चलाया, एक language ऊपर। यहाँ से subject घूमना बंद करता है और काम शुरू करता है: अगला lesson इस data frame को slice करता है (condition से rows, नाम से columns): SQL के WHERE और pandas के masks का R जवाब: वही ख़ूबसूरत idea से आपकी तीसरी मुलाक़ात।
Summary
Key takeaways
- एक data frame = बराबर-length के vectors columns के रूप में staple किए गए: प्रति column एक type, प्रति table mixed types।
- data.frame() से बनाइए या read.csv से import कीजिए; df$col एक column को vector के रूप में निकालता है।
- Inspect कीजिए: head/tail, str (types), summary (प्रति column five-number summary + mean), View (capital V)।
- Measure कीजिए: nrow, ncol, dim, names।
- write.csv(df, file, row.names = FALSE) से save कीजिए: R का index=False।
- ग़लत-case का column name error नहीं, silent NULL देता है।
- Memory hook: stapled vectors का एक register।