У свету анализе података, уобичајено је наићи на велике скупове података који захтевају манипулацију и обраду података. Један такав проблем који се често јавља је филтрирање редова на основу нејасних вредности, посебно када се ради о текстуалним подацима. Пандас, популарна Питхон библиотека за манипулацију подацима, пружа елегантно решење за решавање овог проблема. У овом чланку ћемо уронити у то како да користимо Пандас за филтрирање редова користећи нејасне вредности, истражићемо код корак по корак и разговарати о релевантним библиотекама и функцијама које могу помоћи у решавању сличних проблема.
Да бисмо почели да решавамо овај проблем, искористићемо панде библиотека заједно са фуззивуззи библиотека која помаже у израчунавању сличности између различитих стрингова. Тхе фуззивуззи библиотека користи Левенштајнову дистанцу, меру сличности засновану на броју измена (уметања, брисања или замена) потребних за трансформацију једног стринга у други.
Инсталирање и увоз потребних библиотека
За почетак, мораћемо да инсталирамо и увеземо потребне библиотеке. Можете користити пип да инсталирате и Панде и фуззивуззи:
pip install pandas pip install fuzzywuzzy
Након инсталације, увезите библиотеке у свој Питхон код:
import pandas as pd from fuzzywuzzy import fuzz, process
Филтрирање редова на основу нејасних вредности
Сада када смо увезли потребне библиотеке, хајде да направимо измишљени скуп података и покажемо како да филтрирамо редове на основу нејасних вредности. У овом примеру, наш скуп података ће се састојати од назива одеће и њихових одговарајућих стилова.
data = {'Garment': ['T-shirt', 'Polo shirt', 'Jeans', 'Leather jacket', 'Winter coat'], 'Style': ['Casual', 'Casual', 'Casual', 'Biker', 'Winter']} df = pd.DataFrame(data)
Под претпоставком да желимо да филтрирамо редове који садрже одећу са називима сличним „Тее схирт“, мораћемо да употребимо фуззивуззи библиотеку да бисмо ово постигли.
search_string = "Tee shirt" threshold = 70 def filter_rows(df, column, search_string, threshold): return df[df[column].apply(lambda x: fuzz.token_sort_ratio(x, search_string)) >= threshold] filtered_df = filter_rows(df, 'Garment', search_string, threshold)
У горњем коду дефинишемо функцију филтер_ровс који узима четири параметра: ДатаФраме, име колоне, стринг за претрагу и праг сличности. Враћа филтрирани ДатаФраме на основу наведеног прага, који се израчунава помоћу фузз.токен_сорт_ратио функција из фуззивуззи библиотеке.
Разумевање кода корак по корак
- Прво, креирамо ДатаФраме под називом df који садржи наш скуп података.
- Затим дефинишемо наш стринг за претрагу као „Тее схирт“ и постављамо праг сличности од 70. Можете подесити вредност прага према жељеном нивоу сличности.
- Затим креирамо функцију под називом филтер_ровс, који филтрира ДатаФраме на основу Левенштајнове удаљености између стринга за претрагу и вредности сваког реда у наведеној колони.
- Коначно, зовемо филтер_ровс функцију за добијање нашег филтрираног оквира података, филтеред_дф.
У закључку, Пандас, у комбинацији са фуззивуззи библиотеком, је одличан алат за филтрирање редова на основу фуззи вредности. Разумевање ових библиотека и њихових функција омогућава нам да ефикасно манипулишемо подацима и решавамо сложене задатке обраде података.