Unitate 9 / 11

Generare de cod: Analiză asistată de AI cu Python (pandas) și SQL

Câștiguri:

  • Abilitatea de a prelua cod robust SQL și panda și de a-l citi și verifica linie cu linie, oferind o schemă și un scop clar inteligenței artificiale
  • Abilitatea de a detecta erori silențioase, cum ar fi numărul de rânduri, funcția de potrivire și debitul după îmbinare/JOIN
  • Abilitatea de a rezolva problema în depanare fără a o opri și de a evita rularea codului fără a-l testa în mediul de producție

Știința datelor are două limbaje principale: SQL (Structured Query Language - limbajul pentru interogarea datelor din baze de date) și Python (în special, biblioteca Pandas - instrumentul standard pentru manipularea tabelelor în mod programatic). În această unitate, vom învăța să folosim AI ca partener de cod: obținerea codului SQL și panda solid din el cu întrebările potrivite, citirea și validarea codului respectiv, depanarea lui și niciodată rularea lui orbește. AI scrie cod repetitiv în secunde în loc de minute; Dar este datoria ta să te asiguri că codul pe care îl produce procesează coloana corectă cu logica corectă. Cod de lucru nu înseamnă cod corect.

De ce producerea de cod cu AI este puternică, dar riscantă

AI oferă trei mari beneficii în generarea codului: viteză (scrie o operație de 30 de linii grup cu pivot în secunde), memento (vă amintește de o funcție Pandas pe care ați uitat-o) și predare (explica codul linie cu linie). Dar prezintă trei riscuri: eroare de logică silențioasă (codul care însumează coloana greșită rulează fără erori), funcția adaptată (sugerează o metodă care nu există) și capcană de randament (cod care funcționează pe date mici, dar se blochează la 10 milioane de rânduri). Deci regula de aur: citește codul AI ca și cum l-ai scris singur. Nu alerga pe linia pe care nu o înțelegi.

SQL: procesează datele la sursă

SQL vă permite să preluați date din baza de date și să le procesați acolo; Puteți rezuma milioane de linii fără a le trage în Python. Blocuri de bază: SELECT (care coloane), WHERE (care rânduri), GROUP BY (grupați și rezumați), JOIN (uniți tabele), HAVING (filtru post-grup). AI este foarte util în scrierea JOIN-urilor complexe și a funcțiilor de fereastră, dar asigurați-vă că verificați două lucruri: este JOIN-ul prin cheia corectă (cheia greșită duplică rândurile) și este corectă logica filtrului (în special comportamentul NULL și intervalele de date).

Atenție: Nu executați o interogare SQL generată de AI direct în baza de date de producție. Testați mai întâi cu o copie mică sau cu LIMIT. Nu rulați niciodată o interogare UPDATE/DELETE fără a valida condiția WHERE; Un WHERE greșit poate șterge întregul tabel.

Python/pandas: analiză flexibilă

panda este modalitatea standard de a manipula tabele (DataFrame) în Python. Cea mai eficientă utilizare a AI este de a-i oferi o schemă și un scop clar. Cele mai frecvent utilizate operațiuni: filter, groupby, merge, pivot_table, apply. AI le scrie rapid; Ceea ce doriți să verificați este logica: este gruparea în coloana corectă, dacă îmbinarea a schimbat numărul de rânduri în mod neașteptat (verificați întotdeauna numărul de rânduri după îmbinare), operațiunile în lanț schimbă originalul.

tranzacție

SQL

panda

punct de control

Filtrare

UNDE

df[df.x > 5]

Comportament NULL/NaN

gruparea

GROUP BY

df.groupby()

Este coloana potrivită?

îmbina

ÎNSCRIEȚI-VĂ

df.merge()

Modificarea numărului de rânduri

Rezumat

AVG(), SUM()

.mean(), .sum()

Care coloană a fost colectată

Sortați după

COMANDA PENTRU

.sort_values()

Direcție (crescător/descrescător)

deduplicare

DISTINCT

.drop_duplicates()

În ce coloane?

Depanare: cu AI

Când codul eșuează, AI este un partener excelent de depanare. Dați-i mesajul de eroare complet și fragmentul de cod relevant. Dar ferește-te de două capcane. În primul rând, AI-ul poate sugera o soluție care „tăcere” eroarea (de exemplu, ascunderea alertelor) - aceasta nu remediază eroarea, ci o ascunde. În al doilea rând, AI uneori schimbă în tăcere un alt comportament în timp ce „rezolvă” o problemă. Regulă: înțelegeți remedierea, rezolvați nu dezactivați sunetul și verificați dacă rezultatul este încă corect după remediere.

Vrei cod interpretabil și care poate fi întreținut

Când cumpărați cod de la AI, cereți cod care poate fi citit și întreținut, nu doar cod care „funcționează”. Când dvs. sau un coleg deschideți acel cod luni mai târziu, ar trebui să poată înțelege ce face. Pentru a face acest lucru, fă-ți un obicei ca AI să includă trei lucruri: nume de variabile semnificative (orders_temiz, nu df2), linii scurte de comentarii la pașii critici (care explică de ce, nu ce se face) și o constantă numită în loc de un număr magic (ACCEPT_ESIGI = 0,85 în loc de 0,85 îngropat în cod). Evitați, de asemenea, lanțurile lungi de o singură linie (conectarea a cinci acțiuni într-o singură linie); acestea fac dificilă depanarea. În mod implicit, AI produce adesea cod concis și „inteligent”; Dacă spuneți clar „scrieți lizibil, interpretabil, întreținut”, veți obține o ieșire mult mai ușor de întreținut. Aceasta este și baza reproductibilității (Unitatea 10): codul care nu este înțeles este codul care nu poate fi reluat în siguranță.

trei mini cutii

Cazul 1 – Replicarea JOIN. Un analist a combinat comenzile cu tabelul de produse și a constatat că cifra de afaceri totală este de 3 ori mai mare. Cauză: fiecare produs avea mai multe rânduri (culori diferite) în tabelul de produse; JOIN a duplicat fiecare comandă. Codul AI „funcționa”, dar numărul de linii a crescut de la 240 de mii la 690 de mii. Lecție: verificați întotdeauna numărul de linii după merge/JOIN.

Cazul 2 — Funcția de montare. El a sugerat AI df.groupby('x').summarize() unui stagiar; Nu există o astfel de metodă în panda (există .agg()). Codul nu a funcționat, stagiarul a fost pierdut timp de 20 de minute. Lecție: verificați o funcție pe care nu o recunoașteți din document; AI poate inventa metode.

Cazul 3 – Colapsul randamentului. Un cod interoga baza de date în aplicație pentru fiecare rând; A rulat pe 5.000 de linii, a durat 9 ore pe 4 milioane de linii și s-a oprit. Când AI a sugerat o soluție vectorizată (loc), timpul a fost redus la 40 de secunde. Lecție: codul care funcționează pe date mici se poate bloca pe date mari; Luați în considerare eficiența.

Patru șabloane copiabile

1) Solicitarea SQL cu schema:

Rolul dvs.: asistent SQL (PostgreSQL). Tabele:- comenzi(id, customer_id, data timestamp, suma numerică)- customers(id, city text) Sarcină: Obțineți cifra de afaceri totală și numărul de comenzi per oraș în 2024, sortate după cifra de afaceri în ordine descrescătoare. Explicați cum gestionați orașele NULL. Voi testa mai întâi interogarea cu LIMIT; UPDATE/DELETE generație.

2) proces panda cu punct de control:

Am DataFrames df (comenzi) și df_customers (clienți). Calculați suma medie pe oraș. IMPORTANT: tipăriți numărul de rânduri înainte și după îmbinare, astfel încât să pot vedea dacă există dublare. Explicați în ce coloană ați fuzionat și de ce ați ales interior/stânga.

3) Explicația codului și verificarea:

Explicați următorul cod panda linie cu linie: ce face fiecare linie, ce presupuneri face, în ce cazuri ar putea da rezultate greșite? Spune-mi dacă am folosit o funcție fudge. Cod: [paste]

4) Depanare:

Acest cod dă această eroare. Mesaj de eroare complet: [paste]. Cod: [paste]. Explicați cauza ROOT a erorii și remediați-o. Remediați-o prin rezolvarea efectivă a problemei, nu prin oprirea alertei. Indicați, de asemenea, dacă remedierea a modificat rezultatul.

Prompt slab / Prompt puternic

Prompt slab:

Scrieți o interogare care îmi oferă vânzări pe oraș.

Numele tabelelor, coloanele, tipul bazei de date, comportamentul NULL sunt neclare. AI este obișnuit, probabil va produce o interogare care nu se potrivește tabelului dvs.

Solicitare puternică:

Rolul dvs.: asistent SQL (MySQL 8). Tabel: vânzări (id, varchar oraș, suma zecimală, data dată). Sarcină: Obțineți suma totală și medie, numărul de comenzi pe oraș pentru anul 2024; Sortați descrescător după suma totală; Afișați numai orașele cu mai mult de 100 de comenzi (HAVING). NULL exclude orașul. Explicați interogarea; Voi testa cu LIMIT.

Aici baza de date, schema, filtrul, sortarea și regula NULL sunt evidente.

Greșeli comune

  • Rularea codului fără a-l citi. Codul de lucru nu este codul corect; Codul care manipulează coloana greșită rulează și fără erori.
  • Nu se verifică numărul de rânduri după merge/JOIN. Cheia greșită dublează în tăcere rândurile și umflă totalurile.
  • Nu se verifică funcția de montare. AI poate sugera metode care nu există; Confirmați din document că nu îl recunoașteți.
  • Nu mă gândesc la eficiență. aplicați/lucrul în buclă la blocări mici de date pe milioane de rânduri; vectoriza.
  • Rulați direct pe baza de date de producție. Mai ales rularea UPDATE/DELETE fără WHERE sau testarea este dezastruoasă.
Sfat: Obișnuiește-te să adaugi o „linie de validare” la fiecare bucată de cod pe care o primești de la AI: un număr de linii pre- și post-procesare, câteva linii de probă și un total critic manual. Aceste trei verificări surprind cele mai multe erori de logică silențioasă.

Pe scurt

AI este un partener puternic care produce rapid cod SQL și panda, dar nu este o autoritate oarbă. Dă-i clar schema și scopul; Citiți codul pe care îl produce ca și cum l-ați scris singur; Verificați numărul de rânduri, funcțiile de potrivire și debitul după îmbinare/JOIN; Nu-l rulați fără a-l testa pe baza de date de producție. Când depanați, încercați să rezolvați problema, nu să o reduceți la tăcere. Codul care funcționează nu este codul corect; Numai tu poți garanta acuratețea.

Sarcina de aplicare

Alegeți o întrebare de analiză (de exemplu, „cifra de afaceri lunară pe canal”) și solicitați cod de la AI atât cu SQL, cât și cu panda. Citiți ambele coduri linie cu linie, verificați numărul de linii după îmbinare/JOIN și verificați manual cel puțin o sumă critică. Comparați dacă cele două coduri produc același rezultat; Dacă este diferit, află de ce.

lista de verificare

  • [ ] Am dat tabelul/schema și scopul în mod clar AI?
  • [ ] Am citit și am înțeles codul pe care l-a produs linie cu linie?
  • [ ] Am verificat numărul de linii după îmbinare/ÎNĂSTRARE?
  • [ ] Am verificat funcțiile pe care nu le recunosc din documentație?
  • [ ] Am testat mai întâi codul pe date sigure/mice și nu în mediul de producție?