Yunit 9 / 11

Pagbuo ng Code: Pagsusuri na Tinulungan ng AI gamit ang Python (pandas) at SQL

Mga nadagdag:

  • Kakayahang kumuha ng matatag na SQL at pandas code at basahin at i-verify ito nang linya sa pamamagitan ng pagbibigay ng malinaw na schema at layunin sa artificial intelligence
  • Kakayahang mahuli ang mga silent error tulad ng row count, fitting function at throughput pagkatapos ng merge/JOIN
  • Kakayahang lutasin ang problema sa pag-debug nang hindi ito pinatahimik at iwasang patakbuhin ang code nang hindi sinusubukan ito sa kapaligiran ng produksyon

Ang agham ng data ay may dalawang pangunahing wika: SQL (Structured Query Language — ang wika para sa pag-query ng data mula sa mga database) at Python (partikular, ang pandas library — ang karaniwang tool para sa pagmamanipula ng mga talahanayan sa programmatically). Sa unit na ito, matututunan nating gamitin ang AI bilang isang code partner: pagkuha ng solidong SQL at pandas code mula dito gamit ang mga tamang tanong, pagbabasa at pagpapatunay sa code na iyon, pag-debug nito, at hindi kailanman pinapatakbo ito nang walang taros. Nagsusulat ang AI ng paulit-ulit na code sa mga segundo sa halip na mga minuto; Ngunit tungkulin mong tiyakin na ang code na ginagawa nito ay nagpoproseso ng tamang column na may tamang lohika. Ang gumaganang code ay hindi nangangahulugan ng tamang code.

Bakit malakas ngunit mapanganib ang paggawa ng code gamit ang AI

Nagbibigay ang AI ng tatlong malalaking benepisyo sa pagbuo ng code: bilis (nagsusulat ng 30-line groupby-pivot operation sa loob ng ilang segundo), paalala (nagpapaalala sa iyo ng function ng pandas na nakalimutan mo), at pagtuturo (ipinapaliwanag ang linya ng code sa bawat linya). Ngunit nagdadala ito ng tatlong panganib: silent logic error (code na nagsusuma sa maling column ay tumatakbo nang walang error), fitted function (nagmumungkahi ng paraan na hindi umiiral), at yield trap (code na gumagana sa maliit na data ngunit nag-crash sa 10 milyong row). Kaya ang ginintuang tuntunin: Basahin ang code ng AI na parang ikaw mismo ang sumulat nito. Huwag patakbuhin ang linyang hindi mo maintindihan.

SQL: iproseso ang data sa pinagmulan

Binibigyang-daan ka ng SQL na kunin ang data mula sa database at iproseso ito doon; Maaari mong ibuod ang milyun-milyong linya nang hindi hinihila ang mga ito sa Python. Pangunahing mga bloke ng gusali: SELECT (aling mga column), WHERE (which rows), GROUP BY (grupo at buod), JOIN (sumali sa mga talahanayan), HAVING (post-group filter). Malaking tulong ang AI sa pagsulat ng mga kumplikadong JOIN at mga function ng window, ngunit siguraduhing suriin ang dalawang bagay: ang JOIN ba sa pamamagitan ng tamang key (ang maling key ay duplicate ang mga row) at tama ba ang filter logic (lalo na ang NULL na pag-uugali at mga hanay ng petsa).

Babala: Huwag magpatakbo ng isang SQL na binuo ng AI na query nang direkta laban sa database ng produksyon. Subukan muna gamit ang maliit na kopya o LIMIT. Huwag magpatakbo ng isang UPDATE/DELETE query nang hindi pinapatunayan ang kundisyon na WHERE; Maaaring tanggalin ng maling WHERE ang buong talahanayan.

Python/pandas: nababaluktot na pagsusuri

Ang mga pandas ay ang karaniwang paraan upang manipulahin ang mga talahanayan (DataFrame) sa Python. Ang pinakamabisang paggamit ng AI ay upang bigyan ito ng malinaw na pamamaraan at layunin. Mga pinakakaraniwang ginagamit na operasyon: filter, groupby, merge, pivot_table, ilapat. Mabilis itong isinulat ng AI; Ang gusto mong suriin ay ang logic: ang pagpapangkat ba sa tamang column, binago ba ng merge ang bilang ng mga row nang hindi inaasahan (laging suriin ang bilang ng mga row pagkatapos ng merge), binago ba ng mga operasyon ng chain ang orihinal.

transaksyon

SQL

mga panda

checkpoint

Pag-filter

SAAN

df[df.x > 5]

NULL/NaN gawi

pagpapangkat

GROUP BY

df.groupby()

Tama ba ang column?

pagsamahin

SUMALI

df.merge()

Pagbabago ng row count

Buod

AVG(), SUM()

.mean(), .sum()

Aling column ang nakolekta

Pagbukud-bukurin ayon sa

ORDER NI

.sort_values()

Direksyon (pataas/pababa)

deduplikasyon

KAIBIGAN

.drop_duplicates()

Sa aling mga column?

Pag-debug: gamit ang AI

Kapag nabigo ang code, ang AI ay isang mahusay na kasosyo sa pag-debug. Ibigay dito ang buong mensahe ng error at ang nauugnay na snippet ng code. Ngunit mag-ingat sa dalawang bitag. Una, ang AI ay maaaring magmungkahi ng solusyon na "patahimik" sa error (hal., pagtatago ng mga alerto) — hindi nito inaayos ang error, tinatago nito. Pangalawa, minsan ay tahimik na binabago ng AI ang isa pang pag-uugali habang "nilutas" ang isang problema. Panuntunan: unawain ang pag-aayos, lutasin ang hindi pag-mute, at i-verify na tama pa rin ang output pagkatapos ng pag-aayos.

Gustong maipaliwanag at mapanatili ang code

Kapag bumibili ng code mula sa AI, humingi ng code na nababasa at napanatili, hindi lang code na "gumagana". Kapag binuksan mo o ng isang kasamahan ang code na iyon pagkaraan ng ilang buwan, dapat na maunawaan nito kung ano ang ginagawa nito. Upang gawin ito, ugaliing magkaroon ang AI ng tatlong bagay: mga makabuluhang variable na pangalan (orders_temiz, hindi df2), maikling linya ng komento sa mga kritikal na hakbang (nagpapaliwanag kung bakit, hindi kung ano ang ginagawa), at isang pinangalanang constant sa halip na isang magic number (ACCEPT_ESIGI = 0.85 sa halip na 0.85 na nakabaon sa code). Iwasan din ang mahabang single-line chain (pagkonekta ng limang aksyon sa isang linya); ginagawa nitong mahirap ang pag-debug. Bilang default, madalas na gumagawa ang AI ng maikli at "matalinong" code; Kung malinaw mong sinabing "magsulat ng nababasa, nabibigyang-kahulugan, napanatili", makakakuha ka ng mas mapanatili na output. Ito rin ang batayan ng reproducibility (Unit 10): code na hindi naiintindihan ay code na hindi maaaring muling patakbuhin nang ligtas.

tatlong mini case

Kaso 1 — SUMALI sa pagtitiklop. Pinagsama ng isang analyst ang mga order sa talahanayan ng produkto at natagpuan na ang kabuuang turnover ay 3 beses na mas mataas. Dahilan: ang bawat produkto ay may maraming row (iba't ibang kulay) sa talahanayan ng produkto; SUMALI nadoble ang bawat order. Ang code ng AI ay "gumagana", ngunit ang bilang ng mga linya ay tumalon mula 240 libo hanggang 690 libo. Aralin: palaging suriin ang bilang ng mga linya pagkatapos ng pagsama-sama/SUMALI.

Case 2 — Fitting function. Iminungkahi niya ang AI df.groupby('x').summarize() sa isang intern; Walang ganoong paraan sa mga pandas (mayroong .agg()). Hindi gumana ang code, nawala ang intern sa loob ng 20 minuto. Aralin: i-verify ang isang function na hindi mo nakikilala mula sa doc; Maaaring gumawa ng mga pamamaraan ang AI.

Kaso 3 — Pagbagsak ng ani. Ang isang code ay nagtatanong sa database na inilalapat para sa bawat hilera; Tumakbo ito sa 5,000 linya, tumagal ng 9 na oras sa 4 milyong linya, at huminto. Nang iminungkahi ng AI ang isang vectorized (batch) na solusyon, ang oras ay nabawasan sa 40 segundo. Aralin: ang code na gumagana sa maliit na data ay maaaring mag-crash sa malaking data; Isaalang-alang ang kahusayan.

Apat na maaaring kopyahin na mga template

1) Paghiling ng SQL na may schema:

Ang iyong tungkulin: SQL assistant (PostgreSQL). Mga Talahanayan:- mga order(id, customer_id, date timestamp, amount numeric)- mga customer(id, city text)Gawain: Kunin ang kabuuang turnover at bilang ng mga order sa bawat lungsod noong 2024, pinagsunod-sunod ayon sa turnover sa pababang pagkakasunud-sunod. Ipaliwanag kung paano mo pinangangasiwaan ang NULL na mga lungsod. Susubukan ko muna ang query sa LIMIT; I-UPDATE/DELETE ang henerasyon.

2) proseso ng panda na may checkpoint:

Mayroon akong DataFrames df (mga order) at df_customers (customer). Kalkulahin ang average na halaga bawat lungsod. MAHALAGA: i-print ang bilang ng mga hilera bago at pagkatapos ng pagsasama para makita ko kung may duplication. Ipaliwanag kung aling column ang pinagsanib mo at kung bakit mo pinili ang panloob/kaliwa.

3) Pagpapaliwanag at pagpapatunay ng code:

Ipaliwanag ang sumusunod na pandas code line by line: ano ang ginagawa ng bawat linya, anong mga pagpapalagay ang ginagawa nito, sa anong mga kaso maaari itong magbigay ng mga maling resulta? Ipaalam sa akin kung gumamit ako ng fudge function. Code: [i-paste]

4) Pag-debug:

Ang code na ito ay nagbibigay ng error na ito. Buong mensahe ng error: [i-paste]. Code: [i-paste]. Ipaliwanag ang ROOT sanhi ng error at ayusin ito. Ayusin ito sa pamamagitan ng aktwal na paglutas ng problema, hindi sa pamamagitan ng pagpapatahimik sa alerto. Ipahiwatig din kung binago ng pag-aayos ang output.

Mahinang prompt / Malakas na prompt

Mahinang prompt:

Sumulat ng query na nagbibigay sa akin ng mga benta bawat lungsod.

Ang mga pangalan ng talahanayan, mga haligi, uri ng database, NULL na pag-uugali ay hindi malinaw. Ang AI ay karaniwan, malamang na makagawa ito ng query na hindi akma sa iyong talahanayan.

Napakahusay na prompt:

Ang iyong tungkulin: SQL assistant (MySQL 8). Talahanayan: mga benta(id, city varchar, halaga ng decimal, petsa ng petsa). Gawain: Kunin ang kabuuan at karaniwang halaga, bilang ng mga order bawat lungsod para sa taong 2024; Pagbukud-bukurin ang pagbaba ayon sa kabuuang halaga; Ipakita lamang ang mga lungsod na may higit sa 100 mga order (MAYROON).NULL ibukod ang lungsod. Ipaliwanag ang query; Magsusubok ako ng LIMIT.

Dito kitang-kita ang database, schema, filter, sorting at NULL rule.

Mga karaniwang pagkakamali

  • Pagpapatakbo ng code nang hindi binabasa ito. Ang gumaganang code ay hindi tamang code; Ang code na nagmamanipula sa maling column ay tumatakbo rin nang walang mga error.
  • Hindi sinusuri ang bilang ng mga hilera pagkatapos pagsamahin/SUMALI. Ang maling key ay tahimik na nagdo-duplicate ng mga row at nagpapalaki ng mga kabuuan.
  • Hindi na-verify ang angkop na function. Maaaring magmungkahi ang AI ng mga pamamaraan na hindi umiiral; Kumpirmahin mula sa dokumento na hindi mo ito nakikilala.
  • Hindi iniisip ang tungkol sa kahusayan. mag-apply/loop na nagtatrabaho sa maliliit na data crash sa milyun-milyong row; gawing vectorize.
  • Direktang tumakbo sa database ng produksyon. Lalo na ang pagpapatakbo ng UPDATE/DELETE nang walang WHERE o pagsubok ay nakapipinsala.
Tip: Ugaliing magdagdag ng "linya ng pagpapatunay" sa bawat piraso ng code na natatanggap mo mula sa AI: isang pre- at post-processing na bilang ng mga linya, ilang sample na linya, at isang kritikal na kabuuan sa pamamagitan ng kamay. Ang tatlong pagsusuring ito ay nakakakuha ng karamihan sa mga silent logic error.

Sa buod

Ang AI ay isang makapangyarihang kasosyo na mabilis na gumagawa ng SQL at pandas code, ngunit hindi ito isang bulag na awtoridad. Ibigay sa kanya ang pamamaraan at layunin nang malinaw; Basahin ang code na ginawa nito na parang ikaw mismo ang sumulat nito; Suriin ang bilang ng mga row, fitting function at throughput pagkatapos ng merge/JOIN; Huwag patakbuhin ito nang hindi sinusubukan ito sa database ng produksyon. Kapag nag-debug, layunin na lutasin ang problema, hindi patahimikin ito. Ang code na gumagana ay hindi ang tamang code; Ikaw lang ang makakagarantiya ng katumpakan.

Gawain ng aplikasyon

Pumili ng tanong sa pagsusuri (hal. “buwanang turnover bawat channel”) at humiling ng code mula sa AI na may parehong SQL at pandas. Basahin ang parehong linya ng code sa bawat linya, tingnan ang bilang ng mga linya pagkatapos magsama/SUMALI at manu-manong i-verify ang kahit isang kritikal na kabuuan. Ihambing kung ang dalawang code ay gumagawa ng parehong resulta; Kung iba, alamin kung bakit.

checklist

  • [ ] Naibigay ko ba nang malinaw ang talahanayan/schema at layunin sa AI?
  • [ ] Nabasa at naunawaan ko ba ang code na ginawa nito sa bawat linya?
  • [ ] Sinuri ko ba ang bilang ng mga linya pagkatapos magsama/SUMALI?
  • [ ] Na-verify ko ba ang mga function na hindi ko nakikilala mula sa dokumentasyon?
  • [ ] Sinubukan ko ba muna ang code sa ligtas/maliit na data at hindi sa kapaligiran ng produksyon?