综合练习🔗:http://datawhale.club/t/topic/579
【任务一】企业收入的多样性
【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标:
其中 p(xi) 是企业该年某产业收入额占该年所有产业总收入的比重。在company.csv
中存有需要计算的企业和年份,在company_data.csv
中存有企业、各类收入额和收入年份的信息。现请利用后一张表中的数据,在前一张表中增加一列表示该公司该年份的收入熵指标 I 。
【数据下载】链接:https://pan.baidu.com/s/1leZZctxMUSW55kZY5WwgIw 38 密码:u6fd
import numpy as np
import pandas as pd
df1 = pd. read_csv( 'company.csv' )
df2 = pd. read_csv( 'company_data.csv' )
df1. head( )
证券代码 日期 0 #000007 2014 1 #000403 2015 2 #000408 2016 3 #000408 2017 4 #000426 2015
df2. head( )
证券代码 日期 收入类型 收入额 0 1 2008/12/31 1 1.084218e+10 1 1 2008/12/31 2 1.259789e+10 2 1 2008/12/31 3 1.451312e+10 3 1 2008/12/31 4 1.063843e+09 4 1 2008/12/31 5 8.513880e+08
检查数据后发现,df1中的证券代码、日期和df2中的证券代码、日期的数据类型差别较大,同时,df2中收入额存在负值和NaN值,这里在不修改df1的前提下进行处理: 1、删除df2中的空值、负值;2、将df2中的证券代码补0至6位,并加上#;3、提取df2中日期的年份并转为int
df2. loc[ df2[ '收入额' ] < 0 , '收入额' ] = np. nan
df2. dropna( inplace= True )
df2[ '证券代码' ] = df2[ '证券代码' ] . map ( lambda x: '#' + str ( x) . zfill( 6 ) )
df2[ '日期' ] = df2[ '日期' ] . str [ 0 : 4 ] . astype( 'int' )
df2. head( )
证券代码 日期 收入类型 收入额 0 #000001 2008 1 1.084218e+10 1 #000001 2008 2 1.259789e+10 2 #000001 2008 3 1.451312e+10 3 #000001 2008 4 1.063843e+09 4 #000001 2008 5 8.513880e+08
def entropy ( x) :
return - ( x[ 'p' ] * np. log2( x[ 'p' ] + 1e - 5 ) ) . sum ( )
df_entropy = df1. merge( df2, on= [ '证券代码' , '日期' ] , how= 'left' )
df_entropy[ 'p' ] = df_entropy. groupby( [ '证券代码' , '日期' ] ) [ '收入额' ] . apply ( lambda x: x/ x. sum ( ) )
res = df_entropy. groupby( [ '证券代码' , '日期' ] ) . apply ( entropy) . reset_index( )
res. columns = [ '证券代码' , '日期' , '收入额' ]
df1[ '收入熵指标' ] = res[ '收入额' ]
df1. head( )
证券代码 日期 收入熵指标 0 #000007 2014 4.429351 1 #000403 2015 4.025647 2 #000408 2016 4.065978 3 #000408 2017 -0.000000 4 #000426 2015 4.448961
【任务二】组队学习信息表的变换
【题目描述】请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0
是否队长 队伍名称 昵称 编号
0 1 你说的都对队 山枫叶纷飞 5
1 0 你说的都对队 蔡 6
2 0 你说的都对队 安慕希 7
3 0 你说的都对队 信仰 8
4 0 你说的都对队 biubiu🙈🙈 20
. . . . . . . . . . . . . . .
141 0 七星联盟 Daisy 63
142 0 七星联盟 One Better 131
143 0 七星联盟 rain 112
144 1 应如是 思无邪 54
145 0 应如是 Justzer0 58
【数据下载】链接:https://pan.baidu.com/s/1ses24cTwUCbMx3rvYXaz-Q 16 密码:iz57
team_csv = pd. read_excel( '组队信息汇总表Pandas.xls' )
team_csv. drop( columns= '所在群' , inplace= True )
team_csv. columns = [ '队伍名称' , '编号_1' , '昵称_1' , '编号_2' , '昵称_2' , '编号_3' , '昵称_3' , '编号_4' , '昵称_4' , '编号_5' , '昵称_5' , '编号_6' , '昵称_6' , '编号_7' , '昵称_7' , '编号_8' , '昵称_8' , '编号_9' , '昵称_9' , '编号_10' , '昵称_10' , '编号_11' , '昵称_11' ]
team = pd. wide_to_long( team_csv. reset_index( ) ,
stubnames = [ '昵称' , '编号' ] ,
i = [ 'index' , '队伍名称' ] ,
j = '是否队长' ,
sep= '_' ,
suffix= '.+' ) . dropna( ) . reset_index( ) . drop( columns= 'index' )
team[ '编号' ] = team[ '编号' ] . astype( int )
team. loc[ team[ '是否队长' ] > 1 , '是否队长' ] = 0
team. head( 7 )
队伍名称 是否队长 昵称 编号 0 你说的都对队 1 山枫叶纷飞 5 1 你说的都对队 0 蔡 6 2 你说的都对队 0 安慕希 7 3 你说的都对队 0 信仰 8 4 你说的都对队 0 biubiu🙈🙈 20 5 熊猫人 1 鱼呲呲 175 6 熊猫人 0 Heaven 44
【任务三】美国大选投票情况
【题目描述】两张数据表中分别给出了美国各县(county
)的人口数以及大选的投票情况,请解决以下问题:
有多少县满足总投票数超过县人口数的一半 把州(state
)作为行索引,把投票候选人作为列名,列名的顺序按照候选人在全美的总票数由高到低排序,行列对应的元素为该候选人在该州获得的总票数 每一个州下设若干县,定义拜登在该县的得票率减去川普在该县的得票率为该县的BT
指标,若某个州所有县BT
指标的中位数大于0,则称该州为Biden State
,请找出所有的Biden State
【数据下载】链接:https://pan.baidu.com/s/182rr3CpstVux2CFdFd_Pcg 16 提取码:q674
county = pd. read_csv( 'county_population.csv' )
vote = pd. read_csv( 'president_county_candidate.csv' )
county. head( )
US County Population 0 .Autauga County, Alabama 55869 1 .Baldwin County, Alabama 223234 2 .Barbour County, Alabama 24686 3 .Bibb County, Alabama 22394 4 .Blount County, Alabama 57826
vote. head( )
state county candidate party total_votes won 0 Delaware Kent County Joe Biden DEM 44552 True 1 Delaware Kent County Donald Trump REP 41009 False 2 Delaware Kent County Jo Jorgensen LIB 1044 False 3 Delaware Kent County Howie Hawkins GRN 420 False 4 Delaware New Castle County Joe Biden DEM 195034 True
county[ [ 'county' , 'state' ] ] = county[ 'US County' ] . str . split( ', ' , expand= True )
county[ 'county' ] = county[ 'county' ] . str [ 1 : ]
county. drop( columns= 'US County' , inplace= True )
county. head( )
Population county state 0 55869 Autauga County Alabama 1 223234 Baldwin County Alabama 2 24686 Barbour County Alabama 3 22394 Bibb County Alabama 4 57826 Blount County Alabama
vote_count = vote. groupby( [ 'county' , 'state' ] ) [ 'total_votes' ] . sum ( ) . reset_index( )
res = vote_count. merge( county, on= [ 'county' , 'state' ] , how= 'inner' )
res_over= res[ res[ 'total_votes' ] > ( res[ 'Population' ] / 2 ) ]
res_over. shape[ 0 ]
vote_by_state = vote. pivot_table( index= 'state' ,
columns = 'candidate' ,
values = 'total_votes' ,
aggfunc = 'sum' )
vote_by_state. fillna( 0 , inplace= True )
vote_by_state. loc[ 'sum' ] = vote_by_state. sum ( 0 )
vote_by_state_sorted = vote_by_state. sort_values( by= 'sum' , axis= 1 , ascending= False )
vote_by_state_sorted. head( )
candidate Joe Biden Donald Trump Jo Jorgensen Howie Hawkins Write-ins Rocky De La Fuente Gloria La Riva Kanye West Don Blankenship Brock Pierce … Tom Hoefling Ricki Sue King Princess Jacob-Fambro Blake Huber Richard Duncan Joseph Kishore Jordan Scott Gary Swing Keith McCormic Zachary Scalf state Alabama 849648.0 1441168.0 25176.0 0.0 7312.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Alaska 153405.0 189892.0 8896.0 0.0 34210.0 318.0 0.0 0.0 1127.0 825.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Arizona 1672143.0 1661686.0 51465.0 0.0 2032.0 0.0 0.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Arkansas 423932.0 760647.0 13133.0 2980.0 0.0 1321.0 1336.0 4099.0 2108.0 2141.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 California 11109764.0 6005961.0 187885.0 81025.0 80.0 60155.0 51036.0 0.0 0.0 0.0 … 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
vote[ 'pre' ] = vote. groupby( [ 'state' , 'county' ] ) [ 'total_votes' ] . apply ( lambda x: x/ x. sum ( ) )
vote_by_county = vote. pivot( index= [ 'state' , 'county' ] ,
columns = 'candidate' ,
values = 'pre' ,
)
vote_by_county[ 'BT' ] = vote_by_county[ 'Joe Biden' ] - vote_by_county[ 'Donald Trump' ]
BT_state = vote_by_county. groupby( 'state' ) [ 'BT' ] . apply ( lambda x: x. median( ) > 0 ) . reset_index( )
BT_state[ BT_state. BT == True ]
state BT 4 California True 6 Connecticut True 7 Delaware True 8 District of Columbia True 11 Hawaii True 21 Massachusetts True 30 New Jersey True 39 Rhode Island True 45 Vermont True