U svijetu analize podataka, uobičajeno je naići na velike skupove podataka koji zahtijevaju manipulaciju i obradu podataka. Jedan takav problem koji se često pojavljuje je filtriranje redova na osnovu nejasnih vrijednosti, posebno kada se radi o tekstualnim podacima. Pandas, popularna Python biblioteka za manipulaciju podacima, pruža elegantno rješenje koje pomaže u rješavanju ovog problema. U ovom članku ćemo uroniti u to kako koristiti Pandas za filtriranje redova koristeći nejasne vrijednosti, istražiti kod korak po korak i razgovarati o relevantnim bibliotekama i funkcijama koje mogu pomoći u rješavanju sličnih problema.
Da bismo započeli rješavanje ovog problema, iskoristit ćemo Pandas biblioteka zajedno sa fuzzywuzzy biblioteka koja pomaže u izračunavanju sličnosti između različitih nizova. The fuzzywuzzy biblioteka koristi Levenshtein distancu, mjeru sličnosti zasnovanu na broju izmjena (umetanja, brisanja ili zamjena) potrebnih za transformaciju jednog stringa u drugi.
Instaliranje i uvoz potrebnih biblioteka
Za početak, morat ćemo instalirati i uvesti potrebne biblioteke. Možete koristiti pip da instalirate i Pandas i fuzzywuzzy:
pip install pandas pip install fuzzywuzzy
Nakon instalacije, uvezite biblioteke u svoj Python kod:
import pandas as pd from fuzzywuzzy import fuzz, process
Filtriranje redova na temelju nejasnih vrijednosti
Sada kada smo uvezli potrebne biblioteke, hajde da kreiramo izmišljeni skup podataka i pokažemo kako da filtriramo redove na osnovu nejasnih vrednosti. U ovom primjeru, naš skup podataka sastojat će se od naziva odjevnih predmeta i njihovih odgovarajućih stilova.
data = {'Garment': ['T-shirt', 'Polo shirt', 'Jeans', 'Leather jacket', 'Winter coat'],
'Style': ['Casual', 'Casual', 'Casual', 'Biker', 'Winter']}
df = pd.DataFrame(data)
Pod pretpostavkom da želimo da filtriramo redove koji sadrže odevne predmete sa nazivima sličnim „Tee shirt“, moraćemo da upotrebimo fuzzywuzzy biblioteku da bismo to postigli.
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)
U gornjem kodu definiramo funkciju filter_rows koji uzima četiri parametra: DataFrame, ime kolone, string za pretraživanje i prag sličnosti. Vraća filtrirani DataFrame na osnovu navedenog praga, koji se izračunava pomoću fuzz.token_sort_ratio funkcija iz fuzzywuzzy biblioteke.
Razumijevanje koda korak po korak
- Prvo kreiramo DataFrame pod nazivom df koji sadrže naš skup podataka.
- Zatim definiramo naš niz za pretraživanje kao “Tee shirt” i postavljamo prag sličnosti od 70. Možete podesiti vrijednost praga prema željenom nivou sličnosti.
- Zatim kreiramo funkciju pod nazivom filter_rows, koji filtrira DataFrame na osnovu Levenshtein udaljenosti između niza za pretraživanje i vrijednosti svakog reda u navedenoj koloni.
- Konačno, zovemo filter_rows funkcija za dobivanje našeg filtriranog okvira podataka, filtered_df.
U zaključku, Pandas, u kombinaciji sa fuzzywuzzy bibliotekom, je odličan alat za filtriranje redova na osnovu fuzzy vrednosti. Razumijevanje ovih biblioteka i njihovih funkcija omogućava nam da efikasno manipuliramo podacima i rješavamo složene zadatke obrade podataka.