Инсталирайте пакетите, необходими за работилницата

Моля, следвайте инструкциите в документа за настройка, за да инсталирате необходимите програми за този урок. Ако откриете проблеми, моля, създайте a проблем с етикета Висок приоритет.

Проверка на съоръженията

В директорията _includes/scripts ще намерите a скрипт наречен check_env.py. Той проверява функционалността на инсталираната версия на Anaconda.

По подразбиране Data Carpentry не изисква хората да изтеглят пълното хранилище с всички скриптове и скриптове. Следователно, като инструктор, трябва да решите как искате да предоставите този скрипт на учениците, ако решите да го направите. За да го използват, студентите могат да навигират в своя терминал до _includes/scripts и да изпълняват следното:

Ако учениците получат AssertionError, той ще ви информира как да помогнете за коригирането на инсталацията. В противен случай ще ви каже, че системата е готова за обработка на данни!

01-кратко въведение в Python

Предизвикателства за кортежите

Какво се случва, когато стартирате a_tuple [2] = 5 ?

Тъй като кортежът е неизменим, той не поддържа присвояване на елементи. Елементите на списъка могат да бъдат индивидуално променяни.

Какво ви казва type (a_tuple) за a_tuple ?

Речникови предизвикателства

  • Промяна на речници: 2. Преназначете втората стойност.

Не забравяйте също да изясните, че достъпът до "втората стойност" е около името на ключа. Добавете например rev [10] = "ten", за да изясните, че не става въпрос за позицията.

02-започване-с-данни

Забележка за грешките

Pandas surveys_df ['тегло']. Опишете () може да върне грешка по време на изпълнение.

Предизвикателства относно DataFrames

Имена на колони. (Незадължително: показване на проучвания_df.columns [4] = "plotid". Индексът не може да се променя; той се отразява от предишния епизод. Адаптирането на името се извършва от функцията за преименуване: surveys_df.rename (колони =))

survey_df.head (). Също така, какво прави проучвания_df.head (15) ?

Покажете първите 5 реда. Покажете първите 15 реда.

Показване на последните 15 реда.

проучвания_df.форма. Обърнете внимание на изхода на формата - какъв е форматът на изхода на атрибута, който връща формата на DataFrame?

Предизвикателства за изчисляване на статистически данни от вашите данни

Създайте списък с идентификаторите на сайта plot_id, които се намират в данните от проучването. Нека наречем този списък site_names. Колко са сайтовете в данните? Колко вида има в данните?

plot_names = pd.unique (проучвания_df ["plot_id"]). Брой идентификатори на сайта: plot_names.size или len (plot_names). Брой видове в данните: len (pd.unique (проучвания_df ["видове"]))

Каква е разликата между len (plot_names) и survey_df ['plot_id']. Nunique () ?

И двете водят до една и съща продукция, служейки като алтернативни начини за получаване на уникалните стойности. nunique съчетава преброяването с извличане на уникална стойност.

Клъстерни предизвикателства

Колко наблюдения са женски F и колко мъжки M ?

Какво се случва, когато групирате над две колони, като използвате следния израз и след това вземете средните стойности?

Средната стойност се изчислява за всяка комбинация от plot_id и пол. Имайте предвид, че средната стойност няма смисъл за всяка променлива, така че можете да я посочите по колона: например, ако искате да знаете последната регистрирана година, медианата на дължините на краката и средната стойност на теглото за всяка комбинация на сюжета и секса:

  • Изчислява описателна статистика на теглото на тежестта за всеки plot_id .

Какъв друг начин е да създадете списък с видове и да го свържете с броя на пробите от данни?

Вместо да извличате и след това да броите получените колони от groupby, можете също да броите заедно с groupby (на всички колони) и да изградите селекция от получения DataFrame: surveys_df.groupby ('species_id'). Count () ["record_id"]

Графични предизвикателства

  • Създайте графика на средното тегло на вида по обект.

анализ

  • Създайте графика на общия брой на мъжете спрямо общия брой на жените за целия набор от данни.

03-index-slice-subset

Съвет: използвайте метода .head () през целия урок, за да поддържате екрана си чист. Насърчете учениците да тестват команди със и без .head (), за да засилят полезността на този инструмент и след това да го използват или не, в зависимост от предпочитанията им. Например, ако студент прояви загриженост относно това да продължава да пише, уведомете го, че може да избегне .head (), но че ще го използвате, за да запазите видимостта на повече предишни редове код.

Предизвикателства пред индексирането

Каква стойност връща следният код? до [0]

1, тъй като Python започва с елемент 0 (за потребителите на Matlab: това е различно!)

Каква стойност връща това? до 5]

В горния пример извикването на [5] връща грешка. Защо?

Списъкът няма елементи с индекс 5 (той преминава от 0 до 4).

Какво ще кажеш за този? a [len (a)]

Предизвикателства пред редиците

Какво се случва, когато стартирате следния код?

surveys_df [0: 1] избира само първия елемент
surveys_df [: 4] избирането от първия елемент прави писането 0 излишно
survey_df [-1:] можете да отброявате

Съвет: Можете също да изберете всеки N-ти ред: surveys_df [1: 10: 2]. Е, как тълкувате анкети_df [: - 1] ?

Какво се случва, когато стартирам този: surveys_df.iloc [0: 4, 1: 4] и surveys_df.loc [0: 4, 1: 4]? Каква разлика виждате между резултатите от непосредствено предходните команди?

Проверете позицията или името. Втората опция е подобна на заявка в речник за имена на ключове. Имена на колони 1: 4 не съществуват, което води до грешка. Също така проверете разликата между проучвания_df.loc [0: 4] и проучвания_df.iloc [0: 4]

Разширени предизвикателства на заявки

Изберете подмножество от редове в DataFrame surveys_df, което съдържа данни от 1999 г. и което съдържа стойности на теглото, по-малки или равни на 8. Колко реда получихте в резултат? Колко реда получи партньорът ви?

изпитания_df [(проучвания_df ["година"] == 1999) & (проучвания_df ["тегло"]; когато се интересувате само от крайното число, може да се използва и сумата от истински стойности: сума ((проучвания_df [" година "] == 1999) & (проучвания_df [" тегло "]

Можете да използвате функцията isin на Python, за да заявите DataFrame въз основа на списък със стойности, както е показано по-долу: surveys_df [surveys_df ['species_id']. Isin ([listGoesHere])]. Използвайте функцията isin, за да намерите всички парцели, които съдържат определен вид в DataFrame survey_df. Колко записи съдържат тези стойности?

Например използвайте PB и PL: surveys_df [surveys_df ['species_id']. Isin (['PB', 'PL'])] ['plot_id']. Unique () предоставя списък на всички парцели, върху които те участват, тези видове. С ankete_df [survey_df ['species_id']. Isin (['PB', 'PL'])]. Форма можете да получите броя на записите.

Експериментирайте с други заявки. Създайте заявка, която намира всички редове със стойността на теглото по-голяма или равна на 0.

Съвет: Тук можете да представите, че всички тези операции по сегментиране всъщност се основават на булеви операции за индексиране (следващият раздел в този урок). Филтрирането показва за всеки запис дали отговаря на (True) или не (False) условие. Сегментирането се извършва чрез интерпретиране на True/False стойността на всеки запис.

в Python може да се използва, за да се получи какво противоположно към избраните данни, които сте посочили в Python. Това е еквивалентно на не е вътре. Напишете заявка, която избира всички редове с пол, различни от 'M' или 'F' в данните от проучването .

Маска предизвикателства

  • Създайте нов обект DataFrame, който съдържа само наблюдения, чиито стойности в секс колоната Недей било то женско или мъжко. Задайте всяка стойност на секс в новия DataFrame на нова стойност на „x“. Определя общия брой нулеви стойности в подмножеството.

Можете да проверите броя на Nan стойностите със сума (surveys_df ['sex']. Isnull ()), която е равна на броя на записите, които не са нито жени, нито мъже .

  • Създайте нов обект DataFrame, който съдържа само наблюдения, чиито стойности в колоната за пол са мъжки или женски и в които стойността на теглото е по-голяма от 0. След това създайте подредена стълбовидна диаграма на средното тегло, по график, със стойности мъжки срещу женски, подредени по всеки парцел.

Съвет: Тъй като знаем, че всички останали стойности са Nan, можем да изберем и всички ненулеви стойности (това е само преглед, за това ще има повече в следващия урок):

Поради командата за дестакиране заглавката на легендата съдържа две нива. За да го премахнете, имената на колоните трябва да бъдат опростени:

04-типове данни и формат

Предизвикателства относно променящите се цени

  • Опитайте се да конвертирате колоната plot_id в плувка с помощта на surveys_df.plot_id.astype ("float"). След това се опитва да преобразува теглото в a цяло число. Какво ви казва Pandas? Какво не е наред там?

Pandas не могат да преобразуват данни от тип плувка да се инт ако колоната съдържа NaN стойности.

Предизвикателства в профила

  • Преброява броя на липсващите стойности на колона. Съвет: Методът .count () ви дава броя на наблюденията, различни от NA на колона. Разгледайте метода .isnull () .

Ако студентите имат проблеми с генерирането на резултата или нещо се случи с него, има файл, наречен „примерен изход“ с данните, които те трябва да генерират.

05-сливане-данни

  • В папката с данни има два файла с данни за проучване: survey2001.csv и survey2002.csv. Прочетете данните в Python и комбинирайте файловете, за да направите нов DataFrame. Създайте графика на средното тегло на парцела, plot_id, по години, групирани по пол. Експортирайте резултатите си като CSV и се уверете, че те се четат правилно в Python.
  • Създайте нов DataFrame, който се присъединява към съдържанието на таблиците surveys.csv и species.csv .

След това изчислете и графично разпределете разпределението на:

1. таксони на парцел (брой видове от всеки таксони на парцел):

Разпределението на видовете (брой таксони на парцел) може да се изчисли, както следва:

Съвет: Възможно е също така да се начертае броят на индивидите от всеки таксони във всеки участък (подредена стълбовидна графика):

(в противен случай легендата припокрива стълбовата диаграма)

2. таксони по пол на парцел: Нека присвоим стойностите 'M | F' на Nan стойностите (те също могат да бъдат променени на 'x'):

Брой таксони за всяка комбинация от парцел/пол:

Предложение (само за дискусия)):

Броят на индивидите от всеки таксони във всеки парцел и по пол също може да бъде изчислен:

Всъщност тази графика не е най-доброто, което може да бъде избрано, тъй като не е четлива ... Първата алтернатива за подобряването й е използването фасети. Pandas/matplotlib обаче не ги предоставя по подразбиране. Пример в чист matplotlib (използване на M | F за записи без дефиниран пол):

По-добре би било обаче да се посочат Seaborn и Altair чрез техните видове многовариантни визуализации.