Bagaimana cara memproses file csv dengan python?

Dengan senang hati akan membaca baris dari setiap iterable, termasuk generator, sehingga kita dapat menggunakan generator untuk melakukan pelolosan kutipan. Tapi kita juga perlu memberi tahu csv.reader tentang kita

Saya telah menyematkan beberapa data pengujian sebagai daftar string ke dalam kode ini, tetapi Anda dapat meneruskan file terbuka ke generator fixlines

import csv 

data = '''\
id,name,score
1,"something" like this",20
2,"another thing" like that",30
'''.splitlines()

def fixlines(lines):
    for row in lines:
        try:
            first = row.index('"') + 1
            last = row.rindex('"')
        except ValueError:
            pass
        else:
            stuff = row[first:last].replace('"', '\\"')
            row = row[:first] + stuff + row[last:]
        yield row

reader = csv.reader(fixlines(data), escapechar='\\')
for row in reader:
    print(row)

keluaran

['id', 'name', 'score']
['1', 'something" like this', '20']
['2', 'another thing" like that', '30']
_

Kode ini tidak membuat perubahan pada baris yang tidak berisi tanda kutip ganda (seperti baris tajuk), atau sepasang tanda kutip ganda, tetapi mungkin tidak melakukan apa yang Anda inginkan jika menemukan baris yang berisi tanda kutip ganda tunggal. Memperbaiki yang tersisa sebagai latihan untuk pembaca. ;)

Membaca data dari CSV (nilai yang dipisahkan koma) adalah kebutuhan mendasar dalam Ilmu Data. Seringkali, kami mendapatkan data dari berbagai sumber yang dapat diekspor ke format CSV sehingga dapat digunakan oleh sistem lain. Pustaka Panadas menyediakan fitur yang dengannya kita dapat membaca file CSV secara penuh maupun sebagian hanya untuk grup kolom dan baris yang dipilih

Masukkan sebagai File CSV

File csv adalah file teks di mana nilai-nilai dalam kolom dipisahkan dengan koma. Mari pertimbangkan data berikut yang ada dalam file bernama input. csv

Anda dapat membuat file ini menggunakan windows notepad dengan menyalin dan menempelkan data ini. Simpan file sebagai input. csv menggunakan save As All files(*. *) opsi di notepad

id,name,salary,start_date,dept
1,Rick,623.3,2012-01-01,IT
2,Dan,515.2,2013-09-23,Operations
3,Tusar,611,2014-11-15,IT
4,Ryan,729,2014-05-11,HR
5,Gary,843.25,2015-03-27,Finance
6,Rasmi,578,2013-05-21,IT
7,Pranab,632.8,2013-07-30,Operations
8,Guru,722.5,2014-06-17,Finance

Membaca File CSV

Fungsi read_csv dari perpustakaan panda juga dapat digunakan untuk membaca beberapa kolom tertentu dan rentang baris. Kami menggunakan metode pengindeksan multi-sumbu yang disebut. loc() untuk tujuan ini. Kami memilih untuk menampilkan kolom gaji dan nama untuk beberapa baris

Artikel saya sebelumnya mengeksplorasi konsep menggores informasi tekstual dari situs web menggunakan pustaka python bernama BeautifulSoup. Kami dengan cepat dapat mengikis peringkat perusahaan karyawan dari Memang. com dan ekspor data ke file CSV lokal. Menggores data hanyalah langkah pertama dalam mengumpulkan wawasan berguna dari data teks yang baru kami peroleh. Tujuan dari artikel ini adalah untuk mengambil langkah selanjutnya dan menerapkan beberapa langkah pra-pemrosesan standar untuk menyiapkan data untuk analisis

Metode pra-pemrosesan mana yang Anda pilih untuk dilakukan akan bergantung pada data Anda, hasil yang diinginkan, dan/atau cara Anda memilih untuk menganalisis data Anda. Yang mengatakan, metode pra-pemrosesan yang tercantum di bawah ini adalah beberapa metode paling umum yang biasanya digunakan

  1. Mengimpor Perpustakaan bersama dengan Data kami
  2. Memperluas Kontraksi
  3. Deteksi Bahasa
  4. Tokenisasi
  5. Mengubah semua Karakter menjadi Huruf Kecil
  6. Menghapus Tanda Baca
  7. Menghapus Stopword
  8. Bagian dari Penandaan Pidato
  9. Lemmatisasi

Mengimpor Perpustakaan yang Diperlukan

import pandas as pd
import numpy as np
import nltk
import string
import fasttext
import contractions
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords, wordnet
from nltk.stem import WordNetLemmatizer
plt.xticks(rotation=70)
pd.options.mode.chained_assignment = None
pd.set_option('display.max_colwidth', 100)
%matplotlib inline
Mengimpor Data kami

Kami akan mengimpor peringkat tinjauan karyawan yang diperoleh di tutorial kami sebelumnya dan dengan cepat memeriksa datanya

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_

Kami akan memfokuskan perhatian kami pada kolom “rating” dan “rating_description” karena berisi informasi kualitatif yang paling berharga. Meskipun kami tidak akan menerapkan langkah pra-pemrosesan apa pun ke kolom "peringkat".

Pertama, mari kita jatuhkan “Unnamed. 0” karena hanya menggandakan indeks

df.drop('Unnamed: 0', axis=1, inplace=True)

Selanjutnya, mari kita periksa apakah kita memiliki nilai yang hilang. Sepertinya "rating" dan "rating_description" tidak mengandung nilai yang hilang

for col in df.columns:
print(col, df[col].isnull().sum())
_

rws = df.loc[:, ['rating', 'rating_description']]

Pra-Pemrosesan Teks

Memperluas Kontraksi

Kontraksi adalah jalan pintas sastra kecil yang kita ambil alih-alih "Seharusnya" kita lebih suka "Seharusnya" atau di mana "Jangan" dengan cepat menjadi "Jangan". Kami akan menambahkan kolom baru ke kerangka data kami yang disebut "no_contract" dan menerapkan fungsi lambda ke bidang "rating_description" yang akan memperluas kontraksi apa pun. Waspadai fakta bahwa kontraksi yang diperluas akan secara efektif ditandai bersama. Dengan kata lain, "I've" = "I have" bukan "I", "have"

rws['no_contract'] = rws['rating_description'].apply(lambda x: [contractions.fix(word) for word in x.split()])
rws.head()
_

Kami pada akhirnya ingin kontraksi yang diperluas untuk diberi token secara terpisah menjadi "I", "have", oleh karena itu, mari kita ubah daftar di bawah kolom "no_contract" kembali menjadi string

rws['rating_description_str'] = [' '.join(map(str, l)) for l in rws['no_contract']]
rws.head()
_

Deteksi Bahasa Inggris

Langkah selanjutnya adalah mengidentifikasi bahasa yang digunakan untuk menulis setiap ulasan, lalu menghapus ulasan yang tidak berbahasa Inggris. Kami pertama-tama harus mengunduh model bahasa pra-terlatih untuk perpustakaan fasttext kami (semua orang harus berterima kasih kepada facebook untuk yang satu ini). TextBlob adalah perpustakaan umum yang digunakan untuk mendeteksi bahasa string tetapi itu akan dengan cepat memberi Anda kesalahan saat Anda mem-parsing teks dalam jumlah besar. Setelah kami mengunduh model, kami akan menggunakan for-loop untuk mengulangi ulasan kami. Hasilnya adalah kumpulan bahasa yang diprediksi dan probabilitas prediksi. Dalam kasus kami, kami hanya memerlukan yang pertama (mis. prediksi bahasa) bagian dari tuple. Terakhir, kami hanya memilih dua karakter terakhir

pretrained_model = "lid.176.bin" 
model = fasttext.load_model(pretrained_model)
langs = []
for sent in rws['rating_description_str']:
lang = model.predict(sent)[0]
langs.append(str(lang)[11:13])
rws['langs'] = langs

Sekarang yang harus kita lakukan adalah menghapus ulasan non-bahasa Inggris

Tokenisasi

Sekarang setelah kami menghapus ulasan non-Inggris, mari terapkan tokenizer kami untuk membagi setiap kata menjadi token. Kami akan menerapkan NLTK. word_tokenize() ke kolom “rating_description_str” dan buat kolom baru bernama “tokenized”

rws['tokenized'] = rws['rating_description_str'].apply(word_tokenize)
rws.head()

Mengubah semua Karakter menjadi Huruf Kecil

Mengubah semua kata menjadi huruf kecil juga merupakan langkah pra-pemrosesan yang sangat umum. Dalam hal ini, kami akan sekali lagi menambahkan kolom baru bernama "lebih rendah" ke kerangka data yang akan mengubah semua kata yang diberi token menjadi huruf kecil. Namun, karena kita harus mengulangi beberapa kata, kita akan menggunakan for-loop sederhana di dalam fungsi lambda untuk menerapkan fungsi "lebih rendah" ke setiap kata

rws['lower'] = rws['tokenized'].apply(lambda x: [word.lower() for word in x])
rws.head()

Menghapus Tanda Baca

Tanda baca sering kali dihapus dari korpus kami karena hanya memberikan sedikit nilai setelah kami mulai menganalisis data kami. Melanjutkan pola sebelumnya, kita akan membuat kolom baru yang tanda bacanya telah dihapus. Kami akan kembali menggunakan for-loop dalam fungsi lambda untuk mengulangi token tetapi kali ini menggunakan kondisi IF untuk hanya menampilkan karakter alfa. Mungkin agak sulit untuk melihatnya tetapi "periode" yang diberi token di kolom "bawah" telah dihapus

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_0

Menghapus Stopword

Stopword biasanya adalah kata-kata yang tidak berguna dan tidak menambah banyak arti pada sebuah kalimat. Dalam bahasa Inggris stopword umum termasuk “Anda, dia, dia, di, a, memiliki, adalah, dll. ”. Pertama, kita perlu mengimpor pustaka stopwords NLTK dan menyetel stopwords kita ke "bahasa Inggris". Kami akan menambahkan kolom baru "no_stopwords" yang akan menghapus kata henti dari kolom "no_punc" karena telah diberi token, telah diubah menjadi huruf kecil dan tanda baca telah dihapus. Sekali lagi for-loop dalam fungsi lambda akan mengulangi token di "no_punc" dan hanya mengembalikan token yang tidak ada di variabel "stop_words" kami

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_1

Stemming vs Lemmatisasi

Gagasan stemming adalah untuk mengurangi bentuk penggunaan kata yang berbeda menjadi kata dasarnya. Misalnya, "drive", "drive", "driving", "driven", "driver" adalah turunan dari kata "drive" dan sangat sering peneliti ingin menghapus variabilitas ini dari korpus mereka. Dibandingkan dengan lemmatisasi, stemming tentu saja merupakan metode yang tidak terlalu rumit tetapi seringkali tidak menghasilkan akar morfologi kata yang spesifik menurut kamus. Dengan kata lain, stemming kata “pai” akan sering menghasilkan akar “pi” sedangkan lemmatisasi akan menemukan akar morfologis “pai”

Alih-alih mengambil jalan keluar yang mudah dengan stemming, mari kita terapkan lemmatisasi pada data kita tetapi memerlukan beberapa langkah tambahan dibandingkan dengan stemming

Pertama, kita harus menerapkan part of speech tag, dengan kata lain, menentukan part of speech (mis. kata benda, kata kerja, kata keterangan, dll. ) untuk setiap kata

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_2

Kami akan menggunakan lemmatizer kata NLTK yang membutuhkan bagian dari tag ucapan untuk dikonversi ke format wordnet. Kami akan menulis fungsi yang membuat konversi yang tepat dan kemudian menggunakan fungsi tersebut dalam pemahaman daftar untuk menerapkan konversi. Terakhir, kami menerapkan lemmatizer kata NLTK

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_3

Sekarang kita dapat menerapkan lemmatizer kata NLTK dalam pemahaman daftar tepercaya kita. Perhatikan, fungsi lemmatizer membutuhkan dua parameter kata dan tagnya (dalam bentuk wordnet)

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_4

Terakhir, kami akan menyimpan pekerjaan ini ke dalam file csv untuk analisis data eksplorasi lebih lanjut yang dapat Anda baca di blog saya berikutnya

with open('indeed_scrape.csv') as f:
df = pd.read_csv(f)
f.close()
_5

Pra-pemrosesan teks dapat dengan cepat menjadi lubang kelinci untuk pengeditan dan teknik lebih lanjut, tetapi kita harus menarik garis di suatu tempat. Saya sering akan kembali ke tahap pra-pemrosesan data saat saya melangkah lebih jauh dalam proses analisis saya karena saya telah menemukan beberapa masalah data yang perlu ditangani. Yang mengatakan, belajar menggambar garis di suatu tempat

Bagaimana cara melakukan preprocessing data dari file CSV?

Langkah-langkah yang terlibat dalam prapemrosesan data. .
Mengimpor Perpustakaan yang diperlukan
Mengimpor kumpulan data
Menangani Data yang Hilang
Mengkodekan Data Kategorikal
Memisahkan kumpulan data menjadi kumpulan tes dan kumpulan pelatihan
Penskalaan Fitur

Bagaimana Anda memproses data teks dengan Python?

Untuk menyiapkan data teks untuk pembuatan model, kami melakukan pemrosesan awal teks. Ini adalah langkah pertama dari proyek NLP. .
Menghilangkan tanda baca seperti. ,. $( ) * % @
Menghapus URL
Menghapus kata-kata Hentikan
Casing bawah
Tokenisasi
Berasal
Lemmatisasi

Bagaimana cara melakukan pembersihan dan pemrosesan data dengan Python?

Metode 1. Menghapus Data yang Hilang .
Muat kumpulan data. Di [1]. impor panda sebagai pd impor numpy sebagai np. .
Periksa tipe data untuk setiap kolom. Di [4]. df. .
Menemukan nilai yang hilang di setiap kolom. Di [5]. df. .
Menjatuhkan/Menghapus baris yang berisi nilai yang hilang. Di [6]. .
Memeriksa untuk melihat NA setelah penghapusan baris

Apa 4 langkah umum yang diambil untuk memproses data?

4 Langkah dalam Pemrosesan Data .
Nilai yang hilang. Berikut beberapa cara untuk mengatasi masalah ini. Abaikan tupel itu. .
Data Berisik. Ini melibatkan menghilangkan kesalahan acak atau varians dalam variabel terukur. .
Menghapus outlier. Teknik pengelompokan mengelompokkan titik data yang serupa