2021泰迪杯A题-通讯产品销售和盈利能力分析_任务一解题代码

import pandas as pd 

统计

data = pd.read_excel('非洲通讯产品销售数据.xlsx',engine = 'openpyxl',sheet_name = 0)
data1 = data.copy()
data1.info()

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['利润同比增长'])
#print(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

统计

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()

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()
#s['利润']
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
#这是我实验的代码!不用管它
# wjx=[]
# alphas=[0.01,0.1,0.5,1,3,5,7,10,20,100]
# for a in alphas:
#     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]
#             #print(d1)
#             #data43.loc[len(data43.index)]=[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]
#             #df1=pd.DataFrame([[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]],columns=data42.columns)
#             df1.loc[0]=[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]
#             #print(df1)
#             data43=data43.append(df1)
#             coef_sum=coef_sum+1
#             coef_num=coef_num+estimator.coef_+estimator1.coef_
#             m.append({i:{result,result1}})

#         except:
#             pass
#     trust=((coef_num/(coef_sum*2))[0]+(coef_num/(coef_sum*2))[1])/2
#     #print(i+'--->'+trust)
#     #print(f'{a}----{trust}')
#     wjx.append({a:trust})

#wjx
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]
        #print(d1)
        #data43.loc[len(data43.index)]=[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]
        #df1=pd.DataFrame([[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]],columns=data42.columns)
        df1.loc[0]=[cs[0],cs[1],cs[2],2021,1,round(result,2),round(result1,2),i]
        #print(df1)
        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')#.reset_index()
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
#data44.loc[(slice(None),'Burundi'),:]
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()

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


你可能感兴趣的:(python数据分析,python,开发语言,数据分析)