Enota 9 / 11

Generiranje kode: analiza s pomočjo umetne inteligence s Pythonom (pande) in SQL

Dobički:

  • Sposobnost sprejemanja robustne kode SQL in pandas ter branja in preverjanja vrstice za vrstico z dajanjem jasne sheme in namena umetni inteligenci
  • Sposobnost lovljenja tihih napak, kot so štetje vrstic, funkcija prileganja in prepustnost po spajanju/JOIN
  • Sposobnost reševanja težave pri odpravljanju napak, ne da bi jo utišali, in izogibanje zagonu kode, ne da bi jo preizkusili v produkcijskem okolju

Podatkovna znanost ima dva primarna jezika: SQL (jezik strukturiranih poizvedb — jezik za poizvedovanje po podatkih iz baz podatkov) in Python (natančneje knjižnica pandas — standardno orodje za programsko obdelavo tabel). V tej enoti se bomo naučili uporabljati umetno inteligenco kot kodnega partnerja: iz nje pridobiti trdno kodo SQL in pandas s pravimi vprašanji, prebrati in potrditi to kodo, odpravljati napake v njej in je nikoli ne izvajati na slepo. AI zapiše ponavljajočo se kodo v sekundah namesto v minutah; Toda vaša naloga je zagotoviti, da koda, ki jo ustvari, obdela pravilen stolpec s pravilno logiko. Delujoča koda ne pomeni pravilne kode.

Zakaj je ustvarjanje kode z AI močno, a tvegano

Umetna inteligenca zagotavlja tri velike prednosti pri ustvarjanju kode: hitrost (v nekaj sekundah napiše 30-vrstično operacijo po skupinah), opomnik (spominja vas na funkcijo pande, ki ste jo pozabili) in poučevanje (razloži kodo vrstico za vrstico). Vendar pa prinaša tri tveganja: tiho logično napako (koda, ki sešteje napačen stolpec, teče brez napak), prilagojeno funkcijo (predlaga metodo, ki ne obstaja) in past donosa (koda, ki deluje na majhnih podatkih, vendar se zruši pri 10 milijonih vrstic). Torej zlato pravilo: Preberite kodo AI, kot da bi jo napisali sami. Ne navajaj besed, ki jih ne razumeš.

SQL: obdelava podatkov pri izvoru

SQL vam omogoča pridobivanje podatkov iz baze podatkov in njihovo obdelavo tam; Povzamete lahko milijone vrstic, ne da bi jih potegnili v Python. Osnovni gradniki: SELECT (kateri stolpci), WHERE (katere vrstice), GROUP BY (združevanje in povzemanje), JOIN (združevanje tabel), HAVING (filter po združevanju). Umetna inteligenca je v veliko pomoč pri pisanju zapletenih JOIN-ov in okenskih funkcij, vendar ne pozabite preveriti dveh stvari: ali je JOIN prek pravilnega ključa (napačen ključ podvoji vrstice) in ali je logika filtra pravilna (zlasti obnašanje NULL in datumska obdobja).

Pozor: ne zaženite poizvedbe SQL, ki jo ustvari umetna inteligenca, neposredno proti produkcijski bazi podatkov. Najprej preizkusite z majhno kopijo ali OMEJITE. Nikoli ne zaženite poizvedbe UPDATE/DELETE brez potrditve pogoja WHERE; Napačen WHERE lahko izbriše celotno tabelo.

Python/pande: prilagodljiva analiza

pandas je standardni način za upravljanje tabel (DataFrame) v Pythonu. Najučinkovitejša uporaba umetne inteligence je, da ji damo jasno shemo in namen. Najpogosteje uporabljene operacije: filter, groupby, merge, pivot_table, apply. AI jih hitro zapiše; Preveriti želite logiko: ali je združevanje v pravilnem stolpcu, ali je spajanje nepričakovano spremenilo število vrstic (vedno preverite število vrstic po spajanju), ali verižne operacije spreminjajo izvirnik.

transakcija

SQL

pande

kontrolna točka

Filtriranje

KJE

df[df.x > 5]

Vedenje NULL/NaN

združevanje

ZDRUŽI PO

df.groupby()

Je to desni stolpec?

združiti

PRIDRUŽI SE

df.merge()

Sprememba števila vrstic

Povzetek

AVG(), SUM()

.mean(), .sum()

Kateri stolpec je bil zbran

Razvrsti po

NAROČI PO

.sort_values()

Smer (naraščajoče/padajoče)

deduplikacija

RAZLIČNA

.drop_duplicates()

V katerih stolpcih?

Odpravljanje napak: z AI

Ko koda odpove, je AI odličen partner za odpravljanje napak. Posredujte mu celotno sporočilo o napaki in ustrezen delček kode. Toda pazite se dveh pasti. Prvič, umetna inteligenca lahko predlaga rešitev, ki "utiša" napako (npr. skrivanje opozoril) - to napake ne odpravi, temveč jo skrije. Drugič, AI včasih med »reševanjem« težave tiho spremeni drugo vedenje. Pravilo: razumeti popravek, razrešiti, ne utišati, in preveriti, ali je izhod po popravku še vedno pravilen.

Želite razlagati in vzdrževati kodo

Ko kupujete kodo pri AI, zahtevajte kodo, ki je berljiva in vzdržljiva, ne le kodo, ki "deluje". Ko vi ali vaš kolega nekaj mesecev pozneje odprete to kodo, bi moralo biti sposobno razumeti, kaj počne. Če želite to narediti, naj bo navada, da AI vključuje tri stvari: smiselna imena spremenljivk (orders_temiz, ne df2), kratke vrstice komentarjev pri kritičnih korakih (razlaga zakaj, ne kaj se dela) in imenovano konstanto namesto magične številke (ACCEPT_ESIGI = 0,85 namesto 0,85, zakopanega v kodi). Izogibajte se tudi dolgim ​​enovrstičnim verigam (povezovanje petih dejanj v eno vrstico); ti otežujejo odpravljanje napak. Privzeto AI pogosto ustvari jedrnato in "pametno" kodo; Če jasno rečete "pisati berljivo, razlagati, vzdrževati", boste dobili veliko bolj vzdržljiv rezultat. To je tudi osnova ponovljivosti (Enota 10): koda, ki je ne razumemo, je koda, ki je ni mogoče znova varno zagnati.

trije mini kovčki

Primer 1 – podvajanje JOIN. Analitik je združil naročila s tabelo izdelkov in ugotovil, da je skupni promet 3-krat večji. Vzrok: vsak izdelek je imel več vrstic (različnih barv) v tabeli izdelkov; JOIN je podvojil vsako naročilo. Koda AI je "delovala", vendar je število vrstic poskočilo z 240 tisoč na 690 tisoč. Lekcija: vedno preverite število vrstic po spajanju/JOIN.

Primer 2 – Funkcija prileganja. Pripravniku je predlagal AI df.groupby('x').summarize(); V pandah te metode ni (obstaja .agg()). Koda ni delovala, pripravnik je bil izgubljen za 20 minut. Lekcija: preverite funkcijo, ki je ne prepoznate v dokumentu; AI lahko izdela metode.

Primer 3 – Padec donosa. Ena koda je poizvedovala po bazi podatkov v aplikaciji za vsako vrstico; Deloval je na 5000 vrsticah, trajal je 9 ur na 4 milijonih vrstic in se ustavil. Ko je AI predlagal vektorizirano (serijsko) rešitev, se je čas zmanjšal na 40 sekund. Lekcija: koda, ki deluje na majhnih podatkih, se lahko zruši na velikih podatkih; Upoštevajte učinkovitost.

Štiri predloge za kopiranje

1) Zahtevanje SQL s shemo:

Vaša vloga: SQL pomočnik (PostgreSQL). Tabele:- naročila(id, customer_id, datum, časovni žig, znesek numerično)- stranke(id, besedilo mesta) Naloga: Pridobite skupni promet in število naročil na mesto v letu 2024, razvrščenih po prometu v padajočem vrstnem redu. Pojasnite, kako ravnate z NULL mesti. Najprej bom preizkusil poizvedbo z LIMIT; POSODOBITE/IZBRIŠITE generacijo.

2) postopek pande s kontrolno točko:

Imam DataFrames df (naročila) in df_customers (stranke). Izračunajte povprečni znesek na mesto. POMEMBNO: natisnite število vrstic pred in po spajanju, da vidim, ali je prišlo do podvajanja. Pojasnite, v katerem stolpcu ste združili in zakaj ste izbrali notranji/levi.

3) Razlaga kode in preverjanje:

Po vrsticah razložite naslednjo kodo pande: kaj počne vsaka vrstica, kakšne predpostavke daje, v katerih primerih lahko daje napačne rezultate? Sporoči mi, če sem uporabil funkcijo fudge. Koda: [prilepi]

4) Odpravljanje napak:

Ta koda daje to napako. Celotno sporočilo o napaki: [prilepi]. Koda: [paste]. Pojasnite glavni vzrok napake in jo odpravite. Popravite ga tako, da dejansko rešite težavo, ne z utišanjem opozorila. Navedite tudi, ali je popravek spremenil izhod.

Šibek poziv/močan poziv

Šibek poziv:

Napišite poizvedbo, ki mi da prodajo po mestu.

Imena tabel, stolpci, tip baze podatkov, vedenje NULL so nejasni. Umetna inteligenca je običajna, verjetno bo ustvarila poizvedbo, ki ne ustreza vaši tabeli.

Močan poziv:

Vaša vloga: SQL pomočnik (MySQL 8). Tabela: prodaja (id, varchar mesta, decimalni znesek, datum datum). Naloga: Pridobite skupni in povprečni znesek, število naročil na mesto za leto 2024; Razvrsti padajoče po skupnem znesku; Pokaži samo mesta z več kot 100 naročili (HAVING).NULL izključi mesto. Pojasnite poizvedbo; Testiral bom z LIMIT.

Tu so baza podatkov, shema, filter, razvrščanje in pravilo NULL očitni.

Pogoste napake

  • Zagon kode brez branja. Delovna koda ni pravilna koda; Tudi koda, ki manipulira z napačnim stolpcem, deluje brez napak.
  • Ni preverjanja števila vrstic po spajanju/JOIN. Napačen ključ tiho podvaja vrstice in napihuje skupne vrednosti.
  • Ni preverjanja funkcije prileganja. AI lahko predlaga metode, ki ne obstajajo; Iz dokumenta potrdite, da ga ne prepoznate.
  • Brez razmišljanja o učinkovitosti. uporaba/zanka, ki deluje pri majhnih zrušitvah podatkov na milijone vrstic; vektoriziraj.
  • Zagon neposredno v produkcijski bazi podatkov. Še posebej izvajanje UPDATE/DELETE brez WHERE ali testiranja je katastrofalno.
Namig: navadite se, da vsakemu delu kode, ki ga prejmete od umetne inteligence, dodate "validacijsko vrstico": ročno število vrstic pred in po obdelavi, nekaj vzorčnih vrstic in kritično skupno vrednost. Ta tri preverjanja ujamejo večino tihih logičnih napak.

Če povzamem

AI je močan partner, ki hitro ustvari kodo SQL in pandas, vendar ni slepa avtoriteta. Jasno mu povejte načrt in namen; Preberite kodo, ki jo ustvari, kot da ste jo napisali sami; Preverite število vrstic, funkcije prileganja in prepustnost po spajanju/JOIN; Ne zaženite ga, ne da bi ga preizkusili v produkcijski bazi podatkov. Pri odpravljanju napak si prizadevajte rešiti težavo, ne pa je utišati. Koda, ki deluje, ni pravilna koda; Samo vi lahko zagotovite točnost.

Aplikacijska naloga

Izberite vprašanje za analizo (npr. »mesečni promet na kanal«) in zahtevajte kodo od umetne inteligence s SQL in pandami. Preberite obe kodi vrstico za vrstico, preverite število vrstic po spajanju/JOIN in ročno preverite vsaj eno kritično vsoto. Primerjajte, ali obe kodi dajeta enak rezultat; Če je drugačen, ugotovite zakaj.

kontrolni seznam

  • [ ] Ali sem AI jasno dal tabelo/shemo in namen?
  • [ ] Ali sem prebral in razumel kodo, ki jo je ustvaril vrstico za vrstico?
  • [ ] Ali sem preveril število vrstic po spajanju/JOIN?
  • [ ] Ali sem preveril funkcije, ki jih v dokumentaciji ne prepoznam?
  • [ ] Ali sem kodo najprej preizkusil na varnih/majhnih podatkih in ne v produkcijskem okolju?