7 трюков pandas для науки о данных |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-10-17 19:00 1. Анализ образцов датафреймов с помощью df.groupby().__iter__() Обычно исследовать набор данных строка за строкой или группа за группой в блокнотах Jupyter сложнее, чем в Excel. Один из полезных трюков заключается в использовании генератора и комбинации клавиш Ctrl + Enter вместо Shift + Enter, чтобы итеративно просматривать различные образцы в одной ячейке, не создавая беспорядка в вашем блокноте. Сначала создайте ячейку с генератором c .groupby () (или .iterrows ()) и добавьте .__iter__(): generator = df.groupby(['identifier']).__iter__() Затем запустите следующую ячейку столько раз, сколько вам потребуется, чтобы увидеть необходимые вам данные, используя сочетание клавиш Ctrl + Enter: group_id, grouped_data = generator.__next__() print(group_id) grouped_data На этом примере анализируется набор данных Titanic о пассажирах Титаника, у которых совпадают номера билетов. Так как у вас нет возможности исследовать каждую группу пассажиров по отдельности, вы можете воспользоваться этим несложным методом, чтобы проанализировать одну группу за другой: 2. Профилирование pandas для исследования данных и оценки их качества Как часто бывает в науке о данных, мы обычно пишем код для исследования данных с нуля. Поскольку все наборы данных различны, это кажется логичным. Однако существует волшебный пакет pandas_profiling, который доказывает, что в этом нет необходимости. Пакет фактически автоматизирует этапы исследования и оценки качества данных! Взгляните: Похоже на магию! Очевидно, что пакет pandas-profiling дает в наше распоряжение только общее приблизительное представление о данных. Например, он не поможет, если в ваших данных есть независимые текстовые переменные. Но начинать анализ любых наборов данных следует именно с этого. 3. Цепочка методов Работа с pandas становbтся действительно интересной, как только вы понимаете, что можно объединять несколько операций, используя цепочку методов. По сути, формирование цепочки — это добавление операций в одну и ту же “строку” кода. С помощью приведенной ниже строки кода я:
def female_proportion(dataframe): return (dataframe.Sex=='female').sum() / len(dataframe) female_proportion(df) df.merge( df.loc[ df.Ticket.isin( df.Ticket.value_counts().loc[ df.Ticket.value_counts()>1 ].index ) ].groupby('Ticket').apply(female_proportion) .reset_index().rename(columns={0:'proportion_female'}), how='left', on='Ticket' ) Мне не пришлось создавать новые датафреймы, новые переменные или что-либо еще. Цепочка методов позволяет “переводить” свои идеи в реальные операции. Далее мы можем увидеть еще один хороший пример цепочки методов. 4. Визуализация данных Если вы занимаетесь машинным обучением, вы знаете, как нелегко бывает объяснить свою модель машинного обучения доступным языком. Вам может помочь качественная визуализация коэффициентов или оценки важности переменных вашей модели. Я собрал код из нескольких источников, чтобы получить следующую визуализацию, которую я теперь использую постоянно, чтобы не изобретать велосипед: pd.DataFrame({ 'variable': variables, 'coefficient': model.coef_[0] }) .round(decimals=2) .sort_values('coefficient', ascending=False) .style.bar(color=['grey', 'lightblue'], align='zero') Что дает следующий результат: Довольно наглядно, верно? 5. sklearn_pandas Если вы сторонник pandas, вы уже не раз замечали, что DataFrame pandas и sklearn не всегда хорошо работают в связке. Но не опускайте руки! Группа энтузиастов создала пакет sklearn_pandas, мост между двумя библиотеками. Он заменяет ColumnTransformer от sklearn на удобный для pandas DataFrameMapper. Теперь я использую только sklearn_pandas, чем очень доволен. Очень жаль, что я не знал о нем раньше! from sklearn.impute import SimpleImputer from sklearn.preprocessing import OneHotEncoder from sklearn.preprocessing import MinMaxScaler, StandardScaler from sklearn_pandas import DataFrameMapper from category_encoders import LeaveOneOutEncoder imputer_Pclass = SimpleImputer(strategy='most_frequent', add_indicator=True) imputer_Age = SimpleImputer(strategy='median', add_indicator=True) imputer_SibSp = SimpleImputer(strategy='constant', fill_value=0, add_indicator=True) imputer_Parch = SimpleImputer(strategy='constant', fill_value=0, add_indicator=True) imputer_Fare = SimpleImputer(strategy='median', add_indicator=True) imputer_Embarked = SimpleImputer(strategy='most_frequent') scaler_Age = MinMaxScaler() scaler_Fare = StandardScaler() onehotencoder_Sex = OneHotEncoder(drop=['male'], handle_unknown='error') onehotencoder_Embarked = OneHotEncoder(handle_unknown='error') leaveoneout_encoder = LeaveOneOutEncoder(sigma=.1, random_state=2020) mapper = DataFrameMapper([ (['Age'], [imputer_Age, scaler_Age], {'alias':'Age_scaled'}), (['Pclass'], [imputer_Pclass]), (['SibSp'], [imputer_SibSp]), (['Parch'], [imputer_Parch]), (['Fare'], [imputer_Fare, scaler_Fare], {'alias': 'Fare_scaled'}), (['Sex'], [onehotencoder_Sex], {'alias': 'is_female'}), (['Embarked'], [imputer_Embarked, onehotencoder_Embarked]), (['Embarked_Pclass_Sex'], [leaveoneout_encoder]) ], df_out=True) # используйте df_out для вывода как датафрейма pandas mapper.fit(X=train, y=train['Survived']) # вставляете как ColumnTransforme rsklearn Вот пример выходных данных после использования метода .fit(): 6. tqdm При работе с большими наборами данных на их обработку потребуется какое-то время. Вместо того, чтобы скучать в ожидании неизвестности перед своим блокнотом Jupyter, используйте tqdm, чтобы отследить, выполняется ли ваш код, и узнать время, которое потребуется для его обработки. Это также хороший способ прервать сценарий, который выполняется слишком медленно, на ранней стадии. from tqdm import notebook notebook.tqdm().pandas() Теперь во всех датафреймах pandas есть новые методы:
Они отличаются от apply, applymap и map лишь тем, что графически отображают индикатор выполнения. Очень полезно! 7. Метод .to_clipboard () для экспорта в Excel Будучи преданным поклонником Excel, я отточил навыки создания привлекательных графиков и хорошего форматирования, чтобы показывать информацию, полученную из анализа данных. Несмотря на то, что pandas предлагает много дополнительных возможностей, получить аналогичный уровень вывода, практически не используя код, может быть нелегко. Мне пришлось потрудиться, чтобы решить эту проблему, но в конечном итоге я нашел выход — экспортировать свои результаты в Excel. Однако вместо метода .to_excel я использую более мягкий метод .to_clipboard (index=False), который копирует данные в буфер обмена. Затем я использую Ctrl + V в Excel, чтобы вставить данные в свою текущую электронную таблицу. Вот и все, теперь вы можете выпустить на волю своего внутреннего зверя Excel! Многие специалисты по обработке данных часто забывают, что ученые, не работающие с данными, как правило, хорошо разбираются в Excel. Проще поделиться с ними файлом Excel, чем обычным блокнотом или блокнотом, экспортированным в виде html-файла. Источник: m.vk.com Комментарии: |
|