1.4.7 · HinglishPython & Scientific Computing

Data loading (CSV, JSON, parquet)

2,963 words13 min readRead in English

1.4.7 · AI-ML › Python & Scientific Computing

Ye formats kya hain?

Figure — Data loading (CSV, JSON, parquet)

Har format ko kaise load karein

CSV loading — first principles se

CSV row-oriented kyun hai: Jab tum Alice,25,92.5 likhte ho, computer left-to-right padhta hai, ek time mein ek row. Har row independent hoti hai. "All ages" paane ke liye, parser ko har row scan karni padti hai.

Key parameters WHY:

  • dtype: Pre-specifying types Pandas ki inference skip karta hai (jo ek sample padhta hai, guess karta hai, phir dobara padhta hai)—data ka ek full pass bachata hai
  • parse_dates: "2023-01-01" jaise strings strings hi rahenge jab tak parse na ho—comparisons fail ho jaate hain, sorting toot jaati hai
  • chunksize: DataFrame nahi, iterator return karta hai—RAM se bade datasets process karne deta hai

JSON loading — hierarchical access

JSON alag kyun hai: JSON nest kar sakta hai: {"user": {"name": "Alice", "prefs": {"theme": "dark"}}. Ye flat table nahi hai. Pandas ko ya toh flatten karna padega ya structure preserve karna padega.

Orient options WHY:

  • orient='records': Har JSON object → ek row (objects ke arrays ke liye default)
  • orient='index': Keys row labels hain, values row data hain
  • lines=True: Har line ek alag JSON object hai (JSONL format—streaming friendly, append karna aasaan)

Parquet loading — columnar efficiency

Parquet columnar kyun hai: Traditional row format: [Alice|25|92.5][Bob|30|87.3]—"all ages" padhne ka matlab hai full rows parse karna. Columnar: [names: Alice,Bob][ages: 25,30][scores: 92.5,87.3]—"all ages" padhne ke liye sirf ages block touch karna padta hai.

Compression benefit: Column data homogeneous hota hai (saare ints, saare floats)—mixed-type rows se better compress hota hai.

Filters WHY:

  • filters=[('age', '>', 25)]: Parquet har row group ke liye min/max stats store karta hai—data padhne ke bina poore row groups skip kar sakta hai (predicate pushdown)
  • CSV/JSON se filtered data padhna: poori file padhni padti hai, phir memory mein filter karo

Format comparison — kab kya use karein

Format Read Speed Write Speed Size Nested Data Type Safety Use Case
CSV Slow Fast Large No No (infer) Interchange, human-readable
JSON Slow Medium Largest Yes Partial APIs, hierarchical configs
Parquet Fast Slow Smallest Partial Yes Analytics, archival, ML pipelines

Size differences ka derivation (example: 1M rows, 10 columns):

CSV: 
- Har value text ke roop mein: "25" = 2 bytes + delimiter
- 1M × 10 × 3 bytes avg ≈ 30MB uncompressed

JSON:
- Har row mein keys include hoti hain: {"age": 25} vs 25
- Overhead ≈ 2-3× CSV
- 1M × 10 × 9 bytes ≈ 90MB uncompressed

Parquet:
- Columnar compression: RLE, dictionary encoding, bit-packing
- Typical: CSV se 5-10× chhota
- Same data ≈ 3-6MB

Data likhna

Performance tips — format internals se derived

  1. CSV: dtype parameter use karo—inference do baar scan karta hai, explicit types ek baar scan karte hain
  2. JSON: Streaming ke liye JSONL prefer karo (lines=True)—poora array load kiye bina processing allow karta hai
  3. Parquet: columns parameter hamesha use karo—columnar format ise almost free banata hai
  4. Large files: CSV chunk karo, Parquet row groups use karo, ya parallel loading ke liye Dask/Polars par switch karo
  5. Repeated access: CSV → Parquet ek baar convert karo, subsequent reads par 10-50× bachao

CSV dtype speedup ka derivation:

Without dtype:
1. 1000 sample rows padho → types infer karo (string? int? float?)
2. Start par seek karo
3. Saari rows padho, inferred types ke saath parse karo
Total: 1 + N passes

With dtype={'age': int}:
1. Saari rows padho, known types ke saath parse karo
Total: N passes

Speedup = (1 + N) / N → large N ke liye ~2× (ek kam full read)
Recall Feynman explanation

Socho tum ek naye ghar mein shift ho rahe ho. Tumhare paas pack karne ke teen tarike hain: CSV waise hai jaise saari cheezein cardboard boxes mein daal do aur upar ek label lagao. Pack karna aasaan, koi bhi box khol ke label padh ke samajh sakta hai andar kya hai. Lekin agar tumhe apni saari kitaabein dhunddhni hain, toh har ek box kholna padega aur digging karni padegi.

JSON waise hai jaise clear plastic bins use karo aur andar har item par detailed label lagao. Structure dikh sakta hai—"is bin mein kitaabein hain, aur kitaabon ke section mein Harry Potter ka subsection hai." Bahut accha agar cheezein naturally groups mein hain, lekin saare labels ki wajah se zyada jagah leta hai.

Parquet ek professional moving company ki tarah hai jo sab kuch type ke hisaab se ek warehouse mein sort kar deti hai. Saari kitaabein ek section mein, saare kapde doosre section mein, sab vacuum bags mein compress. "Saari kitaabein" dhundhna instant hai—seedha book section mein jaao. Lekin pack aur unpack karne ke liye special tools chahiye (CSV ki tarah notepad mein simply nahi khul sakta).

Data load karte waqt, tum ye boxes unpack kar rahe ho. CSV tumhe sab kuch unpack karne par majboor karta hai chahe ek hi cheez chahiye ho. Parquet tumhe sirf woh section grab karne deta hai jo tumhe chahiye.

Connections

  • 1.4.05-NumPy-arrays-and-operations — Parquet NumPy arrays efficiently store karta hai
  • 1.4.06-Pandas-DataFrames-and-operations — Saara loading DataFrames produce karta hai
  • 1.5.01-Handling-missing-data — CSV/JSON ko explicit NA handling chahiye
  • 1.4.08-Data-cleaning-and-preprocessing — Loading step 1 hai, cleaning step 2 hai
  • 2.3.05-Feature-engineeringtechniques — Parquet pipeline steps ke across feature types preserve karta hai
  • 3.1.02-TensorFlow-and-Keras-basics — TensorFlow tf.data ke saath Parquet directly read kar sakta hai

#flashcards/ai-ml

CSV aur Parquet ke beech key structural difference kya hai? :: CSV row-oriented hai (har line = ek record), Parquet columnar hai (har column saath stored). Parquet se ek column padhna fast hai; CSV se karne ke liye saari rows scan karni padti hain.

Parquet specific columns ke liye CSV se faster kyun load karta hai?
Parquet alag se store karta hai location indicate karne wale metadata ke saath. Ek column padhna = us column ke blocks par seek karna. CSV ko ek column extract karne ke liye poori rows parse karni padti hain.
pd.read_csv('file.csv', dtype={'age': int}) kya optimize karta hai?
Pandas ke type inference step ko skip karta hai (jo ek sample padhta hai, types guess karta hai, phir re-read karta hai). Explicitly types provide karne se ek full file scan eliminate hota hai, ~2× speedup.
read_csv mein chunksize parameter kab use karna chahiye?
Jab file itni badi ho ki memory mein fit na ho. chunksize=10000 ek baar mein 10k rows load karta hai, har chunk process karo, file size chahe kuch bhi ho memory bounded rehti hai.
pd.json_normalize(data) kya karta hai?
Nested JSON ko flat DataFrame mein flatten karta hai. {"user": {"name": "Alice"}} ko user.name ya user_name (sep parameter ke saath) jaise columns mein convert karta hai.
Tabular data ke liye JSON CSV se bada kyun hota hai?
JSON har record mein key names include karta hai: {"age": 25} vs CSV ka 25. Key repetition aur bracket/brace syntax ki wajah se overhead ~2-3× hota hai.
Parquet mein predicate pushdown kya hai?
Read ke dauran filters=[('age', '>', 25)] jaise filters use karna. Parquet row groups per row group min/max stats store karte hain—data padhne ke bina poore groups skip kar sakte hain. CSV mein possible nahi (sab padho, phir filter karo).
JSON ke liye orient='records' kyun use karein?
Common API format se match karta hai: objects ka array [{...}, {...}]. Har object ek DataFrame row banta hai. Tabular JSON ke liye default.
read_json mein lines=True ka kya matlab hai?
JSON Lines format (JSONL/NDJSON): har line ek alag JSON object hai, array mein wrapped nahi. Streaming enable karta hai (poora array load nahi karna padta), append karna aasaan (bas lines add karo).
CSV ko Parquet mein kab convert karna chahiye?
Jab data multiple baar padhna ho, especially specific columns select karte waqt. Initial conversion time leta hai, lekin subsequent reads 10-50× faster hoti hain. ML pipelines ke liye zaroori hai.
Parquet archival ke liye kaun sa compression use karna chahiye?
Maximum compression ke liye compression='gzip' (~5-10× chhota) jab read speed critical na ho. Balanced speed aur size ke liye compression='snappy' (default) use karo (~2-3× chhota).
Parquet data types preserve karta hai lekin CSV nahi karta, kyun?
Parquet file metadata mein schema store karta hai (column names, types, encoding). CSV plain text hai—types content se infer karne padte hain (ambiguous: "01234" int ho sakta hai ya string).
Partitioned Parquet kya hai?
Data ko column values ke hisaab se directories mein split karna: data/year=2024/, data/year=2025/. filters=[('year', '==', 2024)] ke saath padhne par sirf 2024 directory khulti hai, baaki skip—time-series ya categorical grouping ke liye bahut bada I/O saving.
read_csv mein usecols poori file kyun padhta hai?
CSV mein koi index ya metadata nahi hota. Parser ko column positions dhundhne ke liye har row scan karni padti hai, chahe zyaadatar columns discard karo. Sirf memory savings hoti hain, I/O savings nahi. Parquet ki columnar structure true I/O skipping enable karti hai.

Concept Map

includes

includes

includes

determines

is

uses

enables

forces full scan for

loaded via

skips inference improves

huge files use

bounds memory in

dates need

Need multiple data formats

CSV text row-oriented

JSON hierarchical self-describing

Parquet columnar binary

Row scan reads all rows

Columnar layout skips columns

dtype pre-specify types

chunksize iterator

parse_dates

Load speed, memory, type preservation