8. Modifikimi i tabelave dhe shkrimi në skedar

Në këtë leksion ne demonstrojmë:

  1. si të shtoni një rresht ose kolonë të re në tabelën e indeksuar; dhe
  2. si të shkruani një tabelë në një skedar lokal.

8.1. Shtimi i rreshtave dhe kolonave

Duke llogaritur të njëjtën statistikë përsëri dhe përsëri mund të ngadalësojë në mënyrë drastike analizat e të dhënave. Prandaj është e zakonshme në analizën e grupeve të mëdha të të dhënave për të llogaritur disa gjëra paraprakisht dhe për të ruajtur vlerat në tabelë. Arsyeja është e qartë: është më e shpejtë të marrësh një vlerë të llogaritur nga tabela sesa të ekzekutosh llogaritjen nga e para.

Le ta demonstrojmë këtë në një shembull të thjeshtë. Kujtoni notat e studentëve nga klasa e mëparshme:

In [1]:
import pandas as pd
marks = [["Anne",    5, 3, 5, 2, 4, 5],
         ["Ben",     5, 5, 5, 5, 5, 5],
         ["Colin",   4, 5, 3, 4, 5, 4],
         ["Diana",   5, 5, 5, 5, 5, 5],
         ["Ethan",   3, 4, 2, 3, 3, 4],
         ["Fred",    4, 5, 3, 4, 5, 4],
         ["Gloria",  3, 3, 3, 4, 2, 3],
         ["Hellen",  5, 5, 4, 5, 4, 5],
         ["Ian",     4, 5, 4, 4, 3, 5],
         ["Jane",    2, 2, 2, 2, 2, 5],
         ["Kate",    3, 4, 5, 4, 5, 5]]
marks_df = pd.DataFrame(marks)
marks_df.columns=["Name", "Computers", "English", "Maths", "Physics", "Chemistry", "Arts"]
marks_ix = marks_df.set_index("Name")
marks_ix
Out[1]:
Computers English Maths Physics Chemistry Arts
Name
Anne 5 3 5 2 4 5
Ben 5 5 5 5 5 5
Colin 4 5 3 4 5 4
Diana 5 5 5 5 5 5
Ethan 3 4 2 3 3 4
Fred 4 5 3 4 5 4
Gloria 3 3 3 4 2 3
Hellen 5 5 4 5 4 5
Ian 4 5 4 4 3 5
Jane 2 2 2 2 2 5
Kate 3 4 5 4 5 5

Tani do të shtojmë një kolonë të re në tabelë, të llogaritim notat mesatare të studentëve dhe t'i ruajmë ato në kolonën e re. Për të shtuar një kolonë të re në tabelë vetëm caktoni disa vlera në një emër të ri të kolonës:

In [2]:
marks_ix["Avg(Student)"] = 0.0

Kjo krijon një kolonë të re të quajtur "Avg (Student)" dhe cakton zero për të gjitha shënimet në kolonë. Le të shohim se çfarë kemi arritur:

In [3]:
marks_ix
Out[3]:
Computers English Maths Physics Chemistry Arts Avg(Student)
Name
Anne 5 3 5 2 4 5 0.0
Ben 5 5 5 5 5 5 0.0
Colin 4 5 3 4 5 4 0.0
Diana 5 5 5 5 5 5 0.0
Ethan 3 4 2 3 3 4 0.0
Fred 4 5 3 4 5 4 0.0
Gloria 3 3 3 4 2 3 0.0
Hellen 5 5 4 5 4 5 0.0
Ian 4 5 4 4 3 5 0.0
Jane 2 2 2 2 2 5 0.0
Kate 3 4 5 4 5 5 0.0

Si hapin tjetër do të ruajmë notën mesatare të secilit student në hyrjen përkatëse të tabelës. Vini re se nuk na lejohet të shkruajmë marks_ix.loc [student] .men () sepse kemi një kolonë shtesë, vlera e së cilës nuk duhet të përfshihet në mesatare.

In [4]:
for student in marks_ix.index:
    marks_ix.loc[student, "Avg(Student)"] = marks_ix.loc[student, "Computers":"Arts"].mean()

Kjo është tabela e re:

In [5]:
marks_ix
Out[5]:
Computers English Maths Physics Chemistry Arts Avg(Student)
Name
Anne 5 3 5 2 4 5 4.000000
Ben 5 5 5 5 5 5 5.000000
Colin 4 5 3 4 5 4 4.166667
Diana 5 5 5 5 5 5 5.000000
Ethan 3 4 2 3 3 4 3.166667
Fred 4 5 3 4 5 4 4.166667
Gloria 3 3 3 4 2 3 3.000000
Hellen 5 5 4 5 4 5 4.666667
Ian 4 5 4 4 3 5 4.166667
Jane 2 2 2 2 2 5 2.500000
Kate 3 4 5 4 5 5 4.333333

Për të llogaritur notën mesatare për lëndë, së pari shtojmë një rresht të ri dhe e mbushim me vlera rastësore:

In [6]:
marks_ix.loc["Avg(Subj)"] = 0.0
marks_ix
Out[6]:
Computers English Maths Physics Chemistry Arts Avg(Student)
Name
Anne 5.0 3.0 5.0 2.0 4.0 5.0 4.000000
Ben 5.0 5.0 5.0 5.0 5.0 5.0 5.000000
Colin 4.0 5.0 3.0 4.0 5.0 4.0 4.166667
Diana 5.0 5.0 5.0 5.0 5.0 5.0 5.000000
Ethan 3.0 4.0 2.0 3.0 3.0 4.0 3.166667
Fred 4.0 5.0 3.0 4.0 5.0 4.0 4.166667
Gloria 3.0 3.0 3.0 4.0 2.0 3.0 3.000000
Hellen 5.0 5.0 4.0 5.0 4.0 5.0 4.666667
Ian 4.0 5.0 4.0 4.0 3.0 5.0 4.166667
Jane 2.0 2.0 2.0 2.0 2.0 5.0 2.500000
Kate 3.0 4.0 5.0 4.0 5.0 5.0 4.333333
Avg(Subj) 0.0 0.0 0.0 0.0 0.0 0.0 0.000000

dhe pastaj llogaritni mesataret dhe ruajini ato:

In [7]:
for subj in marks_ix.columns:
    marks_ix.loc["Avg(Subj)", subj] = marks_ix.loc["Anne":"Kate", subj].mean()
marks_ix
Out[7]:
Computers English Maths Physics Chemistry Arts Avg(Student)
Name
Anne 5.000000 3.000000 5.000000 2.000000 4.000000 5.000000 4.000000
Ben 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000
Colin 4.000000 5.000000 3.000000 4.000000 5.000000 4.000000 4.166667
Diana 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000
Ethan 3.000000 4.000000 2.000000 3.000000 3.000000 4.000000 3.166667
Fred 4.000000 5.000000 3.000000 4.000000 5.000000 4.000000 4.166667
Gloria 3.000000 3.000000 3.000000 4.000000 2.000000 3.000000 3.000000
Hellen 5.000000 5.000000 4.000000 5.000000 4.000000 5.000000 4.666667
Ian 4.000000 5.000000 4.000000 4.000000 3.000000 5.000000 4.166667
Jane 2.000000 2.000000 2.000000 2.000000 2.000000 5.000000 2.500000
Kate 3.000000 4.000000 5.000000 4.000000 5.000000 5.000000 4.333333
Avg(Subj) 3.909091 4.181818 3.727273 3.818182 3.909091 4.545455 4.015152

Le të shohim një shembull tjetër. Dosja PopulationSrb2017.csv në dosjen data përmban numrin e qytetarëve të Serbisë në vitin 2017 sipas gjinisë dhe moshës. Rreshti i parë është titulli i tabelës. Le të ngarkojmë tabelën dhe të hedhim një vështrim:

In [8]:
popSrb = pd.read_csv("data/PopulationSrb2017.csv")
popSrb.head()
Out[8]:
Age M F
0 0 33145 31444
1 1 33252 31105
2 2 33807 31475
3 3 34076 31952
4 4 33436 31643
In [9]:
popSrb.tail()
Out[9]:
Age M F
81 81 16552 25345
82 82 15025 23036
83 83 13522 21435
84 84 11450 18529
85 85+ 44817 78323

Le ta indeskojmë sipas moshës:

In [10]:
popSrb_ix = popSrb.set_index("Age")
popSrb_ix.head()
Out[10]:
M F
Age
0 33145 31444
1 33252 31105
2 33807 31475
3 34076 31952
4 33436 31643

Ne do t'i përdorim këto të dhëna për të bërë një analizë të vogël demografike. Ne do të llogarisim mesataren e meshkujve dhe femrave për grupmoshë dhe do ta shfaqim këtë me një grafik të vijave:

In [11]:
popSrb_ix["M/F"] = 0.0
for i in popSrb_ix.index:
    popSrb_ix.loc[i, "M/F"] = popSrb_ix.loc[i, "M"] / popSrb_ix.loc[i, "F"]
popSrb_ix.head(10)
Out[11]:
M F M/F
Age
0 33145 31444 1.054096
1 33252 31105 1.069024
2 33807 31475 1.074091
3 34076 31952 1.066475
4 33436 31643 1.056663
5 34278 32505 1.054545
6 33773 31523 1.071376
7 33892 32185 1.053037
8 34706 32396 1.071305
9 34519 32177 1.072785

The line chart is now easy to get:

In [12]:
import matplotlib.pyplot as plt
plt.figure(figsize=(20,5))
plt.plot(popSrb_ix.index, popSrb_ix["M/F"])
plt.title("The ratio of males and females in Serbia in 2017 by age")
plt.show()
plt.close()
<Figure size 2000x500 with 1 Axes>

Kurba fillon afërsisht rreth 1 (që do të thotë se ka afërsisht të njëjtin numër të meshkujve dhe femrave në ato grupmoshë), por bie shumë më poshtë se 1 (që do të thotë se në një moment ka më shumë femra sesa meshkuj). Le të zbulojmë se cilat grupmoshë janë kritike duke vizatuar një vijë horizontale në lartësinë 1:

In [13]:
plt.figure(figsize=(20,5))
plt.plot(popSrb_ix.index, popSrb_ix["M/F"])
plt.plot(popSrb_ix.index, [1.0] * len(popSrb_ix.index))
plt.title("The ratio of males and females in Serbia in 2017 by age")
plt.show()
plt.close()data:image/png;base64,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h7skETnMKRASEREREREZAGbnJvPCt49mek4S3338U372wnp8gWC4yxKRw5QCIRERERERkQEiLT6Sh69YwDeOGsU/3tvBpX/9iIqGtnCXJSKHIQVCIiIiIiIiA4jX7eInZ07mtotmsrqoljPvfJdVu2rCXZaIHGYUCImIiIiIiAxA58zK5ulrjsTrMVx0z4c8+vGucJckIocRBUIiIiIiIiID1JSsRF647mgWjknhpmfWctMza2hpD4S7LBE5DCgQEhERERERGcCSYiL4x9fmcd2XxvLox4Uc87s3ufftrTS3+8NdmogMYgqEREREREREBji3y/CDkyfw9DVHMGl4Ar96aRPH/PYt7l62laY2BUMicuCMtTYsB547d65dvnx5WI4tIiIiIiIymK3YWc1tr+fzTn4lw2IjuOKYUVx2xEjiIj3hLk1EwswYs8JaO3e/2ykQEhERERERGZxW7KzhjjfyWbalguQYL1ccM5rLjsgjPsob7tJEJEwUCImIiIiIiAwRq3Y5wdBbmytIivFy+VGj+NpRIxUMiQxBCoRERERERESGmNWFtdzxRj5vbConIcrDFceM5vKjRxGroWQiQ4YCIRERERERkSFqbVEdt7+Rz+sby8hKjOLms6Zw0pTMcJclIv2gp4GQVhkTERERERE5zEzLSeSvX53LU1cfQXyUlysfXMEVDyynqKY53KWJyAChQEhEREREROQwNXfkMF68/mhuOnUi7xVUcuIf3+buZVvxBYLhLk1EwkyBkIiIiIiIyGHM63Zx1bFjeP2GYzl6XCq/eXkTZ9zxLp/sqA53aSISRgqEREREREREhoDspGjuu2wu9102l8Y2Pxfc/QE3PrWa6qb2cJcmImGgQEhERERERGQIOXFyBv/5/iKuOnY0z6ws5vg/LOWJ5YUEg+FZcEhEwkOBkIiIiIiIyBATE+HhplMn8e/rj2Fsehw3PrWGi+79gM2lDeEuTUT6iZadFxERERERGcKCQctTK4r41csbqW32kRTjJSM+ivSESNLjo8hIiCQ9PpKMhM+eS4uPJMrrDnfpItKFni477+mPYkRERERERGRgcrkMF84bwQmTM3hieSHFNS2U1bdS3tDG1vJKKhrb8AW+2JEgKcZLTnI0F83L5YI5OQqIRAaZHvUQMsacAtwOuIG/Wmt/s9frucADQFJomx9Za1/aV5vqISQi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

Nga grafiku shohim që në grupmoshat 46 vjeç e më vonë numri i femrave është dukshëm më i madh se numri i meshkujve.

8.2. Shkrimi i tabelave në skedar

Është e rëndësishme të jemi në gjendje të shkruajmë tabela të modifikuara në skedarë, në mënyrë që të mos kemi nevojë të përsërisim llogaritjet e ndërmjetme, rezultatet e të cilave tashmë janë ruajtur në tabelë.

Funksioni to_csv shkruan një tabelë në një skedar CSV, emri i të cilit jepet si argument. Për shembull, ne kemi modifikuar tabelën popSrb_ix duke llogaritur raportin mashkull-femër për secilën grupmoshë. Ka kuptim që të shkruani këtë tabelë të re në një skedar të ri për përdorim të mëvonshëm:

In [14]:
popSrb_ix.to_csv("data/PopulationSrb2017-MF-ratio.csv")

Si një shembull tjetër, le të ngarkojmë tabelën në dispozicion në

https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv

dhe le të shkruajmë tabelën në një skedar lokal data / vendet.csv:

In [15]:
countries = pd.read_csv("https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv")
countries.to_csv("data/countries.csv")

Nëse hidhni një vështrim në skedar, do të shihni se duket diçka si kjo:

,Country,Region
0,Algeria,AFRICA
1,Angola,AFRICA
2,Benin,AFRICA
3,Botswana,AFRICA
4,Burkina,AFRICA
5,Burundi,AFRICA
6,Cameroon,AFRICA
7,Cape Verde,AFRICA
8,Central African Republic,AFRICA
9,Chad,AFRICA
(etc)

Pra, sistemi ka shkruar kolonën e indeksit (të parazgjedhur) së bashku me të dhënat përkatëse. Kjo ishte e përshtatshme për ta paraqitur gjatë shkrimit të tabelës popSrb_ix sepse tabela ishte indeksuar nga grupmoshat, por këtu nuk është ky rasti. Prandaj, do ta shkruajmë përsëri tabelën, por kësaj radhe do të udhëzojmë sistemin mos të shkruajë indeksin (i cili është, në këtë rast, një sekuencë rastësore numrash):

In [16]:
countries.to_csv("data/countries.csv", index=False)

Skedari duket kështu tani:

Country,Region
Algeria,AFRICA
Angola,AFRICA
Benin,AFRICA
Botswana,AFRICA
Burkina,AFRICA
Burundi,AFRICA
Cameroon,AFRICA
Cape Verde,AFRICA
Central African Republic,AFRICA
Chad,AFRICA
(etc)

8.3. Ushtrime

Ushtrimi 1. Shikoni kodin me kujdes dhe pastaj përgjigjuni pyetjeve më poshtë:

In [17]:
import pandas as pd

US = pd.read_html("https://simple.wikipedia.org/wiki/List_of_U.S._states", header=[0,1])[0]
US.to_csv("data/USA.csv")
  1. Në cilin format do të shkruhet tabela "U.S"?
  2. A do të shkruhet në vend, në hard diskun e kompjuterit tuaj, apo në ndonjë burim të largët?

Ushtrimi 2. Biologët deri më tani kanë klasifikuar më shumë se 2,000,000 lloje të qenieve të gjalla. Të gjitha ato janë të ndara në pesë mbretëri dhe numri i përafërt i specieve për mbretëri është dhënë në këtë tabelë:

Kingdom Number of species
Animalia 1,400,000
Plantae 290,000
Fungi 100,000
Protoctista 200,000
Prokaryotae 10,000

Kthejeni këtë tabelë në një DataFrame të indeksuar, pastaj shtoni një rresht të ri të quajtur "Total" dhe llogaritni numrin e përgjithshëm të specieve që i referohet kësaj tabele.

Ushtrimi 3. Qeliza e mëposhtme përmban të dhëna për peshën dhe gjatësinë e një djali në shtatë vitet e para të jetës së tij.

In [18]:
peroid    = ["6 m", "1.5 y", "2.5 y", "3.5 y", "4.5 y", "5.5 y", "6.5 y"]
weightKG  = [5.9,   11.5,    14.8,    20.5,    22.0,    24.2,    29.0   ]
heightCM  = [62.0,  84.0,    97.0,    115.0,   122.5,   131.5,   135.0  ]

Vendosni tabelën, shtoni një kolonë të re të quajtur "BMI" në tabelën e transpozuar dhe më pas për secilën rresht të arrini BMI (indeksi i masës trupore) duke përdorur formulën:

$$\hbox{BMI} = \frac{\hbox{weight in kilograms}}{(\hbox{height in meters})^2}$$

Shkruani tabelën e re në skedarindata/BMI.csv

Ushtrimi 4. Tani në tabelën vijuese përmbledh temperaturat më të larta dhe më të ulëta të regjistruara (në $ ^ \ circ$C) në secilin nga kontinentet:

Continent: Europe Asia Africa North America South America Australia Antarctica
Highest recorded temp: 48 54 55 56.7 48.9 50.7 19.8
Lowest recorded temp: -58.1 -67.8 -23.9 -63 -32.8 -23 -89.2

Shtoni një rresht të ri në këtë tabelë dhe llogaritni intervalin maksimal të temperaturës për secilin kontinent (duke zbritur temperaturën më të ulët të regjistruar nga temperatura më e lartë e regjistruar).

Ushtrimi 5. Kjo është një përmbledhje e shpenzimeve të një familjeje gjatë një viti (në monedhën vendase):

Item Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Rent 8,251 8,436 8,524 8,388 8,241 8,196 8,004 7,996 7,991 8,015 8,353 8,456
Electricity 4,321 4,530 4,115 3,990 3,985 3,726 3,351 3,289 3,295 3,485 3,826 3,834
Phone (landline) 1,425 1,538 1,623 1,489 1,521 1,485 1,491 1,399 1,467 1,531 1,410 1,385
Phone (cell) 2,181 2,235 2,073 1,951 1,989 1,945 3,017 2,638 2,171 1,831 1,926 1,833
TV and Internet 2,399 2,399 2,399 2,399 2,399 2,399 2,399 2,399 2,399 2,399 2,399 2,399
Transport 1,830 1,830 1,830 1,830 1,950 1,950 1,450 1,450 1,950 1,950 2,050 2,050
Food 23,250 23,780 24,019 24,117 24,389 24,571 24,736 24,951 25,111 25,389 25,531 25,923
Rest 4,500 3,700 5,100 3,500 2,750 4,250 7,320 8,250 3,270 4,290 3,200 8,390

Kjo tabelë e shfaqur si një listë duket si kjo:

In [19]:
spendings = [
  ["Rent", 8251, 8436, 8524, 8388, 8241, 8196, 8004, 7996, 7991, 8015, 8353, 8456],
  ["Electricity", 4321, 4530, 4115, 3990, 3985, 3726, 3351, 3289, 3295, 3485, 3826, 3834],
  ["Landline", 1425, 1538, 1623, 1489, 1521, 1485, 1491, 1399, 1467, 1531, 1410, 1385],
  ["Cell", 2181, 2235, 2073, 1951, 1989, 1945, 3017, 2638, 2171, 1831, 1926, 1833],
  ["TV and Internet", 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399 ],
  ["Transport", 1830, 1830, 1830, 1830, 1950, 1950, 1450, 1450, 1950, 1950, 2050, 2050],
  ["Food", 23250, 23780, 24019, 24117, 24389, 24571, 24736, 24951, 25111, 25389, 25531, 25923],
  ["Rest", 4500, 3700, 5100, 3500, 2750, 4250, 7320, 8250, 3270, 4290, 3200, 8390]
]

(a) Kthejeni këtë në një DataFrame të indeksuar.

(b) Shtoni një rresht të ri të quajtur "Total" dhe ruani në të kostot totale të jetesës në muaj (Jan, Feb, Mar, etj).

(c) Shtoni një kolonë të re të quajtur "Avarage" dhe ruajeni në të kostot mesatare për secilin lloj të kostos (Rent, Electricity etj).

(d) Shkruani tablën e re në data/LivingCosts.csv

© 2019 Petlja.org Creative Commons License