Съдържание

  • Информацията
  • Python срещу Excel
  • Кодът
  • Почисти
  • Графики
  • Така че кой става по-дебел?
  • Но какво да кажем за бъдещето?

Вчера видях табела във фитнеса, която гласеше: „Децата стават по-дебели с всяко десетилетие“. Под този знак стоеше графика, която основно показваше, че след пет години средното английско дете ще тежи колкото трактор.

Намерих това твърдение за малко невероятно, затова реших да разследвам ...

Информацията

Данните са взети от Data.gov.uk. Ще използваме 2014 XLS файла. Изтеглете го и го отворете в избрания от вас инструмент за електронни таблици.

След това преминете към лист 7.2, тъй като той съдържа данните, които търсим:

затлъстяването

Сега, преди да преминем към анализиране на данните с Pandas, нека направим крачка назад и се обърнем към слона в стаята: Ако можете да извършите анализа/графика в Excel, защо бихте използвали Python?

Python срещу Excel

Трябва ли да използвам Python или Excel?

Този въпрос често се задава от хора, които тепърва започват да анализират данни. Въпреки че Python може да е популярен сред програмната общност, Excel е много по-разпространен в по-широкия свят. Повечето мениджъри на офицери, търговци, търговци и др. Използват Excel - и в това няма нищо лошо. Това е чудесен инструмент, ако знаете как да го използвате добре и е превърнал много нетехнически хора в експертни анализатори.

Отговорът дали трябва да използвате Python или Excel не е лесен за отговор. Но в крайна сметка няма или/или: Вместо това можете да ги използвате заедно.

Excel е чудесен за преглед на данни, извършване на основен анализ и изчертаване на прости графики, но наистина не е подходящ за почистване на данни (освен ако не желаете да се потопите във VBA). Ако имате 500MB файл на Excel с липсващи данни, дати в различни формати, без заглавки, ще ви отнеме завинаги да го почистите на ръка. Същото може да се каже, ако вашите данни се разпространяват в дузина CSV файлове, което е доста често.

Извършването на всичко това почистване е тривиално с Python и Pandas, библиотека на Python за анализ на данни. Изграден върху Numpy, Pandas улеснява задачите на високо ниво и можете да запишете резултатите си обратно във файл на Excel, за да можете да продължите да споделяте резултатите от анализа си с непрограмисти.

Така че, докато Excel не изчезва, Python е чудесен инструмент, ако искате чисти данни и да извършите анализ на данни от по-високо ниво.

Кодът

Добре, нека да започнем с кода - който можете да вземете от репото на проекта заедно с електронната таблица, към която свързах по-горе, за да не се налага да го изтегляте отново.

Започнете със създаването на нов скрипт, наречен obesity.py, и импортирайте Pandas, както и matplotlib, за да можем да начертаем графики по-късно:

Уверете се, че сте инсталирали и двете зависимости: pip install pandas matplotlib

След това нека прочетем във файла на Excel:

И това е. В един ред четем в целия файл на Excel.

Нека отпечатаме това, което имаме:

Изглеждате познати? Това са листовете, които видяхме по-рано. Не забравяйте, че ще се съсредоточим върху лист 7.2. Сега, ако погледнете 7.2 в Excel, ще видите, че горните 4 реда и долните 14 реда съдържат безполезна информация. Позволете ми да префразирам: Това е полезно за хората, но не и за нашия сценарий. Трябват ни само редове 5-18.

Почисти

Така че, когато четем листа, трябва да се уверим, че е останала ненужна информация.

Ние четем листа, прескачайки горните 4 реда, както и долните 14 (тъй като те съдържат данни, които не са полезни за нас). След това отпечатахме това, което имаме. (За улеснение показвам само първите няколко реда от разпечатката.)

Първият ред представлява заглавките на колоните. Веднага можете да видите, че Pandas е доста умен, тъй като е взел повечето заглавки правилно. С изключение на първия, разбира се - напр. Без име: 0. Защо така? Просто. Погледнете файла в Excel и ще видите, че в него липсва заглавка за годината.

Друг проблем е, че имаме празен ред в оригиналния файл и това се показва като NaN (не число).

Така че сега трябва да направим две неща:

  1. Преименувайте първата заглавка на Година и
  2. Отървете се от всички празни редове.

Тук казахме на Pandas да преименува колоната Без име: 0 на Година. използване на вградената функция rename () .

inplace = True променя съществуващия обект. Без това Pandas ще създаде нов обект и ще го върне.

След това нека пуснем празните редове, пълни с NaN:

Има още едно нещо, което трябва да направим, което ще улесни живота ни. Ако погледнете таблицата data_age, първата стойност е число. Това е индексът и Pandas използва стандартната практика на Excel да има число като индекс. Искаме обаче да променим индекса на Година. Това ще направи графиката много по-лесна, тъй като индексът обикновено се нанася като оста x.

Зададохме индекса на Година .

Сега отпечатайте нашите изчистени данни:

Много по-добре. Можете да видите, че индексът вече е годината и всички NaN са изчезнали.

Графики

Сега можем да начертаем това, което имаме.

Ами сега. Има проблем: Нашите оригинални данни съдържат общо поле, което засенчва всичко останало. Трябва да се отървем от него.

ос = 1 е малко объркващо, но всичко, което всъщност означава, е - пуснете колоните, както е описано от този въпрос за препълване на стека.

Нека да начертаем това, което имаме сега.

Много по-добре. Вече можем да видим отделни възрастови групи. Можете ли да видите коя възрастова група има най-високо затлъстяване?

Връщайки се към първоначалния ни въпрос: Дебелеят ли деца?

Нека просто начертаем малка част от данните: деца на възраст под 16 години и възрастни във възрастовия диапазон 35-44.

Така че кой става по-дебел?

Нали. Какво виждаме?

Докато затлъстяването на децата леко е намаляло, родителите им са се увеличили. Така че изглежда родителите трябва да се тревожат за себе си, а не за децата си.

Но какво да кажем за бъдещето?

Графиката все още не ни казва какво ще се случи с детското затлъстяване в бъдеще. Има начини за екстраполиране на графики като тези в бъдещето, но трябва да дам a внимание преди да продължим: Данните за затлъстяването не са в основата на математическа основа. Тоест, не можем да намерим формула, която да предскаже как тези стойности ще се променят в бъдеще. Всичко по същество е предположение. Имайки предвид това предупреждение, нека видим как можем да се опитаме да екстраполираме нашата графика.

Първо, Scipy наистина предоставя функция за екстраполация, но работи само за монотично увеличаване на данните (докато данните ни вървят нагоре и надолу).

Можем да опитаме монтаж на крива:

  • Curve Fitting се опитва да постави крива през точки на графика, като се опитва да генерира математическа функция за данните. Функцията може или не може да бъде много точна, в зависимост от данните.
  • Полиномиална интерполация След като имате уравнение, можете да използвате полиномна интерполация, за да опитате да интерполирате всяка стойност на графиката.

Ще използваме тези две функции заедно, за да се опитаме да предскажем бъдещето на децата на Англия:

Тук извличаме стойностите за деца под 16 години. За оста x оригиналната графика имаше дати. За да опростим нашата графика, ние просто ще използваме числата 0-10.

Още нещо: Приспособяването на кривата използва различни степени на полиноми. С много прости думи, колкото по-висока е степента, толкова по-точна ще бъде настройката на кривата, но има и шанс резултатите да са боклук. Scipy понякога ще ви предупреди, ако степента е твърде висока. Не се притеснявайте, това ще стане по-ясно, когато разгледаме някои примери.

Задаваме степен на полинома на 3. След това използваме функцията Numpy polyfit (), за да се опитаме да поставим графика чрез данните, които имаме. След това функцията poly1d () се извиква в уравнението, което генерирахме, за да създадем функция, която ще се използва за генериране на нашите стойности. Това връща функция, наречена poly_interp, която ще използваме по-долу:

Привличаме от 0 до 10 и извикваме функцията poly_interp () за всяка стойност. Не забравяйте, че това е функцията, която генерирахме, когато изпълнихме алгоритъма за монтиране на кривата.

Преди да продължим, нека видим какво означават различните полиномиални степени.

Ще начертаем както първоначалните данни, така и нашите собствени данни, за да видим колко близо е нашето уравнение до идеалните данни:

Оригиналните данни ще бъдат нанесени в синьо и с етикет Orig, докато генерираните данни ще бъдат червени и с надпис Fitted.

С полиномиална стойност 3:

Виждаме, че не е толкова добро напасване, така че нека опитаме 5:

Много по-добре. Какво ще кажете за 7?

Сега получаваме почти перфектен мач. И така, защо не винаги да използваме по-високи стойности?

Тъй като по-високите стойности са толкова тясно свързани с тази графика, те правят прогнозата безполезна. Ако се опитаме да екстраполираме от графиката по-горе, получаваме стойности за боклук. Опитвайки различни стойности, открих, че полиномните степени от 3 и 4 са единствените, които дават точни резултати, така че това е, което ще използваме.

Ще рестартираме нашата функция poly_interp (), този път за стойности от 0-15, за да предскажем пет години в бъдещето.

Това е същият код като преди. Нека отново видим резултатите с полиномни степени от 3 и 4. Новата екстраполирана линия е зелената и показва нашата прогноза.

Тук затлъстяването намалява. Какво ще кажете за 4?

Но ето, стреля нагоре, така че децата в крайна сметка ще тежат като трактори!

Коя от двете графики е вярна? Зависи дали работите за правителството или опозицията.

Това всъщност е функция, а не грешка. Сигурно сте чували тези политически дебати, когато две страни правят точно противоположни заключения от едни и същи данни? Сега виждате как е възможно да се правят радикално различни заключения, като се променят малки параметри.

И това е причината да трябва да бъдем внимателни, когато приемаме цифри и графики от лобисти, особено ако те не желаят да споделят суровите данни. Понякога прогнозите са по-добре да бъдат оставени на астролозите.

Вземете кратко и сладко Python трик доставени във вашата пощенска кутия на всеки няколко дни. Никога няма спам. Отпишете се по всяко време. Куратор от екипа на Real Python.

относно Шантну Тивари

Shantnu работи в ниско ниво/вграден домейн в продължение на десет години. Shantnu страда от C/C ++ в продължение на няколко години, преди да открие Python, и се почувства като глътка свеж въздух.

Учителю Умения от реалния свят на Python С неограничен достъп до истински Python

Присъединете се към нас и получете достъп до стотици уроци, практически видео курсове и общност от експертни Pythonistas:

Учителю Умения от реалния свят на Python
С неограничен достъп до истински Python

Присъединете се към нас и получете достъп до стотици уроци, практически видео курсове и общност от експертни Pythonistas:

Какво мислиш?

Политика за истински коментар на Python: Най-полезните коментари са тези, написани с цел да се научат от други читатели или да им помогнат - след като прочетете цялата статия и всички предишни коментари. Оплакванията и обидите обикновено няма да направят това тук.

Кое е първото ви за вкъщи или любимо нещо, което сте научили? Как ще използвате вашите новооткрити умения? Оставете коментар по-долу и ни уведомете.

Свързани уроци Категории: основи наука за данни