新手小白,快练起来!

每天刷一道,领导往后稍!!!冲冲冲!!!

Ex1:NumPy的向量化运算#

  • 给定一个正整数列表,请找出缺失的最小正整数。

    arr = np.array([2,3,4])
    get_miss(arr)
    1arr = np.array([6,3,5,1,2])
    get_miss(arr)
    4arr = np.array([5,2,1,3,4])
    get_miss(arr)
    6
    

    思路比较简单,就随便写:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    def get_miss(arr):res_1 = np.setdiff1d(np.arange(arr.max())+1,arr)if len(res_1) == 0:return arr.max()+1else:return res_1.min()get_miss(np.array([5,2,3,4]))1
  • 设计一个生成二维NumPy数组的函数get_res(),其输入为正整数n,返回的数组构造方式如下:第1行填入1个1,第2行在上一行填入位置的下一列连续填入2个2,第3行在第二行最后一个填入位置的下一列连续填入3个3,…,第n行在第n-1行最后一个填入位置的下一列连续填入n个n。

    n = 4
    get_res(n)array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],[0., 2., 2., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 3., 3., 3., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 4., 4., 4., 4.]])

    刚开始没什么思路,后面参考了下面朋友的博文的解题思路,构建两个同size数组,通过where运算取舍,得到最终结果,原博如下:https://www.bilibili.com/read/cv18549630

    善于观察的朋友们可能已经发现,两个数组红框中在红框中位置的元素完全相同,其他位置不同,而需要我们构造的数组就是红框中的元素加其他位置为0构成的。

  • 那现在只需要构建这两个数组arr1,arr2,通过where(arr1==arr2,arr1,0)即可得解。话不多说,上代码吧:

  • def get_res(n):arr1 = np.ones([n,n*(n+1)//2])*((np.arange(n)+1).reshape([n,-1]))#先构造arr1,即构造给定size的全为1的数组,再与[1,2,3,4,...,n]对应行相乘tmp = np.tril(np.ones([n,n]))*((np.arange(n)+1).reshape([n,-1]))#构造上三角全为0,下三角全为1的下三角矩阵,对应行乘[1,2,3,4,...,n]tmp = tmp.flatten()#将tmp数组一维展开tmp = tmp[tmp>0]#去除一维数组中0元素arr2 = np.tile(tmp,[n,1])#将一维数组铺开为size=[n,1]的二维数组,即arr2return np.where(arr2 == arr1,arr1,0)
    get_res(5) def get_res(n):arr1 = np.ones([n,n*(n+1)//2])*((np.arange(n)+1).reshape([n,-1]))#先构造arr1,即构造给定size的全为1的数组,再与[1,2,3,4,...,n]对应行相乘tmp = np.tril(np.ones([n,n]))*((np.arange(n)+1).reshape([n,-1]))#构造上三角全为0,下三角全为1的下三角矩阵,对应行乘[1,2,3,4,...,n]tmp = tmp.flatten()#将tmp数组一维展开tmp = tmp[tmp>0]#去除一维数组中0元素arr2 = np.tile(tmp,[n,1])#将一维数组铺开为size=[n,1]的二维数组,即arr2return np.where(arr2 == arr1,arr1,0)
    get_res(5) array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],[0., 2., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 3., 3., 3., 0., 0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 4., 4., 4., 4., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 5., 5., 5., 5., 5.]])
  • 点 A 初始位置在数轴原点处,现进行n步简单随机游走,即每一步以等概率向左或向右移动长度为1的距离,记该点最终的位置为 Sn ,则可以证明limn→+∞E|Sn|n=2π,现取n为5000进行1000次试验,且每次试验中用 1100∑k=1100|Sn| 来代替 E|Sn| 。此时可以计算得到1000个 limn→+∞E|Sn|n−2π 的估计值,请计算这些估计值的均值、0.05分位数和0.95分位数。

  • 题目没读太懂,一会儿k,一会儿n的,不管了,答案全靠凭空想象,凭空捏造,上才艺:

    #np.random.chioce中规中矩np.random.seed(20221020)
    smp = np.random.choice([-1,1],size = [5000,1000],p = [0.5,0.5])
    ans_e1_3 = np.cumsum(smp[:100,:],axis = 0)[-1,:]/100/np.sqrt(5000)-np.sqrt(2/np.pi)
    print("均值:",end = '')
    print(ans_e1_3.mean())
    print('0.05分位数',end = '')
    print(np.quantile(ans_e1_3,0.05))
    print('0.95分位数',end = '')
    print(np.quantile(ans_e1_3,0.95))均值:-0.7979414121880727
    0.05分位数-0.800430145215137
    0.95分位数-0.7956218191030685#不知道对错,不站队,等官宣
  • 在二维平面上有n个点,每个点具有k维特征,点的坐标数据记录在node_xy中,点的特征数据记录在node_fea中。现要计算所有点的相关矩阵 S ,点a和点b的相关系数定义如下:Sab=σab2+λab2,其中,若记点a特征为 A ,点b特征为 B ,则有:σab=∑i=1kAiBi∑i=1kAi2∑i=1kBi2,对于点a而言,将所有点到点a的二维平面距离进行排序,从而得到每个点到点a的距离排名,距离最近(排名为1)的点是点a自身,记点b的排名为 rb(a) ,则定义:λab=1−2×(rb(a)−1)n−1,请对于给定的node_xy和node_fea计算相关矩阵 S 。(提示:使用np.argsort())

  • 太难了,咱们Pass,虚位以待,等大佬
  • Ex2:统计学生的成绩情况

    在data/supplement/ex2目录下存放了某校高三第一学期的学生成绩情况,包含16次周测成绩、期中考试成绩和期末考试成绩,科目一栏的成绩表示学生选课的成绩。所有的表中,相同的行表示的是同一位同学。请完成以下练习:

    df = pd.read_csv('data/supplement/ex2/第1次周测成绩.csv')df.head()
    Out[5]: 班级   姓名  选科   语文  数学   英语  科目
    0   1   吴刚  地理   93  95   82  69
    1   1   卢楠  物理  108  77   90  94
    2   1  唐秀兰  历史   88  72   95  85
    3   1   张刚  化学   85  88  102  76
    4   1   姜洋  历史  104  99   84  86
  • 该校高三年级中是否存在姓名相同的学生?

    df_e2_1 = pd.read_csv('d:/pdd/data_set/data/supplement/ex2/第1次周测成绩.csv')
    df_e2_1['姓名'].shape[0] == df_e2_1['姓名'].unique().shape[0]True
    #挺好,数据质量还可以,不然后面头疼
  • 在第一次周测中,请求出每个班级选修物理或化学同学的语数英总分的平均值。哪个班级最高?

    df_e2_1['语数英总分'] = df_e2_1['语文'] + df_e2_1['数学'] + df_e2_1['英语']
    df_e2_1.query('选科 == ["物理","化学"]').groupby('班级')['语数英总分'].mean().sort_values(ascending = False).index[0]2
  • 学生在该学期的总评计算方式是各次考试总分的加权平均值,其中周测成绩权重为50%(每次测验权重相等,即3.125%),期中权重为20%,期末权重为30%。请结合nlargest函数找出年级中总评前十的同学。

df_zc = pd.DataFrame()
for i in range(16):fname = 'd:/pdd/data_set/data/supplement/ex2/第'+str(i+1)+'次周测成绩.csv'df_temp = pd.read_csv(fname)df_zc = pd.concat([df_zc,df_temp],axis = 0)
#读数据不用for我实在想不出来能用啥df_zc['总分周测'] = df_zc['语文'] + df_zc['数学'] + df_zc['英语']+ df_zc['科目']
df_zc_sum = pd.DataFrame(df_zc.groupby('姓名')['总分周测'].mean()).reset_index()
#16次周测平均总分
df_qz = pd.read_csv('d:/pdd/data_set/data/supplement/ex2/期中考试成绩.csv')
df_qz['总分期中'] = df_qz['语文'] + df_qz['数学'] + df_qz['英语'] + df_qz['科目']
df_qz_sum = df_qz[['姓名','总分期中']].reset_index(drop = True)
#期中总分
df_qm = pd.read_csv('d:/pdd/data_set/data/supplement/ex2/期末考试成绩.csv')
df_qm['总分期末'] = df_qm['语文'] + df_qm['数学'] + df_qm['英语'] + df_qm['科目']
df_qm_sum = df_qm[['姓名','总分期末']].reset_index(drop = True)
#期末总分#用"名字"将三张表连接,再求加权平均
df_e2_2 = df_zc_sum.merge(df_qz_sum,on = '姓名',how = 'left')
df_e2_2 = df_e2_2.merge(df_qm_sum,on = '姓名',how = 'left')
df_e2_2['学期总评'] = df_e2_2['总分周测']*0.5 + df_e2_2['总分期中']*0.2 +df_e2_2['总分期末']*0.3
df_e2_2.nlargest(10,'学期总评')姓名 总分周测    总分期中    总分期末    学期总评
543 王想  401.0000    442 461 427.20000
880 黄萍  399.6875    419 432 413.24375
873 黄文  406.0000    441 406 413.00000
888 黎玉  402.8750    428 417 412.13750
564 王淑英 399.0625    397 439 410.63125
307 慕阳  399.2500    422 422 410.62500
416 杨凤兰 403.7500    413 420 410.47500
271 张欢  393.7500    417 434 410.47500
119 吕雪  405.3750    397 427 410.18750
191 孙桂珍 391.6875    427 428 409.64375
  • 请统计1班到8班文理科(物化生为理科,政史地为文科)期末考试总分前5的学生,结果格式如下,括号内的为选科分数:

pd.DataFrame({"1班(文)": ["王大锤:历史(102)"]+["..."]* 4,"1班(理)": ["..."]* 5,"2班(文)": ["..."]* 5,"...": ["..."]* 5,"8班(理)": ["..."]* 5,}
) # 王大锤:历史(102)只是举个例子,表示结果字符串需要按照这个格式来写Out[6]: 1班(文) 1班(理) 2班(文)  ... 8班(理)
0  王大锤:历史(102)   ...   ...  ...   ...
1          ...   ...   ...  ...   ...
2          ...   ...   ...  ...   ...
3          ...   ...   ...  ...   ...
4          ...   ...   ...  ...   ...

可恶,在这还能碰到王大锤,而且这格式也太难搞了吧,以下抛砖引玉(压制住自己不要for):

df_qm['文理'] = df_qm['选科'].where(df_qm['选科'].isin(['物理','化学','生物']),'文')
df_qm['文理'] = df_qm['文理'].mask(df_qm['文理'].isin(['物理','化学','生物']),'理')
#文理分类
df_qm_e3_2 = df_qm.query('班级 <= 8')
df_qm_e3_2 = df_qm_e3_2.sort_values(['班级','文理','总分期末'],ascending = [True,True,False])
#排序方便后续长表变宽表的表头列名规则
gb_rk = (df_qm_e3_2.groupby(['班级','文理'])['总分期末'].rank(method = 'first',ascending = False)).astype('Int32')
#按班级、文理科对总成绩排序,为避免排名方法不同,造成取出数据量不一致,method选择first
gb_rk = gb_rk.rename('排名')
df_qm_e3_2 = pd.concat([df_qm_e3_2,gb_rk],axis = 1)
#分组排名值合并至表中,以便后续长表变宽表时以此列为index索引值,以匹配各列数据
df_qm_e3_2 = df_qm_e3_2[gb_rk<6]
#仅取前5名
df_qm_e3_2['matter'] = df_qm_e3_2['姓名']+':'+ df_qm_e3_2['选科']+'(' + df_qm_e3_2['科目'].astype('string') + ')'
#构造pivot值列values
df_qm_e3_2 = df_qm_e3_2.set_index('排名').pivot(columns = ['班级','文理'],values = 'matter')
my_col = df_qm_e3_2.columns.map(lambda x:str(x[0])+'班('+x[1]+')')
#对多层索引重新构造
df_qm_e3_2.columns = my_col
df_qm_e3_2

看下效果,不得不说,真丑!

  • 学生成绩的稳定性可以用每次考试在全年级相同选科学生中的总分排名标准差来度量,请计算每个班级的各科学生成绩稳定性的均值,结果格式如下:

pd.DataFrame(np.random.rand(11, 6),index=pd.Index(range(1, 12), name="班级"),columns=pd.Index(["物理", "化学", "生物", "历史", "地理", "政治"],name="选科",)
)Out[7]:
选科        物理        化学        生物        历史        地理        政治
班级
1   0.461479  0.780529  0.118274  0.639921  0.143353  0.944669
2   0.521848  0.414662  0.264556  0.774234  0.456150  0.568434
3   0.018790  0.617635  0.612096  0.616934  0.943748  0.681820
4   0.359508  0.437032  0.697631  0.060225  0.666767  0.670638
5   0.210383  0.128926  0.315428  0.363711  0.570197  0.438602
6   0.988374  0.102045  0.208877  0.161310  0.653108  0.253292
7   0.466311  0.244426  0.158970  0.110375  0.656330  0.138183
8   0.196582  0.368725  0.820993  0.097101  0.837945  0.096098
9   0.976459  0.468651  0.976761  0.604846  0.739264  0.039188
10  0.282807  0.120197  0.296140  0.118728  0.317983  0.414263
11  0.064147  0.692472  0.566601  0.265389  0.523248  0.093941
#重新读数据
ex = pd.DataFrame()
for i in range(16):fname = 'd:/pdd/data_set/data/supplement/ex2/第'+str(i+1)+'次周测成绩.csv'df_zc = pd.read_csv(fname)df_zc['选科'] = df_zc['选科'].astype('category').cat.reorder_categories(['物理','化学','生物','历史','地理','政治'],ordered = True)#选科创建为有序category对象,以便长表变宽表时格式和示例格式相同df_zc['总分'] =  df_zc.iloc[:,-4:].sum(1)df_zc = df_zc.sort_values(['总分'],ascending = False).reset_index(drop = True).reset_index()#按总分排序,获得每个学生排名s = df_zc.groupby(['班级','选科'])['index'].std()#计算每个班级每个选科下学生排名的标准差ex = pd.concat([ex,s],axis =1)#合并以上16次周测的成绩df_qz = pd.read_csv('d:/pdd/data_set/data/supplement/ex2/期中考试成绩.csv')
df_qz['选科'] = df_qz['选科'].astype('category').cat.reorder_categories(['物理','化学','生物','历史','地理','政治'],ordered = True)
df_qz['总分'] =  df_qz.iloc[:,-4:].sum(1)
df_qz = df_qz.sort_values(['总分'],ascending = False).reset_index(drop = True).reset_index()
qz = df_qz.groupby(['班级','选科'])['index'].std()
#期中成绩,处理逻辑同上df_qm = pd.read_csv('d:/pdd/data_set/data/supplement/ex2/期末考试成绩.csv')
df_qm['选科'] = df_qm['选科'].astype('category').cat.reorder_categories(['物理','化学','生物','历史','地理','政治'],ordered = True)
df_qm['总分'] =  df_qm.iloc[:,-4:].sum(1)
df_qm = df_qm.sort_values(['总分'],ascending = False).reset_index(drop = True).reset_index()
qm = df_qm.groupby(['班级','选科'])['index'].std()
#期末成绩,处理逻辑同上samp = pd.concat([ex,qz,qm],axis =1)
#合并周测、期中、期末成绩标准差
samp = samp.rename_axis(index = ['班级','选科'])
samp = samp.iloc[:,0:].mean(axis = 1)
#计算标准差均值
samp.reset_index().pivot(columns = '选科',index = '班级').droplevel(level = 0,axis =1)
#长表变宽表,班级列作为索引保留

看下结果,结果数字蛮大,可能是标准差计算有问题,这类需求还是请业务人员坐在我面前和我说吧,这写在纸上的我理解起来总是有出入。

  • 篇幅有限,今天先到这吧,点个赞吧,秃头们~么么哒~

Pandas数据分析与处理补充习题相关推荐

  1. 数据挖掘:探索性数据分析(EDA)(补充)

    数据挖掘:探索性数据分析(EDA)(补充) 在上一篇文章数据挖掘:探索性数据分析(EDA)中,已经讨论了一些探索性分析的方法,但去敏数据的处理方式和一些多元统计的方法没有做介绍.本篇文章主要讲这两方面 ...

  2. pandas数据分析给力教程【完整版】(五)

    pandas的拼接操作 上一篇:pandas数据分析给力教程[完整版](四) 下一篇:pandas数据分析给力教程[完整版](六) pandas的拼接分为两种: 级联:pd.concat, pd.ap ...

  3. pandas 数据分析 相关性_探索 COVID-19 新冠数据来学习 Pandas

    来源:python中文社区 本文约2100字,建议阅读6分钟. 使用 pandas 数据分析工具来学习一些基本的 pandas 命令,并探索数据集中包含的内容. 欧洲疾病预防控制中心(https:// ...

  4. pandas数据分析选则接近数值的最接优方案

    import numpy as np import pandas as pd# pandas数据分析选则接近数值的最接优方案# 1.准备数据 CHILD_TABLE = (720, 750) CHID ...

  5. c语言程序设计第三版乌云高娃答案,C语言程序设计教学课件作者第3版乌云高娃补充习题及答案C语言程序设计教学课件作者第3版乌云高娃补充习题及答案第3章补充习题及答案课件.doc...

    C语言程序设计教学课件作者第3版乌云高娃补充习题及答案C语言程序设计教学课件作者第3版乌云高娃补充习题及答案第3章补充习题及答案课件.doc 第3章补充习题及答案 习题 3.1 选择题 (1)下列运算 ...

  6. 【补充习题三】待定常数法之微分中值定理

    1.证明拉格朗日中值定理: 设$f(x)\in C[a,b]$且在$(a,b)$内可导,那么存在$\xi \in (a,b)$, s.t. $$f'(\xi)=\frac{f(b)-f(a)}{b-a ...

  7. Pandas数据分析——Task2

    练习题 Ex1:口袋妖怪数据集 现有一份口袋妖怪的数据集,下面进行一些背景说明: #代表全国图鉴编号,不同行存在相同数字则表示为该妖怪的不同状态 妖怪具有单属性和双属性两种,对于单属性的妖怪,Type ...

  8. Pandas数据分析groupby函数深度总结(1)

    Pandas数据分析groupby函数深度总结(1) groupby分组数据 加载数据 数据分组 按'Sales Rep'列分组 显示所有分组 选择一个特定的组 计算每组中的行数 按'Sales Re ...

  9. matlab多项式计算题目,MATLAB数据分析与多项式计算-习题答案

    <MATLAB数据分析与多项式计算-习题答案>由会员分享,可在线阅读,更多相关<MATLAB数据分析与多项式计算-习题答案(4页珍藏版)>请在人人文库网上搜索. 1.第6章 M ...

  10. pandas数据分析给力教程【完整版】(七)

    Pandas绘图 上一篇:pandas数据分析给力教程[完整版](六) Series和DataFrame都有一个用于生成各类图表的plot方法.默认情况下,它们所生成的是线形图 线形图 简单的Seri ...

最新文章

  1. Node.js in IIS — Hello World
  2. JVM运行时数据区和各个区域的作用
  3. http.ListenAndServe()到底做了什么?
  4. gradle 编译java_Java的Gradle依赖关系,使用编译还是实现?
  5. ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?
  6. 李纪为:初入NLP领域的一些小建议
  7. Python正则表达式练习
  8. oracle建表空间、用户
  9. java file文件删除_Java File.delete 删除文件
  10. 钉钉直播html,钉钉直播功能介绍,钉钉直播步骤详情
  11. 2022年最新全国各省五级行政区划代码及mysql数据库代码(省市区县乡镇村)
  12. 计算机无法安装cad怎么办,安装cad时电脑提示已经安装怎么办 cad无法安装的解决方法...
  13. 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
  14. java实现注销功能_8.6.2 登录注销功能的实现
  15. subDomainsBrute 子域名工具 源码分析
  16. 关于 惯导及其相关领域的一些术语解释
  17. idea 启动时怎么选择工作空间
  18. 粉色卡通小学班干部竞选自我介绍PPT模板
  19. 【ArcGIS微课1000例】0065:ArcGISEarth移动端Android下载安装与使用(附安装包)
  20. 『极简学习法』大多公司更喜欢能够高效学习的学生——赶紧点进来

热门文章

  1. oracle常见的经典查询语句(一)
  2. 搭建属于自己的影视网站
  3. Android微信app支付
  4. Android多媒体功能开发(10)——使用MediaRecorder类录制音频
  5. Pandas 之DataFrame二维表基础操作及演示
  6. Archlinux kde 美化
  7. win10扬声器没有声音但插入耳机有声音
  8. 从零开始学PCR技术(四):常见问题
  9. 集线器、交换机和网桥三者有什么区别
  10. 30行代码实现微信自动回复机器人