Ի՞նչ է “Pandas”-ը։ Կիրառման ուղեցույց

Ծրագրավորման լեզուներ

Mane Sahakyan
Picsart Academy
9 min readMay 27, 2022

--

Pandas-ը բաց և հասանելի գրադարան է Python-ում, որն առավել լայնորեն օգտագործվում է տվյալների վերլուծության և մեքենայական ուսուցման մեջ։

Ստեղծվել է 2008 թվականին` Wes McKinney-ի կողմից, քանի որ անհրաժեշտություն էր առաջացել ունենալ ավելի հզոր և ճկուն գործիք՝ քանակական վերլուծության կատարման համար։ Այսպիսով, pandas-ը դառնում է Python-ի ամենահայտնի գրադարաններից մեկը, որն այսօր ունի օգտագործողների չափացանզ ակտիվ համայնք։
Այսօր աշխարհի առաջատար տվյալների վերլուծաբանները pandas-ը համարում են տվյալների վերլուծության և մանիպուլյացիայի լավագույն գործիքը:

Pandas-ը կառուցված է Python-ի երկու մեծ գրադարանների հիման վրա՝ matplotlib (տվյալների վիզուալիզացիայի) և NumPy (մաթեմատիկական գործողությունների):

Pandas-ը համարվում է այս գրադարանների կոմբինացիան, որը թույլ է տալիս օգտագործել matplotlib-ի և NumPy-ի շատ մեթոդներ՝ ավելի քիչ կոդով:

Օրինակ՝ pandas.plot()-ը միավորում է բազմաթիվ matplotlib մեթոդները մեկ մեթոդի մեջ:
Նախքան pandas-ը, վերլուծաբանների մեծամասնությունը տվյալների հավաքագրման և պատրաստման համար օգտագործում էր Python-ը, որից հետո միայն, աշխատանքի մնացած մասի համար, անցում էին կատարում ավելի հատուկ տիրույթի, ինչպիսին է R ծրագրավորման լեզուն։

Pandas-ը հեշտացնում է տվյալների հետ աշխատելու շատ ժամանակատար և կրկնվող առաջադրանքներ, այդ թվում՝

  • Տվյալների մաքրում
  • Տվյալների լրացում
  • Տվյալների նորմալացում
  • Միաձուլում և միացում
  • Տվյալների վիզուալիզացիա
  • Վիճակագրական վերլուծություն
  • Տվյալների ստուգում
  • Տվյալների բեռնում և պահպանում

Pandas-ը տվյալների պահպանման համար ներկայացրել է երկու նոր տեսակի օբյեկտներ, որոնք հեշտացնում են վերլուծական առաջադրանքների կատարումն ու վերացնում գործիքները փոխելու անհրաժեշտությունը։
Դրանցից առաջինը կոչվում էSeries և ունի ցուցակի կառուցվածք, իսկ երկրորդը՝DataFrames-ն է, որն ունի աղյուսակային կառուցվածք:

“Pandas”-ի տվյալների կառուցվածքները

Series (շարք)

Եկեք պատկերացնենք շարքը որպես տվյալների մեկ սյունակ: Շարքի յուրաքանչյուր արժեք ունի պիտակ (label), որոնց համախումբն անվանում ենք «ինդեքս»:
Ստորև բերված օրինակում 0-ից 4-ը ինդեքսն է, իսկ աջ կողմում գտնվող թվերի սյունակը՝ արժեքները:

DataFrames

Թեև շարքերն արդյունավետ են, այնուամենայնիվ վերլուծաբանների մեծամասնությունը տվյալների հետ աշխատանքը կատարում է DataFrames-ի միջոցով:

DataFrames-ը տվյալները պահում է տողերի և սյունակների տեսքով` մեզ ծանոթ աղյուսակի ձևաչափով։

Դուք կարող եք պատկերացնել DataFrames-ը նաև որպես շարքերի հավաքածու՝ ճիշտ այնպես, ինչպես մի քանի սյունակները միասին կազմում են աղյուսակը, իսկ բազմաթիվ շարքերը (Series) կազմում են DataFrame-ը:

Ի՞նչպես ստեղծել և կտրել (slice) DataFrame-ը։

Ինչպես արդեն գիտենք, Pandas-ում DataFrame-ը երկչափ, պիտակավորված տվյալների կառուցվածք է, որը նման է SQL աղյուսակին։ DataFrame-ի յուրաքանչյուր սյունակ կարող է պարունակել տվյալների տարբեր տեսակներ:

Pandas DataFrame-ի սինտաքսը ներառում է «loc» և «iloc» ֆունկցիաները՝ data_frame.loc[ ] և data_frame.iloc[ ]: Երկու գործառույթներն էլ օգտագործվում են տողեր և/կամ սյունակներ մուտք գործելու համար, որտեղ «loc»-ը պիտակներով մուտքի համար է (label), իսկ «iloc»-ը՝ ըստ դիրքի (position), այսինքն՝ թվային ինդեքսների մուտքի համար:

Pandas-ում DataFrame-ը կտրատելը ենթադրում է հետևյալ քայլերը.

  1. Համոզվել, որ Python-ը ճիշտ է ներբեռնված,
  2. Ներմուծել տվյալների բազան,
  3. Ստեղծել DataFrame,
  4. Կտրել DataFrame-ը։

Տեսնելու համար, թե արդյոք Python-ը և Panda-ն ճիշտ են ներբեռնված, անհրաժեշտ է բացել Python interpreter-ը և մուտքագրել հետևյալը՝

Ամենատարածված գործողություններից մեկը որոշակի տեսակի տվյալներ կարդալն է, ինչպիսիք են` CSV ֆայլը, Excel ֆայլը, SQL Table կամ JSON ֆայլը:
Օրինակ, CSV ֆայլը կարդալու համար պետք է մուտքագրել սա՝

Այս կոդը կարդում է CSV ֆայլ (grade.csv), որը պարունակում է դպրոցի աշակերտների գնահատակնները և ստեղծում է report_card DataFrame-ը։

Բացի DataFrame-ով ֆայլ կարդալուց, կարող եք նաև ստեղծել նորը՝ Pandas Series-ի միջոցով, որոնք կարող են պարունակել ցանկացած տեսակի տվյալ, նույնիսկ՝ NaNs (ոչ մի թիվ), որոնք օգտագործվում են բացակայող տվյալները նշելու համար:

Եկեք ստեղծենք փոքրիկ DataFrame, որը բաղկացած է ավագ դպրոցի աշակերտների գնահատակններից։

Արդյունքը հետևյալն է՝

Բացի նրանից, որ մեր օրինակում աշակերտը բավականին վատ գնահատականներ ունի պատմություն և աշխարհագրություն առարկաներից, մենք կարող ենք տեսնել, որ Pandas-ն ավտոմատ կերպով լրացրել է գերմաներենի դասընթացի բացակայող գնահատականի տվյալները «NaN»-ով:

Երբեմն, պարզ շարքի ստեղծումը բավարար չէ մեզ ցանկալի արդյունքը ստանալու համար։ Այդ պատճառով, առավել բարդ գործողությունների իրականցման համար ,Pandas-ը տրամադրում է DataFrame Slicing՝ օգտագործելով «loc» և «iloc» ֆունկցիաները:

Ենթադրենք, որ Բենջամինի ծնողները ցանկանում են ավելին իմանալ դպրոցում իրենց որդու վարքագծի մասին: Նրանք ցանկանում են տեսնել իրենց որդու դասախոսությունները, գնահատականները, վաստակած միավորները և, վերջապես, իմանալ՝ արդյո՞ք իրենց որդին պետք է կրկնակի քննություն հանձնի, թե՝ ոչ:
Մենք կարող ենք պարզապես կտրատել grades.csv ֆայլով ստեղծված DataFrame-ը և դուրս բերել մեզ անհրաժեշտ ինֆորմացիան: Օրինակ՝

Սա կարող է առաջին հայացքից բարդ թվալ, բայց գործողությունն ինքնին բավականին պարզ է: Այս դեպքում մենք օգտագործում ենք loc[a,b] ֆունկցիան ճիշտ նույն կերպ, ինչպես կտրատում էինք Python բազմաչափ զանգվածը (array)։

a արժեքի համար մենք համեմատում ենք Report_CardName սյունակի բովանդակությունը «Բենջամին Դյուրանի» հետ, որը մեզ վերադարձնում է բուլյան արժեքների շարք, որտեղ ընտրվում են «True» արժեք ունեցող ինդեքսները և անտեսվում «False»-երը։
b արժեքի համար մենք ընդունում ենք միայն նշված սյունակների անունները:
Արդյունքում մենք ստանում ենք հետևյալ DataFrame-ը`

Կարող ենք նաև կտրատել ստեղծված DataFrame-ը՝ օգտագործելով iloc[a,b] ֆունկցիան, որն ընդունում է միայն a և b ամբողջ թվերի արժեքներ։ Այս դեպքում մենք կարող ենք ուսումնասիրել արդեն Սոֆիայի գնահատականները՝ կատարելով հետևյալը՝

Կոդի առաջին տողում մենք օգտագործում ենք ստանդարտ Python-ի կտրատման շարահյուսություն՝ iloc[a,b]-ն, որտեղ a-ն այս դեպքում 6:12 է և ցույց է տալիս տողերի տիրույթը՝ 6-ից 11-ը:
iloc-ով միջակայք նշելիս , միշտ նշում ենք պահանջվող առաջին տողից կամ սյունակից (6) մինչև վերջին տող կամ պահանջվող սյունակ +1 (12): Ինչպես տեսնում եք, grades.csv-ի սկզբնական ներմուծման մեջ բոլոր տողերը համարակալված են 0-ից մինչև 17-ը, իսկ 6-ից 11-րդ տողերը ներկայացնում են Սոֆիայի գնահատականները:
Սա այն արդյունքն է, որը մենք տեսնում ենք DataFrame-ում:

Ինչ վերաբերում է b արգումենտին, ապա մեր նախընտրած յուրաքանչյուր սյունակի անունները նշելու փոխարեն, ինչպես արեցինք loc-ի դեպքում, այս անգամ մենք կօգտագործենք դրանց թվային դիրքերը:
Այսինքն, մենք նշում ենք (2:), ինչը ցույց է տալիս, որ մենք ցանկանում ենք, որպեսզի բոլոր սյունակները սկսվեն 2-րդ դիրքից (Lectures):

Ինչպե՞ս խմբավորել տվյալները՝ օգտագործելով pandas-ը։

Pandas groupby ֆունկցիան թույլ է տալիս տվյալները բաժանել խմբերի՝ որոշ չափանիշների հիման վրա:

Pandas DataFrames-ը կարող է բաժանվել երկու առանցքի, այսինքն՝ տողի կամ սյունակի:

Տեսնելու համար, թե ինչպես կարելի է խմբավորել տվյալները Python-ում, եկեք պատկերացնենք ինքներս մեզ որպես ավագ դպրոցի տնօրեն: Մենք կարող ենք տեսնել, թե ինչպես են ուսանողները հանդես եկել՝ համեմատելով նրանց՝ տարբեր առարկաներից ստացած գնահատականները։ Եկեք պատկերացնենք նաև, որ ցանկանում ենք պարգևատրել բարձր արդյունքներ գրանցած դասարանների ուսուցիչներին։

Եթե մենք ունենք մեծ CSV ֆայլ, որը պարունակում է բոլոր գնահատականները բոլոր ուսանողների համար, DataFrame-ի միջոցով մեկ առ մեկ կրկնելը և բոլոր տվյալները ստուգելը չափազանց մեծ աշխատանք կլինի: Փոխարենը, մենք կարող ենք օգտագործել Pandasgroupby ֆունկցիան՝ տվյալները խմբավորելու համար Report_Card DataFrame-ի մեջ, որի հետ մենք կարող ենք ավելի հեշտ աշխատել:

Եկեք սկսենք բազմամակարդակ խմբավորման օրինակով, որն օգտագործում է մեկից ավելի արգումենտ groupby ֆունկցիայի համար՝ վերադարձնելով կրկնվող groupbyօբյեկտ, որի վրա մենք կարող ենք աշխատել`

Այստեղ մենք խմբավորվել ենք նախ ըստ առարկաների, այնուհետև՝ ըստ ուսանողների անունների, քանի որ դա էականորեն կհեշտացնի վիճակագրության վրա աշխատելու ընթացքը:
Օրինակ, կարող ենք օգտագործել mean ֆունկցիան՝ յուրաքանչյուր դասի միջին գնահատականը հաշվելու համար:

Արդյունքը՝

Ինչպե՞ս դիմել DataFrame-ի տողերին (rows)։

Հիմա եկեք պատկերացնենք, որ մեզ անհրաժեշտ էր տեղեկատվություն՝ Բենջամինի մաթեմատիկայի դասի մասին: Մենք կարող ենք ստուգել դա՝ օգտագործելով iloc ֆունկցիան հետևյալ կերպ՝

Վերոնշյալ ֆունկցիան պարզապես վերադարձնում է 0-րդ տողի ինֆորմացիան: Քանի որ տվյալները պիտակավորված են, մենք կարող ենք նաև օգտագործել loc ֆունկցիան։

Այս դեպքում, DataFrame-ը ինդեքսավորելու համար մենք օգտագործում ենք պարզ տրամաբանություն. նախ, մենք ստուգում ենք բոլոր այն տողերը, որտեղ «Անուն» սյունակում գրված է Բենջամին Դյուրան, այնուհետև փնտրում ենք բոլոր այն տողերը, որտեղ «Դասախոսություններ» սյունակում նշված է «Մաթեմատիկա»։
Եթե ցանկանում ենք գնահատականը պահել փոփոխականի մեջ, կարող ենք անել հետևյալը՝

Ինչպե՞ս դիմել DataFrame -ի սյունակներին (columns)։

Եթե մենք ցանկանում ենք մուտք գործել մեր DataFrame-ի ինչ-որ սյունակ, օրինակ՝ «Grades» սյունակը, մենք պարզապես օգտագործում ենք loc ֆունկցիան և նշում սյունակի անունը՝ այն ստանալու համար:

Առաջին արգումենտը ( : ) նշանակում է, թե որ տողերը կցանկանայինք ինդեքսավորել, իսկ երկրորդ արգումենտը՝ (Grades)-ը, թույլ է տալիս ինդեքսավորել մեր նախընտրած սյունակը։ Ստորակետը վերադարձնում է մեր նշած սյունակի բոլոր տողերը։

Նույն արդյունքը կարելի է ստանալ նաև iloc ֆունկցիայի միջոցով։ iloc արգումենտը պահանջում է ամբողջ արժեքի ինդեքսներ՝ տողերի արժեքների անունների փոխարեն: Մեր գնահատականների սյունակի օրինակը վերարտադրելու համար մենք կարող ենք օգտագործել հետևյալ կոդը՝

Մենք կարող ենք նաև միանգամից մի քանի սյունակներ մուտք գործել՝ օգտագործելով loc ֆունկցիան և տրամադրելով արգումենտների զանգված հետևյալ կերպ՝

Կարևոր է նշել, որ սյունակների անունների հերթականությունը, որն օգտագործել ենք զանգվածը նշելիս, ազդում է ստացված DataFrame-ում սյունակների հերթականության վրա։

Ինչպե՞ս ջնջել սյունակներն ու տողերը DataFrame-ից։

Մենք կարող եք օգտագործել drop ֆունկցիան՝ Pandas DataFrame-ում տողերն ու սյունակները ջնջելու համար:

Այս օրինակում drop ֆունկցիային տրամադրել ենք հետևյալ արգումենտները՝

  • սյունակի անվանումը, որը պետք է drop լինի (retake)
  • axis =1, ինչը նշանակում է, որ մենք ցանկանում ենք ջնջել սյունակը
  • True-ի տեղային արժեք՝ համոզվելու համար, որ մենք ջնջում ենք սյունակը սկզբնական DataFrame-ից: Եթե մենք չօգտագործենք inplace=True արգումենտը, մեր drop ֆունկցիան կվերադարձնի սկզբնական DataFrame-ի պատճենը՝ Retake սյունակը ջնջած, ինչը երբեմն ցանկալի չէ, եթե աշխատում ենք համեմատաբար մեծ DataFrame-ի հետ:

Որպես արգումենտ մենք կարող ենք նաև տրամադրել ինդեքսների զանգված:

Եվ վերջապես, եթե մենք ցանկանում ենք ջնջել մեր ամբողջ DataFrame-ը, ապա կարող ենք պարզապես օգտագործել del ֆունկցիան։

Ինչպե՞ս կիրառել ֆունկցիաները pandas-ում։

Pandas apply() ֆունկցիան թույլ է տալիս մանիպուլյացիայի ենթարկել սյունակները և տողերը DataFrame-ում:

Ենթադրենք, որ մենք պետք է ստեղծենք մի սյունակ, որը կոչվում է Retakeև ցույց է տալիս՝ արդյո՞ք ուսանողը պետք է վերահանձնի քննությունը, թե՝ ոչ:
Դա իրականացնելու համար պետք է ստուգենք՝ արդյո՞ք աշակերտի գնահատականը որևէ առարկայից ցածր է 45-ից, թե՝ ոչ։

Մենք դա կատարում ենք հետևյալ կոդով՝

Այստեղ մենք նոր սյունակ ենք վերագրել DataFrame-ին, որը կոչվում է Retake և կառուցված է վերևում lambda ֆունկցիայի կիրառումից՝ գնահատելու Grades սյունակի յուրաքանչյուր տողը:
Քանի որ Retakeսյունակը նախկինում գոյություն չուներ, Pandas-ը ստեղծում է այն մեզ համար և յուրաքանչյուր տողի համար նշանակում «Այո» կամ «Ոչ» արժեք:

Եկեք դիտարկենք DataFrame-ի վրա կրճատման գործողություն կիրառման մեկ այլ օրինակ:
Ենթադրենք, մենք ուզում ենք ստանալ բոլոր ուսանողների ստացած ընդհանուր միավորներն ու գնահատականները, որպեսզի կարողանանք որոշել միջինը։ Այստեղ մենք օգտագործում ենք sum ֆունկցիան՝ Numpy փաթեթից, որպեսզի ստանանք միավորների և գնահատականների սյունակների բոլոր տողերի գումարն առանձին:

Կարող ենք կիրառել նույն գումարման գործողությունը նաև սյունակների վրա՝

Ահա ավելի բարդ օրինակ, թե ինչպես կարող ենք օգտագործել բազմաթիվ արժեքներ՝ օգտվելով մի քանի սյունակներից:
Ենթադրենք, ուսանողները կարող են ստանալ կրեդիտային բոնուս, եթե 75-ից բարձր միջին գնահատական ստանան մաթեմատիկայի, աշխարհագրության կամ գերմաներենի դասերից:

Դա կունենա հետևյալ տեսքը՝

Pandas-ի միջոցով իրականցվող գործողություններն ու կիառությունները բավականին շատ են։ Այս գրադարանի մասին էլ ավելին իմանալու համար անցեք հղմամբ։

--

--