探索性数据分析:挖掘积压数据

在 **六三八** 的励志故事中,他们任务的第一步是评估和整理大量未送达的积压邮件。这些堆积如山的邮件必须先进行分类和理解,然后才能取得任何进展。在现代机器学习领域,这个初始阶段类似于 **探索性数据分析** (EDA)。

在本系列中,我们将使用 CSV 数据集复制此过程,其中每行包含一个类别(例如“技术”、“商业”)及其相关文本。类别充当标签,指示每段文本所属的位置。用于数据处理的 Pandas、用于可视化的 Matplotlib、用于文本洞察的 WordCloud、用于标记分析的 Tiktoken 和用于文本处理的 NLTK 等工具将帮助我们理解数据集。

在此步骤中,我们将:

  • 加载数据并检查其结构。
  • 识别可能妨碍模型性能的缺失或不一致的值。
  • 探索类别分布以了解标签之间的平衡。
  • 可视化文本数据中的词频以发现模式。
  • 使用 Tiktoken 分析令牌数量来测量复杂性。
  • 这个 EDA 阶段反映了 **六三八** 的细致分类工作,他们必须先理清混乱,然后才能整理有序。通过详细了解我们的数据集,我们为构建能够精确分类和解释文本的精细 LLM 奠定了基础。

    介绍

    探索性数据分析 (EDA) 类似于处理大量积压数据 — 数据堆积如山、杂乱无章,而且充满了未开发的潜力。就像二战期间 Six Triple Eight 部队处理大量未送达的积压邮件一样,EDA 是我们筛选混乱数据以发现见解、确定趋势并为下一阶段的数据分析做好准备的方式。

    在这次探索中,我们将深入研究 BBC 新闻文章的数据集,解开其结构,解决不一致之处,并揭示隐藏在数据中的故事。”

    评估积压工作:数据集概述

    首先,我们必须先了解数据集的规模和结构。BBC 新闻文章数据集包含 2,234 个条目,分布在五个类别:商业、体育、政治、科技和娱乐。每个条目都有两个主要特征:

  • 类别:文章的主题或部分。
  • text:文章的全部内容。
  • 为了更清楚地了解我们正在处理的内容,我们将数据加载到 Pandas DataFrame 中,进行了快速检查,并发现:

    清理积压工作

    正如 Six Triple Eight 处理未分类的邮件堆一样,我们也需要整理数据集。清理过程涉及几个关键步骤:

  • 删除重复项 重复的文章使数据集变得混乱。识别并删除这些冗余内容后。
  • 处理缺失值虽然我们的数据集相对干净,但我们确保解决任何潜在的空值,从而不会在最终数据中留下任何空条目。”
  • 细分类别

    清理完积压的文章后,我们分析了各类别文章的分布情况,以确定主要主题。以下是我们的发现:

  • 热门类别:商业和体育所占份额最大,各有 512 篇文章。
  • 较小的类别:娱乐、政治和科技的文章较少,但提供了独特的见解。
  • 该分布证实了数据集是平衡的,使我们能够专注于更深入的分析,而不必担心严重的类别不平衡。”

    **放大:显微镜下的体育文章**

    就像按目的地对邮件进行分类一样,我们选择专注于体育类别以进行更深入的研究。目标是分析文本内容并提取有意义的模式。”

  • 标记化和停用词删除使用 NLTK 库,我们将文本标记为单个单词并删除常见的停用词(例如“and”、“the”、“is”)。这使我们能够专注于对类别更重要的单词。
  • 词频分析 创建了频率分布,以确定体育文章中最常用的术语。不出所料,‘比赛’、‘团队’和‘游戏’等词占主导地位,反映了内容的竞争性质。”
  • 可视化研究结果:词云

    为了抓住体育文章的精髓,我们生成了一个词云。最常用的术语显示得更大,生动地描绘了该类别的核心主题。

    Word Cloud frequency

    **关键要点**

    就像六三八精心分类和递送积压邮件一样,我们的 EDA 流程揭示了 BBC 新闻数据集的结构化和深刻的视图。

    **代码**

    !pip install tiktoken
    !pip install matplotlib
    !pip install wordcloud
    !pip install nltk
    !pip install pandas
    
    import pandas as pd
    
    df = pd.read_csv('/content/bbc.csv', on_bad_lines='skip')  
    
    
    df.head()
    
    df.info()
    
    df.describe()
    
    label_count = df['category'].value_counts()
    
    
    len(df['text'])
    
    
    df.drop_duplicates(inplace=True)
    
    null_values = df.isnull().sum()
    
    df.dropna(inplace=True)
    
    import nltk
    from nltk.corpus import stopwords
    from nltk.tokenize import word_tokenize
    from wordcloud import WordCloud
    from collections import Counter
    import matplotlib.pyplot as plt
    
    
    nltk.download('punkt')
    nltk.download('stopwords')
    nltk.download('punkt_tab') 
    
    
    target_label ="sport"
    target_df = df[df['category'] == target_label]
    
    
    
    target_word = [ word.lower()  for text in target_df['text']
                     for word in word_tokenize(text)
                     if word.isalnum() and word not in stopwords.words('english')
                       ]
    
    target_word_count = Counter(target_word)
    
    
    word_cloud = WordCloud().generate_from_frequencies(target_word_count)
    
    
    plt.figure(figsize=(10, 5))
    plt.imshow(word_cloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()