首页 > 编程语言 >python 数据可视化———电子商务销售分析

python 数据可视化———电子商务销售分析

时间:2023-06-09 21:24:18浏览次数:52  
标签:count axs 电子商务 sizes python top df 可视化 size

一、选题背景

随着互联网和移动互联网技术的不断发展,电子商务已经成为了一个全球性的发展趋势。越来越多的商家和消费者都开始使用电子商务平台进行线上交易,这在一定程度上改变了传统商业模式,并且对于消费者而言,电子商务平台也提供了更为便捷的购物体验。因此,对于电子商务销售的分析就显得尤为重要。通过对电子商务销售数据的分析,商家可以更好地理解消费者的需求和购买行为,并且根据这些数据进行产品调整和市场营销策略的优化,从而提高销售额和客户满意度。

二、数据可视化分析方案

1、研究思路:

(1)分析通过Shiprocket和INCREF进行的销售之间的盈利能力差异。这些数据可用于查看最大的利润率所在,并相应地制定战略。

(2)检查产品的完整成本结构及其所有组件及其对收入或盈利能力的贡献,即TP 1和2,MRP Old and Final MRP Old以及基于平台的MRP - Amazon,Myntra和Paytm等,基于货币的利润率等。

(3)利用历史数据构建预测模型,以预测跨多个类别/设备/平台(如亚马逊,Flipkart,Myntra等)的电子商务产品的未来销量和利润,并提供有关客户偏好的更多见解,以通过考虑尺寸/颜色/平台特定定价等功能来了解需求变化

2、从网址中下载数据后,在python环境中导入pandas、missingno等第三方库进行数据处理,经过数据清洗、检查数据等,再进行数据可视化处理。

3、数据集:www.data.world.com

4、参考:电子商务销售分析

三、数据可视化步骤

(1)

1 #导入库
2 import numpy as np # 线性代数
3 import pandas as pd # 数据处理
4 
5 import os
6 for dirname, _, filenames in os.walk('C:\\Users\\Lenovo\\Desktop\\python'):
7     for filename in filenames:
8         print(os.path.join(dirname, filename))

(2)

添加库

1 pip install missingno

 

(3)

1 #数据可视化
2 import pandas as pd
3 import matplotlib.pyplot as plt
4 import seaborn as sns
5 import missingno as msno

(4)

1 df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
2 df.info()

(5)

1 df.set_index('index', inplace = True) #数据处理

(6)

1 msno.matrix(df) #显示结果

(7)

1 msno.bar(df)

(8)

1 df.nunique()

(9)

1 df.apply(pd.unique)

(10)

1 l = len(df)

(11)

df.drop_duplicates(inplace = True)

(12)

1 a_l = len(df)

(13)

1 difference_len = l - a_l
2 
3 print(f"{difference_len} rows have been removed! \n remaining rows {a_l} rows.")

(14)

1 df[df.isnull().any(axis = 1)]

(15)

1 df[df['promotion-ids'].isnull()]

(16)

1 df['promotion-ids'].fillna('no promotion', inplace = True)

(17)

1 df['Courier Status'].fillna('unknown', inplace = True)

(18)

1 df[df['Amount'].isnull()]

(19)

1 df['Amount'].fillna(0, inplace = True)

(20)

1 msno.matrix(df)

(21)

1 df.drop(columns = ['currency'], inplace = True)

(22)

1 msno.matrix(df)

(23)

1 df.drop(columns = ['fulfilled-by'], inplace = True)

(24)

1 msno.matrix(df)

(25)

1 df.drop(columns = ['Unnamed: 22'], inplace = True)

(26)

1 msno.matrix(df)

(27)

1 df.head()

(28)

1 mapper = {'Order ID':'orderID', 'Date':'date', 'Status':'status', 'Fulfillment':'fulfillment'}
2 df.rename(columns = mapper, inplace = True)
3 df.head()

(29)

1 df['B2B'].replace([False, True], ['Consumer', 'Business'], inplace = True)
2 df.head()

(30)

1 df.info()

(31)

1 df[df['ship-city'].isnull()]

(32)

1 df['ship-city'].fillna('unknown', inplace = True)
2 df['ship-state'].fillna('unknown', inplace = True)
3 df['ship-postal-code'].fillna('unknown', inplace = True)
4 df['ship-country'].fillna('unknown', inplace = True)

(33)

1 msno.matrix(df)

(34)

1 df.info()

(35)

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 
 4 # 加载数据集
 5 df1 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Sale Report.csv')
 6 df2 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\International sale Report.csv')
 7 df3 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
 8 df4 = df1
 9 
10 # 设置绘图网格
11 fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(15, 15))
12 
13 # 绘制图表
14 sizes = df1['Size'].value_counts()
15 sizes['Else'] = sizes[['XXXL', '4XL', '5XL', '6XL', 'FREE']].sum()
16 sizes = sizes.drop(labels=['XXXL', '4XL', '5XL', '6XL', 'FREE'])
17 total_stock = sizes.sum()
18 sizes_percentage = sizes / total_stock * 100
19 axs[0, 0].pie(sizes, labels=sizes.index, autopct='%1.1f%%')
20 axs[0, 0].set_title('Stock Distribution by Size',fontsize=20, x=0.5, y=1.05, pad=10)
21 
22 # 从 CSV 文件加载数据
23 data = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Sale Report.csv')
24 
25 # 将大小映射到聚合大小
26 size_map = {'S': 'S', 'M': 'M', 'L': 'L', 'XL': 'XL', 'XXL': '2XL', 'XXXL': '3XL', '4XL': '4XL', '5XL': '5XL', '6XL': '6XL', 'FREE': 'FREE'}
27 data['AggregatedSize'] = data['Size'].map(size_map)
28 
29 # 计算每个聚合大小的库存水平总和
30 data_by_aggregated_size = data.groupby('Size').sum().reset_index()
31 
32 # 按库存水平降序对数据进行排序
33 data_by_aggregated_size = data_by_aggregated_size.sort_values('Stock', ascending=False)
34 
35 # 突出显示前三个聚合大小
36 data_by_aggregated_size['Highlighted'] = False
37 data_by_aggregated_size.loc[0:2, 'Highlighted'] = True
38 
39 # 创建条形图
40 bars = axs[0,1].bar(data_by_aggregated_size['Size'], data_by_aggregated_size['Stock'])
41 for i in range(len(bars)):
42     if i < 3:
43         bars[i].set_color('blue')
44     else:
45         bars[i].set_color('gray')
46 axs[0,1].set(xlabel='Size', ylabel='Stock')
47 axs[0,1].set_title('Stock Levels by Size', fontsize=20, x=0.5, y=1.05, pad=10)
48 
49 
50 # 绘制图表
51 valid_sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '4XL', '5XL', '6XL', 'FREE']
52 df2 = df2[df2['Size'].isin(valid_sizes)]
53 df2['PCS'] = pd.to_numeric(df2['PCS'], errors='coerce')
54 size_counts = df2.groupby('Size').size().reset_index(name='count')
55 size_counts = size_counts.sort_values(by='count', ascending=False)
56 top_sizes = size_counts.head(3)
57 other_sizes_count = size_counts.iloc[3:]['count'].sum()
58 other_sizes = pd.DataFrame({'Size': ['Else'], 'count': [other_sizes_count]})
59 top_sizes = pd.concat([top_sizes, other_sizes], ignore_index=True)
60 total_sales = df2['PCS'].sum()
61 top_sizes['percentage'] = top_sizes['count'] / total_sales * 100
62 axs[1, 0].pie(top_sizes['percentage'], labels=top_sizes['Size'], autopct='%1.1f%%', startangle=90)
63 axs[1, 0].set_title('International Sale Size Distribution',fontsize=20, x=0.5, y=1.05, pad=10)
64 
65 # 绘制图表
66 sizes = df3['Size']
67 allowed_sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL', '3XL', '4XL', '5XL', '6XL', 'FREE']
68 sizes = sizes[sizes.isin(allowed_sizes)]
69 size_counts = sizes.value_counts()
70 total_sales = df3['Qty'].sum()
71 top_sizes = size_counts[:3].index.tolist()
72 top_sizes_count = size_counts[top_sizes].sum()
73 top_sizes_percentage = top_sizes_count / total_sales * 100
74 else_count = size_counts.drop(top_sizes).sum()
75 else_percentage = else_count / total_sales * 100
76 labels = top_sizes + ['Else']
77 values = [top_sizes_percentage] * len(top_sizes) + [else_percentage]
78 axs[1, 1].pie(values, labels=labels, autopct='%1.1f%%')
79 axs[1, 1].set_title('Amazon Sale Size Distribution',fontsize=20, x=0.5, y=1.05, pad=10)
80 
81 # 调整子图之间的间距
82 plt.subplots_adjust(hspace=0.4, wspace=0.4)
83 
84 # 显示绘制
85 plt.show()

(36)

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 
 4 # 将 CSV 文件读入pandas数据帧
 5 df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
 6 
 7 # 筛选数据框以仅包括已发货和已取消的销售
 8 filtered_df = df[df['Status'].isin(['Shipped', 'Cancelled'])]
 9 
10 # 按状态对筛选的数据框进行分组并计算计数
11 by_status = filtered_df.groupby('Status').count()['SKU']
12 
13 # 创建一个名为“分组状态”的新列,以将所有其他状态类型分组到 “其他状态”
14 df['Grouped Status'] = df['Status'].apply(lambda x: x if x in ['Shipped', 'Cancelled'] else 'Else Status')
15 
16 # 按新的“分组状态”列对原始数据帧进行分组并计算计数
17 by_grouped_status = df.groupby('Grouped Status').count()['SKU']
18 
19 # 创建包含 2 行和 2 列的图形
20 fig, axs = plt.subplots(2, 2, figsize=(15, 15))
21 
22 # 创建条形图以按配送方式显示已取消的销售
23 cancelled_df = filtered_df[filtered_df['Status'] == 'Cancelled']
24 by_fulfilment = cancelled_df.groupby('Fulfilment').count()['SKU']
25 axs[0, 0].bar(by_fulfilment.index, by_fulfilment.values)
26 axs[0, 0].set_title('Cancelled Sales by Fulfilment Method',fontsize=20, x=0.5, y=1.05, pad=10)
27 
28 # 按产品类别对取消的销售额进行分组并计算计数
29 by_category = cancelled_df.groupby('Category').count()['SKU']
30 
31 # 按已取消销售的计数对类别进行排序
32 by_category = by_category.sort_values(ascending=False)
33 
34 # 保留前 5 个类别
35 top_category = by_category[:5]
36 
37 # 计算每个顶级类别的取消销售百分比
38 category_percentages = (top_category / cancelled_df.shape[0]) * 100
39 
40 # 创建条形图以按前 5 个产品类别显示已取消的销售额
41 axs[0, 1].bar(top_category.index, top_category.values)
42 axs[0, 1].set_title('Top 5 Cancelled Sales by Product Category',fontsize=20, x=0.5, y=1.05, pad=10)
43 
44 # 将百分比标签添加到条形图
45 for i, v in enumerate(top_category.values):
46     axs[0, 1].text(i, v+5, f'{category_percentages.values[i]:.2f}%', ha='center')
47 
48 
49 
50 # 创建条形图以按配送服务级别显示已取消的销售
51 by_shipping = cancelled_df.groupby('ship-service-level').count()['SKU']
52 axs[1, 0].bar(by_shipping.index, by_shipping.values)
53 axs[1, 0].set_title('Cancelled Sales by Shipping Service Level',fontsize=20, x=0.5, y=1.05, pad=10)
54 
55 # 创建饼图以显示销售的总体状态
56 by_status = filtered_df.groupby('Status').count()['SKU']
57 by_status['Else Status'] = df.groupby('Grouped Status').count()['SKU']['Else Status']
58 axs[1, 1].pie(by_status.values, labels=by_status.index)
59 axs[1, 1].set_title('Overall Sales Status',fontsize=20, x=0.5, y=1.05, pad=10)
60 
61 # 调整子图之间的间距
62 plt.subplots_adjust(hspace=0.4)
63 
64 # 显示图表
65 plt.show()

(37)

 1 import pandas as pd
 2 import matplotlib.pyplot as plt
 3 
 4 # 将 CSV 文件读入pandas数据帧
 5 df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
 6 
 7 # 筛选数据框以仅包括已取消的销售
 8 cancelled_df = df[df['Status'] == 'Cancelled']
 9 
10 # 按配送方式和配送服务级别划分的团体取消销售
11 by_fulfilment_shipping = cancelled_df.groupby(['Fulfilment', 'ship-service-level']).count()['SKU'].reset_index()
12 
13 # 创建条形图,按配送方式和配送服务级别显示已取消的销售
14 fig, ax = plt.subplots(figsize=(10, 10))
15 by_fulfilment_shipping.groupby(['Fulfilment', 'ship-service-level']).sum()['SKU'].unstack().plot(kind='bar', ax=ax)
16 ax.set_title('Cancelled Sales by Fulfilment Method and Shipping Service Level', fontsize=20, x=0.5, y=1.05, pad=10)
17 ax.set_xlabel('Fulfilment Method',fontsize=20)
18 ax.set_ylabel('Cancelled Sales',fontsize=20)
19 ax.legend(title='Shipping Service Level', fontsize=20, title_fontsize=12)
20 
21 # 显示绘制
22 plt.show()

四、总结

如今电子商务的兴起对社会和经济产生了深刻的影响,它打破了传统商业模式在各方面的限制,使商家和消费者可以通过互联网直接进行交易,人们可以通过互联网购买到任何地方的商品,无需花费时间和金钱到实体店铺购买。这种商业模式的改变不仅提高了交易效率,降低了交易成本,带动了电子商务、物流、支付等相关行业的快速发展,还创造了更多的商业机会。在这次数据可视化的分析过程中我们可以看出,占比越大,销售盈利能力越强,通过产品的销量和利润等方面数据的对比,商户选择的渠道会更加丰富。

1、通过对数据的分析得到的信息可用于以下几个方面:

(1)销售额:通过收集网购APP的销售数据,可以计算出销售额。可以分析销售额的趋势,比较不同时间段的销售情况,从而了解网购APP的销售情况和发展趋势。

(2)毛利率:毛利率是指销售收入减去销售成本后的净利润占销售收入的比例。通过分析毛利率可以了解网购APP的产品或服务成本和定价策略是否合理,是否存在价格竞争等问题。

(3)净利率:净利率是指销售收入减去所有开支后的净利润占销售收入的比例。通过分析净利率可以了解网购APP的营销费用、人力成本、技术开发成本等方面的开支情况,从而评估网购APP的盈利能力。

(4)用户留存率:用户留存率是指网购APP用户在一定时间内继续使用APP的比例。通过分析用户留存率可以了解网购APP的用户粘性和忠诚度,从而制定更加有效的用户留存策略。

(5)新用户获取成本:新用户获取成本是指为获取一个新用户所花费的成本。通过分析新用户获取成本可以了解网购APP的用户获取成本和用户获取效果,从而制定更加有效的用户获取策略。 综上所述,通过对网购APP的销售数据进行分析,可以深入了解网购APP的销售和盈利情况,从而制定更加有效的销售策略和盈利优化方案。

 

2、学习了数据可视化之后的感悟:

学习数据可视化让我深刻认识到数据可视化的重要性和作用。通过合适的图形化展示数据,我们可以更容易地发现数据中的规律和趋势,从而做出更加准确和有意义的决策。同时,数据可视化也是沟通与传递信息的重要方式,可以帮助我们向别人更好地展示数据的含义和价值。 在学习过程中,我也意识到了数据准备的重要性。只有经过严格的数据处理和清洗,才能保证展示出来的数据准确无误。同时,选择合适的图表类型和颜色也是很重要的,可以让图表更加直观和易于理解。 最后,我也发现了数据可视化所需要的技能和工具都比较多,需要不断地学习和练习。不过,只要有耐心和热情,通过不断地实践和反思,我相信可以逐渐提高自己的数据可视化能力。

 

3、不足之处:

绘制出的图表无法显示中文字符,第三方库安装不了,从CNDS上找的方法也没有顺利解决。

查找到的方法:

 

运行出错的代码:

 

 

完整代码

import numpy as np 
import pandas as pd 
import os
for dirname, _, filenames in os.walk('C:\\Users\\Lenovo\\Desktop\\python'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
df.info()
df.set_index('index', inplace = True) 
msno.matrix(df) 
msno.bar(df)
df.nunique()
df.apply(pd.unique)
l = len(df)
df.drop_duplicates(inplace = True)
a_l = len(df)
difference_len = l - a_l
print(f"{difference_len} rows have been removed! \n remaining rows {a_l} rows.")
df[df.isnull().any(axis = 1)]
df[df['promotion-ids'].isnull()]
df['Amount'].fillna(0, inplace = True)
msno.matrix(df)
df.drop(columns = ['currency'], inplace = True)
msno.matrix(df)
df.drop(columns = ['fulfilled-by'], inplace = True)
msno.matrix(df)
df.drop(columns = ['Unnamed: 22'], inplace = True)
msno.matrix(df)
df.head()
mapper = {'Order ID':'orderID', 'Date':'date', 'Status':'status', 'Fulfillment':'fulfillment'}
df.rename(columns = mapper, inplace = True)
df.head()
df['B2B'].replace([False, True], ['Consumer', 'Business'], inplace = True)
df.head()
df.info()
df[df['ship-city'].isnull()]
df['ship-city'].fillna('unknown', inplace = True)
df['ship-state'].fillna('unknown', inplace = True)
df['ship-postal-code'].fillna('unknown', inplace = True)
df['ship-country'].fillna('unknown', inplace = True)
msno.matrix(df)
df.info()
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Sale Report.csv')
df2 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\International sale Report.csv')
df3 = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
df4 = df1
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(15, 15))
sizes = df1['Size'].value_counts()
sizes['Else'] = sizes[['XXXL', '4XL', '5XL', '6XL', 'FREE']].sum()
sizes = sizes.drop(labels=['XXXL', '4XL', '5XL', '6XL', 'FREE'])
total_stock = sizes.sum()
sizes_percentage = sizes / total_stock * 100
axs[0, 0].pie(sizes, labels=sizes.index, autopct='%1.1f%%')
axs[0, 0].set_title('Stock Distribution by Size',fontsize=20, x=0.5, y=1.05, pad=10)
data = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Sale Report.csv')
size_map = {'S': 'S', 'M': 'M', 'L': 'L', 'XL': 'XL', 'XXL': '2XL', 'XXXL': '3XL', '4XL': '4XL', '5XL': '5XL', '6XL': '6XL', 'FREE': 'FREE'}
data['AggregatedSize'] = data['Size'].map(size_map)
data_by_aggregated_size = data.groupby('Size').sum().reset_index()
data_by_aggregated_size = data_by_aggregated_size.sort_values('Stock', ascending=False)
data_by_aggregated_size['Highlighted'] = False
data_by_aggregated_size.loc[0:2, 'Highlighted'] = True
bars = axs[0,1].bar(data_by_aggregated_size['Size'], data_by_aggregated_size['Stock'])
for i in range(len(bars)):
    if i < 3:
        bars[i].set_color('blue')
    else:
        bars[i].set_color('gray')
axs[0,1].set(xlabel='Size', ylabel='Stock')
axs[0,1].set_title('Stock Levels by Size', fontsize=20, x=0.5, y=1.05, pad=10)

valid_sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '4XL', '5XL', '6XL', 'FREE']
df2 = df2[df2['Size'].isin(valid_sizes)]
df2['PCS'] = pd.to_numeric(df2['PCS'], errors='coerce')
size_counts = df2.groupby('Size').size().reset_index(name='count')
size_counts = size_counts.sort_values(by='count', ascending=False)
top_sizes = size_counts.head(3)
other_sizes_count = size_counts.iloc[3:]['count'].sum()
other_sizes = pd.DataFrame({'Size': ['Else'], 'count': [other_sizes_count]})
top_sizes = pd.concat([top_sizes, other_sizes], ignore_index=True)
total_sales = df2['PCS'].sum()
top_sizes['percentage'] = top_sizes['count'] / total_sales * 100
axs[1, 0].pie(top_sizes['percentage'], labels=top_sizes['Size'], autopct='%1.1f%%', startangle=90)
axs[1, 0].set_title('International Sale Size Distribution',fontsize=20, x=0.5, y=1.05, pad=10)

sizes = df3['Size']
allowed_sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL', '3XL', '4XL', '5XL', '6XL', 'FREE']
sizes = sizes[sizes.isin(allowed_sizes)]
size_counts = sizes.value_counts()
total_sales = df3['Qty'].sum()
top_sizes = size_counts[:3].index.tolist()
top_sizes_count = size_counts[top_sizes].sum()
top_sizes_percentage = top_sizes_count / total_sales * 100
else_count = size_counts.drop(top_sizes).sum()
else_percentage = else_count / total_sales * 100
labels = top_sizes + ['Else']
values = [top_sizes_percentage] * len(top_sizes) + [else_percentage]
axs[1, 1].pie(values, labels=labels, autopct='%1.1f%%')
axs[1, 1].set_title('Amazon Sale Size Distribution',fontsize=20, x=0.5, y=1.05, pad=10)
plt.subplots_adjust(hspace=0.4, wspace=0.4)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
filtered_df = df[df['Status'].isin(['Shipped', 'Cancelled'])]
by_status = filtered_df.groupby('Status').count()['SKU']
df['Grouped Status'] = df['Status'].apply(lambda x: x if x in ['Shipped', 'Cancelled'] else 'Else Status')
by_grouped_status = df.groupby('Grouped Status').count()['SKU']
fig, axs = plt.subplots(2, 2, figsize=(15, 15))
cancelled_df = filtered_df[filtered_df['Status'] == 'Cancelled']
by_fulfilment = cancelled_df.groupby('Fulfilment').count()['SKU']
axs[0, 0].bar(by_fulfilment.index, by_fulfilment.values)
axs[0, 0].set_title('Cancelled Sales by Fulfilment Method',fontsize=20, x=0.5, y=1.05, pad=10)
by_category = cancelled_df.groupby('Category').count()['SKU']
by_category = by_category.sort_values(ascending=False)
top_category = by_category[:5]
category_percentages = (top_category / cancelled_df.shape[0]) * 100
axs[0, 1].bar(top_category.index, top_category.values)
axs[0, 1].set_title('Top 5 Cancelled Sales by Product Category',fontsize=20, x=0.5, y=1.05, pad=10)
for i, v in enumerate(top_category.values):
    axs[0, 1].text(i, v+5, f'{category_percentages.values[i]:.2f}%', ha='center')
by_shipping = cancelled_df.groupby('ship-service-level').count()['SKU']
axs[1, 0].bar(by_shipping.index, by_shipping.values)
axs[1, 0].set_title('Cancelled Sales by Shipping Service Level',fontsize=20, x=0.5, y=1.05, pad=10)
by_status = filtered_df.groupby('Status').count()['SKU']
by_status['Else Status'] = df.groupby('Grouped Status').count()['SKU']['Else Status']
axs[1, 1].pie(by_status.values, labels=by_status.index)
axs[1, 1].set_title('Overall Sales Status',fontsize=20, x=0.5, y=1.05, pad=10)
plt.subplots_adjust(hspace=0.4)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('C:\\Users\\Lenovo\\Desktop\\python\\Amazon Sale Report.csv')
cancelled_df = df[df['Status'] == 'Cancelled']
by_fulfilment_shipping = cancelled_df.groupby(['Fulfilment', 'ship-service-level']).count()['SKU'].reset_index()
fig, ax = plt.subplots(figsize=(10, 10))
by_fulfilment_shipping.groupby(['Fulfilment', 'ship-service-level']).sum()['SKU'].unstack().plot(kind='bar', ax=ax)
ax.set_title('Cancelled Sales by Fulfilment Method and Shipping Service Level', fontsize=20, x=0.5, y=1.05, pad=10)
ax.set_xlabel('Fulfilment Method',fontsize=20)
ax.set_ylabel('Cancelled Sales',fontsize=20)
ax.legend(title='Shipping Service Level', fontsize=20, title_fontsize=12)
plt.show()

 

 

 

标签:count,axs,电子商务,sizes,python,top,df,可视化,size
From: https://www.cnblogs.com/lingyiccas/p/17461966.html

相关文章

  • Python递归法计算棋盘上所有路径总奖品最大值(京东2016编程题)
    问题描述:假设有一个6x6的棋盘,每个格子里有一个奖品(每个奖品的价值在100到1000之间),现在要求从左上角开始到右下角结束,每次只能往右或往下走一个格子,所经过的格子里的奖品归自己所有。问最多能收集价值多少的奖品。思路:每个格子所在路径的总奖品最大值依赖于左边的格子或右边的格子。......
  • Python寻找给定序列中相差最小的两个数字
    importrandomdefgetTwoClosestElements(seq):#先进行排序,使得相邻元素最接近#相差最小的元素必然相邻seq=sorted(seq)#无穷大dif=float('inf')#遍历所有元素,两两比较,比较相邻元素的差值#使用选择法寻找相差最小的两个元素fori,vi......
  • Python使用tkinter的Treeview组件实现表格功能
    fromtkinterimportTk,Scrollbar,Framefromtkinter.ttkimportTreeview#创建tkinter应用程序窗口root=Tk()#设置窗口大小和位置root.geometry('500x300+400+300')#不允许改变窗口大小root.resizable(False,False)#设置窗口标题root.title('通信录管理系统')#使......
  • Python调用安卓手机相机接口进行拍照
    感兴趣的朋友可以查阅sl4a模块的详细资料,实现更多功能。下面的代码需要在安卓手机上安装QPython3,然后打开QEdit,把代码复制粘贴过去,保存文件,然后运行就可以自动打开相机了。importsl4aimportosdroid=sl4a.Android()#默认保存到手机存储卡的根目录下,也可以自己修改成其他目录......
  • Python把列表中的数字尽量等分成n份
    问题描述:假设一个列表中含有若干整数,现在要求将其分成n个子列表,并使得各个子列表中的整数之和尽可能接近。下面的代码并没有使用算法,而是直接将原始列表分成n个子列表,然后再不断地调整各个子列表中的数字,从元素之和最大的子列表中拿出最小的元素放到元素之核最小的子列表中,重复这个......
  • Python中enumerate对象的用法与特点
    Python的内置函数enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。#枚举字符串中的元素>>>list(enumerate('abcd'))[(0,'a'),(1,'b'),(2,'c'),(3,'d')]#枚举列表中的元素>>>list(enumerate([�......
  • Python从命令行参数和配置文件获取信息
    实际开发中,很多时候需要从外部获取数据,根据用户的输入或配置信息来决定下一步应采取的行为。除了使用内置函数input()或者GUI库的控件和对话框来接收用户输入以外,还可以使用sys和argparse模块来接收命令行参数,使用configparser模块从外部配置文件中获取信息。sys模块的argv是一个包......
  • Python查找任意字符串中只出现一次的字符(2016奇虎笔试题)
    '''  程序功能:  编写函数,给定任意字符串,找出其中只出现一次的字符,  如果有多个这样的字符,就全部找出。'''importsysdefsearchOne(s):#创建空字典d=dict()#遍历字符串,并分别记录每个字符的出现次数forchins:#这里重点演示字典的ge......
  • 小议Python列表和元组中的元素地址连续性
    众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提供的OrderedDict类。在Python中,列表和元组属于有序序列,支持下标随机访问,也支持切片操作。当然,列表是可变序列而元组属于不可变序列,这一......
  • Python实现倒计时按钮
    很多网站会在注册或交易后给出一个许可协议或提醒信息,一般页面上会有个按钮,但是这个按钮是倒计时的,在倒计时结束之前是禁用的。本文使用tkinter模拟了这样的倒计时按钮。importtkinterimporttimeimportthreading#创建应用程序窗口,设置标题和大小root=tkinter.Tk()root.tit......