Find skewness of data in Python using Scipy
we simply use this library byfrom Scipy.stats import skew
Skewness based on its types
There are three types of skewness :
- Normally Distributed: In this, the skewness is always equated to zero.
Skewness=0
- Positively skewed distribution: In this, A Positively-skewed distribution has a long right tail, that’s why this is also known as right-skewed distribution. the reason behind it, in this value of mode is highest and mean is least which leads to right peak.
Skessness >o

- Negatively skewed distribution: In this, a negatively skewed distribution has a long left tail, that’s why this is also known as left-skewed distribution. the reason behind it, in this value of mode is least and mean is highest just reverse to right-skewed which leads to the left peak.
Skewness<0

The formula to find skewness of data
Skewness =3(Mean- Median)/Standard Deviation
Example: skewness for given data
Input: Any random ten input
from scipy.stats import skew import numpy as np x= np.random.normal(0,5,10) print("X:",x) print("Skewness for data :",skew(x))
Output:
X: [ 5.51964388 -1.69148439 -5.55162585 -5.6901246 2.38861009 2.73400871 3.77918369 -2.30759396 3.67021073 1.48142813] Skewness for data : -0.4625020248485552
scipy.stats.skewnorm() is a skew-normal continuous random variable. It is inherited from the of generic methods as an instance of the rv_continuous class. It completes the methods with details specific for this particular distribution.
Parameters :
q : lower and upper tail probability
x : quantiles
loc : [optional]location parameter. Default = 0
scale : [optional]scale parameter. Default = 1
size : [tuple of ints, optional] shape or random variates.
moments : [optional] composed of letters [‘mvsk’]; ‘m’ = mean, ‘v’ = variance, ‘s’ = Fisher’s skew and ‘k’ = Fisher’s kurtosis. (default = ‘mv’).Results : skew-normal continuous random variable
Code #1 : Creating skew-normal continuous random variable
# importing library from scipy.stats import skewnorm numargs = skewnorm .numargs a, b = 4.32, 3.18 rv = skewnorm (a, b) print ("RV : \n", rv) |
Output :
RV : scipy.stats._distn_infrastructure.rv_frozen object at 0x000002A9D843A9C8
Code #2 : skew-normal continuous variates and probability distribution
import numpy as np quantile = np.arange (0.01, 1, 0.1) # Random Variates R = skewnorm.rvs(a, b) print ("Random Variates : \n", R) # PDF R = skewnorm.pdf(a, b, quantile) print ("\nProbability Distribution : \n", R) |
Output :
Random Variates : 4.2082825614230845 Probability Distribution : [7.38229165e-05 1.13031801e-04 1.71343310e-04 2.57152477e-04 3.82094976e-04 5.62094062e-04 8.18660285e-04 1.18047149e-03 1.68525001e-03 2.38193677e-03]
Code #3 : Graphical Representation.
import numpy as np import matplotlib.pyplot as plt distribution = np.linspace(0, np.minimum(rv.dist.b, 3)) print("Distribution : \n", distribution) plot = plt.plot(distribution, rv.pdf(distribution)) |
Output :
Distribution : [0. 0.04081633 0.08163265 0.12244898 0.16326531 0.20408163 0.24489796 0.28571429 0.32653061 0.36734694 0.40816327 0.44897959 0.48979592 0.53061224 0.57142857 0.6122449 0.65306122 0.69387755 0.73469388 0.7755102 0.81632653 0.85714286 0.89795918 0.93877551 0.97959184 1.02040816 1.06122449 1.10204082 1.14285714 1.18367347 1.2244898 1.26530612 1.30612245 1.34693878 1.3877551 1.42857143 1.46938776 1.51020408 1.55102041 1.59183673 1.63265306 1.67346939 1.71428571 1.75510204 1.79591837 1.83673469 1.87755102 1.91836735 1.95918367 2. ]

Code #4 : Varying Positional Arguments
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 100) # Varying positional arguments y1 = skewnorm .pdf(x, 1, 3, 5) y2 = skewnorm .pdf(x, 1, 4, 4) plt.plot(x, y1, "*", x, y2, "r--") |
Output :

Left-skewed Levy Distribution in Statistics
scipy.stats.levy_l() is a left-skewed Levy continuous random variable. It is inherited from the of generic methods as an instance of the rv_continuous class. It completes the methods with details specific for this particular distribution.
Parameters :
q : lower and upper tail probability
x : quantiles
loc : [optional]location parameter. Default = 0
scale : [optional]scale parameter. Default = 1
size : [tuple of ints, optional] shape or random variates.
moments : [optional] composed of letters [‘mvsk’]; ‘m’ = mean, ‘v’ = variance, ‘s’ = Fisher’s skew and ‘k’ = Fisher’s kurtosis. (default = ‘mv’).Results : left-skewed Levy continuous random variable
Code #1 : Creating left-skewed Levy continuous random variable
# importing library from scipy.stats import levy_l numargs = levy_l.numargs a, b = 4.32, 3.18 rv = levy_l(a, b) print ("RV : \n", rv) |
Output :
RV : scipy.stats._distn_infrastructure.rv_frozen object at 0x000002A9D6707508
Code #2 : left-skewed Levy continuous variates and probability distribution
import numpy as np quantile = np.arange (0.03, 2, 0.21) # Random Variates R = levy_l.rvs(a, b) print ("Random Variates : \n", R) # PDF R = levy_l.pdf(a, b, quantile) print ("\nProbability Distribution : \n", R) |
Output :
Random Variates : 1.1073459342251062 Probability Distribution : [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Code #3 : Graphical Representation.
import numpy as np import matplotlib.pyplot as plt distribution = np.linspace(0, np.maximum(rv.dist.b, 4)) print("Distribution : \n", distribution) plot = plt.plot(distribution, rv.pdf(distribution)) |
Output :
Distribution : [0. 0.08163265 0.16326531 0.24489796 0.32653061 0.40816327 0.48979592 0.57142857 0.65306122 0.73469388 0.81632653 0.89795918 0.97959184 1.06122449 1.14285714 1.2244898 1.30612245 1.3877551 1.46938776 1.55102041 1.63265306 1.71428571 1.79591837 1.87755102 1.95918367 2.04081633 2.12244898 2.20408163 2.28571429 2.36734694 2.44897959 2.53061224 2.6122449 2.69387755 2.7755102 2.85714286 2.93877551 3.02040816 3.10204082 3.18367347 3.26530612 3.34693878 3.42857143 3.51020408 3.59183673 3.67346939 3.75510204 3.83673469 3.91836735 4. ]

Code #4 : Varying Positional Arguments
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 100) # Varying positional arguments y1 = levy_l .pdf(x, 1, 3) y2 = levy_l .pdf(x, 1, 4) plt.plot(x, y1, "*", x, y2, "r--") |
Output :
