Vienetas 9 / 11

Kodo generavimas: AI padedama analizė naudojant Python (pandas) ir SQL

Pelnas:

  • Galimybė priimti tvirtą SQL ir pandų kodą ir skaityti bei tikrinti eilutę po eilutės, suteikiant aiškią schemą ir paskirtį dirbtiniam intelektui
  • Galimybė užfiksuoti tylias klaidas, tokias kaip eilučių skaičius, pritaikymo funkcija ir pralaidumas po sujungimo / PRISIJUNGIMO
  • Galimybė išspręsti derinimo problemą jos nenutildant ir išvengti kodo paleidimo jo neišbandžius gamybinėje aplinkoje

Duomenų mokslas turi dvi pagrindines kalbas: SQL (struktūrinės užklausos kalba – duomenų užklausų iš duomenų bazių kalba) ir Python (konkrečiai, pandų biblioteka – standartinis įrankis programiškai manipuliuoti lentelėmis). Šiame skyriuje išmoksime naudoti dirbtinį intelektą kaip kodo partnerį: gauti patikimą SQL ir pandos kodą iš jo su tinkamais klausimais, perskaityti ir patvirtinti tą kodą, jį derinti ir niekada jo neleisti aklai. AI rašo pasikartojantį kodą sekundėmis, o ne minutėmis; Tačiau jūsų darbas yra užtikrinti, kad jo sukurtas kodas apdorotų teisingą stulpelį su teisinga logika. Darbinis kodas nereiškia teisingo kodo.

Kodėl kodo kūrimas naudojant AI yra galingas, bet rizikingas

Dirbtinis intelektas suteikia tris didelius kodo generavimo pranašumus: greitį (per kelias sekundes įrašo 30 eilučių grupinio sukimo operaciją), priminimą (primena apie pamirštą pandų funkciją) ir mokymą (paaiškina kodą eilutę po eilutės). Tačiau tai kelia tris rizikas: tyli logikos klaida (kodas, kuris susumuoja neteisingą stulpelį, veikia be klaidų), pritaikyta funkcija (siūlo metodą, kurio nėra) ir našumo spąstai (kodas, veikiantis su nedideliais duomenimis, bet sugenda esant 10 milijonų eilučių). Taigi auksinė taisyklė: perskaitykite AI kodą taip, lyg būtumėte jį parašęs pats. Nepraleiskite linijos, kurios nesuprantate.

SQL: apdoroti duomenis šaltinyje

SQL leidžia gauti duomenis iš duomenų bazės ir ten juos apdoroti; Galite apibendrinti milijonus eilučių neįtraukdami jų į Python. Pagrindiniai kūrimo blokai: SELECT (kurie stulpeliai), WHERE (kurios eilutės), GROUP BY (grupuoti ir apibendrinti), JOIN (sujungti lenteles), HAVING (filtras po grupės). AI labai padeda rašyti sudėtingus JOIN ir langų funkcijas, tačiau būtinai patikrinkite du dalykus: ar JOIN per teisingą raktą (netinkamas raktas dubliuoja eilutes) ir ar teisinga filtro logika (ypač NULL elgesys ir datos intervalai).

Įspėjimas: nevykdykite dirbtinio intelekto sugeneruotos SQL užklausos tiesiogiai gamybos duomenų bazėje. Pirmiausia išbandykite mažą kopiją arba LIMIT. Niekada nevykdykite UPDATE/DELETE užklausos nepatvirtinus sąlygos WHERE; Neteisinga WHERE gali ištrinti visą lentelę.

Python/pandos: lanksti analizė

pandas yra standartinis būdas valdyti lenteles (DataFrame) Python. Veiksmingiausias AI panaudojimas yra suteikti jam aiškią schemą ir tikslą. Dažniausiai naudojamos operacijos: filtras, groupby, merge, pivot_table, apply. AI rašo tai greitai; Ką norite patikrinti, yra logika: ar grupavimas teisingame stulpelyje, ar sujungimas netikėtai pakeitė eilučių skaičių (visada patikrinkite eilučių skaičių po sujungimo), ar grandinės operacijos pakeičia originalą.

sandorį

SQL

pandos

patikros punktas

Filtravimas

KUR

df[df.x > 5]

NULL/NaN elgesys

grupavimas

GRUPĖ BY

df.groupby()

Ar tai dešinysis stulpelis?

sujungti

PRISIJUNK

df.merge()

Eilučių skaičiaus pakeitimas

Santrauka

AVG(), SUM()

.mean(), .sum()

Kuris stulpelis buvo surinktas

Rūšiuoti pagal

UŽSAKYTI PAGAL

.sort_values()

Kryptis (didėjanti / mažėjanti)

deduplikacija

ATSKIRTI

.drop_duplicates()

Kuriuose stulpeliuose?

Derinimas: naudojant AI

Kai kodas nepavyksta, AI yra puikus derinimo partneris. Pateikite visą klaidos pranešimą ir atitinkamą kodo fragmentą. Tačiau saugokitės dviejų spąstų. Pirma, dirbtinis intelektas gali pasiūlyti sprendimą, kuris „nutildo“ klaidą (pvz., perspėjimų slėpimas) – tai ne ištaiso klaidą, o ją paslepia. Antra, AI kartais tyliai pakeičia kitą elgesį „sprendžiant“ problemą. Taisyklė: supraskite pataisą, išspręskite ne nutildyti ir patikrinkite, ar išvestis vis dar teisinga po pataisymo.

Nori interpretuojamo ir prižiūrimo kodo

Pirkdami kodą iš AI, prašykite kodo, kuris būtų skaitomas ir prižiūrimas, o ne tik „veikiančio“. Kai jūs ar kolega atidarote kodą po kelių mėnesių, jis turėtų suprasti, ką jis daro. Norėdami tai padaryti, įpraskite, kad dirbtinis intelektas apimtų tris dalykus: prasmingus kintamųjų pavadinimus (orders_temiz, o ne df2), trumpas komentarų eilutes svarbiuose žingsniuose (paaiškinant, kodėl, o ne kas daroma), ir pavadintą konstantą vietoj stebuklingo skaičiaus (ACCEPT_ESIGI = 0,85, o ne 0,85). Taip pat venkite ilgų vienos eilutės grandinių (jungiant penkis veiksmus vienoje eilutėje); tai apsunkina derinimą. Pagal numatytuosius nustatymus AI dažnai sukuria glaustą ir „protingą“ kodą; Jei aiškiai pasakysite „rašyti skaitomus, interpretuojamus, prižiūrimus“, gausite daug labiau prižiūrimą išvestį. Tai taip pat yra atkuriamumo pagrindas (10 skyrius): nesuprantamas kodas yra kodas, kurio negalima saugiai paleisti iš naujo.

trys mini dėklai

1 atvejis – JOIN replikacija. Analitikas sujungė užsakymus su produktų lentele ir nustatė, kad bendra apyvarta buvo 3 kartus didesnė. Priežastis: kiekvieno produkto lentelėje buvo kelios eilutės (skirtingos spalvos); JOIN dubliavo kiekvieną užsakymą. AI kodas „veikė“, tačiau eilučių skaičius šoktelėjo nuo 240 tūkst. iki 690 tūkst. Pamoka: visada patikrinkite eilučių skaičių po sujungimo/JOIN.

2 atvejis – montavimo funkcija. Jis pasiūlė AI df.groupby('x').summarize() praktikantui; Pandose tokio metodo nėra (yra .agg()). Kodas neveikė, praktikantas buvo pasimetęs 20 minučių. Pamoka: patikrinkite funkciją, kurios neatpažįstate dokumente; AI gali sugalvoti metodus.

3 atvejis – derliaus sumažėjimas. Vienas kodas teikė užklausą kiekvienos eilutės duomenų bazėje; Jis veikė 5000 linijų, užtruko 9 valandas 4 milijonuose linijų ir sustojo. Kai AI pasiūlė vektorizuotą (partijinį) tirpalą, laikas buvo sumažintas iki 40 sekundžių. Pamoka: kodas, veikiantis su mažais duomenimis, gali sugesti esant dideliems duomenims; Apsvarstykite efektyvumą.

Keturi kopijuojami šablonai

1) SQL užklausa su schema:

Jūsų vaidmuo: SQL asistentas (PostgreSQL). Lentelės:- užsakymai(id, kliento_id, datos laiko žyma, sumos skaitinė vertė)- klientai(id, miesto tekstas)Užduotis: Gaukite bendrą apyvartą ir užsakymų skaičių viename mieste 2024 m., surūšiuotus pagal apyvartą mažėjančia tvarka. Paaiškinkite, kaip tvarkote NULL miestus. Pirmiausia išbandysiu užklausą su LIMIT; ATNAUJINTI / IŠTRINTI kartos.

2) pandos procesas su kontroliniu tašku:

Turiu DataFrames df (užsakymai) ir df_customers (klientai). Apskaičiuokite vidutinę sumą vienam miestui. SVARBU: atspausdinkite eilučių skaičių prieš ir po sujungimo, kad galėčiau pamatyti, ar nėra dubliavimo. Paaiškinkite, kuriame stulpelyje sujungėte ir kodėl pasirinkote vidinį / kairįjį.

3) Kodo paaiškinimas ir patikrinimas:

Eilutę po eilutės paaiškinkite pandų kodą: ką kiekviena eilutė daro, kokias prielaidas daro, kokiais atvejais ji gali duoti klaidingus rezultatus? Praneškite man, ar naudojau „fudge“ funkciją. Kodas: [įklijuoti]

4) Derinimas:

Šis kodas pateikia šią klaidą. Visas klaidos pranešimas: [įklijuoti]. Kodas: [įklijuoti]. Paaiškinkite ROOT klaidos priežastį ir ją ištaisykite. Išspręskite problemą iš tikrųjų išspręsdami, o ne nutildydami įspėjimą. Taip pat nurodykite, ar taisymas pakeitė išvestį.

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Parašykite užklausą, kuri man pateiktų pardavimus kiekviename mieste.

Lentelių pavadinimai, stulpeliai, duomenų bazės tipas, NULL elgesys yra neaiškūs. AI yra įprastas, greičiausiai jis pateiks užklausą, kuri neatitinka jūsų lentelės.

Galingas raginimas:

Jūsų vaidmuo: SQL asistentas (MySQL 8). Lentelė: pardavimai (id, miestas varchar, suma po kablelio, datos data). Užduotis: gauti bendrą ir vidutinę sumą, užsakymų skaičių vienam miestui 2024 metams; Rūšiuoti mažėjant pagal bendrą sumą; Rodyti tik miestus, kuriuose yra daugiau nei 100 užsakymų (TURIMAS).NULL neįtraukti miestą. Paaiškinkite užklausą; Bandysiu su LIMIT.

Čia duomenų bazė, schema, filtras, rūšiavimas ir NULL taisyklė yra akivaizdūs.

Dažnos klaidos

  • Kodo paleidimas jo neskaitant. Darbinis kodas yra neteisingas kodas; Kodas, kuris manipuliuoja netinkamu stulpeliu, taip pat veikia be klaidų.
  • Netikrinamas eilučių skaičius po sujungimo / JOIN. Netinkamas klavišas tyliai dubliuoja eilutes ir padidina sumas.
  • Nepatikrinama montavimo funkcija. AI gali pasiūlyti metodus, kurių nėra; Patvirtinkite iš dokumento, kad jo neatpažįstate.
  • Negalvojant apie efektyvumą. taikyti / ciklo dirbti su mažomis duomenų gedimais milijonuose eilučių; vektorizuoti.
  • Paleiskite tiesiogiai gamybos duomenų bazėje. Ypač pražūtinga paleisti UPDATE/DELETE be WHERE arba testavimo.
Patarimas: įpraskite pridėti „patvirtinimo eilutę“ prie kiekvieno kodo, kurį gaunate iš AI: eilučių skaičių iš anksto ir po apdorojimo, keletą pavyzdinių eilučių ir svarbiausią sumą ranka. Šie trys patikrinimai nustato daugumą tyliosios logikos klaidų.

Apibendrinant

AI yra galingas partneris, greitai sukuriantis SQL ir pandos kodą, tačiau jis nėra aklas autoritetas. Aiškiai pateikite jam schemą ir tikslą; Perskaitykite jo sukurtą kodą taip, lyg būtumėte jį parašęs pats; Patikrinkite eilučių skaičių, pritaikymo funkcijas ir pralaidumą po sujungimo/JOIN; Nepaleiskite jos neišbandę gamybos duomenų bazėje. Derindami siekite problemą, o ne ją nutildykite. Veikiantis kodas nėra teisingas; Tik jūs galite garantuoti tikslumą.

Taikymo užduotis

Pasirinkite analizės klausimą (pvz., „Kanalo mėnesio apyvarta“) ir paprašykite kodo iš AI su SQL ir pandomis. Perskaitykite abu kodus po eilutės, patikrinkite eilučių skaičių po sujungimo / JOIN ir rankiniu būdu patikrinkite bent vieną kritinę sumą. Palyginkite, ar abu kodai duoda tą patį rezultatą; Jei skiriasi, sužinokite kodėl.

kontrolinis sąrašas

  • [ ] Ar aiškiai pateikiau lentelę / schemą ir tikslą AI?
  • [ ] Ar aš perskaičiau ir supratau kodą, kurį jis sukūrė eilutė po eilutės?
  • [ ] Ar patikrinau eilučių skaičių po sujungimo/PRISIJUNGIMO?
  • [ ] Ar patikrinau funkcijas, kurių neatpažįstu iš dokumentacijos?
  • [ ] Ar pirmiausia išbandžiau kodą su saugiais / mažais duomenimis, o ne gamybos aplinkoje?