首页
关于
推荐
百度一下
腾讯视频
Search
1
你要的草莓熊来啦!——郑科院
5,318 阅读
2
第4章 实训2 删除年龄异常数据
5,044 阅读
3
郑州科技学院2023-2024学年第一学期期末统一考试 Python程序设计
4,083 阅读
4
郑州科技学院2022-2023年第二学期期末统一考试 管理学 课程试题
3,783 阅读
5
Python程序设计教学大纲(董付国老师版)
1,459 阅读
默认分类
登录
/
注册
Search
庞立智
累计撰写
79
篇文章
累计收到
384
条评论
首页
栏目
默认分类
页面
关于
推荐
百度一下
腾讯视频
搜索到
79
篇与
的结果
2023-10-30
第4章 pandas数据预处理(要7个学时左右)
一、 材料清单(1) 《Python数据分析与应用(第2版)(微课版)》教材。(2) 配套PPT。(3) 数据。(4) 代码。(5) 引导性提问。(6) 探究性问题。(7) 拓展性问题。二、 教学目标与基本要求教学目标以实际数据为例子,介绍数据分析的数据预处理过程,即数据合并、数据清洗、数据标准化和数据转换。数据合并介绍将多个数据源中的数据合并存放到一个数据存储的过程。数据清洗主要介绍对重复数据、缺失值和异常值的处理。数据标准化介绍如何将不同量纲的数据转化为可以相互比较的标准化数据。数据转换介绍如何从不同的应用角度对已有特征进行转换。基本要求(1) 掌握数据合并的原理与方法。(2) 掌握数据清洗的基本方法。(3) 掌握数据标准化的概念与方法。(4) 掌握常用的数据变换方法。三、 问题引导性提问引导性提问需要教师根据教材内容和学生实际水平,提出问题,启发引导学生去解决问题,提问,从而达到理解、掌握知识,发展各种能力和提高思想觉悟的目的。(1) 数据质量不高的情况下如何提高数据质量?(2) 数据预处理包含哪些内容?(3) 数据预处理各个步骤是否有先后?探究性问题探究性问题需要教师深入钻研教材的基础上精心设计,提问的角度或者在引导性提问的基础上,从重点、难点问题切入,进行插入式提问。或者是对引导式提问中尚未涉及但在课文中又是重要的问题加以设问。(1) 重复值是否一定要做清洗?(2) 时间数据中存在哪些信息?(3) 数据变换的目的是什么?拓展性问题拓展性问题需要教师深刻理解教材的意义,学生的学习动态后,根据学生学习层次,提出切实可行的关乎实际的可操作问题。亦可以提供拓展资料供学生研习探讨,完成拓展性问题。(1) 除了哑变量处理外,还有那些方法可以处理 离散型特征 ?(2) 能否将这些方法写成自定义函数?四、 主要知识点、重点与难点主要知识点(1) 数据合并的原理与方法。(2) 数据清洗的基本方法。(3) 数据标准化的概念与方法。(4) 常用的数据变换方法。重点(1) 数据合并。(2) 数据清洗。(3) 数据标准化。(4) 数据转换。难点(1) 数据清洗。(2) 数据转换。五、 教学过程设计理论教学过程(1) 堆叠合并数据。(2) 主键合并数据。(3) 重叠合并数据。(4) 检测与处理重复值。(5) 检测与处理缺失值。(6) 检测与处理异常值。(7) 离差标准化数据 。(8) 标准差标准化数据。(9) 小数定标标准化数据。(10) 哑变量处理类别型数据。(11) 离散化连续型数据。实验教学过程(1) 堆叠、主键、重叠合并数据。(2) 检测与处理重复值、缺失值、异常值。(3) 离差标准化、标准差标准化。(4) 小数定标标准化数据。(5) 哑变量处理类别型数据 。(6) 离散化连续型数据。
2023年10月30日
248 阅读
0 评论
2 点赞
2023-10-25
郑州科技学院2023-2024学年第一学期期末统一考试 Python程序设计
郑州科技学院2023-2024学年第一学期期末统一考试Python程序设计 试题(供 2022级投资学 专业使用,考试时间100分钟)一、单选题(共20题,每题2分,共40分)执行语句print(10==10.0)的结果为?( )A、10B、10.0C、TrueD、False执行语句y=4**3后,变量y的值为?( )A、0B、12C、64D、81执行(2*3)/(9-3*2)A、1B、2.0C、2D、1.0print(12.34-1.34)的输出结果是?( )A、11B、11.0C、11.00D、12.34-1.34已知变量a=2,b=3,执行语句a%=a+b后,变量a的值为?( )A、0B、2C、3D、12print(“a”+’b’*2) 结果是?( )A、ab2B、abbC、ababD、abPython编程语言的注释语句是以( )开头的?A、'B、//C、#D、{a="我要做作业",b=“我要学习”,以下哪种是可以输出这两句中文的?( )A、print(a+b);B、print('a'+'b');C、print ("a+b");D、print("a"+"b");海龟作图中,默认的海龟方向的朝向是?( )A、朝左B、朝右C、朝上D、朝下type() 函数返回对象的类型,那么print(type("7654"))输出的结果是?( )A、<class 'str'>B、<class 'int'>C、<class 'float'>D、<class 'bool'>Python中,用什么方式实现代码快速缩进?( )A、按4次空格键B、tab键C、shift+tab键D、Alt+tab键print(3456%100)的结果是?( )A、34.56B、34C、56D、34.5下列哪个函数的功能是将字符串和数字转换成整数?( )A、floatB、intC、roundD、ordTurtle库中,用于将画笔移动到坐标(x,y)位置的命令是?( )A、turtle.go(y,x)B、turtle.go(x,y)C、turtle.goto(x,y)D、turtle.goup(x,y)以下哪个变量命名不符合Python规范?( )A、语言='Python'B、_language=‘Python’C、language=‘Python’D、.language=‘Python’以下哪个不是Python开发工具?( )A、idleB、jupyterC、shellD、pycharm下列代码运行的结果是?( ) a=0 b=False print(a==b)A、0B、FalseC、TrueD、errorPython中的==代表的是( )。A、把左边的值赋值给右边;B、把右边的值赋值给左边;C、比较左右两边是否相等;D、左右两边值进行交换;要抽出一个三位数的个位上的数字,如三位数479,可以输入以下哪个代码可以获得其中的个位数上的9?( )A、print(479%10//10)B、print(479//10//10)C、print(479%10%10)D、print(479//10%10)已知有列表a = [1, 2, 3, 4, 5],以下语句中,不能输出[5, 4, 3, 2, 1]的是?( )A、print(a[:-6:-1])B、print(a.sort(reverse=True))C、print(sorted(a, reverse=True))D、print([5, 4, 3, 2, 1])二、判断题(共15题,每题2分,共30分)Python文件的后缀名可以使.py和.pyw。Python代码语句: s=23.4 t=int(s)+1 那么print(t)的结果为24.4。在Python中,input("请输入"),运行后如果输入3+8,则返回结果为11。as,is,class是Python中常用保留字,不可以作为变量名。使用三层双引号或三层单引号都可以做多行注释。Turle库中,turtle.backward(200)和turtle.forward(-200)的使用效果是一样的。语句m+=n的意义是m=m+n。int(6.9)运行结果是7。9.apppend()或extend()方法比使用加号运算符效率更高。10.Python中,选择结构if必须有对应的else,否则程序无法运行。11.字典中的key不能重复。12.使用字典方法update()进行更新时,会自动忽略已有的“键“。13.内置函数input()用来接受用户键盘输入的信息,无论输入什么一律返回str类型。14.Python中,一旦变量定义就不能改变其类型。15.表达式7.9-4.5的值为3.4三、编程题(共2题,共30分) 1. 编写小型四则计算器:(15分) 用Python写个四则计算器,要求注释清楚。除法要包含除数为0的情况。 2. 成绩等级判定15分) 编写一段代码,要求如下: 1、程序开始运行后,需要用户输入学生的成绩(成绩为正整数) 2、一次输入一个学生的成绩,学生成绩是从0到100; 3、根据用户输入的成绩,程序依据等级标准,输出相应的等级。 4、等级标准是成绩小于60为不及格,60(含)到85(不含)之间为良,85(含)以上为优。
2023年10月25日
4,083 阅读
56 评论
10 点赞
2023-10-23
第4章 使用Pandas进行数据预处理之4.2 数据清洗
P-101页面代码 4-7 利用list去重import pandas as pd download = pd.read_csv('../data/user_download.csv', index_col=0, encoding='gbk') # 方法一 # 定义去重函数 def del_rep(list1): list2 = [] for i in list1: if i not in list2: list2.append(i) return list2 # 去重 # 将下载意愿从数据框中提取出来 download = list(download['是否愿意下载']) print('去重前下载意愿选项总数为:', len(download)) download_rep = del_rep(download) # 使用自定义的去重函数去重 print('方法一去重后下载意愿选项总数为:', len(download_rep)) print('用户选项为:', download_rep)代码 4-8 利用set特性去重# 方法二 print('去重前下载意愿选项总数为:', len(download)) download_set = set(download) # 利用set的特性去重 print('方法二去重后下载意愿选项总数为:', len(download_set)) print('用户选项为:', download_set) 代码 4-9 使用drop_duplicates()方法对是否愿意下载特征去重# 对下载意愿去重 download = pd.read_csv('../data/user_download.csv', encoding='gbk') download_select = download['是否愿意下载'].drop_duplicates() print('drop_duplicates方法去重之后下载意愿选项总数为:', len(download_select)) 代码 4-10 使用drop_duplicates()方法对多个特征去重all_info = pd.read_csv('../data/user_all_info.csv') print('去重之前用户的形状为:', all_info.shape) shape_det = all_info.drop_duplicates(subset = ['用户编号', '编号']).shape print('依照用户编号,编号去重之后用户总信息表大小为:', shape_det)代码 4-11 求取年龄和每月支出的相似度矩阵,利用corr()函数# 求取年龄和每月支出的相似度 corr_det = all_info[['年龄', '每月支出']].corr(method='kendall') print('年龄和每月支出的相似度矩阵为:\n', corr_det)代码 4-12 求出居住类型、年龄和每月支出这3个特征的pearson相似度矩阵corr_det1 = all_info[['居住类型', '年龄', '每月支出' ]].corr(method='pearson') print('居住类型、年龄和每月支出的pearson法相似度矩阵为:\n', corr_det1) 代码 4-13 使用equals()方法去重# 定义求取特征是否完全相同的矩阵的函数 def feature_equals(df): df_equals = pd.DataFrame([]) for i in df.columns: for j in df.columns: df_equals.loc[i, j] = df.loc[:, i].equals(df.loc[:, j]) return df_equals # 应用上述方法 app_desire = feature_equals(all_info) print('app_desire的特征相等矩阵的前7行7列为:\n', app_desire.iloc[:7, :7])代码 4-14 通过遍历的方式进行数据的筛选# 遍历所有数据 len_feature = app_desire.shape[0] dup_col = [] for m in range(len_feature): for n in range(m + 1, len_feature): if app_desire.iloc[m, n] & (app_desire.columns[n] not in dup_col): dup_col.append(app_desire.columns[n]) #进行去重操作 print('需要删除的行为:', dup_col) all_info.drop(dup_col, axis=1, inplace=True) print('删除多余行后all_info的特征数目为:', all_info.shape[1])代码 4-15 处理缺失值、sum函数、isnull()方法和notnull()方法的用法 print('all_info每个特征缺失的数目为:\n', all_info.isnull().sum()) print('all_info每个特征非缺失的数目为:\n', all_info.notnull().sum())代码 4-16 使用dropna()的方法删除缺失值print('去除缺失的行前all_info的形状为:', all_info.shape) all_info1 = all_info.dropna(axis=0, how='any') print('去除缺失的行后all_info的形状为:', all_info1.shape) all_info1.to_csv('../tmp/all_info_notnull.csv', index=False)代码 4-17 使用fillna()方法替换缺失值# 求每月支出平均值 mean_num = all_info['每月支出'].mean() # 缺失值替换为均值 all_info['每月支出'] = all_info['每月支出'].fillna(mean_num) print('每月支出特征缺失的数目为:\n', all_info['每月支出'].isnull().sum()) 代码 4-18 使用SciPy库中的interpolate模块进行插值# 线性插值 import numpy as np from scipy.interpolate import interp1d # 创建自变量x x = np.array([1, 2, 3, 4, 5, 8, 9, 10]) # 创建因变量y1 y1 = np.array([2, 8, 18, 32, 50, 128, 162, 200]) # 创建因变量y2 y2 = np.array([3, 5, 7, 9, 11, 17, 19, 21]) # 线性插值拟合x、y1 linear_ins_value1 = interp1d(x, y1, kind='linear') # 线性插值拟合x、y2 linear_ins_value2 = interp1d(x, y2, kind='linear') print('当x为6、7时,使用线性插值y1为:', linear_ins_value1([6, 7])) print('当x为6、7时,使用线性插值y2为:', linear_ins_value2([6, 7])) # 拉格朗日插值 from scipy.interpolate import lagrange large_ins_value1 = lagrange(x, y1) # 拉格朗日插值拟合x、y1 large_ins_value2 = lagrange(x, y2) # 拉格朗日插值拟合x、y2 print('当x为6,7时,使用拉格朗日插值y1为:', large_ins_value1([6, 7])) print('当x为6,7时,使用拉格朗日插值y2为:', large_ins_value2([6, 7])) # 样条插值 # 样条插值拟合x、y1 y1_new = np.linspace(x.min(), x.max(), 10) f = interp1d(x, y1, kind='cubic') # 编辑插值函数格式 spline_ins_value1 = f(y1_new) # 通过相应的插值函数求得新的函数点 # 样条插值拟合x、y2 y2_new = np.linspace(x.min(), x.max(), 10) f = interp1d(x, y2, kind='cubic') # 编辑插值函数格式 spline_ins_value2 = f(y2_new) # 通过相应的插值函数求得新的函数点 print('使用样条插值y1为:', spline_ins_value1) print('使用样条插值y2为:', spline_ins_value2) 代码 4-19 使用3σ原则来识别异常值all_info = pd.read_csv('../tmp/all_info_notnull.csv') # 定义3σ原则来识别异常值函数 def out_range(ser1): bool_ind = (ser1.mean() - 3 * ser1.std() > ser1) | \ (ser1.mean() + 3 * ser1.var() < ser1) index = np.arange(ser1.shape[0])[bool_ind] outrange = ser1.iloc[index] return outrange outlier = out_range(all_info['年龄']) print('使用3σ原则判定异常值个数为:', outlier.shape[0]) print('异常值的最大值为:', outlier.max()) print('异常值的最小值为:', outlier.min())代码 4-20 根据箱底线图识别用户年龄的异常值import matplotlib.pyplot as plt plt.figure(figsize=(10, 8), dpi=1080) p = plt.boxplot(list(all_info['年龄'].values)) # 画出箱线图 outlier1 = p['fliers'][0].get_ydata() # fliers为异常值的标签 plt.savefig('../tmp/用户年龄异常数据识别.jpg') plt.show() print('年龄数据异常值个数为:', len(outlier1)) print('年龄数据异常值的最大值为:', max(outlier1)) print('年龄数据异常值的最小值为:', min(outlier1))
2023年10月23日
308 阅读
0 评论
1 点赞
2023-10-23
第4章 使用Pandas进行数据预处理之4.1 合并数据
代码 4-1 行索引完全相同时的横向堆叠# 书 P-95页import pandas as pd #先读取数据,注意文件地址斜线方向为/。 user_all_info = pd.read_csv('../data/user_all_info.csv') df1 = user_all_info.iloc[:, :3] # 取出user_all_info的前3列数据,:3为0到2 df2 = user_all_info.iloc[:, 3:] # 取出user_all_info的第4列到最后1列数据 print('合并df1的大小为%s,df2的大小为%s' % (df1.shape, df2.shape)) print('外连接合并后的数据框大小为:', pd.concat([df1, df2], axis=1, join='outer').shape) print('内连接合并后的数据框大小为:', pd.concat([df1, df2], axis=1, join='inner').shape)代码 4-2 列名相同的纵向堆叠# 取出user_all_info前500行数据 df3 = user_all_info.iloc[:500, :] # 取出user_all_info的500后的数据 df4 = user_all_info.iloc[500:, :] print('合并df3的大小为%s,df4的大小为%s' % (df3.shape, df4.shape)) print('内连接纵向合并后的数据框大小为:', pd.concat([df3, df4], axis=0, join='outer').shape) print('外连接纵向合并后的数据框大小为:', pd.concat([df3, df4], axis=0, join='inner').shape)代码 4-3 使用append方法进行堆叠print('堆叠前df3的大小为%s,df4的大小为%s' % (df3.shape, df4.shape)) print('append纵向堆叠后的数据框大小为:', df3.append(df4).shape)代码 4-4 使用merge方法合并数据表pay_info = pd.read_csv('../data/user_pay_info.csv', encoding='gbk') download_info = pd.read_csv('../data/user_download.csv', encoding='gbk') # 用户信息表和用户每月支出信息表中都有'用户编号' download_and_pay = pd.merge(download_info, pay_info, left_on='用户编号', right_on='编号') print('pay_info用户每月支出信息表的原始形状为:', pay_info.shape) print('download_info用户下载意愿表的原始形状为:', download_info.shape) print('用户下载意愿表和用户每月支出信息表主键合并后的形状为:', download_and_pay.shape)代码 4-5 使用jion()方法实现主键合并pay_info.rename({'编号': '用户编号'}, inplace=True) download_and_pay1 = download_info.join(pay_info, on='用户编号', rsuffix='1') print('用户下载意愿表和用户每月支出信息表主键合并后的形状为:', download_and_pay1.shape)代码 4-6 使用combine_first()方法进行重叠合并import numpy as np #建立两个字典,除了ID外,别的特征互补 dict1 = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'System': ['win10', 'win10', np.nan, 'win10', np.nan, np.nan, 'win7', 'win7', 'win8'], 'cpu': ['i7', 'i5', np.nan, 'i7', np.nan, np.nan, 'i5', 'i5', 'i3']} dict2 = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'System': [np.nan, np.nan, 'win7', np.nan, 'win8', 'win7', np.nan, np.nan, np.nan], 'cpu': [np.nan, np.nan, 'i3', np.nan, 'i7', 'i5', np.nan, np.nan, np.nan]} #变换两个字典为DataFrame df1 = pd.DataFrame(dict1) df2 = pd.DataFrame(dict2) print('经过重叠合并后的数据为:\n', df1.combine_first(df2))
2023年10月23日
279 阅读
0 评论
7 点赞
2023-10-21
常用Python小程序源码
一 请输入1个计算机成绩,判断是否为优秀、良好、及格、不及格,且能连续输入成绩,只有输入-1时停止cj=eval(input("请输入计算机成绩:")) while cj!=-1: if 90<=cj<=100: print("优秀") elif 60<=cj<90: print("及格") elif 0<=cj<60: print("不及格") else: print("输入错误") cj=eval(input("请输入计算机成绩:"))二 计算1+2+3+……nn=eval(input("请输入一个整数N:")) Sum=0 for i in range (1,n+1): Sum+=i print(Sum)三 计算5名同学计算机成绩的平均分与最高分Sum=0 Max=0 for i in range(0,5): cj=eval(input("请输入计算机成绩:")) Sum+=cj if Max<cj: Max=cj ave=Sum/5 print("5名同学的平均分为:{:.2f}".format(ave)) print("5名同学的最高分为:{:.2f}".format(Max)) 四 九九乘法表for i in range(1,10): for j in range(1,i+1): print("{}*{}={:<2}".format(j,i,i*j),end=' ') print(' ')五 冒泡程序A=[12,36,54,65,55,65,48,98,76,11,54] n=len(A) for i in range(1,n): for j in range(0,n-i): if A[j]>A[j+1]: A[j],A[j+1]=A[j+1],A[j] print(A)六 插入排序A=[12,36,54,65,55,65,48,98,76,11,54] n=len(A) if n==1: print(A) else: for x in range (1,n): i=n-1 while i>0: if A[i-1]>A[i]: A[i-1],A[i]=A[i],A[i-1] i=i-1 else: i=i-1 print(A)七 计算圆的面积import math a=math.pi r=eval(input("请输入圆的半径r=:")) s=a*r*r print("{:.2f}".format(s)) 八 顺序查找(要查找的数不存在返回-1) def linearSearch(A,x): for i in range(0,len(A)): if A[i]==x: return i return -1 A=[1,3,5,6,8,9,11,13,14,15,19,22] x=eval(input("请输入要查找的数x:")) n=linearSearch(A,x) print("x在A中索引值为:",n)九 二分查找A=[1,3,5,6,8,9,11,13,14,15,19,22] x=eval(input("请输入要查找的数x:")) a=0 c=len(A)-1 while a<=c: b=(a+c)//2 if A[b]==x: print("x在A中的索引值为:",b) break elif A[b]<x: a=b+1 else: c=b-1十 统计词频a="jgfahfaglfgalfgdjldfaffuakdha" b={ } for i in a: b[i]=b.get(i,0)+1 print(b)十一、密码验证key=input("请输入密码:") if key.lower()=="python123": print("正确") else: print("错误") 十二、十进制转换二进制num=eval(input("请输入一个十进制数:")) s=[] if num==0: print(num) while num>0: r=num%2 s.append(r) num=num//2 while len(s)>0: q=s.pop() print(q,end='') 十二·、二进制转化为十进制num=input("请输入一个二进制整数:") n=len(num) N=0 flag=0 for i in range(0,n): if num[i] not in ['0','1']: flag=1 else: N=N+eval(num[i])*2**(n-1-i) if flag==0: print(N,end='') else: print("输入错误!") 十三、输出100以内的素数for i in range (2,101): for j in range(2,i): if i%j==0: break else: print(i,end=' ') 十三、设计一个Python程序,要求用户输入一个正整数N,然后计算并输出从1到N的所有整数的和。 # 获取用户输入 N = int(input("请输入一个正整数N:")) #(5分) # 计算和 sum_of_integers = sum(range(1, N + 1)) #(5分) # 输出结果 print("从1到{}的整数和为: {}".format(N, sum_of_integers)) #(5分) 十四、编写一个Python程序,接受用户输入的两个字符串,然后将这两个字符串连接起来,并输出结果。如果连接后的字符串长度超过10,只输出前10个字符。def concatenate_strings(): try: # 获取用户输入的两个字符串 str1 = input("请输入第一个字符串:") #(3分) str2 = input("请输入第二个字符串:") #(3分) # 连接字符串 result = str1 + str2 #(3分) # 如果字符串长度超过10,只输出前10个字符 if len(result) > 10: # #(3分) result = result[:10] # 输出结果 print(f"连接后的字符串为:{result}")# #(3分) except Exception as e: #(3分) print(f"发生错误:{e}") # 调用函数 concatenate_strings()
2023年10月21日
341 阅读
0 评论
12 点赞
1
...
9
10
11
...
16