import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_csv(r"C:\Users\yunge\Desktop\Data Science\Python\Data Analysis Projects\Financial Budget Analysis\India_budget_2021.csv")
data
Department /Ministry | Fund allotted(in ₹crores) | |
---|---|---|
0 | MINISTRY OF AGRICULTURE | 131531.19 |
1 | DEPARTMENT OF ATOMIC ENERGY | 18264.89 |
2 | MINISTRY OF AYURVEDA, YOGA | 2970.30 |
3 | MINISTRY OF CHEMICALS AND FERTILISER | 80714.94 |
4 | MINISTRY OF CIVIL AVIATION | 3224.67 |
5 | MINISTRY OF COAL | 534.88 |
6 | MINISTRY OF COMMERCE AND INDUSTRY | 12768.25 |
7 | MINISTRY OF COMMUNICATION | 75265.22 |
8 | MINISTRY OF CONSUMER AFFAIRS | 256948.40 |
9 | MINISTRY OF CORPORATE AFFAIRS | 712.13 |
10 | MINISTRY OF CULTURE | 2687.99 |
11 | MINISTRY OF DEFENCE | 478195.62 |
12 | MINISTRY OF DEVELOPMENT OF NORTH EASTERN REGION | 2658.00 |
13 | MINISTRY OF EARTH SCIENCES | 1897.13 |
14 | MINISTRY OF EDUCATION | 93224.31 |
15 | MINISTRY OF ELECTRONICS AND INFORMATION TECHNO... | 9720.66 |
16 | MINISTRY OF ENVIRONMENT, FOREST | 2869.93 |
17 | MINISTRY OF EXTERNAL AFFAIRS | 18154.73 |
18 | MINISTRY OF FINANCE | 1386273.30 |
19 | MINISTRY OF FISHERIES, ANIMAL HUSBANDRY | 4322.82 |
20 | MINISTRY OF FOOD PROCESSING INDUSTRIES | 1308.66 |
21 | MINISTRY OF HEALTH AND FAMILY WELFARE | 73931.77 |
22 | MINISTRY OF HEAVY INDUSTRIES | 1017.08 |
23 | MINISTRY OF HOME AFFAIRS | 166546.94 |
24 | MINISTRY OF HOUSING AND URBAN AFFAIRS | 54581.00 |
25 | MINISTRY OF INFORMATION AND BROADCASTING | 4071.23 |
26 | MINISTRY OF JAL SHAKTI | 69053.02 |
27 | MINISTRY OF LABOUR AND EMPLOYMENT | 13306.50 |
28 | MINISTRY OF LAW AND JUSTICE | 3229.94 |
29 | MINISTRY OF MICRO, SMALL AND MEDIUM ENTERPRISES | 15699.65 |
30 | MINISTRY OF MINES | 1466.82 |
31 | MINISTRY OF MINORITY AFFAIR | 4810.77 |
32 | MINISTRY OF NEW AND RENEWABLE ENERGY | 5753.00 |
33 | MINISTRY OF PANCHAYATI RAJ | 913.43 |
34 | MINISTRY OF PARLIAMENTARY AFFAIRS | 65.07 |
35 | MINISTRY OF PERSONNEL, PUBLIC GRIEVANCES | 2097.24 |
36 | MINISTRY OF PETROLEUM AND NATURAL GAS | 15943.78 |
37 | MINISTRY OF PLANNING | 1062.77 |
38 | MINISTRY OF PORTS, SHIPPING | 1702.35 |
39 | MINISTRY OF POWER | 15322.00 |
40 | THE PRESIDENT, PARLIAMENT, UNION PUBLIC SERVIC... | 1687.57 |
41 | MINISTRY OF RAILWAYS | 110054.64 |
42 | MINISTRY OF ROAD TRANSPORT AND HIGHWAY | 118101.00 |
43 | MINISTRY OF RURAL DEVELOPMENT | 133689.50 |
44 | MINISTRY OF SCIENCE AND TECHNOLOGY | 14794.03 |
45 | MINISTRY OF SKILL DEVELOPMENT | 2785.23 |
46 | MINISTRY OF SOCIAL JUSTICE AND EMPOWERMENT | 11689.39 |
47 | DEPARMENT OF SPACE | 13949.09 |
48 | MINISTRY OF STATISTICS | 1409.13 |
49 | MINISTRY OF STEEL | 39.25 |
50 | MINISTRY OF TEXTILES | 3631.64 |
51 | MINISTRY OF TOURISM | 2026.77 |
52 | MINISTRY OF TRIBAL AFFAIRS | 7524.87 |
53 | MINISTRY OF WOMEN AND CHILD DEVELOPMENT | 24435.00 |
54 | MINISTRY OF YOUTH AFFAIRS AND SPORTS | 2596.14 |
55 | NaN | NaN |
56 | GRAND TOTAL | 3483235.63 |
# Data has 57 rows and 2 columns
data.shape
(57, 2)
# Is there null value in the dataset?
data.isna().sum()
Department /Ministry 1 Fund allotted(in ₹crores) 1 dtype: int64
# Drop null value
data=data.dropna()
# Check again if the null value is dropped
data.isna().sum()
Department /Ministry 0 Fund allotted(in ₹crores) 0 dtype: int64
data.plot.bar(x='Department /Ministry',y='Fund allotted(in ₹crores)',figsize=(15,10))
<AxesSubplot:xlabel='Department /Ministry'>
# Drop grand total row
# locate everything but the last row [:-1]
# Locate everything [:]
data=data.iloc[:-1,:]
# Now we see grand total row is omitted
data
Department /Ministry | Fund allotted(in ₹crores) | |
---|---|---|
0 | MINISTRY OF AGRICULTURE | 131531.19 |
1 | DEPARTMENT OF ATOMIC ENERGY | 18264.89 |
2 | MINISTRY OF AYURVEDA, YOGA | 2970.30 |
3 | MINISTRY OF CHEMICALS AND FERTILISER | 80714.94 |
4 | MINISTRY OF CIVIL AVIATION | 3224.67 |
5 | MINISTRY OF COAL | 534.88 |
6 | MINISTRY OF COMMERCE AND INDUSTRY | 12768.25 |
7 | MINISTRY OF COMMUNICATION | 75265.22 |
8 | MINISTRY OF CONSUMER AFFAIRS | 256948.40 |
9 | MINISTRY OF CORPORATE AFFAIRS | 712.13 |
10 | MINISTRY OF CULTURE | 2687.99 |
11 | MINISTRY OF DEFENCE | 478195.62 |
12 | MINISTRY OF DEVELOPMENT OF NORTH EASTERN REGION | 2658.00 |
13 | MINISTRY OF EARTH SCIENCES | 1897.13 |
14 | MINISTRY OF EDUCATION | 93224.31 |
15 | MINISTRY OF ELECTRONICS AND INFORMATION TECHNO... | 9720.66 |
16 | MINISTRY OF ENVIRONMENT, FOREST | 2869.93 |
17 | MINISTRY OF EXTERNAL AFFAIRS | 18154.73 |
18 | MINISTRY OF FINANCE | 1386273.30 |
19 | MINISTRY OF FISHERIES, ANIMAL HUSBANDRY | 4322.82 |
20 | MINISTRY OF FOOD PROCESSING INDUSTRIES | 1308.66 |
21 | MINISTRY OF HEALTH AND FAMILY WELFARE | 73931.77 |
22 | MINISTRY OF HEAVY INDUSTRIES | 1017.08 |
23 | MINISTRY OF HOME AFFAIRS | 166546.94 |
24 | MINISTRY OF HOUSING AND URBAN AFFAIRS | 54581.00 |
25 | MINISTRY OF INFORMATION AND BROADCASTING | 4071.23 |
26 | MINISTRY OF JAL SHAKTI | 69053.02 |
27 | MINISTRY OF LABOUR AND EMPLOYMENT | 13306.50 |
28 | MINISTRY OF LAW AND JUSTICE | 3229.94 |
29 | MINISTRY OF MICRO, SMALL AND MEDIUM ENTERPRISES | 15699.65 |
30 | MINISTRY OF MINES | 1466.82 |
31 | MINISTRY OF MINORITY AFFAIR | 4810.77 |
32 | MINISTRY OF NEW AND RENEWABLE ENERGY | 5753.00 |
33 | MINISTRY OF PANCHAYATI RAJ | 913.43 |
34 | MINISTRY OF PARLIAMENTARY AFFAIRS | 65.07 |
35 | MINISTRY OF PERSONNEL, PUBLIC GRIEVANCES | 2097.24 |
36 | MINISTRY OF PETROLEUM AND NATURAL GAS | 15943.78 |
37 | MINISTRY OF PLANNING | 1062.77 |
38 | MINISTRY OF PORTS, SHIPPING | 1702.35 |
39 | MINISTRY OF POWER | 15322.00 |
40 | THE PRESIDENT, PARLIAMENT, UNION PUBLIC SERVIC... | 1687.57 |
41 | MINISTRY OF RAILWAYS | 110054.64 |
42 | MINISTRY OF ROAD TRANSPORT AND HIGHWAY | 118101.00 |
43 | MINISTRY OF RURAL DEVELOPMENT | 133689.50 |
44 | MINISTRY OF SCIENCE AND TECHNOLOGY | 14794.03 |
45 | MINISTRY OF SKILL DEVELOPMENT | 2785.23 |
46 | MINISTRY OF SOCIAL JUSTICE AND EMPOWERMENT | 11689.39 |
47 | DEPARMENT OF SPACE | 13949.09 |
48 | MINISTRY OF STATISTICS | 1409.13 |
49 | MINISTRY OF STEEL | 39.25 |
50 | MINISTRY OF TEXTILES | 3631.64 |
51 | MINISTRY OF TOURISM | 2026.77 |
52 | MINISTRY OF TRIBAL AFFAIRS | 7524.87 |
53 | MINISTRY OF WOMEN AND CHILD DEVELOPMENT | 24435.00 |
54 | MINISTRY OF YOUTH AFFAIRS AND SPORTS | 2596.14 |
# We see ministry of finance received the highest budget allocation
data.plot.bar(x='Department /Ministry',y='Fund allotted(in ₹crores)',figsize=(15,10))
<AxesSubplot:xlabel='Department /Ministry'>
# Top 10 ministries by fund allocation
data_sorted=data.sort_values(by='Fund allotted(in ₹crores)',ascending=False)
data_sorted.head(10)
Department /Ministry | Fund allotted(in ₹crores) | |
---|---|---|
18 | MINISTRY OF FINANCE | 1386273.30 |
11 | MINISTRY OF DEFENCE | 478195.62 |
8 | MINISTRY OF CONSUMER AFFAIRS | 256948.40 |
23 | MINISTRY OF HOME AFFAIRS | 166546.94 |
43 | MINISTRY OF RURAL DEVELOPMENT | 133689.50 |
0 | MINISTRY OF AGRICULTURE | 131531.19 |
42 | MINISTRY OF ROAD TRANSPORT AND HIGHWAY | 118101.00 |
41 | MINISTRY OF RAILWAYS | 110054.64 |
14 | MINISTRY OF EDUCATION | 93224.31 |
3 | MINISTRY OF CHEMICALS AND FERTILISER | 80714.94 |
data_sorted.head(10).plot.bar(x='Department /Ministry', y='Fund allotted(in ₹crores)',figsize=(15,5),fontsize=11)
plt.title("Distribution of The Budget For Top 10 Ministries",fontweight='bold',fontsize=20)
plt.xlabel("Department /Ministry", fontsize=12)
plt.ylabel("Fund allotted(in ₹crores)", fontsize=12)
plt.legend(fontsize=12)
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>
# Plot a donut chart for top 10 ministries by budget allocation
new_data=data_sorted.head(10)
df=new_data["Fund allotted(in ₹crores)"]
labels=new_data["Department /Ministry"]
plt.figure(figsize=(10,9))
plt.pie(df,labels=labels,autopct='%1.1f%%',startangle=45,pctdistance=0.7) # autopct enables you to display the percent value, pctdistance determines the position of the %
central_circle=plt.Circle((0,0),0.5,color='white') #(0,0) determines the position of the white circle, 0.5 determines the size of the white circle
fig=plt.gcf() # gcf is used to get the currect figure, allows you to retrieve the figure created
fig.gca().add_artist(central_circle) # gca is used to get currect axes, used to get a reference to the current axes
plt.title("Distribution of The Budget For Top 10 Ministries",fontweight='bold')
plt.rc('font',size=15) #plt.rc() is used for setting parameters interactively, it restores the rc parameters from matplotlib’s internal defaults, which are listed at plt.rcParamsDefault, this will revert (overwrite) whatever you’ve already customized in a matplotlibrc file
plt.show()
# Bottom 10 ministries by fund allocation
last_sorted=data.sort_values(by='Fund allotted(in ₹crores)',ascending=True)
last_sorted.head(10)
Department /Ministry | Fund allotted(in ₹crores) | |
---|---|---|
49 | MINISTRY OF STEEL | 39.25 |
34 | MINISTRY OF PARLIAMENTARY AFFAIRS | 65.07 |
5 | MINISTRY OF COAL | 534.88 |
9 | MINISTRY OF CORPORATE AFFAIRS | 712.13 |
33 | MINISTRY OF PANCHAYATI RAJ | 913.43 |
22 | MINISTRY OF HEAVY INDUSTRIES | 1017.08 |
37 | MINISTRY OF PLANNING | 1062.77 |
20 | MINISTRY OF FOOD PROCESSING INDUSTRIES | 1308.66 |
48 | MINISTRY OF STATISTICS | 1409.13 |
30 | MINISTRY OF MINES | 1466.82 |
last_sorted.head(10).plot.bar(x='Department /Ministry', y='Fund allotted(in ₹crores)',figsize=(10,5),fontsize=13)
plt.title("Distribution of The Budget For Last 10 Ministries",fontweight='bold',fontsize=20)
plt.xlabel("Department /Ministry", fontsize=15)
plt.ylabel("Fund allotted(in ₹crores)", fontsize=15)
plt.legend(fontsize=14)
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>
# Plot a donut chart for bottom 10 ministries by budget allocation using .tail()
new_data=data_sorted.tail(10)
df=new_data["Fund allotted(in ₹crores)"]
labels=new_data["Department /Ministry"]
plt.figure(figsize=(10,9))
plt.pie(df,labels=labels,autopct='%1.1f%%',startangle=45,pctdistance=0.7)
central_circle=plt.Circle((0,0),0.5,color='white')
fig=plt.gcf()
fig.gca().add_artist(central_circle)
plt.title("Distribution of The Budget For Last 10 Ministries",fontweight='bold')
plt.rc('font',size=15)
plt.show()
plt.tight_layout()
<Figure size 432x288 with 0 Axes>