项目实训二--数据的整理和清洗(一)

任务一:源数据的语言不同,有英文,日文等,将他们翻译成中文

import pandas as pd
import deepl

# 替换为DeepL API密钥
auth_key = ""
translator = deepl.Translator(auth_key)

# 加载Parquet文件
data = pd.read_parquet('train.parquet')

# 定义一个标志位,用于指示是否停止翻译
stop_translation = False

# 翻译文本的函数,从英文翻译成中文
def translate_to_chinese(text):
    global stop_translation
    if stop_translation:
        return text  # 如果已经出现异常,直接返回原文
    try:
        translation = translator.translate_text(text, target_lang="ZH")
        return translation.text
    except Exception as e:
        print(f"翻译文本时出错: {e}")
        stop_translation = True  # 发生异常,设置标志位,停止后续翻译
        return text

# 翻译 'instruction' 列
data['instruction'] = data['instruction'].apply(translate_to_chinese)

# 显示翻译后的数据的前几行
print(data.head())

# 将翻译后的数据保存到一个CSV文件
data.to_csv('translated_train.csv', index=False)

这段代码的主要功能是使用DeepL API将Parquet文件中存储的文本数据从英文翻译成中文,并保存翻译后的结果到一个CSV文件。

  1. 导入库
    • import pandas as pd:导入Pandas库,常用于数据处理和分析。
    • import deepl:导入DeepL库,用于实现文本的机器翻译。
  2. 设置DeepL API密钥
    • auth_key = "DeepL API密钥":这里需要替换为DeepL API密钥,用于身份认证和访问翻译服务。
  3. 创建DeepL翻译器实例
    • translator = deepl.Translator(auth_key):使用提供的API密钥创建一个DeepL翻译器实例。
  4. 加载数据
    • data = pd.read_parquet('train.parquet'):使用Pandas的read_parquet函数加载Parquet格式的文件。Parquet是一种列存储格式,常用于处理大数据。
  5. 定义翻译函数
    • translate_to_chinese(text):这是一个函数,输入参数是文本(英文),输出是翻译后的文本(中文)。
    • global stop_translation:使用global关键字声明stop_translation,这允许函数内部修改全局变量。
    • if stop_translation:如果stop_translation为真(表示已经发生翻译错误),则函数直接返回原文本,不进行翻译。
    • try-except块:尝试使用DeepL翻译器翻译文本,如果发生异常(如网络问题、API限制等),则捕获异常,打印错误信息,并设置stop_translation为真,之后的所有翻译调用将直接返回原文。
  6. 应用翻译函数到数据列
    • data['instruction'] = data['instruction'].apply(translate_to_chinese):将translate_to_chinese函数应用于数据框data中名为instruction的列。这将逐行将英文指令翻译成中文。
  7. 显示翻译后的数据
    • print(data.head()):打印翻译后的数据框的前几行,用于检查翻译结果。
  8. 保存翻译后的数据
    • data.to_csv('translated_train.csv', index=False):将翻译后的数据保存到一个名为translated_train.csv的CSV文件,index=False参数表示不保存行索引。

这里我们使用了DeepL API来进行翻译,但是DeepL API免费版有每月字符数限制,需要花钱。

也尝试使用了python库中googletrans来进行翻译,但是可能是版本的问题,翻译不成功

把数据合并,生成表格。

试说明I/0系统的基本功能。a. 隐藏物理设备的细节 b. 与设备的无关性 c. 提高处理机和I/0设备的利用率 d. 对I/0设备进行控制e.确保对设备的正确共享 f. 错误处理
简要说明I/0软件的4个层次的基本功能。中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完后恢复现场,并返回到被中断的进程 设备驱动程序:与硬件直接有关,用来具体实现系统对设备发出的操作指令,驱动I/0设备工作 设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护,以及设备分配与释放等。 用户层I/0软件:用于实现用户与I/0设备交互
I/0系统接口与软件/硬件(RW/HW)接口分别是什么接口?I/0系统接口是I/0系统与上层系统之间的接口,向上层提供对设备进行操作的抽象I/0命令,以方便高层对设备的使用; 软件/硬件(RW/HW)接口的上面是中断处理程序何用于不同设备的设备驱动程序,它的下面是各种设备的控制器。
与设备无关性的基本含义是什么?为什么要设置该层?为了提高0S的可适应性和可扩展性,在现代0S中都毫无例外地实现了设备独立性,也称设备无关性。 基本含义:应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备两概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。 优点:1. 设备分配时的灵活性 2. 易于实现I/0重定向(用于I/0操作的设备可以更换(即重定向),而不必改变应用程序。
试说明设备控制器的组成。设置控制器与处理机的接口;设备控制器与设备的接口;I/0逻辑。
为了实现CPU与设备控制器之间的通信,设备控制器应该具备哪些功能?基本功能:接收和识别命令;数据交换;标识和报告设备的状态; 地址识别:数据缓冲;差错控制。
什么是内存映像I/0?它是如何实现的?P1868.为什么说中断是0S赖以生存的基础?中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。 另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU和I/0设备并执行,也必需有中断的支持。中断处理程序是I/0系统中最低的一层,它是整个I/0系统中最低的一层。
对中断源的两种处理方式分别用于那种场合?1)  屏蔽(禁止)中断:当处理机正在处理一个中断时,将屏蔽掉所有的中断,直到处理机已处理完本次中断,再去检查是否有中断产生。所有中断按顺序处理,优点是简单,但不能用于实时性要求较高的中断请求。 2)嵌套中断:在设置了中断优先级的系统中,当同时有多个不同优先级的中断请求,CPU优先响应优先级最高的中断请求,高优先级的中断请求可以抢占正在运行的低优先级中断的处理机。
设备中断处理程序通常需完成哪些工作?1、唤醒被阻塞的驱动进程。 2、保护被中断进程的CPU环境。 3、转入相应的设备处理程序。 4、中断处理。 5、恢复被中断进程的现场。
简要说明中断处理程序对中断进行处理的几个步骤。1、测定是否有未响应的中断信号 2、保护被中断进程的CPU环境 3、转入相应的设备处理程序 4、中断处理 5、恢复CPU的现场并退出中断

 不难发现,表格中的数据格式并不规范,所以需要对数据进行整理和清洗。
具体过程如下:

首先进行数据整理和清洗:
1:用Python代码把里面无关的字符去掉
例如:删除回答中所有的“答:”

import pandas as pd
import re

# 读取 Excel 文件
df = pd.read_excel("D:\data_repeat1.xlsx")

# 删除第二列中包含"答:"的字符串
df.iloc[:, 1] = df.iloc[:, 1].str.replace("答:", "")

# 保存处理后的DataFrame到新的Excel文件
df.to_excel("D:\cleaned_data.xlsx", index=False)

删除问题列中的数字以及其后跟的冒号:

import pandas as pd
import re

# 读取Excel文件
df = pd.read_excel("D:\data_repeat1.xlsx")

# 定义一个函数来清理单元格中的数字和数字后的冒号
def remove_numbers_and_colon(cell):
    if isinstance(cell, str):
        # 使用正则表达式替换数字及其后的冒号
        return re.sub(r'\d+.', '', cell)
    return cell

# 删除第一列中的数字及其后的冒号
df.iloc[:, 0] = df.iloc[:, 0].apply(remove_numbers_and_colon)

# 保存处理后的DataFrame到新的Excel文件
df.to_excel("D:\cleaned_data.xlsx", index=False)

结果展示:
原表格:现表格:

删除数据中的换行和空格,方法同上。

在对数据进行基本的清理之后,对数据进行分析,方便后续处理:

 2:对数据进行分析
找出每条文本最大的文本长度:
文本长度很重要,微调的时候需要提前知道最大文本长度,方便后续切割文本。

import pandas as pd
 
# 读取 Excel 文件
df = pd.read_excel("D:\data_repeat1.xlsx")
 
# 获取第一列数据
first_column = df.iloc[:, 0]
 
# 计算最大文本长度
max_length = first_column.str.len().max()
 
print("第一列数据的最大文本长度为:", max_length)

对数据进行更详细的分析:
对数据内容进行分析,以操作系统相关的知识为例:通过关键字对数据进行分类:
通过现有的知识,与操作系统有关的关键字有:输入/输出系统(I/O)、中断处理、设备控制器等。下面通过Python代码将数据库中含有“中断处理”的数据提炼出来:

import pandas as pd
 
# 读取 Excel 文件
df = pd.read_excel("D:\cleaned_data.xlsx")
 
# 提取含有"中断处理"的行
interrupt_rows = df[df.apply(lambda row: '中断处理' in str(row), axis=1)]
 
# 将提取的行保存到新的 Excel 文件
interrupt_rows.to_excel("D:\interrupt_rows.xlsx", index=False)

 结果展示:

提炼之后更加便于大模型中用户索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值