Az elhízás elemzése Angliában Python-nal

Tartalomjegyzék

  • Az adat
  • Python vs Excel
  • A kód
  • Takarítás
  • Diagramok
  • Tehát ki hízik?
  • De mi lesz a jövővel?

Tegnap láttam egy táblát az edzőteremben, amely azt írta: „A gyerekek évtizedek alatt egyre híznak”. E jel alatt egy grafikon állt, amely alapvetően azt mutatta, hogy öt év múlva az átlagos angol gyermek akkora súlyú lesz, mint egy traktor.

Ezt az állítást kissé hihetetlennek találtam, ezért úgy döntöttem, hogy kivizsgálom ...

Az adat

Az adatok a Data.gov.uk webhelyről származnak. A 2014-es XLS fájlt fogjuk használni. Töltse le és nyissa meg a kívánt táblázatkezelőben.

Ezután keresse meg a 7.2 lapot, mivel az tartalmazza a keresett adatokat:

elhízás

Most, mielőtt az adatok Pandával történő elemzésébe kezdünk, tegyünk egy lépést hátra, és szólítsuk meg a szobában lévő elefántot: Ha az elemzést/ábrázolást Excel-ben tudja végrehajtani, miért használná a Python alkalmazást?

Python vs Excel

Használjak-e Python-t vagy Excel-t?

Ezt a kérdést gyakran felteszik az emberek az adatok elemzésében. Noha a Python népszerű lehet a programozói közösség körében, az Excel sokkal elterjedtebb a tágabb világban. A legtöbb tisztségviselő, értékesítő, marketingszakember stb. Használja az Excel programot - ezzel nincs semmi baj. Remek eszköz, ha tudja, hogyan kell jól használni, és sok nem technikai embert szakértő elemzővé tett.

Arra a válaszra, hogy Python vagy Excel programot használjon-e, nem könnyű válaszolni. De végül nincs sem/vagy: Ehelyett együtt használhatja őket.

Az Excel kiválóan alkalmas adatok megtekintésére, alapvető elemzések elvégzésére és egyszerű grafikonok rajzolására, de valóban nem alkalmas adatok tisztítására (hacsak nem hajlandó belemerülni a VBA-ba). Ha van egy 500 MB méretű Excel fájlja, hiányzó adatokkal, különböző formátumú dátumokkal, fejléc nélkül, örökké tart, amíg kézzel megtisztítja. Ugyanez mondható el, ha adataid tucatnyi CSV-fájlban vannak elosztva, ami meglehetősen gyakori.

A takarítás elvégzése elenyésző a Python és a Pandas segítségével, amely egy Python könyvtár az adatok elemzéséhez. A Numpy tetejére épített Pandas megkönnyíti a magas szintű feladatokat, és az eredményeket visszaírhatja egy Excel fájlba, így továbbra is megoszthatja elemzésének eredményeit nem programozókkal.

Tehát bár az Excel nem múlik el, a Python nagyszerű eszköz, ha tiszta adatokat szeretne, és magasabb szintű adatelemzést végezne.

A kód

Jól van, kezdjük a kóddal - amelyet megfoghat a projekt repo-ból, a fent hivatkozott táblázattal együtt, hogy ne kelljen újra letöltenie.

Először hozzon létre egy új szkriptet, az obesity.py nevet, és importálja a Pandákat, valamint a matplotlib-et, hogy később grafikonokat ábrázolhassunk:

Győződjön meg róla, hogy mindkét függőséget telepítette: pip install pandas matplotlib

Ezután olvassuk el az Excel fájlban:

És ez az. Egyetlen sorban olvassuk a teljes Excel fájlt.

Nyomtassuk ki, amink van:

Ismerősnek tűnik? Ezeket a lapokat láttuk korábban. Ne feledje, hogy a 7.2. Most, ha megnézi az 7.2-et az Excelben, látni fogja, hogy a felső 4 sor és az alsó 14 sor haszontalan információkat tartalmaz. Hadd fogalmazzam meg újra: Ez hasznos az emberek számára, de a mi forgatókönyvünk számára nem. Csak az 5-18. Sorokra van szükségünk.

Takarítás

Tehát amikor elolvassuk a lapot, meg kell győződnünk arról, hogy minden felesleges információ kimaradt-e.

Elolvassuk a lapot, kihagyva a felső 4 sort, valamint az alsó 14-et (mivel számunkra nem hasznos adatokat tartalmaznak). Ezután kinyomtattuk, amink van. (Az egyszerűség kedvéért csak a nyomtatás első néhány sorát mutatom.)

Az első sor az oszlopfejléceket jelöli. Rögtön a Pandas meglehetősen okos, mivel a fejlécek nagy részét helyesen vette fel. Természetesen az első kivételével - pl. Névtelen: 0. Miert van az? Egyszerű. Nézze meg az Excel fájlját, és látja, hogy hiányzik az év fejléce.

Egy másik probléma az, hogy az eredeti fájlban van egy üres sor, és ez NaN néven jelenik meg (nem szám).

Tehát most két dolgot kell tennünk:

  1. Nevezze át az első fejlécet Évre, és
  2. Megszabadulni az üres soroktól.

Itt azt mondtuk Pandásnak, hogy nevezze át a Névtelen: 0 oszlopot Évre. a beépített függvény átnevezése () használatával .

inplace = True módosítja a meglévő objektumot. Enélkül a Pandas létrehoz egy új objektumot, és ezt visszaadja.

Ezután dobjuk le a NaN-mal töltött üres sorokat:

Még egy dolgot kell tennünk, amely megkönnyíti az életünket. Ha megnézi a data_age táblázatot, az első érték egy szám. Ez az index, és a Pandas az alapértelmezett Excel-gyakorlatot használja, amely szerint indexként egy szám szerepel. Az indexet azonban Évre szeretnénk változtatni. Ez sokkal könnyebbé teszi a rajzolást, mivel az indexet általában x tengelyként ábrázolják.

Az indexet Évre állítottuk .

Most nyomtassa ki a megtisztított adatainkat:

Sokkal jobb. Láthatja, hogy az index most az Év, és minden NaN eltűnt.

Diagramok

Most megtervezhetjük, amink van.

Hoppá. Van egy probléma: Eredeti adataink egy teljes mezőt tartalmaznak, amely minden mást beárnyékol. Meg kell szabadulnunk tőle.

tengely = 1 kissé zavarba ejtő, de ez csak annyit jelent - dobja le az oszlopokat, ahogy erről a Stack Overflow kérdés leírja.

Tervezzük meg, mi van most.

Sokkal jobb. Most már valóban láthatjuk az egyes korcsoportokat. Láthatja, melyik korcsoportban van a legnagyobb elhízás?

Visszatérve eredeti kérdésünkre: Híznak a gyerekek?

Vázoljuk csak az adatok egy kis részét: 16 év alatti gyermekek és 35–44 éves korosztályú felnőttek.

Tehát ki hízik?

Jobb. Mit látunk?

Míg a gyermekek elhízása kissé csökkent, szüleik léggömböt kaptak. Úgy tűnik tehát, hogy a szülőknek önmagukért kell aggódniuk, nem pedig gyermekeikért.

De mi lesz a jövővel?

A grafikon még mindig nem árulja el, hogy mi lesz a gyermekek elhízásával a jövőben. Az ilyen grafikonokat a jövőben extrapolálni lehet, de meg kell adnom a Figyelem mielőtt folytatnánk: Az elhízás adatainak nincs matematikai alapja. Vagyis nem találunk olyan képletet, amely megjósolná, hogyan változnak ezek az értékek a jövőben. Minden lényegében találgatás. Ezt a figyelmeztetést szem előtt tartva lássuk, hogyan próbálhatjuk meg extrapolálni a grafikonunkat.

Először is, a Scipy biztosít funkciót az extrapolációhoz, de csak monotikusan növekvő adatok esetén működik (miközben az adataink felfelé és lefelé mennek).

Kipróbálhatjuk a görbeillesztést:

  • A görbeillesztés megpróbál egy görbét illeszteni a grafikon pontjain keresztül, megpróbálva matematikai függvényt létrehozni az adatokhoz. A funkció az adatoktól függően lehet, hogy nem túl pontos.
  • Polinom-interpoláció Miután elkészült egy egyenlet, a polinom-interpoláció segítségével megpróbálhatja interpolálni a grafikonon szereplő bármely értéket.

Ezt a két funkciót együtt fogjuk használni, hogy megjósoljuk Anglia gyermekeinek jövőjét:

Itt vonjuk ki a 16 év alatti gyermekek értékeit. Az x tengely esetében az eredeti grafikon dátumokat tartalmazott. Grafikonunk egyszerűsítése érdekében csak a 0–10 számokat fogjuk használni.

Még egy dolog: A görbeillesztés különböző fokú polinomokat használ. Nagyon leegyszerűsítve: minél magasabb a fokozat, annál pontosabb lesz a görbe illesztése, de arra is van esély, hogy az eredmények szemétté váljanak. Scipy néha figyelmeztet, ha a fokozat túl magas. Ne aggódjon, ez egyértelműbb lesz, ha megnézünk néhány példát.

A polinomi fokot 3-ra állítottuk. Ezután a Numpy polyfit () függvény segítségével megpróbálunk egy gráfot illeszteni a rendelkezésünkre álló adatokon keresztül. Ezután a poly1d () függvényt meghívjuk az általunk generált egyenletre, hogy létrehozzunk egy függvényt, amelyet az értékeink előállítására fogunk használni. Ez egy poly_interp nevű függvényt ad vissza, amelyet az alábbiakban fogunk használni:

0-tól 10-ig hurkolunk, és minden értéknél meghívjuk a poly_interp () függvényt. Ne feledje, hogy ezt a függvényt generáltuk, amikor lefuttattuk a görbeillesztési algoritmust.

Mielőtt továbblépnénk, nézzük meg, mit jelentenek a különböző polinomi fokok.

Feltérképezzük mind az eredeti, mind a saját adatainkat, hogy lássuk, milyen közel van az egyenletünk az ideális adatokhoz:

Az eredeti adatokat kék színnel ábrázoljuk és Orig felirattal látjuk el, míg a létrehozott adatok pirosak és Fitted feliratúak lesznek.

3 polinom értékkel:

Úgy látjuk, hogy ez nem olyan jó, így próbáljuk ki az 5-öt:

Sokkal jobb. Mi a helyzet 7-el?

Most szinte tökéletes mérkőzést kapunk. Tehát miért ne használnánk mindig magasabb értékeket?

Mivel a magasabb értékek olyan szorosan kapcsolódnak ehhez a grafikonhoz, használhatatlanná teszik az előrejelzést. Ha megpróbáljuk extrapolálni a fenti grafikonon, szemétértékeket kapunk. Különböző értékeket kipróbálva azt tapasztaltam, hogy a 3 és 4 polinom fokozatúak voltak az egyetlenek, amelyek pontos eredményt adnak, tehát ezt fogjuk használni.

Újra futtatni fogjuk a poly_interp () függvényünket, ezúttal 0-15 közötti értékekre, hogy öt évet jósoljunk a jövőbe.

Ez ugyanaz a kód, mint korábban. Lássuk újra az eredményeket 3 és 4 polinomi fokokkal. Az új extrapolált vonal a zöld, és megmutatja az előrejelzésünket.

Itt csökken az elhízás. Mit szólnál 4-hez?

De itt lő, így a gyerekek súlya olyan lesz, mint a traktoroké!

A két grafikon közül melyik a helyes? Attól függ, hogy a kormánynak vagy az ellenzéknek dolgozik-e.

Ez valójában egy szolgáltatás, nem pedig hiba. Biztosan hallotta ezeket a politikai vitákat, ahol két fél pontosan ellentétes következtetéseket von le ugyanazokból az adatokból? Most látja, hogyan lehet gyökeresen eltérő következtetéseket levonni a kis paraméterek módosításával.

Ezért kell körültekintőnek lennünk, ha lobbistáktól fogadunk el adatokat és grafikonokat, különösen, ha nem hajlandók megosztani a nyers adatokat. Néha a jóslatokat jobb, ha az asztrológusokra bízzák.

Kap egy rövid és édes Python trükk pár naponta kézbesítjük a postaládájába. Soha nem spam. Bármikor leiratkozhat. A Real Python csapata kurátora.

Ról ről Shantnu Tiwari

Shantnu tíz éve dolgozik az alacsony szintű/beágyazott tartományban. Shantnu több éven át szenvedett a C/C ++ kezéből, mielőtt felfedezte a Pythont, és olyan érzés volt, mint egy friss levegő.

Valós világbeli Python készségek Korlátlan hozzáféréssel a Real Pythonhoz

Csatlakozzon hozzánk, és több száz oktatóanyaghoz, gyakorlati videotanfolyamhoz és egy szakértő Pythonistas közösséghez férhet hozzá:

Valós világbeli Python készségek
Korlátlan hozzáféréssel a Real Pythonhoz

Csatlakozzon hozzánk, és több száz oktatóanyaghoz, gyakorlati videotanfolyamhoz és egy szakértő Pythonistas közösséghez férhet hozzá:

Mit gondolsz?

Valódi Python megjegyzés házirend: A leghasznosabb megjegyzések azok, amelyeket azzal a céllal írtak, hogy más olvasóktól tanuljanak vagy segítsenek - miután elolvasták a teljes cikket és az összes korábbi megjegyzést. A panaszok és a sértések itt általában nem fogják kivágni.

Mi az első számú elvihető vagy kedvenc dolog, amit megtanult? Hogyan fogja felhasználni újonnan megtalált készségeit? Hagyjon egy megjegyzést alább, és tudassa velünk.

Kapcsolódó oktató kategóriák: alapismeretek adat-tudomány