10. Jupyter dhe Excel

Në këtë leksion do të flasim për:

  1. marrëdhëniet midis Jupyter dhe Microsoft Excel;
  2. tabela e ngarkimit nga skedarët Excel; dhe
  3. shkrimi i tabelave te skedarët Excel.

10.1. Pse Jupyter, dhe pse Excel

Microsoft Excel është programi më i popullarizuar spreadsheet në botë. I detyrohet popullaritetit të saj për faktin se tabela ku po punoni është pikërisht atje përpara jush, mund ta shihni, mund të klikoni në një qelizë dhe të shkruani një vlerë ose një formulë. Është një përfaqësues tipik i shprehjes çfarë shihni është ajo që merrni. Prandaj, pse vendosëm ta përqendrojmë këtë kurs te Jupyter?

  • Çmimi._ Microsoft Excel është një produkt komercial - kushton. Në ndryshim me Python, të gjitha libraritë e tij shoqëruese dhe Jupyter si mjedisi ndërveprues janë pa pagesë.

  • Procedurat qartësisht të dukshme. Përpunimi i të dhënave në Microsoft Excel konsiston në futjen e formulave në qeliza. Nëse jeni duke punuar me një tabelë me marrëdhënie të ndërlikuara midis qelizave të shprehura nga shumë formula të ndërlikuara të shpërndara në të gjithë fletën e punës, së shpejti bëhet gati e pamundur të gjurmoni rrjedhën e informacionit dhe, më e rëndësishmja, të kuptoni, debugoni dhe përmirësoni procesin. Nga ana tjetër, nëse përpunimi shprehet në terma të një gjuhe programimi (si Python), ne humbim qasjen çfarë ju shihni është ajo që merrni e Excel-it, por fitojmë shumë më tepër në lexueshmërinë e kodit. Një procedurë e qartë e vendosur në një vend (një qelizë Jupyter ose një skedar Python) dhe e koduar në një gjuhë të thjeshtë dhe ekspresive të programimit lehtë mund të kontrollohet për gabime, të azhornohet dhe të ndahet.

  • Fleksibiliteti. Microsoft Excel është i përshtatshëm për përpunimin e tabelave që janë relativisht të vogla në mënyrë që ata të mund të përshtaten lehtësisht në disa ekrane kompjuteri. Pasi të gjeni veten në pozicionin ku duhet të përpunoni tabela të mëdha me mijëra rreshta dhe kolona, avantazhet e gjuhëve të shkrimit bëhen të dukshme. Për më tepër, çdo shpërndarje e Python vjen me një rrethim të madh të librarive ku shumica e algoritmeve standarde të përpunimit të të dhënave janë zbatuar tashmë.

Përdorimi i procedurave të qarta të dukshme që nuk janë duke u bashkuar me të dhënat për t'u analizuar është mënyra më efikase për të përpunuar të dhënat. Kjo është baza i çdo qasjeje ndaj përpunimit modern të të dhënave.

10.2.Ngarkimi i tabelave nga skedarët lokalë të Excel

Çdo dokument i Excel përbëhet nga disa worksheets. Çdo fletë pune është një tabelë e cila mund të arrihet përmes emrit të saj:

Worksheets

Për shkak se Microsoft Excel është programi më i popullarizuar i spreadsheet në botë, libraria pandas ka një mënyrë për të ngarkuar një fletë pune të një dokumenti Excel në një DataFrame. Nëse një dokument i Excel përbëhet nga disa fletë pune, ne duhet ta ngarkojmë atë si disa DataFrames - një DataFrame për fletë pune.

Për shembull, skedari data / Additives.xlsx ka një fletë pune të vetme "E-numbers" të cilën e ngarkojmë në një DataFrame drejtpërdrejt:

In [1]:
import pandas as pd
additives = pd.read_excel("data/Additives.xlsx", sheet_name="E-numbers")

Ky skedar përmban disa informacione themelore në lidhje me konservuesit, të cilat janë substanca të përdorura në industrinë ushqimore për të ruajtur ushqimin ose për të rritur ngjyrën dhe shijen e tij. Le të shohim në tabelë:

In [2]:
additives.head(15)
Out[2]:
E-number Status Comment
0 100 harmless NaN
1 101 harmless NaN
2 102 DANGEROUS NaN
3 104 harmless NaN
4 105 harmless NaN
5 110 DANGEROUS NaN
6 111 harmless NaN
7 120 DANGEROUS NaN
8 121 harmless NaN
9 123 DANGEROUS NaN
10 124 DANGEROUS NaN
11 125 lab trials NaN
12 130 harmless NaN
13 131 HARMFUL may cause cancer
14 132 harmless NaN

Qelizat që ishin bosh në tabelën Excel marrin një vlerë të veçantë NaN, e cila nënkupton "jo një numër". Meqenëse në rastin tonë këto qeliza përfaqësojnë komente, ne dëshirojmë që qelizat boshe të mbeten bosh. Pra, ne do të rimbushim tabelën, por këtë herë udhëzojmë që sistemi të mos raportojë për qelizat boshe:

In [3]:
additives = pd.read_excel("data/Additives.xlsx", sheet_name="E-numbers", na_filter=False)
additives.head(15)
Out[3]:
E-number Status Comment
0 100 harmless
1 101 harmless
2 102 DANGEROUS
3 104 harmless
4 105 harmless
5 110 DANGEROUS
6 111 harmless
7 120 DANGEROUS
8 121 harmless
9 123 DANGEROUS
10 124 DANGEROUS
11 125 lab trials
12 130 harmless
13 131 HARMFUL may cause cancer
14 132 harmless

Opsioni na_filter = False udhëzon funksioninread_excel që të "çaktivizojë inteligjencën artificiale" dhe t'i lërë qelizat boshe boshe. Le të bëjmë një analizë të frekuencës bazuar në dëmin e konservuesve.

In [4]:
additives["Status"].value_counts()
Out[4]:
HARMFUL       33
harmless      29
lab trials    10
DANGEROUS      5
Name: Status, dtype: int64

Le të filtrojmë tani tabelën për të veçuar konservuesit që mund të shkaktojnë kancer:

In [5]:
additives[additives.Comment == "may cause cancer"]
Out[5]:
E-number Status Comment
13 131 HARMFUL may cause cancer
17 142 HARMFUL may cause cancer
28 210 HARMFUL may cause cancer
29 211 HARMFUL may cause cancer
30 213 HARMFUL may cause cancer
31 214 HARMFUL may cause cancer
32 215 HARMFUL may cause cancer
33 216 HARMFUL may cause cancer
34 217 HARMFUL may cause cancer
45 239 HARMFUL may cause cancer
55 330 HARMFUL may cause cancer

Më në fund, le të rendisim konservuesit që shënohen si DANGEROUS ose mund të shkaktojnë kancer. Për ta bërë këtë, ne duhet të kombinojmë dy kritere të filtrimit:

Comment == "may cause cancer"  ose  Status == "DANGEROUS" (ose të dyja)

Kur duhet të kombinojmë dy kritere në mënyrë që një rresht të përfshihet në tabelën e filtruar nëse të paktën njëri prej kritereve është i plotësuar, ne përdorim lidhësin |:

In [6]:
additives[(additives.Comment == "may cause cancer") | (additives.Status == "DANGEROUS")]
Out[6]:
E-number Status Comment
2 102 DANGEROUS
5 110 DANGEROUS
7 120 DANGEROUS
9 123 DANGEROUS
10 124 DANGEROUS
13 131 HARMFUL may cause cancer
17 142 HARMFUL may cause cancer
28 210 HARMFUL may cause cancer
29 211 HARMFUL may cause cancer
30 213 HARMFUL may cause cancer
31 214 HARMFUL may cause cancer
32 215 HARMFUL may cause cancer
33 216 HARMFUL may cause cancer
34 217 HARMFUL may cause cancer
45 239 HARMFUL may cause cancer
55 330 HARMFUL may cause cancer

10.3. Shkrimi i tabelave në skedarët Excel

Çdo tabelë mund të shkruhet në një skedar Excel ashtu si kemi përdorur për t'i shkruar ato në skedarë CSV. Dallimi i vetëm është se në vend të kësaj, funksioni to_csv ne thërrasim funksioninto_excel. Për shembull, le të krijojmë një tabelë që përmban listën e konservuesve që janë etiketuar nga të rrezikshëm ose mund të shkaktojnë kancer:

In [7]:
bad_additives = additives[(additives.Comment == "may cause cancer") | (additives.Status == "DANGEROUS")]

dhe le të shkruajmë tabelën në një skedar Excel:

In [8]:
bad_additives.to_excel("data/BadAdditives.xlsx")

Le të hedhim një vështrim në skedarin Excel që sapo kemi krijuar:

Excel file

Ne shohim që sistemi ka shkruar edhe kolonën e indeksit të tabelës, e cila në këtë rast është vetëm një listë e numrave të plotë të pakuptimtë. Për të hequr atë, ne do të shkruajmë përsëri tabelën, por kësaj radhe duke përdorur opsionin index=False:

In [9]:
bad_additives.to_excel("data/BadAdditives.xlsx", index=False)

Skedari i ri duket si kjo:

Excel file

Kjo është pikërisht ajo që kemi dashur.

10.4. Ushtrime

Ushtrimi 1. Skedari data / CS201.xlsx ka një përmbledhje të notave të një grupi studentësh në Science Science 201. të dhënat janë reale, kështu që tabela është anonimizuar.

(a) Vendosni këtë tabelë në një DataFrame dhe hidhini një sy rreshtave të para për të kuptuar strukturën e tabelës ("Hnn" qëndron për "homework nn", "Cn" qëndron për "colloquim n", "WE" qëndron për "written part of the exam" dhe "OE" qëndron për "oral part of the exam").

(b) Indekso tabelën me "StudentID".

(c) Llogaritni notën mesatare në secilën prej kolonive (kolonat "C1", "C2" dhe "C3").

(d) Shtoni një kolonë të re "Avg" dhe për secilin student llogarit notën mesatare dhe shkruajeni atë në qelizën përkatëse.

(e) Shtoni një kolonë të re "FinalGrade" dhe për secilin student llogarit notën përfundimtare bazuar në notën mesatare duke përdorur funksionin e mëposhtëm:

In [10]:
def final_grade(avg):
    if avg >= 4.50:
        return 5
    elif avg >= 3.50:
        return 4
    elif avg >= 2.50:
        return 3
    elif avg >= 1.50:
        return 2
    else:
        return 1

(f) Shkruajeni tabelën e re në skedarin Excel data/CS201-FinalGrades.xlsx

Ushtrimi 2. Eurostat është një agjenci zyrtare evropiane përgjegjëse për analizat statistikore të të dhënave të ndryshme që lidhen me zhvillimin e Bashkimit Evropian. Të gjitha të dhënat që mbledh Eurostat janë në dispozicion të publikut në lidhjen vijuese: https://ec.europa.eu/eurostat/data/database

Skedari data/EUProjPop.xlsx përmban parashikimin e popullsisë së secilit prej vendeve të BE-së në 2080. Tabela ka dy fletë pune: Baseline që përmban popullsinë e parashikuar të vendeve të BE-së, dhe Migration që përmban popullsinë e parashikuar të vendeve të BE-së në rast të një rritje të migrimit.

(a) Vendosni këto dy fletë pune në DataFrames (Baseline dhe Migration) dhe shfaqni disa rreshta të secilës tabelë për të kuptuar strukturën e tabelave.

(b) Shtoni një rresht të ri "EU" në secilën prej tabelave dhe llogaritni popullsinë e parashikuar të të gjithë bashkimit për çdo vit.

(c) Shtoni një rresht të ri në tabelën e Migration dhe llogaritni migracionin e parashikuar për secilin prej viteve (zbritni rreshtin EU në tabelën Baseline nga rreshti EU në tabelën e Migration).

(d) Vizualizoni migracionin e parashikuar me një grafik vijash.

(e) Shtoni një rresht të ri "EU-UK" në tabelën Baseline dhe llogaritni popullsinë e parashikuar të BE-së pa UK.

(f) Shkruani të dy DataFrames në data/EU-UK.xlsx dhe data/EU-Migration.xlsx

Ushtrimi 3. Skedari data/Cricket.xlsx përmban të dhënat për lojtarët më të mirë të kriketit në historinë e kriketit.

(a) Vendoseni këtë tabelë në një DataFrame dhe indeksojeni atë në kolonën "Player".

(b) Shtoni kolonën e re "YP" (Years Played) në tabelë dhe llogaritni numrin e viteve aktive për secilin lojtar (zbritni kolonën "From" nga kolona "To").

(c) Shtni një kolonë të te "ARY" (Average Runs per Year) në tabelë dhe për secilin lojtar llogarit numrin mesatar të drejtimeve në vit (ARY = Runs / YP).

(d) Renditni tabelën sipas "ARY" në rendin zbritës dhe shfaqni 25 rreshtat e parë të tabelës. Në cilin shekull luheshin në mënyrë aktive shumica e 25 lojtarëve më të mirë? Pse e mendoni këtë?

© 2019 Petlja.org Creative Commons License