Files
2026-07-13 12:37:17 +08:00

262 lines
7.9 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "68c06a52-e27c-4da6-8a02-cd010270bedf",
"metadata": {},
"source": [
"# 3 datasets库基本使用"
]
},
{
"cell_type": "markdown",
"id": "2dc4c70f-694c-4785-81d8-26ebab2b7210",
"metadata": {},
"source": [
"## 基本使用\n",
"上一节中,已经介绍了使用datasets读取本地文件的方法,这一节继续介绍datasets一些常用的方法\n",
"\n",
"首先是数据分割,因为我们从数据源获得DNA序列等数据,都是一个文本文件,但训练的时候,一般都需要分成训练集和测试集等\n",
"\n",
"一个简单的例子如下所示:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "6e9f346f-31f6-40cc-86e5-723c65033883",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DatasetDict({\n",
" train: Dataset({\n",
" features: ['text'],\n",
" num_rows: 1025615\n",
" })\n",
" test: Dataset({\n",
" features: ['text'],\n",
" num_rows: 53980\n",
" })\n",
"})"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#读取dna数据\n",
"from datasets import load_dataset\n",
"dna_dataset = load_dataset('text', data_files='data/dna_1g.txt')['train'].rain_test_split(test_size=0.05) #默认已经shuffle\n",
"dna_dataset"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "75900650-74da-4ca9-a285-b2832a5a1485",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'text': 'ATGTGTGCAATGGGTTATCTTTATGTAATAACAGTCATATCACGGGTGTTCCTCAGAAGTAGTGAACTGGCTAGCATTTTTAGACACTATGTGATCTCTCATATGACTACACTCAATTTAAAATAAAATGAAATGTGTTGTGTGTGTCTAAAATCTATAAAGGGAAAAGTATCTTAAGTATTTTTTAGATGTTAAAGTAGATGTGTATCCTAAAATATGCATTGTTCACAGATGTTAAAATTACAACTACAATCTGTGAAACACAGATCTTAGGACAGCAATGTTTCACAAGAAAAAAAATGATGCAGCCTTCTTTAGTATTTATAGTCATTTGAACAATTATGGCAACCATAAGTTCATATATAACATCCCCATTTGGTGAAACTAGTTGGGAAAGATTAGAAGGTATGACCTTGTTGGAGGAACTATACCATTGGGGTGGCTTTGAGACTTCAGAAGTTTCAAGGCCCATTTAGTGCTTTCTACCTTATGAAGCTGTGAGTTCTCCTTGCTAGCTACATAACTTGGAAAGCAGGCCCTGCACTTCACCCAAGGAGCACATTAGAGCTGGCCCTTTTGGAAGGCAATTGCGTAAGCCACACCAGGGCACCAGAGATCTGGCACTGCCATGCTCCTGCTTGCAAGTAGTGGTGTGGGTGTTGGGTGATGCCCTCCAGTCCCACCTTTTGCCACCTGTAGTAGTCAGGGGAGTTGGCCTAAGGGCATGAGAGCCTAAGACTTCACCCTAATCCCTCACCAACTGTAGCATGTGGAAGAGCAGGCTCTGTACCTTCCCTGGGCAACACATTGGAGCTGGCCCCTCACAGGCTGCAGGACTTGGGAGAGTGAGTGCTGCACCTTGACTGTGAAGGTGGTTTTGGAGGTGTGGGTGTGAGACCATGAGACCAAGAGAGGAATGGAATATTACTCACTTATTAAAAACAATGACTTCATGAAATTTGCAGGCAAATGGATGGAACTTGAAAATATCCTGAGTGAG'}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dna_dataset[\"test\"][0]"
]
},
{
"cell_type": "markdown",
"id": "cdcc5404-6590-47a4-be2c-2c1d35d3bae4",
"metadata": {},
"source": [
"可以看到,数据集已经分割成了train和test两个数据集,而在分割的时候,已经进行的随机处理\n",
"\n",
"当然,如果数据集过大,我们只需要其中一部分,这个也是一个常见的需求,一般可以使用 Dataset.select() 函数"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "049ad194-cb60-4b0f-8554-1915bfc7a9cd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DatasetDict({\n",
" train: Dataset({\n",
" features: ['text'],\n",
" num_rows: 50000\n",
" })\n",
" valid: Dataset({\n",
" features: ['text'],\n",
" num_rows: 500\n",
" })\n",
"})"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datasets import load_dataset, DatasetDict\n",
"\n",
"dna_dataset_sample = DatasetDict(\n",
" {\n",
" \"train\": dna_dataset[\"train\"].shuffle().select(range(50000)), \n",
" \"valid\": dna_dataset[\"test\"].shuffle().select(range(500)),\n",
" \"evla\": dna_dataset[\"test\"].shuffle().select(range(500))\n",
"\n",
" }\n",
")\n",
"dna_dataset_sample"
]
},
{
"cell_type": "markdown",
"id": "50cceda3-36ca-4fa6-bfb5-1dbeb155fe4f",
"metadata": {},
"source": [
"可以看到,我们使用DatasetDict来直接构造datasets,先使用shuffle()来随机,然后使用select来选择前n个数据\n",
"\n",
"select的参数为indices (list 或 range): 索引列表或范围对象,指明要选择哪些样本,如dataset.select([0, 2, 4])就是选择1,3,5条记录"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "17a1fa7c-ff4b-419f-8a82-e58cc5777cd4",
"metadata": {},
"source": [
"## 读取线上库\n",
"\n",
"当然,数据也可以直接从huggingface的线上仓库读取,这时候需要注意科学上网问题。\n",
"\n",
"具体使用函数也是load_dataset\n",
"\n",
"<img src='img/datasets_dnagpt.png' width='800px' />"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "6ae24950-2c74-457b-b1f2-d2e4397e1fa1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"\\nimport os\\n\\n# 设置环境变量, autodl专区 其他idc\\nos.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'\\n\\n# 打印环境变量以确认设置成功\\nprint(os.environ.get('HF_ENDPOINT'))\\n\""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import subprocess\n",
"import os\n",
"# 设置环境变量, autodl一般区域\n",
"result = subprocess.run('bash -c \"source /etc/network_turbo && env | grep proxy\"', shell=True, capture_output=True, text=True)\n",
"output = result.stdout\n",
"for line in output.splitlines():\n",
" if '=' in line:\n",
" var, value = line.split('=', 1)\n",
" os.environ[var] = value\n",
"\n",
"#或者\n",
"\"\"\"\n",
"import os\n",
"\n",
"# 设置环境变量, autodl专区 其他idc\n",
"os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'\n",
"\n",
"# 打印环境变量以确认设置成功\n",
"print(os.environ.get('HF_ENDPOINT'))\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "30ff9798-d06d-4992-81fc-03102f03599b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DatasetDict({\n",
" train: Dataset({\n",
" features: ['sequence', 'label'],\n",
" num_rows: 59196\n",
" })\n",
"})"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datasets import load_dataset\n",
"dna_data = load_dataset(\"dnagpt/dna_core_promoter\")\n",
"dna_data"
]
},
{
"cell_type": "markdown",
"id": "30c4b754-af11-4ac1-9742-45427059617e",
"metadata": {},
"source": [
"当然,如果你想分享你的数据集到huggingface上面,也是一行函数即可:"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f9847be9-e085-41e3-ad29-a450cc017d64",
"metadata": {},
"outputs": [],
"source": [
"dna_data.push_to_hub(\"org_name/your_dataset_name\", token=\"hf_yourtoken\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}