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