Python

Анализ цепочки поставок с использованием Python

цепочка поставок это сеть производства и логистики, связанная с производством и доставкой товаров клиентам. А анализ цепочки поставок означает анализ различных компонентов цепочки поставок, чтобы понять, как повысить эффективность цепочки поставок, чтобы создать большую ценность для клиентов. Итак, если вы хотите научиться анализировать цепочку поставок, эта статья для вас. В этой статье я проведу вас через задачу анализа цепочки поставок с использованием Python.

Анализ цепочки поставок: набор данных

Чтобы проанализировать цепочку поставок компании, нам нужны данные о различных этапах цепочки поставок, такие как данные о поиске, производстве, транспортировке, управлении запасами, продажах и демографических данных клиентов.

Я нашел идеальный набор данных для этой задачи, который включает данные о цепочке поставок стартапа Fashion and Beauty. Вы можете скачать набор данных с здесь.

В следующем разделе я проведу вас через задачу анализа цепочки поставок с использованием языка программирования Python.

Анализ цепочки поставок с использованием Python

Давайте начнем с задачи анализа цепочки поставок, импортировав необходимые библиотеки Python и набор данных:

import pandas as pd
import plotly.express as px
import plotly.io as pio
import plotly.graph_objects as go
pio.templates.default = "plotly_white"

data = pd.read_csv("supply_chain_data.csv")
print(data.head())
  Product type   SKU      Price  Availability  Number of products sold  \
0     haircare  SKU0  69.808006            55                      802   
1     skincare  SKU1  14.843523            95                      736   
2     haircare  SKU2  11.319683            34                        8   
3     skincare  SKU3  61.163343            68                       83   
4     skincare  SKU4   4.805496            26                      871   

   Revenue generated Customer demographics  Stock levels  Lead times  \
0        8661.996792            Non-binary            58           7   
1        7460.900065                Female            53          30   
2        9577.749626               Unknown             1          10   
3        7766.836426            Non-binary            23          13   
4        2686.505152            Non-binary             5           3   

   Order quantities  ...  Location Lead time  Production volumes  \
0                96  ...    Mumbai        29                 215   
1                37  ...    Mumbai        23                 517   
2                88  ...    Mumbai        12                 971   
3                59  ...   Kolkata        24                 937   
4                56  ...     Delhi         5                 414   

  Manufacturing lead time Manufacturing costs  Inspection results  \
0                      29           46.279879             Pending   
1                      30           33.616769             Pending   
2                      27           30.688019             Pending   
3                      18           35.624741                Fail   
4                       3           92.065161                Fail   

   Defect rates  Transportation modes   Routes       Costs  
0      0.226410                  Road  Route B  187.752075  
1      4.854068                  Road  Route B  503.065579  
2      4.580593                   Air  Route C  141.920282  
3      4.746649                  Rail  Route A  254.776159  
4      3.145580                   Air  Route A  923.440632  

[5 rows x 24 columns]

Давайте посмотрим на описательную статистику набора данных:

            Price  Availability  Number of products sold  Revenue generated  \
count  100.000000    100.000000               100.000000         100.000000   
mean    49.462461     48.400000               460.990000        5776.048187   
std     31.168193     30.743317               303.780074        2732.841744   
min      1.699976      1.000000                 8.000000        1061.618523   
25%     19.597823     22.750000               184.250000        2812.847151   
50%     51.239831     43.500000               392.500000        6006.352023   
75%     77.198228     75.000000               704.250000        8253.976921   
max     99.171329    100.000000               996.000000        9866.465458   

       Stock levels  Lead times  Order quantities  Shipping times  \
count    100.000000  100.000000        100.000000      100.000000   
mean      47.770000   15.960000         49.220000        5.750000   
std       31.369372    8.785801         26.784429        2.724283   
min        0.000000    1.000000          1.000000        1.000000   
25%       16.750000    8.000000         26.000000        3.750000   
50%       47.500000   17.000000         52.000000        6.000000   
75%       73.000000   24.000000         71.250000        8.000000   
max      100.000000   30.000000         96.000000       10.000000   

       Shipping costs   Lead time  Production volumes  \
count      100.000000  100.000000          100.000000   
mean         5.548149   17.080000          567.840000   
std          2.651376    8.846251          263.046861   
min          1.013487    1.000000          104.000000   
25%          3.540248   10.000000          352.000000   
50%          5.320534   18.000000          568.500000   
75%          7.601695   25.000000          797.000000   
max          9.929816   30.000000          985.000000   

       Manufacturing lead time  Manufacturing costs  Defect rates       Costs  
count                100.00000           100.000000    100.000000  100.000000  
mean                  14.77000            47.266693      2.277158  529.245782  
std                    8.91243            28.982841      1.461366  258.301696  
min                    1.00000             1.085069      0.018608  103.916248  
25%                    7.00000            22.983299      1.009650  318.778455  
50%                   14.00000            45.905622      2.141863  520.430444  
75%                   23.00000            68.621026      3.563995  763.078231  
max                   30.00000            99.466109      4.939255  997.413450  

Теперь давайте начнем с анализа цепочки поставок, рассмотрев взаимосвязь между ценой продуктов и доходом от них:

fig = px.scatter(data, x='Price', 
                 y='Revenue generated', 
                 color="Product type", 
                 hover_data=['Number of products sold'], 
                 trendline="ols")
fig.show()
Анализ цепочки поставок: количество проданных товаров

Таким образом, компания получает больший доход от средств по уходу за кожей, и чем выше цена средств по уходу за кожей, тем больший доход они приносят. Теперь давайте посмотрим на продажи по типу продукта:

sales_data = data.groupby('Product type')['Number of products sold'].sum().reset_index()

pie_chart = px.pie(sales_data, values="Number of products sold", names="Product type", 
                   title="Sales by Product Type", 
                   hover_data=['Number of products sold'],
                   hole=0.5,
                   color_discrete_sequence=px.colors.qualitative.Pastel)
                   
pie_chart.update_traces(textposition='inside', textinfo='percent+label')
pie_chart.show()
Продажи по типу продукта

Таким образом, 45% бизнеса приходится на средства по уходу за кожей, 29,5% — на средства по уходу за волосами и 25,5% — на косметику. Теперь давайте посмотрим на общий доход, полученный от перевозчиков:

total_revenue = data.groupby('Shipping carriers')['Revenue generated'].sum().reset_index()
fig = go.Figure()
fig.add_trace(go.Bar(x=total_revenue['Shipping carriers'], 
                     y=total_revenue['Revenue generated']))
fig.update_layout(title="Total Revenue by Shipping Carrier", 
                  xaxis_title="Shipping Carrier", 
                  yaxis_title="Revenue Generated")
fig.show()
Анализ цепочки поставок: общий доход по перевозчикам

Таким образом, компания использует трех перевозчиков для перевозки, а перевозчик B помогает компании получать больше доходов. Теперь давайте посмотрим на среднее время выполнения заказа и средние производственные затраты для всех продуктов компании:

avg_lead_time = data.groupby('Product type')['Lead time'].mean().reset_index()
avg_manufacturing_costs = data.groupby('Product type')['Manufacturing costs'].mean().reset_index()
result = pd.merge(avg_lead_time, avg_manufacturing_costs, on='Product type')
result.rename(columns={'Lead time': 'Average Lead Time', 'Manufacturing costs': 'Average Manufacturing Costs'}, inplace=True)
print(result)
  Product type  Average Lead Time  Average Manufacturing Costs
0    cosmetics          13.538462                    43.052740
1     haircare          18.705882                    48.457993
2     skincare          18.000000                    48.993157

Анализ SKU

В наборе данных есть столбец как SKU. Вы, должно быть, услышали это в самый первый раз. Итак, SKU расшифровывается как Stock Keeping Units. Это как специальные коды, которые помогают компаниям отслеживать все, что у них есть на продажу. Представьте, что у вас есть большой магазин игрушек с множеством игрушек. Каждая игрушка уникальна и имеет свое название и цену, но если вы хотите узнать, сколько у вас осталось, вам нужен способ их идентифицировать. Таким образом, вы даете каждой игрушке уникальный код, как секретный номер, который знает только магазин. Этот секретный номер называется SKU.

Надеюсь, теперь вы поняли, что такое SKU. Теперь давайте проанализируем доход от каждой SKU:

revenue_chart = px.line(data, x='SKU', 
                        y='Revenue generated', 
                        title="Revenue Generated by SKU")
revenue_chart.show()
Доход от SKU

В наборе данных есть еще один столбец «Уровни запасов». Уровни запасов относятся к количеству продуктов, которые есть в магазине или на предприятии. Теперь давайте посмотрим на уровень запасов каждого SKU:

stock_chart = px.line(data, x='SKU', 
                      y='Stock levels', 
                      title="Stock Levels by SKU")
stock_chart.show()
Анализ цепочки поставок: уровни запасов по SKU

Теперь давайте посмотрим на количество заказа каждого SKU:

order_quantity_chart = px.bar(data, x='SKU', 
                              y='Order quantities', 
                              title="Order Quantity by SKU")
order_quantity_chart.show()
Количество заказа по SKU

Анализ затрат

Теперь проанализируем стоимость доставки перевозчиков:

shipping_cost_chart = px.bar(data, x='Shipping carriers', 
                             y='Shipping costs', 
                             title="Shipping Costs by Carrier")
shipping_cost_chart.show()
Стоимость доставки по перевозчику

В одной из приведенных выше визуализаций мы обнаружили, что оператор связи B помогает компании увеличить прибыль. Это также самый дорогой перевозчик среди трех. Теперь посмотрим на распределение затрат по видам транспорта:

transportation_chart = px.pie(data, 
                              values="Costs", 
                              names="Transportation modes", 
                              title="Cost Distribution by Transportation Mode",
                              hole=0.5,
                              color_discrete_sequence=px.colors.qualitative.Pastel)
transportation_chart.show()
Анализ цепочки поставок: распределение затрат по видам транспорта

Таким образом, компания тратит больше средств на автомобильный и железнодорожный виды транспорта для перевозки грузов.

Анализ уровня брака

Уровень брака в цепочке поставок относится к проценту продуктов, которые имеют что-то не так или обнаруживаются сломанными после доставки. Давайте посмотрим на средний процент брака для всех типов продуктов:

defect_rates_by_product = data.groupby('Product type')['Defect rates'].mean().reset_index()

fig = px.bar(defect_rates_by_product, x='Product type', y='Defect rates',
             title="Average Defect Rates by Product Type")
fig.show()
Средние показатели брака по типу продукта

Таким образом, уровень брака средств по уходу за волосами выше. Теперь давайте посмотрим на процент брака по видам транспорта:

pivot_table = pd.pivot_table(data, values="Defect rates", 
                             index=['Transportation modes'], 
                             aggfunc="mean")

transportation_chart = px.pie(values=pivot_table["Defect rates"], 
                              names=pivot_table.index, 
                              title="Defect Rates by Transportation Mode",
                              hole=0.5,
                              color_discrete_sequence=px.colors.qualitative.Pastel)
transportation_chart.show()
Анализ цепочки поставок: уровень брака по видам транспорта

Автомобильный транспорт приводит к более высокому уровню брака, а воздушный транспорт имеет самый низкий уровень брака.

Вот как вы можете анализировать цепочку поставок компании с помощью языка программирования Python.

Краткое содержание

Анализ цепочки поставок означает анализ различных компонентов цепочки поставок, чтобы понять, как повысить эффективность цепочки поставок, чтобы создать большую ценность для клиентов. Надеюсь, вам понравилась эта статья об анализе цепочки поставок с использованием Python. Не стесняйтесь задавать ценные вопросы в разделе комментариев ниже.

Source link

Похожие статьи

Кнопка «Наверх»