import numpy as np
import pandas as pd
import math

任务1:企业收入的多样性

一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标:

其中 p(x)是企业该年某产业收入额占该年所有产业总收入的比重。在company.csv中存有需要计算的企业和年份,在company_data.csv中存有企业、各类收入额和收入年份的信息。现请利用后一张表中的数据,在前一张表中增加一列表示该公司该年份的收入熵指标I

思路

1.将company_data表转换位包含证券代码(需转换)、日期(年)、熵值的表

2.证券编码需要去除"#"后转换为INT型

3.日期取年

4.按照年分组汇总数据,求出总计,再将汇总数据与分类数据进行求值

一定要注意将小于0的数据排除干净

df_com = pd.read_csv('练习题数据/Company.csv')
print(df_com.dtypes)
df_com.head(2)
证券代码    object
日期       int64
dtype: object
证券代码 日期
0 #000007 2014
1 #000403 2015
df_com_data = pd.read_csv('练习题数据/Company_data.csv')
df_com_data.head(2)
证券代码 日期 收入类型 收入额
0 1 2008/12/31 1 1.084218e+10
1 1 2008/12/31 2 1.259789e+10

1.首先将数据的日期转换为年,之前查看的时候以为日期列存储的是日期类型,后来发现存储的是字符串,只需要截取前四位即可。

A = list(df_com_data['日期'])
A = [i[:4] for i in A]
df_com_data['日期'] = A
df_com_data.head(2)
证券代码 日期 收入类型 收入额
0 1 2008 1 1.084218e+10
1 1 2008 2 1.259789e+10

2.将证券代码向前补0并加上"#",由于我们存储的证券代码是INT型,需要转为str之后再使用zfill填充0

B = df_com_data['证券代码']
B = ["#"+str(i).zfill(6) for i in B]
df_com_data['证券代码'] = B
df_com_data = df_com_data[df_com_data['收入额']>0]
df_com_data.head(2)
证券代码 日期 收入类型 收入额
0 #000001 2008 1 1.084218e+10
1 #000001 2008 2 1.259789e+10

3.求出依据证券代码,日期分组后的收入额的总和,并且需要查看是否有负值的收入额,作为异常值清除掉。此处因为在groupby的时候会将列名作为索引,因此使用了ax_index=False,方便之后排除异常值

gb_data = df_com_data.groupby(['证券代码','日期'],as_index=False)['收入额'].sum()
gb_data = gb_data.rename(columns={"收入额":"收入总额"})
gb_data.head(2)
证券代码 日期 收入总额
0 #000001 2008 7.402176e+10
1 #000001 2009 4.771900e+10

4.现在我们将得到的最终聚合数据与company_data进行拼接,之后求得p(i)的值

def Pi(x):Income = x['收入额']Income_ALL = x['收入总额']Pi_value = Income/Income_ALLreturn Pi_value.sum()
merge_data = df_com_data.merge(gb_data, left_on=['证券代码','日期'], right_on=['证券代码','日期'], how='left')
com_gb = merge_data.groupby(['证券代码','日期','收入类型'])[['收入额','收入总额']]
com_gb.apply(Pi)
com_gb = pd.DataFrame(com_gb.apply(Pi))
com_gb1 = com_gb.reset_index()
com_gb1 = com_gb.rename(columns = {0:'P'})
com_gb1['logP'] = com_gb1.apply(lambda x : math.log(x['P'],2) ,axis=1)
com_gb1['P*logP'] = com_gb1.apply(lambda x : x['P']*x['logP'] ,axis=1)

5.将com_gb中去掉类型,按照证券编号、日期,求得我们想要的I值,最后用merge将值拼入df_com中

com_gb2 = com_gb1.groupby(['证券代码','日期'])['P*logP'].sum()
com_gb3 = pd.DataFrame(com_gb2)
com_gb3 = com_gb3.reset_index()
com_gb3 = com_gb3.rename(columns = {'P*logP':'I'})
com_gb3['日期'] = com_gb3['日期'].astype(int) #一定要赋值
com_gb3.head()
com_gb3.dtypes
证券代码     object
日期        int32
I       float64
dtype: object

注意:此处我遇到了一个问题:两张表中的日期的类型不一致,所以需要将日期类型转换为一致才能使用merge

com_data = df_com.merge(com_gb3, on = ['证券代码','日期'], how='left')
com_data.head()
证券代码 日期 I
0 #000007 2014 -4.429740
1 #000403 2015 -4.025963
2 #000408 2016 -4.066295
3 #000408 2017 NaN
4 #000426 2015 -4.449655

任务2:组队学习信息表的变换

请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0

1.通过read_excel读取数据,并观察数据与目标数据的差异,发现我们源数据拥有多列的编号和名称,我们需要将编号和名称转换位列,保留队伍名称,对于没有存值的编号和昵称,我们需要将他们去除

df = pd.read_excel('练习题数据/组队信息汇总表(Pandas).xlsx')
df.head(2)
所在群 队伍名称 队长编号 队长_群昵称 队员1 编号 队员_群昵称 队员2 编号 队员_群昵称.1 队员3 编号 队员_群昵称.2 ... 队员6 编号 队员_群昵称.5 队员7 编号 队员_群昵称.6 队员8 编号 队员_群昵称.7 队员9 编号 队员_群昵称.8 队员10编号 队员_群昵称.9
0 Pandas数据分析 你说的都对队 5 山枫叶纷飞 6 7.0 安慕希 8.0 信仰 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 Pandas数据分析 熊猫人 175 鱼呲呲 44 Heaven 37.0 吕青 50.0 余柳成荫 ... 25.0 Never say never 55.0 K 120.0 Y. 28.0 X.Y.Q 151.0 swrong

2 rows × 24 columns

colum = ['所在群','队伍名称','编号-0','昵称-0','编号-1','昵称-1','编号-2','昵称-2','编号-3','昵称-3','编号-4','昵称-4','编号-5','昵称-5','编号-6','昵称-6','编号-7','昵称-7','编号-8','昵称-8','编号-9','昵称-9','编号-10','昵称-10']
df.columns=colum
df.head(2)
所在群 队伍名称 编号-0 昵称-0 编号-1 昵称-1 编号-2 昵称-2 编号-3 昵称-3 ... 编号-6 昵称-6 编号-7 昵称-7 编号-8 昵称-8 编号-9 昵称-9 编号-10 昵称-10
0 Pandas数据分析 你说的都对队 5 山枫叶纷飞 6 7.0 安慕希 8.0 信仰 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 Pandas数据分析 熊猫人 175 鱼呲呲 44 Heaven 37.0 吕青 50.0 余柳成荫 ... 25.0 Never say never 55.0 K 120.0 Y. 28.0 X.Y.Q 151.0 swrong

2 rows × 24 columns

2.多列转行,我们考虑使用wide_to_long,先对列名进行整理,最后再将多余数据进行删除处理。这个过程中编号第一次转换的是float型,需要将他转换为Int型,这里使用astype; 在进行是否为队长的匹配的时候,注意一定要将取出来的值转换为list

df1 = pd.wide_to_long(df,stubnames=['编号','昵称'],i = ['所在群','队伍名称'],j = '编码',sep='-',suffix='.+')
df2 = df1[df1['编号'].notnull()]
df2 = df2.reset_index()
df2 = df2[['队伍名称','编号','昵称']]
df2['编号'] = df2['编号'].astype(int)
df2.head()
队伍名称 编号 昵称
0 你说的都对队 5 山枫叶纷飞
1 你说的都对队 6
2 你说的都对队 7 安慕希
3 你说的都对队 8 信仰
4 你说的都对队 20 biubiu

Day7-Python综合作业1(DataWhale)相关推荐

  1. python综合作业题目_python作业 1、2、3 题

    第一题: import math import turtle RADIUS = 100 angleSin18 = math.sin(math.pi * 0.1) * RADIUS angleCos18 ...

  2. 综合作业:LPC2103做个PWM音乐播放器

    2019独角兽企业重金招聘Python工程师标准>>> 老师已经把ARM7的课给我们上完了,最后布置了四个综合作业让我们做.其中有PWM音乐播放器,电子密码锁,数字钟,PID温控器. ...

  3. 咕泡学院:(1)唐宇迪python课程作业

    超级详细的python思维导图见链接: https://download.csdn.net/download/m0_37957160/22526313 python数据科学必备工具实战思维导图链接: ...

  4. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

  5. python代码案例详解-Python综合应用名片管理系统案例详解

    本文实例讲述了Python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...

  6. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...

    代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...

  7. PDF下载!《Python十大基础专题》《247个Python综合案例》《Pandas 20页学习笔记》...

    Python 技术栈 完整学习路线 如今书籍汗牛充栋,如何从零.循序渐进地掌握Python技术栈,成为很多读者朋友们关心的问题.最近,我特意按照Python技术栈的学习逻辑,把它划分为六个阶段,并且给 ...

  8. python实验报告代写价格_代写OS python程序作业、代写代写OS作业、代写OS实验报告...

    代写OS python程序作业.代写代写OS作业.代写OS实验报告 日期:2018-06-11 03:21 CSE 304 - Operating Systems DUE: June 11. Subm ...

  9. 计算机会计综合作业,20年7月东财《通用财务软件X》综合作业(100分)

    -[东北财经大学]东财<通用财务软件X>综合作业 试卷总分:100    得分:100 第1题,()是指代码的位数. A.删除 B.账务处理功能模块 C.代码长度 D.备份账套文件 正确答 ...

最新文章

  1. springboot 事务手动回滚_来,讲讲Spring事务有哪些坑?
  2. 从高排到低变成小楼梯儿歌_【课程采风】古运萌宝安全小知识之小剪刀的秘密...
  3. 找到一款牛B的vim插件
  4. C++对象模型2——编译器生成构造函数的几种情况
  5. MPLS ×××的三部分CE、PE和P简介
  6. 计算机语言是人们设计用于人与计算机交互,计算机语言是人们设计的用于人与计算机交互,计算机能够______与执行的一套规约和语法的集...
  7. gin redis 链接不上_自然的风味,GIN 在杯中
  8. 测者的测试技术手册:揭开java method的一个秘密--巨型函数
  9. 【英语学习】【WOTD】cubit 释义/词源/示例
  10. java被oracle收购,sun被oracle收购了,openoffice和virtualbox会不会死?
  11. 固网服务器win7系统驱动,固网HP-1103驱动
  12. 西部数据硬盘官网查询
  13. 一元二次方程求解以及表达式
  14. 〖TensorFlow2.0笔记21〗自定义数据集(宝可精灵数据集)实现图像分类+补充:tf.where!
  15. 2021-C++程序设计-实验3-继承和虚函数
  16. 学习光线追踪(18)---镜面反射贴图
  17. 【JUC源码专题】Striped64 核心源码分析(JDK8)
  18. linux文件查找操作
  19. CC254x到CC2640
  20. 崔斯坦和依索德(Tristan and Isolde)

热门文章

  1. 软件测试需要什么思维,做软件测试需要学习什么
  2. 云服务器搭建深度学习环境
  3. css3 3d特效汇总
  4. BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
  5. 3269: 万水千山粽是情
  6. Linux 系统时间EST改CTS
  7. 基础算法-生兔子(JAVA)
  8. 中国科学家或揭开生物第六感之谜
  9. 设备管理器中的usb打印支持有个叹号是什么意思,如何解决?
  10. spacy 英文模型下载_英语文本处理工具库2 — spaCy