Python ile bir proje geliştirirken algoritmalardan ve geliştirmelerden çok özellikle veri analizi ile ilgileniyorsanız en çok başınızı ağrıtan konular dil kodlama sorunları ve veri tiplerinin değişimi sorunları olacaktır.
“Türkçe karakter sorunu” gerçekten insanı proje geliştirirken sinir eden bir sorun tipidir. Verinizi analiz etmeden önce temizleme, sınıflandırma, düzenleme, karakter setleri vb. bir çok işlemden geçirmeniz gerekiyor ve bu bir de Türkçe karakterler ile oluşmuş bir data deseni ise işiniz daha zor olacak diyebilirim.
Karşılaştığım tüm kaynaklarda sadece utf-8 ya da sadece iso8859-1 kullanarak tek satır ile sorunun çözümleneceğine dair bilgi verildiğini gözlemledim ancak öyle olmuyor. Lafı çok uzatmadan aşağıda bir iki örnek ile dil kodlamalarında sorun yaşanan bazı datalar için deneyebileceğiniz bir yol daha paylaşacağım.
Öncelikle excel veri okumasında çok fazla dil kodlama ve veri tipi değişikliği ile karşılaşmıyorsunuz. Ancak veri analizi yapacaksanız ve büyük veri ile ilgilenecekseniz excel 1.5 milyon adetten fazla kaydı tutmadığı için sorun yaşarsınız. Aynı zamanda .xlsx in okuma ve yazma hızları da içinde stil paketleri dahil olduğu için oldukça uzun sürmektedir.
Örneğin 50k bir veri için excel okuma ve yazma süreleri bilgisayar performansına göre değişse de yaklaşık 30-40 saniye civarlarındadır. Ancak aynı veriyi CSV olarak okuttuğunuzda bu süre 2-3 saniyeye kadar düşecektir. Tam da bu noktada CSV datalarındaki okuma sorunları ile karşılaşıyoruz.
Çözümü için şöyle bir yol izleyebilirsiniz ve buradaki koşulları çoğaltabilirsiniz. Genelde utf-8 in sorunları çözdüğü söylenir ancak BOM kaydedilmiş verilerde kullandığım etiketi kullanmanız gerekir. Dil kodlamasını notepad++ tarzı programlar ile kontrol edebilirsiniz. Tek bir CSV okuma yöntemi belirlerseniz bu kısımda data yüklemesi yaptığınızda hata almanız olası. Türkçe karakterler için aşağıdaki iki kodlama denemesi büyük ölçüde sorununuza yardımcı olacaktır diye düşünüyorum, istisnaları dediğim gibi genişletebilirsiniz. Farklı bir görüşü olan bilgilendirmek isteyen varsa yorum olarak paylaşabilir.
def VeriOku(data):
if ".csv" in data:
import chardet
with open(f'uploads/{data}', 'rb') as f:
sonuc= chardet.detect(f.readline())
try:
df=pd.read_csv(f'uploads/{data}', sep=";",encoding = 'utf-8-sig', dtype=str)
except:
df=pd.read_csv(f'uploads/{data}', sep=";", encoding = 'windows-1254', dtype=str)
if ".xlsx" in data:
df=pd.read_excel(f'uploads/{data}',dtype=str)
df.drop_duplicates(inplace=True)
df.dropna(thresh=3,axis=1,inplace=True)
... burada temel işlemleri yapabilirsiniz
return df
Veriyi okuduktan sonra veri tipi dönüşümlerini toplu bir şekilde nasıl yaparız, bir sonraki yazımda değineceğim.
Umarım faydalı olur.