iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

本篇文章主要目的是針對如果有爬取的資料中仍有些僅有 emoji 和無法判斷分類的評論,可以透過資料前處理將資料整理出來。


Step 1:刪除不必要的符號與 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

https://ithelp.ithome.com.tw/upload/images/20250831/20169646gEwxwg89By.png


Step 2:篩選無法判斷的評論

接著,我們排除一些無法分類的評論,例如「讚」、「好棒」、「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

Step 3:篩選空值資料

資料清理後,有些評論可能完全變成空值,我們需要將其排除:

# 去除空格和其他不可見字符
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

Step 4:查看被篩掉的資料

若想檢視被排除的評論,我們可以額外拉出符合關鍵字或空值的資料:

# 篩選符合關鍵字的資料行
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

https://ithelp.ithome.com.tw/upload/images/20250831/20169646Y6VQEc7HeD.png

Step 5:將清理後的資料存成 Excel

最後,我們將整理好的資料存檔,作為未來模型訓練或分析的資料集:

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()

以上步驟完成後,我們就完成了資料清理與篩選,未來可以作為後續分析或訓練模型的乾淨資料集使用。


上一篇
【Day 9】原始資料格式解析與初步檢查
下一篇
【Day 11】資料探索性分析與視覺化
系列文
30 天打造 App 評論洞察系統:用 AI 讓產品團隊更懂用戶13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言