首页
关于
推荐
百度一下
腾讯视频
Search
1
你要的草莓熊来啦!——郑科院
1,264 阅读
2
郑州科技学院2023-2024学年第一学期期末统一考试 Python程序设计
1,185 阅读
3
第4章 实训2 删除年龄异常数据
1,021 阅读
4
Python程序设计教学大纲(董付国老师版)
980 阅读
5
郑州科技学院2022-2023年第二学期期末统一考试 管理学 课程试题
925 阅读
默认分类
登录
/
注册
Search
庞立智
累计撰写
71
篇文章
累计收到
289
条评论
首页
栏目
默认分类
页面
关于
推荐
百度一下
腾讯视频
搜索到
71
篇与
的结果
2023-10-30
第4章 使用Pandas进行数据预处理之任务4.4 转换数据
代码 4-24 利用get_dummies函数进行哑变量处理import pandas as pd all_info = pd.read_csv('../data/user_all_info.csv') live_type = all_info.loc[0: 5, '居住类型'] #抽取部分数据做演示 print('哑变量处理前的数据为:\n', live_type) print('哑变量处理后的数据为:\n', pd.get_dummies(live_type)) 代码 4-25 等宽法离散化age_cut = pd.cut(all_info['年龄'], 5)#提取年龄 print('离散化后5条记录年龄分布为:\n', age_cut.value_counts()) 代码 4-26 等频法离散化import numpy as np # 自定义等频法离散化函数 def same_rate_cut(data, k): w = data.quantile(np.arange(0, 1 + 1.0 / k, 1.0 / k)) data = pd.cut(data, w) return data # 对用户年龄进行等频法离散化 age_same_rate = same_rate_cut(all_info['年龄'], 5).value_counts() print('用户年龄数据等频法离散化后分布状况为:', '\n', age_same_rate) 代码 4-27 聚类离散化# 自定义数据K-Means聚类离散化函数 def kmean_cut(data, k): from sklearn.cluster import KMeans # 引入K-Means # 建立模型 kmodel = KMeans(n_clusters=k) kmodel.fit(data.values.reshape((len(data), 1))) # 训练模型 # 输出聚类中心并排序 c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0) w = c.rolling(2).mean().iloc[1:] # 相邻两项求中点,作为边界点 w = [0] + list(w[0]) + [data.max()] # 把首末边界点加上 data = pd.cut(data, w) return data # 用户年龄等频法离散化 all_info['年龄'].dropna(inplace=True) age_kmeans = kmean_cut(all_info['年龄'], 5).value_counts() print('用户年龄聚类离散化后各个类别数目分布状况为:', '\n', age_kmeans)
2023年10月30日
179 阅读
0 评论
1 点赞
2023-10-30
第4章 使用Pandas进行数据预处理之4.3 标准化数据 Page-110
代码 4-21import pandas as pd pay = pd.read_csv('../data/user_pay_info.csv', index_col=0) # 自定义离差标准化函数 def min_max_scale(data): data = (data - data.min()) / (data.max() - data.min()) return data # 对用户每月支出信息表的每月支出数据做离差标准化 pay_min_max = min_max_scale(pay['每月支出']) print('离差标准化之前每月支出数据为:\n', pay['每月支出'].head()) print('离差标准化之后每月支出数据为\n', pay_min_max.head())代码 4-22 对用户每月支出信息表的每月支出数据做标准差标准化自定义标准差标准化函数def standard_scaler(data): data = (data - data.mean()) / data.std() return data # 对用户每月支出信息表的每月支出数据做标准差标准化 pay_standard = standard_scaler(pay['每月支出']) print('标准差标准化之前每月支出数据为:\n', pay['每月支出'].head()) print('标准差标准化之后每月支出数据为:\n', pay_standard.head()) 代码 4-23 对用户每月支出信息表的每月支出数据做小数定标标准化# 自定义小数定标标准化函数 import numpy as np def decimal_scaler(data): data = data / 10 ** np.ceil(np.log10(data.abs().max())) return data # 对用户每月支出信息表的每月支出数据做小数定标标准化 pay_decimal = decimal_scaler(pay['每月支出']) print('小数定标标准化之前的每月支出数据:\n', pay['每月支出'].head()) print('小数定标标准化之后的每月支出数据:\n', pay_decimal.head())
2023年10月30日
171 阅读
0 评论
2 点赞
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日
135 阅读
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日
1,185 阅读
42 评论
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日
189 阅读
0 评论
1 点赞
1
...
7
8
9
...
15