import pandas as pd
统计
data = pd. read_excel( '非洲通讯产品销售数据.xlsx' , engine = 'openpyxl' , sheet_name = 0 )
data1 = data. copy( )
data1. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1056 entries, 0 to 1055
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 日期 1056 non-null datetime64[ns]
1 国家 1056 non-null object
2 城市 1056 non-null object
3 地区 1056 non-null object
4 服务分类 1056 non-null object
5 销售额 1056 non-null float64
6 利润 1056 non-null float64
dtypes: datetime64[ns](1), float64(2), object(4)
memory usage: 57.9+ KB
data1[ '年' ] = data1. iloc[ : , 0 ] . dt. year
data1. head( 2 )
日期 国家 城市 地区 服务分类 销售额 利润 年 0 2017-01-01 Cote d'Ivoire Abidjan Western Commercial 656.96 6.57 2017 1 2017-01-01 Madagascar Antananarivo Eastern Public 875.94 -70.08 2017
data2 = data1. groupby( [ '年' , '地区' ] ) [ '销售额' ] . sum ( )
data3 = data1. groupby( [ '年' , '地区' ] ) [ '利润' ] . mean( )
data4 = data1. groupby( [ '年' , '国家' ] ) [ '销售额' ] . sum ( )
data5 = data1. groupby( [ '年' , '国家' ] ) [ '利润' ] . mean( )
data6 = data1. groupby( [ '年' , '服务分类' ] ) [ '销售额' ] . sum ( )
data7 = data1. groupby( [ '年' , '服务分类' ] ) [ '利润' ] . mean( )
data1[ '季度' ] = data1. iloc[ : , 0 ] . dt. quarter
data1. head( 2 )
日期 国家 城市 地区 服务分类 销售额 利润 年 季度 0 2017-01-01 Cote d'Ivoire Abidjan Western Commercial 656.96 6.57 2017 1 1 2017-01-01 Madagascar Antananarivo Eastern Public 875.94 -70.08 2017 1
data8 = data1. groupby( [ '季度' , '地区' ] ) [ '销售额' ] . sum ( )
data9 = data1. groupby( [ '季度' , '地区' ] ) [ '利润' ] . mean( )
data10 = data1. groupby( [ '季度' , '国家' ] ) [ '销售额' ] . sum ( )
data11 = data1. groupby( [ '季度' , '国家' ] ) [ '利润' ] . mean( )
data12 = data1. groupby( [ '季度' , '服务分类' ] ) [ '销售额' ] . sum ( )
data13 = data1. groupby( [ '季度' , '服务分类' ] ) [ '利润' ] . mean( )
计算同比增长率
同比增长是指和上一时期、上一年度或历史相比的增长(幅度)。 计算公式:同比增长率=(本期数-同期数)÷同期数×100%。 某个指标的同比增长率=( 现年的某个指标的值-上年同期这个指标的值)/上年同期这个指标的值 中文名: 同比增长 公式: (本期数-同期数)÷同期数×100%
data4. head( 2 )
年 国家
2017 Algeria 2867.75
Angola 1451.46
Name: 销售额, dtype: float64
data5. head( 2 )
年 国家
2017 Algeria -4.930
Angola 30.955
Name: 利润, dtype: float64
data14 = data4. reset_index( )
data15 = pd. pivot_table( data14, values = [ '销售额' ] , index = [ '国家' , '年' ] )
data15 = data15. reset_index( )
data15[ '销售额同比增长' ] = data15. groupby( '国家' ) [ '销售额' ] . diff( )
data15[ '销售额同比增长率' ] = data15[ '销售额同比增长' ] / ( data15[ '销售额' ] - data15[ '销售额同比增长' ] )
data16 = data15. pivot( index= '国家' , columns= '年' , values= '销售额' )
data16 = data16. reset_index( )
s = data15[ data15[ '年' ] == 2018 ] [ '销售额同比增长率' ]
s= s. reset_index( )
data16[ '2017-2018年销售额同比增长率' ] = s[ '销售额同比增长率' ]
s1 = data15[ data15[ '年' ] == 2019 ] [ '销售额同比增长率' ]
s1= s1. reset_index( )
data16[ '2018-2019年销售额同比增长率' ] = s1[ '销售额同比增长率' ]
s2 = data15[ data15[ '年' ] == 2020 ] [ '销售额同比增长率' ]
s2= s2. reset_index( )
data16[ '2019-2020年销售额同比增长率' ] = s1[ '销售额同比增长率' ]
data16 = data16. set_index( '国家' )
data16. head( 2 )
年 2017 2018 2019 2020 2017-2018年销售额同比增长率 2018-2019年销售额同比增长率 2019-2020年销售额同比增长率 国家 Algeria 2867.75 2068.73 1181.66 2223.79 -0.278623 -0.428799 -0.428799 Angola 1451.46 1362.60 1164.26 2102.77 -0.061221 -0.145560 -0.145560
data17 = data5. reset_index( )
data17 = pd. pivot_table( data17, values= [ '利润' ] , index= [ '国家' , '年' ] )
data17 = data17. reset_index( )
data17[ '利润同比增长' ] = data17. groupby( '国家' ) [ '利润' ] . diff( )
data17[ '利润同比增长率' ] = data17[ '利润同比增长' ] / ( data17[ '利润' ] - data17[ '利润同比增长' ] )
data18 = data17. pivot( index= '国家' , columns= '年' , values= '利润' )
data18 = data18. reset_index( )
s3 = data17[ data17[ '年' ] == 2018 ] [ '利润同比增长率' ]
s3 = s3. reset_index( )
data18[ '2017-2018年利润同比增长率' ] = s3[ '利润同比增长率' ]
s4 = data17[ data17[ '年' ] == 2019 ] [ '利润同比增长率' ]
s4 = s4. reset_index( )
data18[ '2018-2019年利润同比增长率' ] = s4[ '利润同比增长率' ]
s5 = data17[ data17[ '年' ] == 2020 ] [ '利润同比增长率' ]
s5 = s5. reset_index( )
data18[ '2019-2020年利润同比增长率' ] = s5[ '利润同比增长率' ]
data18. head( 2 )
年 国家 2017 2018 2019 2020 2017-2018年利润同比增长率 2018-2019年利润同比增长率 2019-2020年利润同比增长率 0 Algeria -4.930 15.13 7.4800 -12.5650 -4.068966 -0.505618 -2.679813 1 Angola 30.955 -15.90 1.5375 20.7425 -1.513649 -1.096698 12.491057
data19 = data6. reset_index( )
data20 = pd. pivot_table( data19, index= [ '服务分类' , '年' ] , values= '销售额' )
data20 = data20. reset_index( )
data20[ '各服务分类销售额同比增长' ] = data20. groupby( '服务分类' ) [ '销售额' ] . diff( )
data20[ '各服务分类销售额同比增长率' ] = data20[ '各服务分类销售额同比增长' ] / ( data20[ '销售额' ] - data20[ '各服务分类销售额同比增长' ] )
data21 = data20. pivot( index= '服务分类' , columns= '年' , values= '销售额' )
data21 = data21. reset_index( )
ss = data20[ data20[ '年' ] == 2018 ] [ '各服务分类销售额同比增长率' ]
ss = ss. reset_index( )
data21[ '2017-2018年各服务分类销售额同比增长率' ] = ss[ '各服务分类销售额同比增长率' ]
ss1 = data20[ data20[ '年' ] == 2019 ] [ '各服务分类销售额同比增长率' ]
ss1 = ss1. reset_index( )
data21[ '2018-2019年各服务分类销售额同比增长率' ] = ss1[ '各服务分类销售额同比增长率' ]
ss2 = data20[ data20[ '年' ] == 2020 ] [ '各服务分类销售额同比增长率' ]
ss2 = ss2. reset_index( )
data21[ '2019-2020年各服务分类销售额同比增长率' ] = ss2[ '各服务分类销售额同比增长率' ]
data21
年 服务分类 2017 2018 2019 2020 2017-2018年各服务分类销售额同比增长率 2018-2019年各服务分类销售额同比增长率 2019-2020年各服务分类销售额同比增长率 0 Commercial 42016.76 43427.20 51169.67 42060.43 0.033569 0.178286 -0.178020 1 Public 44802.81 40280.04 38341.07 40102.73 -0.100948 -0.048137 0.045947 2 Residential 51826.07 46863.35 40885.07 43736.38 -0.095757 -0.127568 0.069740
sum
<function sum(iterable, /, start=0)>
统计
data1. head( 2 )
日期 国家 城市 地区 服务分类 销售额 利润 年 季度 0 2017-01-01 Cote d'Ivoire Abidjan Western Commercial 656.96 6.57 2017 1 1 2017-01-01 Madagascar Antananarivo Eastern Public 875.94 -70.08 2017 1
data22 = pd. pivot_table( data1, index= [ '地区' , '国家' , '服务分类' ] , values= [ '销售额' , '利润' ] , aggfunc= [ 'mean' , sum ] )
data22. head( 2 )
mean sum 利润 销售额 利润 销售额 地区 国家 服务分类 Eastern Burundi Commercial 19.726667 409.456667 59.18 1228.37 Public 3.851429 531.430000 26.96 3720.01
s21 = data22[ 'mean' ] [ '利润' ]
s21 = s21. reset_index( )
s22 = data22[ 'sum' ] [ '销售额' ]
s22 = s22. reset_index( )
data22. drop( columns= [ 'mean' , 'sum' ] , inplace= True )
data22 = data22. reset_index( )
data22[ '利润' ] = s21[ '利润' ]
data22[ '销售额' ] = s22[ '销售额' ]
data22. head( 2 )
地区 国家 服务分类 利润 销售额 0 Eastern Burundi Commercial 19.726667 1228.37 1 Eastern Burundi Public 3.851429 3720.01
data23 = pd. pivot_table( data22, index= [ '地区' , '国家' , '服务分类' ] , values= [ '销售额' , '利润' ] )
data23. head( 2 )
C:\Users\31214\AppData\Local\Temp\ipykernel_13176\515147003.py:1: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.
data23 = pd.pivot_table(data22,index=['地区','国家','服务分类'],values=['销售额','利润'])
利润 销售额 地区 国家 服务分类 Eastern Burundi Commercial 19.726667 1228.37 Public 3.851429 3720.01
data30 = pd. read_excel( '非洲通讯产品销售数据.xlsx' , engine = 'openpyxl' , sheet_name = 1 )
data30 = data30. drop( columns= [ 'Unnamed: 5' , '备注:本表格中“销售合同”为“已成交合同”。' ] )
data31 = data30. copy( )
data31. head( 2 )
日期 销售经理 地区 销售合同 成交率 0 2017-01-01 Aiden Morris Western 13 0.55 1 2017-01-01 Audrey Baker Eastern 11 0.30
data32 = data31. groupby( '销售经理' ) [ '销售合同' ] . sum ( )
s32 = data31. groupby( '销售经理' ) [ '成交率' ] . mean( )
s32= s32. reset_index( )
data32 = data32. reset_index( )
data32[ '成交率' ] = s32[ '成交率' ]
data32. head( 2 )
销售经理 销售合同 成交率 0 Aiden Morris 190 0.479167 1 Audrey Baker 203 0.378125
data41 = data1. copy( )
data41. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1056 entries, 0 to 1055
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 日期 1056 non-null datetime64[ns]
1 国家 1056 non-null object
2 城市 1056 non-null object
3 地区 1056 non-null object
4 服务分类 1056 non-null object
5 销售额 1056 non-null float64
6 利润 1056 non-null float64
7 年 1056 non-null int64
8 季度 1056 non-null int64
dtypes: datetime64[ns](1), float64(2), int64(2), object(4)
memory usage: 74.4+ KB
data42 = pd. pivot_table( data41, index= [ '地区' , '国家' , '服务分类' , '年' , '季度' ] , values= [ '销售额' ] , aggfunc= sum ) . reset_index( )
s = pd. pivot_table( data41, index= [ '地区' , '国家' , '服务分类' , '年' , '季度' ] , values= [ '利润' ] , aggfunc= 'mean' ) . reset_index( )
data42[ '利润' ] = s[ '利润' ]
data42. head( 2 )
地区 国家 服务分类 年 季度 销售额 利润 0 Eastern Burundi Commercial 2017 1 928.07 74.25 1 Eastern Burundi Commercial 2019 1 118.96 -2.38
data42[ 'key' ] = data42[ '地区' ] + '_' + data42[ '国家' ] + '_' + data42[ '服务分类' ]
data43= data42. copy( )
data43. head( 2 )
地区 国家 服务分类 年 季度 销售额 利润 key 0 Eastern Burundi Commercial 2017 1 928.07 74.25 Eastern_Burundi_Commercial 1 Eastern Burundi Commercial 2019 1 118.96 -2.38 Eastern_Burundi_Commercial
key = data42[ 'key' ] . unique( )
len ( key)
156
from sklearn. linear_model import Ridge
m= [ ]
coef_sum= 0
coef_num= 0
for i in key:
df1= pd. DataFrame( columns= data42. columns)
cs= i. split( '_' )
d1 = data42[ data42[ 'key' ] == i]
try :
estimator = Ridge( alpha= 1 )
estimator1 = Ridge( alpha= 1 )
estimator. fit( d1[ [ '年' , '季度' ] ] , d1[ '销售额' ] )
estimator1. fit( d1[ [ '年' , '季度' ] ] , d1[ '利润' ] )
result = estimator. predict( [ [ 2021 , 1 ] ] ) [ 0 ]
result1 = estimator1. predict( [ [ 2021 , 1 ] ] ) [ 0 ]
df1. loc[ 0 ] = [ cs[ 0 ] , cs[ 1 ] , cs[ 2 ] , 2021 , 1 , round ( result, 2 ) , round ( result1, 2 ) , i]
data43= data43. append( df1)
coef_sum= coef_sum+ 1
coef_num= coef_num+ estimator. coef_+ estimator1. coef_
m. append( { i: { result, result1} } )
except :
pass
D:\Develop\Anaconda3\lib\site-packages\sklearn\base.py:450: UserWarning: X does not have valid feature names, but Ridge was fitted with feature names
warnings.warn(
trust= ( ( coef_num/ ( coef_sum* 2 ) ) [ 0 ] + ( coef_num/ ( coef_sum* 2 ) ) [ 1 ] ) / 2
data43= data43. reset_index( )
data43. head( 2 )
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
level_0 index 地区 国家 服务分类 年 季度 销售额 利润 key 0 0 0 Eastern Burundi Commercial 2017 1 928.07 74.25 Eastern_Burundi_Commercial 1 1 1 Eastern Burundi Commercial 2019 1 118.96 -2.38 Eastern_Burundi_Commercial
data44= pd. pivot_table( data43, index= [ '地区' , '国家' , '服务分类' , '年' , '季度' ] , values= [ '利润' , '销售额' ] , aggfunc= 'mean' )
data45= data44. reset_index( )
data44. head( 2 )
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
利润 销售额 地区 国家 服务分类 年 季度 Eastern Burundi Commercial 2017 1 74.25 928.07 2019 1 -2.38 118.96
data45. head( 2 )
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
地区 国家 服务分类 年 季度 利润 销售额 0 Eastern Burundi Commercial 2017 1 74.25 928.07 1 Eastern Burundi Commercial 2019 1 -2.38 118.96
data45[ data45[ '年' ] == 2021 ] . head( 2 )
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
地区 国家 服务分类 年 季度 利润 销售额 3 Eastern Burundi Commercial 2021 1 -40.17 -243.93 10 Eastern Burundi Public 2021 1 -2.10 1368.01
data45. info( )
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1012 entries, 0 to 1011
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 地区 1012 non-null object
1 国家 1012 non-null object
2 服务分类 1012 non-null object
3 年 1012 non-null int64
4 季度 1012 non-null int64
5 利润 1012 non-null float64
6 销售额 1012 non-null float64
dtypes: float64(2), int64(2), object(3)
memory usage: 55.5+ KB