本篇文章主要目的是針對如果有爬取的資料中仍有些僅有 emoji 和無法判斷分類的評論,可以透過資料前處理將資料整理出來。
首先,我們定義函數 clean_text
,用來移除標點符號、表情符號,以及非文字或空白的字元:
import string
import emoji
import re
def clean_text(text):
# 確保輸入是字串類型
if not isinstance(text, str):
text = str(text)
# 移除標點符號
remove_punct_text = text.translate(str.maketrans('', '', string.punctuation))
# 移除表情符號
text = ''.join(char for char in remove_punct_text if not emoji.is_emoji(char))
# 移除非文字或空白字元
text = re.sub(r'[^\w\s]', '', text)
return text.lower()
將清理函數套用到評論資料:
cleaned_df = limited_df.copy()
cleaned_df['cleaned_review'] = limited_df['review'].apply(clean_text)
cleaned_df
接著,我們排除一些無法分類的評論,例如「讚」、「好棒」、「good」等等:
keywords = ['n/a', 'na', 'nan', 'thank you', 'thanks', 'good', 'very good', 'great', 'ok', 'okay', 'nice', 'very nice',
'好', '很好', '可以', '棒', '好棒', '超棒', '很棒', '非常棒', '非常好', '還行', '還可以', '滿意', '無', '讚', '很讚', '很方便', '難用', '很難用', '方便', '謝謝']
lower_keywords = [word.lower() for word in keywords]
filt_keywords = ~cleaned_df['cleaned_review'].str.lower().isin(lower_keywords)
keywords_df = cleaned_df[filt_keywords]
keywords_df
資料清理後,有些評論可能完全變成空值,我們需要將其排除:
# 去除空格和其他不可見字符
keywords_df['cleaned_review'] = keywords_df['cleaned_review'].str.strip()
# 篩選非空值的行
filt_non_blank = keywords_df['cleaned_review'] != ''
non_blank_df = keywords_df[filt_non_blank]
non_blank_df
若想檢視被排除的評論,我們可以額外拉出符合關鍵字或空值的資料:
# 篩選符合關鍵字的資料行
filt_keywords = cleaned_df['cleaned_review'].str.lower().isin(lower_keywords)
keywords_df = cleaned_df[filt_keywords]
# 篩選空值資料行
non_keywords_df = cleaned_df[~filt_keywords]
blank_df = non_keywords_df[non_keywords_df['cleaned_review'] == '']
# 合併符合關鍵字和空值資料
filtered_df = pd.concat([keywords_df, blank_df])
filtered_df.reset_index(drop=True, inplace=True)
filtered_df
最後,我們將整理好的資料存檔,作為未來模型訓練或分析的資料集:
import pandas as pd
from datetime import datetime
from google.colab import drive
drive.mount('/content/drive')
!pip install xlsxwriter
def create_excel_with_date():
today = datetime.now().strftime('%Y%m%d')
file_name_base = input("請輸入文件名(不包含日期): ")
file_name = f"{today}_{file_name_base}.xlsx"
output_path = f'/content/drive/MyDrive/{file_name}'
with pd.ExcelWriter(output_path, engine='xlsxwriter') as writer:
limited_df.to_excel(writer, index=False, sheet_name='raw_data')
cleaned_df.to_excel(writer, index=False, sheet_name='cleaned_data')
filtered_df.to_excel(writer, index=False, sheet_name='filtered_data')
print(f"檔案已保存為: {file_name}")
return file_name
created_file = create_excel_with_date()
以上步驟完成後,我們就完成了資料清理與篩選,未來可以作為後續分析或訓練模型的乾淨資料集使用。