{
"cells": [
{
"cell_type": "markdown",
"id": "b7f9ce31",
"metadata": {},
"source": [
"# 一、熟悉python基础语法和jupyter notebook的使用"
]
},
{
"cell_type": "markdown",
"id": "c2b4b112",
"metadata": {},
"source": [
"1)输出语句"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "b1ed8417",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello, Python!\n"
]
}
],
"source": [
"print (\"Hello, Python!\")"
]
},
{
"cell_type": "markdown",
"id": "de5a4b48",
"metadata": {},
"source": [
"2)行和缩进"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "7268bae8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"正确的缩进格式\n",
"错误的缩进格式\n"
]
}
],
"source": [
"#python中通过缩进来进行模块编写\n",
"if True:\n",
" print (\"正确的缩进格式\")\n",
"else:\n",
" print (\"False\")\n",
"print (\"错误的缩进格式\")"
]
},
{
"cell_type": "markdown",
"id": "5b920f79",
"metadata": {},
"source": [
"3)注释使用"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "1ac7412a",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"单行注释\n",
"多行注释\n"
]
}
],
"source": [
"# 单行注释用'#'\n",
"print (\"单行注释\") # 第一个注释\n",
"\n",
"# 多行注释使用三个单引号或三个双引号\n",
"\n",
"'''\n",
"这是多行注释,使用单引号\n",
"这是多行注释,使用单引号\n",
"'''\n",
"\"\"\"\n",
"这是多行注释,使用双引号\n",
"这是多行注释,使用双引号\n",
"\"\"\"\n",
"print (\"多行注释\") # 第二个注释\n"
]
},
{
"cell_type": "markdown",
"id": "7e14475e",
"metadata": {},
"source": [
"4)代码组"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "82836cb7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"num为2\n"
]
}
],
"source": [
"#缩进相同的一组语句构成一个代码块,我们称之代码组\n",
"num=2\n",
"if num==1 : \n",
" print(\"num为1\") \n",
"elif num==2 : \n",
" print(\"num为2\") \n",
"else : \n",
" print(\"num为3\")"
]
},
{
"cell_type": "markdown",
"id": "7f44b00c",
"metadata": {},
"source": [
"5)变量类型"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "3033cb49",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13\n",
"130.0\n",
"Taylor\n"
]
}
],
"source": [
"'''\n",
"Python 中的变量赋值不需要类型声明\n",
"每个变量在内存中创建,都包括变量的标识,名称和数据这些信息\n",
"每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建\n",
"'''\n",
"counter = 13 # 赋值整型变量\n",
"miles = 130.0 # 浮点型\n",
"name = \"Taylor\" # 字符串\n",
" \n",
"print(counter)\n",
"print(miles)\n",
"print(name)"
]
},
{
"cell_type": "markdown",
"id": "a4dfb10c",
"metadata": {},
"source": [
"6)input的使用"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "ed32f1f5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a的类型: \n",
"b的类型: \n"
]
}
],
"source": [
"#input接收任意输入,将所有输入默认为字符串处理,并返回字符串类型\n",
"a = input(\"input:\") # 输入整数\n",
"print(\"a的类型:\",type(a)) \n",
"b = input(\"input:\") # 输入字符串\n",
"print(\"b的类型:\",type(b))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "3cf5752b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r1,r2,r3: 1 2 3\n"
]
}
],
"source": [
"#需要输入多个值时,可以考虑string中的split函数\n",
"r1,r2,r3 = (input(\"input:\").split(\" \"))\n",
"r1= int(r1)\n",
"r2= int(r2)\n",
"r3= int(r3)\n",
"print(\"r1,r2,r3:\",r1,r2,r3)"
]
},
{
"cell_type": "markdown",
"id": "5a4179e7",
"metadata": {},
"source": [
"7)函数的使用"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "5cbd51c3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello Python!\n"
]
}
],
"source": [
"#函数示例1\n",
"def hello() :\n",
" print(\"Hello Python!\")\n",
"\n",
"hello()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "0b751722",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"width = 13 height = 130 area = 1690\n"
]
}
],
"source": [
"#函数示例2\n",
"# 计算面积函数\n",
"def area(width, height):\n",
" return width * height\n",
"\n",
"w = 13\n",
"h = 130\n",
"print(\"width =\", w, \" height =\", h, \" area =\", area(w, h))"
]
},
{
"cell_type": "markdown",
"id": "992131d9",
"metadata": {},
"source": [
"8)列表"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "f3aa2151",
"metadata": {},
"outputs": [],
"source": [
"#列表的数据项不需要具有相同的类型,只要把逗号分隔的不同的数据项使用方括号括起来即可\n",
"list = ['Intelligent Systems', 2025 , 'Engineering' , 1010]\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "4c464bfd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1010\n",
"Engineering\n"
]
}
],
"source": [
"#逆向索引输出列表\n",
"print( list[-1] )\n",
"print( list[-2] )"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "b8a7df9b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Intelligent Systems', 2025, 'Engineering', 1010]\n"
]
}
],
"source": [
"#遍历列表\n",
"print( list[0:4] )"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "10c6d154",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Intelligent Systems', 2025, 'Engineering', 1012]\n"
]
}
],
"source": [
"#列表修改\n",
"list[3]=1012\n",
"print( list )"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "3e4033a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Intelligent Systems', 2025, 'Engineering', 1012, 2026]\n"
]
}
],
"source": [
"#列表加入新元素\n",
"list.append(2026)\n",
"print( list )"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "8e841d3a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Intelligent Systems', 'Engineering', 1012, 2026]\n"
]
}
],
"source": [
"#列表删除元素\n",
"del list[1]\n",
"print( list )"
]
},
{
"cell_type": "markdown",
"id": "20b61f61",
"metadata": {},
"source": [
"9)循环"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "94b4eb59",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"while循环:\n",
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n"
]
}
],
"source": [
"#while循环\n",
"print('while循环:')\n",
"num=0\n",
"while num<13 :\n",
" print(num)\n",
" num += 1"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "ea934a22",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"while-else循环:\n",
"true\n",
"false\n"
]
}
],
"source": [
"#while-else循环\n",
"\n",
"print('while-else循环:')\n",
"symbol=True\n",
"while symbol:\n",
" print(\"true\")\n",
" symbol=False\n",
"else:\n",
" print(\"false\")"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "820b2a06",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"for循环:\n",
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n"
]
}
],
"source": [
"#for循环\n",
"print('for循环:')\n",
"for i in range(0,13) :\n",
" print(i)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "61d6e4bf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"break:\n",
"8\n",
"7\n",
"6\n",
"over!\n"
]
}
],
"source": [
"#break和continue\n",
"print('break:')\n",
"i=9\n",
"while i > 0:\n",
" i -= 1\n",
" print(i)\n",
" if i == 6: \n",
" break\n",
"print(\"over!\")"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "046fa5f7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"continue:\n",
"8\n",
"7\n",
"5\n",
"4\n",
"3\n",
"2\n",
"1\n",
"0\n",
"over!\n"
]
}
],
"source": [
"print('continue:')\n",
"i=9\n",
"while i > 0:\n",
" i -= 1\n",
" if i == 6: \n",
" continue\n",
" print(i)\n",
"print(\"over!\")"
]
},
{
"cell_type": "markdown",
"id": "a78b05cb",
"metadata": {},
"source": [
"10)模块导入"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "d56e8ccc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"命令行参数如下:\n",
"/home/atrix/miniconda3/lib/python3.13/site-packages/ipykernel_launcher.py\n",
"--f=/run/user/1000/jupyter/runtime/kernel-v35e8009bb204139bdd61c89c4f17cf8b2cce7ca9b.json\n"
]
}
],
"source": [
"#想使用 Python 源文件,只需在另一个源文件里执行 import 语句\n",
"import sys\n",
" \n",
"print('命令行参数如下:')\n",
"for i in sys.argv:\n",
" print(i)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "d7e4bdda",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x= [0 1 2]\n",
"y= [ 140245661690688 547191536 86989327015346176]\n",
"z= [0 0 0]\n",
"a= [ 1. 7. 13.]\n"
]
}
],
"source": [
"import numpy as np\n",
"#简单介绍使用numpy库创建数组的几种方式\n",
"#使用 arange 函数创建数值范围并返回 ndarray 对象\n",
"x = np.arange(3) \n",
"print ('x=',x)\n",
"#创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组\n",
"y = np.empty(3,dtype = int) \n",
"print ('y=',y)\n",
"#创建指定大小的数组,数组元素以 0 来填充\n",
"z = np.zeros(3, dtype = int) \n",
"print ('z=',z)\n",
"#创建一个一维数组,数组是一个等差数列构成的\n",
"a = np.linspace(1,13,3)\n",
"print ('a=',a)"
]
},
{
"cell_type": "markdown",
"id": "73259f8e",
"metadata": {},
"source": [
"# 二、数据处理示例"
]
},
{
"cell_type": "markdown",
"id": "fcfc3a2c",
"metadata": {},
"source": [
"diabetes.csv是一个亚利桑那州的Pima Womans Hospital包含糖尿病相关测量和结果的历史记录的数据集,目的是根据某些诊断测量结果预测患者是否患有糖尿病。该数据集由8个医学预测变量和一个目标变量outcome组成。在进行机器学习的模型训练前我们需要对原始数据进行一定的处理,下列即为一个简略的数据处理示例过程。"
]
},
{
"cell_type": "markdown",
"id": "85f05918",
"metadata": {},
"source": [
"1)引入各种常用库"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "662450cc",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sb\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import train_test_split\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "markdown",
"id": "465cd6d0",
"metadata": {},
"source": [
"2)使用Pandas加载数据文件并输出文件信息"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "962f7b0e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pregnancies int64\n",
"Glucose int64\n",
"BloodPressure float64\n",
"SkinThickness float64\n",
"Insulin int64\n",
"BMI float64\n",
"DiabetesPedigreeFunction float64\n",
"Age int64\n",
"Outcome int64\n",
"dtype: object\n",
"Pregnancies 0\n",
"Glucose 0\n",
"BloodPressure 1\n",
"SkinThickness 1\n",
"Insulin 0\n",
"BMI 0\n",
"DiabetesPedigreeFunction 1\n",
"Age 0\n",
"Outcome 0\n",
"dtype: int64\n"
]
}
],
"source": [
"#使用Pandas将CSV文件加载到名为pima的数据框对象中\n",
"pima = pd.read_csv(\"diabetes.csv\")\n",
"#输出文件信息\n",
"print(pima.dtypes)\n",
"#输出csv文件中每列缺失的项目数量\n",
"print(pima.isnull().sum())"
]
},
{
"cell_type": "markdown",
"id": "36a23574",
"metadata": {},
"source": [
"3)数据查看"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "095cde5a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 6 | \n",
" 148 | \n",
" 72.0 | \n",
" 35.0 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" | 1 | \n",
" 1 | \n",
" 85 | \n",
" 66.0 | \n",
" 29.0 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" | 2 | \n",
" 8 | \n",
" 183 | \n",
" 64.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1 | \n",
" 89 | \n",
" 66.0 | \n",
" 23.0 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0 | \n",
" 137 | \n",
" 40.0 | \n",
" 35.0 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" | 5 | \n",
" 5 | \n",
" 116 | \n",
" 74.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 25.6 | \n",
" 0.201 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" | 6 | \n",
" 3 | \n",
" 78 | \n",
" 50.0 | \n",
" 32.0 | \n",
" 88 | \n",
" 31.0 | \n",
" 0.248 | \n",
" 26 | \n",
" 1 | \n",
"
\n",
" \n",
" | 7 | \n",
" 10 | \n",
" 115 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 35.3 | \n",
" 0.134 | \n",
" 29 | \n",
" 0 | \n",
"
\n",
" \n",
" | 8 | \n",
" 2 | \n",
" 197 | \n",
" 70.0 | \n",
" 45.0 | \n",
" 543 | \n",
" 30.5 | \n",
" 0.158 | \n",
" 53 | \n",
" 1 | \n",
"
\n",
" \n",
" | 9 | \n",
" 8 | \n",
" 125 | \n",
" 96.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.232 | \n",
" 54 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72.0 35.0 0 33.6 \n",
"1 1 85 66.0 29.0 0 26.6 \n",
"2 8 183 64.0 0.0 0 23.3 \n",
"3 1 89 66.0 23.0 94 28.1 \n",
"4 0 137 40.0 35.0 168 43.1 \n",
"5 5 116 74.0 0.0 0 25.6 \n",
"6 3 78 50.0 32.0 88 31.0 \n",
"7 10 115 0.0 0.0 0 35.3 \n",
"8 2 197 70.0 45.0 543 30.5 \n",
"9 8 125 96.0 0.0 0 0.0 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
"5 0.201 30 0 \n",
"6 0.248 26 1 \n",
"7 0.134 29 0 \n",
"8 0.158 53 1 \n",
"9 0.232 54 1 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#输出前10行数据\n",
"pima.head(10)"
]
},
{
"cell_type": "markdown",
"id": "af0b46f2",
"metadata": {},
"source": [
"4)替换缺失值为0"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "88a4884e",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 148 | \n",
" 72.0 | \n",
" 35.0 | \n",
" 0 | \n",
" 33.6 | \n",
"
\n",
" \n",
" | 1 | \n",
" 85 | \n",
" 66.0 | \n",
" 29.0 | \n",
" 0 | \n",
" 26.6 | \n",
"
\n",
" \n",
" | 2 | \n",
" 183 | \n",
" 64.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 23.3 | \n",
"
\n",
" \n",
" | 3 | \n",
" 89 | \n",
" 66.0 | \n",
" 23.0 | \n",
" 94 | \n",
" 28.1 | \n",
"
\n",
" \n",
" | 4 | \n",
" 137 | \n",
" 40.0 | \n",
" 35.0 | \n",
" 168 | \n",
" 43.1 | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 763 | \n",
" 101 | \n",
" 76.0 | \n",
" 48.0 | \n",
" 180 | \n",
" 32.9 | \n",
"
\n",
" \n",
" | 764 | \n",
" 122 | \n",
" 70.0 | \n",
" 27.0 | \n",
" 0 | \n",
" 36.8 | \n",
"
\n",
" \n",
" | 765 | \n",
" 121 | \n",
" 72.0 | \n",
" 23.0 | \n",
" 112 | \n",
" 26.2 | \n",
"
\n",
" \n",
" | 766 | \n",
" 126 | \n",
" 60.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 30.1 | \n",
"
\n",
" \n",
" | 767 | \n",
" 93 | \n",
" 70.0 | \n",
" 31.0 | \n",
" 0 | \n",
" 30.4 | \n",
"
\n",
" \n",
"
\n",
"
768 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Glucose BloodPressure SkinThickness Insulin BMI\n",
"0 148 72.0 35.0 0 33.6\n",
"1 85 66.0 29.0 0 26.6\n",
"2 183 64.0 0.0 0 23.3\n",
"3 89 66.0 23.0 94 28.1\n",
"4 137 40.0 35.0 168 43.1\n",
".. ... ... ... ... ...\n",
"763 101 76.0 48.0 180 32.9\n",
"764 122 70.0 27.0 0 36.8\n",
"765 121 72.0 23.0 112 26.2\n",
"766 126 60.0 0.0 0 30.1\n",
"767 93 70.0 31.0 0 30.4\n",
"\n",
"[768 rows x 5 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pima[['Glucose','BloodPressure','SkinThickness','Insulin','BMI']].replace(np.nan,0)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "70a95343",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 1\n",
"1 0\n",
"2 1\n",
"3 0\n",
"4 1\n",
" ..\n",
"763 0\n",
"764 0\n",
"765 0\n",
"766 1\n",
"767 0\n",
"Name: Outcome, Length: 768, dtype: int64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pima['Outcome']"
]
},
{
"cell_type": "markdown",
"id": "5e6f4007",
"metadata": {},
"source": [
"5)将Outcome这一列内容可视化"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "588cce42",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(5,4))\n",
"sb.countplot(x=pima['Outcome'],palette='OrRd_r',saturation=0.8)\n",
"plt.tight_layout()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "d6b1d6e6",
"metadata": {},
"source": [
"6)将Pregnancies这列连续变量分别按不同划分方法转换为分类变量"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "5c1578c3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 2\n",
"1 1\n",
"2 2\n",
"3 1\n",
"4 0\n",
"5 2\n",
"6 1\n",
"7 3\n",
"8 1\n",
"9 2\n",
"Name: Pregnancies, dtype: category\n",
"Categories (4, int64): [0 < 1 < 2 < 3]\n",
"0 2\n",
"1 0\n",
"2 3\n",
"3 0\n",
"4 0\n",
"5 2\n",
"6 1\n",
"7 3\n",
"8 1\n",
"9 3\n",
"Name: Pregnancies, dtype: category\n",
"Categories (4, int64): [0 < 1 < 2 < 3]\n"
]
}
],
"source": [
"#将Pregnancies这一列的内容按照[0,1,5,10,250]的区间分别划分为[0,1,2,3]的label\n",
"Pregnancies1=pd.cut(pima['Pregnancies'],[0,1,5,10,250], labels=[0,1,2,3],right=False)\n",
"#将Pregnancies这一列的内容按照四等分划分为[0,1,2,3]的label\n",
"Pregnancies2=pd.qcut(pima['Pregnancies'],4, labels=[0,1,2,3])\n",
"print(Pregnancies1.head(10))\n",
"print(Pregnancies2.head(10))"
]
},
{
"cell_type": "markdown",
"id": "e12dd773",
"metadata": {},
"source": [
"7)将原始数据集划分为训练集和测试集"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "959ef96d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(768, 8) (576, 8) (192, 8) (768,) (576,) (192,)\n"
]
}
],
"source": [
"x1 = pima.drop(columns='Outcome')\n",
"y1 = pima['Outcome']\n",
"x_train1, x_test1, y_train1, y_test1 = train_test_split(x1, y1, test_size = 0.25, random_state=0)\n",
"#输出划分后的两个集合和原始集合的大小\n",
"print(x1.shape, x_train1.shape, x_test1.shape, y1.shape, y_train1.shape, y_test1.shape)"
]
},
{
"cell_type": "markdown",
"id": "35cc0f5c",
"metadata": {},
"source": [
"# 三、课堂练习"
]
},
{
"cell_type": "markdown",
"id": "da68bbb4",
"metadata": {},
"source": [
"在jupyter notebook工具上使用python编写一个冒泡排序算法和一个快速排序算法,要求如下: \n",
"1)待排序数组手动输入 \n",
"2)将所实现算法编写为可调用函数,然后在另一个模块调用 "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "36513827",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"原始数组是否有序:False\n",
"快速排序后数组是否有序:True\n",
"冒泡排序后数组是否有序:True\n"
]
}
],
"source": [
"import random\n",
"# 冒泡排序和快速排序算法实现\n",
"def bubble_sort(array):\n",
" length = len(array)\n",
" array = array.copy()\n",
" for i in range(length, -1, -1):\n",
" for j in range(0, i - 1):\n",
" if array[j] > array[j+1]:\n",
" temp = array[j]\n",
" array[j] = array[j+1]\n",
" array[j+1] = temp\n",
" return array\n",
"\n",
"def quick_sort(array):\n",
" if len(array) <= 1:\n",
" return array\n",
" else:\n",
" pivot = array[0]\n",
" bigger, smeller = [], []\n",
" for i in range(1, len(array)):\n",
" if array[i] >= pivot:\n",
" bigger.append(array[i])\n",
" else:\n",
" smeller.append(array[i])\n",
"\n",
" return quick_sort(smeller) + [pivot] + quick_sort(bigger)\n",
"\n",
"def chack_sorted(array):\n",
" for i in range(len(array)-1):\n",
" if array[i] > array[i+1]:\n",
" return False\n",
" return True\n",
"\n",
"\n",
"array = [i for i in range(0,100)]\n",
"random.shuffle(array)\n",
"print(f\"原始数组是否有序:{chack_sorted(array)}\")\n",
"quick_sorted_array = quick_sort(array)\n",
"bubble_sorted_array = bubble_sort(array)\n",
"print(f\"快速排序后数组是否有序:{chack_sorted(quick_sorted_array)}\")\n",
"print(f\"冒泡排序后数组是否有序:{chack_sorted(bubble_sorted_array)}\")"
]
},
{
"cell_type": "markdown",
"id": "f0b92f50",
"metadata": {},
"source": [
"# 四、课堂拓展"
]
},
{
"cell_type": "markdown",
"id": "ec7f7b86",
"metadata": {},
"source": [
"为了方便同学们课后自学,向大家介绍一些相关网站帮助同学们自行学习提升: \n",
"https://docs.python.org/zh-cn/3/tutorial/index.html \n",
"https://www.w3school.com.cn/python/index.asp \n",
"https://www.runoob.com/python3/ \n",
"https://www.numpy.org.cn/ \n",
"http://www.pypandas.cn/docs/ \n",
"https://seaborn.apachecn.org/#/README \n",
"https://scikit-learn.org.cn/ \n",
"https://jupyter-notebook.readthedocs.io/en/stable/notebook.html"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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.13.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}