You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12 KiB

Kuonyesha Kiasi

 Sketchnote na (@sketchthedocs)
Kuonyesha Kiasi - Sketchnote na @nitya

Katika somo hili, utachunguza jinsi ya kutumia moja ya maktaba nyingi za Python kujifunza jinsi ya kuunda vielelezo vya kuvutia vinavyohusiana na dhana ya kiasi. Kwa kutumia seti ya data iliyosafishwa kuhusu ndege wa Minnesota, unaweza kujifunza mambo mengi ya kuvutia kuhusu wanyama wa porini wa eneo hilo.

Jaribio la kabla ya somo

Kuchunguza upana wa mabawa kwa kutumia Matplotlib

Maktaba bora ya kuunda michoro na chati rahisi na za kisasa za aina mbalimbali ni Matplotlib. Kwa ujumla, mchakato wa kuchora data kwa kutumia maktaba hizi unahusisha kutambua sehemu za dataframe yako unayotaka kulenga, kufanya mabadiliko yoyote muhimu kwenye data hiyo, kupeana thamani za mhimili wa x na y, kuamua aina ya mchoro wa kuonyesha, na kisha kuonyesha mchoro huo. Matplotlib inatoa aina nyingi za vielelezo, lakini kwa somo hili, hebu tuzingatie zile zinazofaa zaidi kwa kuonyesha kiasi: chati za mstari, scatterplots, na bar plots.

Tumia chati bora inayofaa muundo wa data yako na hadithi unayotaka kusimulia.

  • Kuchambua mwenendo kwa muda: mstari
  • Kulinganisha thamani: bar, column, pie, scatterplot
  • Kuonyesha jinsi sehemu zinavyohusiana na jumla: pie
  • Kuonyesha usambazaji wa data: scatterplot, bar
  • Kuonyesha mwenendo: mstari, column
  • Kuonyesha uhusiano kati ya thamani: mstari, scatterplot, bubble

Ikiwa una seti ya data na unahitaji kugundua kiasi cha kipengele fulani kilichopo, moja ya kazi za kwanza utakuwa nayo ni kuchunguza thamani zake.

Kuna 'cheat sheets' nzuri sana zinazopatikana kwa Matplotlib hapa.

Unda mchoro wa mstari kuhusu thamani za upana wa mabawa ya ndege

Fungua faili notebook.ipynb kwenye mzizi wa folda ya somo hili na ongeza seli.

Kumbuka: data imehifadhiwa kwenye mzizi wa repo hii katika folda ya /data.

import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()

Data hii ni mchanganyiko wa maandishi na namba:

Jina Jina la Kisayansi Jamii Oda Familia Jinsia Hali ya Uhifadhi UrefuMdogo UrefuMkuu UzitoMdogo UzitoMkuu UpanaMdogo UpanaMkuu
0 Bata mwenye tumbo jeusi Dendrocygna autumnalis Bata/Maji/Ndege wa Maji Anseriformes Anatidae Dendrocygna LC 47 56 652 1020 76 94
1 Bata mwenye tumbo kahawia Dendrocygna bicolor Bata/Maji/Ndege wa Maji Anseriformes Anatidae Dendrocygna LC 45 53 712 1050 85 93
2 Bata wa theluji Anser caerulescens Bata/Maji/Ndege wa Maji Anseriformes Anatidae Anser LC 64 79 2050 4050 135 165
3 Bata wa Ross Anser rossii Bata/Maji/Ndege wa Maji Anseriformes Anatidae Anser LC 57.3 64 1066 1567 113 116
4 Bata mkubwa mwenye paji jeupe Anser albifrons Bata/Maji/Ndege wa Maji Anseriformes Anatidae Anser LC 64 81 1930 3310 130 165

Hebu tuanze kwa kuchora baadhi ya data ya namba kwa kutumia mchoro wa mstari wa msingi. Tuseme unataka kuona upana wa mabawa wa juu zaidi kwa ndege hawa wa kuvutia.

wingspan = birds['MaxWingspan'] 
wingspan.plot()

Max Wingspan

Unaona nini mara moja? Inaonekana kuna angalau kipengele kimoja cha kipekee - huo ni upana mkubwa wa mabawa! Upana wa mabawa wa sentimita 2300 ni sawa na mita 23 - kuna Pterodactyls wanaozunguka Minnesota? Hebu tuchunguze.

Ingawa unaweza kufanya upangaji wa haraka kwenye Excel ili kupata vipengele vya kipekee, ambavyo pengine ni makosa ya uchapaji, endelea na mchakato wa vielelezo kwa kufanya kazi kutoka ndani ya mchoro.

Ongeza lebo kwenye mhimili wa x kuonyesha aina za ndege zinazohusika:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.xticks(rotation=45)
x = birds['Name'] 
y = birds['MaxWingspan']

plt.plot(x, y)

plt.show()

wingspan with labels

Hata ukiweka mzunguko wa lebo kuwa digrii 45, bado kuna nyingi sana kusoma. Hebu tujaribu mkakati tofauti: lebo tu vipengele vya kipekee na weka lebo ndani ya mchoro. Unaweza kutumia mchoro wa scatter ili kutoa nafasi zaidi kwa kuweka lebo:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)

for i in range(len(birds)):
    x = birds['Name'][i]
    y = birds['MaxWingspan'][i]
    plt.plot(x, y, 'bo')
    if birds['MaxWingspan'][i] > 500:
        plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
    
plt.show()

Nini kinaendelea hapa? Ulitumia tick_params kuficha lebo za chini na kisha ukaunda kitanzi juu ya seti yako ya data ya ndege. Ukichora mchoro kwa kutumia nukta ndogo za bluu kwa bo, ulitafuta ndege yeyote mwenye upana wa mabawa wa juu zaidi ya 500 na ukaonyesha lebo yao karibu na nukta ikiwa ni hivyo. Uliondoa lebo kidogo kwenye mhimili wa y (y * (1 - 0.05)) na ukatumia jina la ndege kama lebo.

Uligundua nini?

outliers

Chuja data yako

Bald Eagle na Prairie Falcon, ingawa pengine ni ndege wakubwa sana, wanaonekana kuwa na makosa ya uchapaji, na 0 ya ziada imeongezwa kwenye upana wao wa mabawa wa juu. Haiwezekani kwamba utakutana na Bald Eagle mwenye upana wa mabawa wa mita 25, lakini ikiwa ni hivyo, tafadhali tujulishe! Hebu tuunde dataframe mpya bila vipengele hivyo viwili vya kipekee:

plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
    x = birds['Name'][i]
    y = birds['MaxWingspan'][i]
    if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
        plt.plot(x, y, 'bo')
plt.show()

Kwa kuchuja vipengele vya kipekee, data yako sasa ni thabiti zaidi na rahisi kueleweka.

scatterplot of wingspans

Sasa kwa kuwa tuna seti ya data safi angalau kwa suala la upana wa mabawa, hebu tujifunze zaidi kuhusu ndege hawa.

Ingawa michoro ya mstari na scatter inaweza kuonyesha taarifa kuhusu thamani za data na usambazaji wake, tunataka kufikiria kuhusu thamani zilizopo katika seti hii ya data. Unaweza kuunda vielelezo kujibu maswali yafuatayo kuhusu kiasi:

Kuna makundi mangapi ya ndege, na idadi yao ni ngapi?
Ni ndege wangapi waliotoweka, walio hatarini, nadra, au wa kawaida?
Kuna idadi gani ya jinsia na oda mbalimbali kulingana na istilahi ya Linnaeus?

Chunguza chati za bar

Chati za bar ni za vitendo unapohitaji kuonyesha makundi ya data. Hebu tuchunguze makundi ya ndege yaliyopo katika seti hii ya data ili kuona ni yapi yanayojitokeza zaidi kwa idadi.

Katika faili ya notebook, unda chati ya bar ya msingi.

Kumbuka, unaweza kuchuja ndege wawili wa kipekee tuliowatambua katika sehemu iliyopita, kuhariri kosa la uchapaji katika upana wao wa mabawa, au kuwaacha kwa mazoezi haya ambayo hayategemei thamani za upana wa mabawa.

Ikiwa unataka kuunda chati ya bar, unaweza kuchagua data unayotaka kuzingatia. Chati za bar zinaweza kuundwa kutoka kwa data ghafi:

birds.plot(x='Category',
        kind='bar',
        stacked=True,
        title='Birds of Minnesota')

full data as a bar chart

Hata hivyo, chati hii ya bar haiwezi kusomeka kwa sababu kuna data nyingi zisizopangwa. Unahitaji kuchagua tu data unayotaka kuchora, kwa hivyo hebu tuangalie urefu wa ndege kulingana na kundi lao.

Chuja data yako ili kujumuisha tu kundi la ndege.

Kumbuka kwamba unatumia Pandas kusimamia data, na kisha unaruhusu Matplotlib kufanya uchoraji.

Kwa kuwa kuna makundi mengi, unaweza kuonyesha chati hii wima na kurekebisha urefu wake ili kuzingatia data yote:

category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()

category and length

Chati hii ya bar inaonyesha mtazamo mzuri wa idadi ya ndege katika kila kundi. Kwa haraka, unaona kwamba idadi kubwa ya ndege katika eneo hili ni wa kundi la Bata/Maji/Ndege wa Maji. Minnesota ni 'nchi ya maziwa 10,000' kwa hivyo hili halishangazi!

Jaribu kuhesabu mengine kwenye seti hii ya data. Kuna chochote kinachokushangaza?

Kulinganisha data

Unaweza kujaribu kulinganisha tofauti za data zilizopangwa kwa kuunda axes mpya. Jaribu kulinganisha MaxLength ya ndege, kulingana na kundi lake:

maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()

comparing data

Hakuna cha kushangaza hapa: hummingbirds wana MaxLength ndogo zaidi ikilinganishwa na Pelicans au Geese. Ni vizuri data inapofanya mantiki!

Unaweza kuunda vielelezo vya kuvutia zaidi vya chati za bar kwa kuweka data juu ya nyingine. Hebu tuweke Minimum na Maximum Length kwenye kundi fulani la ndege:

minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']

plt.barh(category, maxLength)
plt.barh(category, minLength)

plt.show()

Katika mchoro huu, unaweza kuona safu kwa kila kundi la ndege ya Minimum Length na Maximum Length. Unaweza kusema kwa usalama kwamba, kulingana na data hii, ndege mkubwa zaidi ana safu kubwa zaidi ya urefu. Inavutia!

superimposed values

🚀 Changamoto

Seti hii ya data ya ndege inatoa utajiri wa taarifa kuhusu aina tofauti za ndege ndani ya mfumo fulani wa ikolojia. Tafuta mtandaoni na uone ikiwa unaweza kupata seti nyingine za data zinazohusiana na ndege. Fanya mazoezi ya kujenga chati na grafu kuhusu ndege hawa ili kugundua ukweli ambao hukujua.

Jaribio la baada ya somo

Mapitio na Kujisomea

Somo hili la kwanza limekupa taarifa fulani kuhusu jinsi ya kutumia Matplotlib kuonyesha kiasi. Fanya utafiti kuhusu njia nyingine za kufanya kazi na seti za data kwa ajili ya vielelezo. Plotly ni moja ambayo hatutashughulikia katika masomo haya, kwa hivyo angalia kile inachoweza kutoa.

Kazi

Lines, Scatters, and Bars


Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.