Thursday, May 26, 2022

how to swap two variables ?

 swap 2 variables 

>>> a = 1 

>>> b = 2


>>>  a 

2


>>> b

1


reason :


In other languages you need to keep an intermediate variable to accomplish this.


reference:


https://stackoverflow.com/questions/14836228/is-there-a-standardized-method-to-swap-two-variables-in-python/14836456#14836456


In python , two variables values swapped using this syntax:

left, right = right, left 


Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.


That means the following for the expression a,b = b,a :

  • The right-hand side b,a is evaluated, that is to say, a tuple of two elements is created in the memory. The two elements are the objects designated by the identifiers b and a, that were existing before the instruction is encountered during the execution of the program.
  • Just after the creation of this tuple, no assignment of this tuple object has still been made, but it doesn't matter, Python internally knows where it is.
  • Then, the left-hand side is evaluated, that is to say, the tuple is assigned to the left-hand side.
  • As the left-hand side is composed of two identifiers, the tuple is unpacked in order that the first identifier a be assigned to the first element of the tuple (which is the object that was formerly b before the swap because it had name b)
    and the second identifier b is assigned to the second element of the tuple (which is the object that was formerly a before the swap because its identifiers was a)

This mechanism has effectively swapped the objects assigned to the identifiers a and b

So, to answer your question: YES, it's the standard way to swap two identifiers on two objects.
By the way, the objects are not variables, they are objects.


I know three ways to swap variables, but a, b = b, a is the simplest. There is


XOR (for integers)

x = x ^ y
y = y ^ x
x = x ^ y

Or concisely,

x ^= y
y ^= x
x ^= y

Temporary variable

w = x
x = y
y = w
del w

Tuple swap

x, y = y, x


I would not say it is a standard way to swap because it will cause some unexpected errors.


nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]


nums[i] will be modified first and then affect the second variable nums[nums[i] - 1].


Does not work for multidimensional arrays, because references are used here.


import numpy as np

# swaps
data = np.random.random(2)
print(data)
data[0], data[1] = data[1], data[0]
print(data)

# does not swap
data = np.random.random((2, 2))
print(data)
data[0], data[1] = data[1], data[0]
print(data)



To get around the problems explained by eyquem, you could use the copy module to return a tuple containing (reversed) copies of the values, via a function:

from copy import copy

def swapper(x, y):
  return (copy(y), copy(x))

Same function as a lambda:


swapper = lambda x, y: (copy(y), copy(x))

Then, assign those to the desired names, like this:

x, y = swapper(y, x)

NOTE: if you wanted to you could import/use deepcopy instead of copy.


exceptions / challenges on the syntax 


















Thursday, May 19, 2022

Machine Learning Approach to Sales Demand Forecasting

 Machine Learning Approach to Sales Demand Forecasting


During these uncertain times, businesses are operating in unfamiliar grounds and are obliged to rely on rapid shifts in customer behaviour. 

Behaviour may be influenced by new experience, market economic conditions, inflation, political unrest etc. Machine learning techniques can help with demand or sales order forecasting.


ML Approach
Data Collection-> Exploratory Data Analysis->Feature Engineering->Modelling->Hyperparameter Tuning->Deployment

The most critical part for demand forecasting is data and feature engineering.

Data Integration Ideas:-
- Link sales demand to order management data
- Link CRM opportunities with transactional sales data
- Link customer and product data to expected demand
- Outlier treatment and data cleaning/enrichment

Feature Engineering Ideas:-
- Sales opportunity representation based on historical sales
- Transactions forecasting
- Historical product sales

Feature Selection Ideas:-
- Rank features based on their relevance.
- Adding the most important features and checking model performance each time until the ideal cut-off is achieved.
- Using a wrapper method to eliminate noise/redundancy.

ML Algorithms:-
- ARIMA/SARIMA
- Linear Regression
- XGBoost
- K-Nearest Neighbors Regression
- Random Forest
- Long Short-Term Memory (LSTM)
- Ensemble model depending on the business need - NLP to understand customer sentiment from emails, classification model to predict if customer will order and churn and finally forecasting order dates, quantity etc.