Will Korea's fertility rate rebound after a decade? The Congressional Budget Office's projections for 2025 (feat. Python)
South Korea's decade-long birthrate problem. By 2023, the country's population is expected to reach an all-time low of 0.72However, a recently released projection from the Congressional Budget Office (NABO) shows that by 2024, the 0.74which will rebound slightly.
It's a rebound... but is it really a meaningful change? Or is it just a blip?
In this post, we'll use the Fertility reboundLet's take a look at whether this is actually possible, the rationale behind the prospect, and what you can do about it!
South Korea's fertility rate rebounds in 2024
South Korea's fertility rate is set to bottom out in 2024 and start rising again. The 2015 1.24 people South Korea's fertility rate has been declining ever since, 2024 Lift 0.74for the first time in over a decade. So what's behind this rebound?
Behind the rebound: The post-COVID recovery and the power of policy
- Delayed births due to COVID-19One explanation is that the pandemic caused many families to voluntarily and involuntarily delay their birth plans, and now that some of those births are back, we're seeing a rebound.
- Government birthrate reduction measures: The government's policies to support maternity and childcare to address the declining birthrate are slowly having an impact, albeit a weak one.
- Parenting-friendly social atmosphereSome analysts say that the workplace is making it easier to raise children, with more parental leave and various benefits, but it's still not free for workers.
The question of a possible rebound: is it real?
But can this small rebound be sustained? Report from the Congressional Budget Officefor the next five years Fertility reboundwas not expected to be large. 2028The fertility rate was still 0.74 to 0.77 people level because it's expected to stay at that level.
Fertility rates as time series data
So, let's get a little more data-driven here. The Python code below uses the 2014 to 2025to visualize the fertility rate as a time series.
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
Set # Korean font (Nanum Gothic)
font_path = 'C:/Windows/Fonts/NanumGothic.ttf' # Need to set path according to your environment
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
import numpy as np
# fertility data by year
years = np.array([2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025])
birth_rates = np.array([1.21, 1.24, 1.17, 1.05, 0.98, 0.92, 0.84, 0.81, 0.78, 0.72, 0.74, 0.75])
Setting the # style
plt.style.use('ggplot') # 'ggplot' or 'fivethirtyeight' can be used
Draw a # graph
plt.figure(figsize=(12, 7), dpi=100)
Line graph the # fertility rate
plt.plot(years, birth_rates, marker='o', linestyle='-', color='#2a9d8f', linewidth=2.5, label="Fertility rate")
Highlight the # 2025 projection line
plt.axvline(x=2025, color='#e76f51', linestyle='--', linewidth=2, label="Projected 2025")
Label the # points
for i, rate in enumerate(birth_rates):
plt.text(years[i], birth_rates[i] + 0.02, f'{rate}', ha='center', fontsize=10, color='#264653')
Set the # graph title and axes
plt.title("Fertility rate trend in South Korea 2014-2025", fontsize=16, fontweight='bold', color='#264653', pad=20)
plt.xlabel("Year", fontsize=12, labelpad=10, color='#264653')
plt.ylabel("Total fertility rate (persons)", fontsize=12, labelpad=10, color='#264653')
Set the # scale
plt.xticks(years, fontsize=10)
plt.yticks(np.array(0.6, 1.4, 0.1), fontsize=10)
Set the # legend
plt.legend(loc='upper right', fontsize=11)
Adjust the # grid and style
plt.grid(True, which='major', linestyle='--', linewidth=0.7, alpha=0.7)
Adjust the top and bottom margins of the # graph
plt.tight_layout()
Print the # graph
plt.show()
When you run the above code, 2014 to 2025You can see at a glance how South Korea's fertility rate has changed over the years. Projected fertility rate in 2025 (0.75 children)is highlighted with a red dotted line. As you can see from the data, this bounce is likely to be temporary.
Code explanations that are easy for beginners to understand
1. Setting up import and Korean fonts
- Import matplotlib.pyplot under the alias plt to prepare to plot a graph.
- FONT_MANAGER and RC are required to use Hangul fonts. Load the NanumGothic.ttf font installed on your system from the path and enable it.
- rc('font', family=font_name) will cause all graphs to use the specified font.
2. Create a data array
- Create an array of years and birth_rates data using the np.array() function.
- years: An array containing the years from 2014 to 2025.
- birth_rates: An array containing the total birth rate data for the year.
3. Setting graph styles
- plt.style.use('ggplot'): Use the 'ggplot' style provided by matplotlib. This style provides a clean design, making your graphs easier to read for beginners.
4. Set graph size
- plt.figure(figsize=(12, 7), dpi=100): Set the size of the graph.
- figsize=(12, 7): Draw a graph that is 12 inches across and 7 inches tall.
- dpi=100: Sets the resolution of the graph to 100, making it look crisp.
5. Plotting a fertility line graph
- plt.plot(years, birth_rates, marker='o', linestyle='-', color='#2a9d8f', linewidth=2.5, label="Birth Rates")
- Plot a line graph using the years and birth_rates data.
- marker='o': Marks each data point with a circle.
- linestyle='-': Connect lines in a straight line.
- color='#2a9d8f': Sets the color of the graph to a cyan color.
- linewidth=2.5: Set the thickness of the line to 2.5 to make it thicker.
- label="Fertility rate": Give the legend the name "fertility rate".
6. Highlight the 2025 projected line
- plt.axvline(x=2025, color='#e76f51′, linestyle='-', linewidth=2, label="Projected for 2025")
- x=2025: Draws a vertical line through the year 2025.
- color='#e76f51′: Sets the color of this vertical line to orange.
- linestyle='-': Display the line as a dotted line.
- linewidth=2: Set the thickness of the line to 2 to emphasize it.
- label="Projected for 2025": Label this line as "Projected 2025" in the legend.
7. Show labels over dots
- Use the plt.text() function to display the fertility value above each data point.
- years[i]: x-axis coordinates of each data point in years.
- birth_rates[i] + 0.02: Shows birth rate values slightly offset from the top of the graph.
- f'{rate}': Convert each fertility rate value to a string and display it.
- ha='center': Aligns the text to the center of the dot.
- fontsize=10: Set the text size to 10.
- color='#264653′: Set the text color to dark teal to make it stand out.
8. Set graph titles and axes
- plt.title("Fertility Rate Trends in Korea 2014-2025", fontsize=16, fontweight='bold', color='#264653′, pad=20)
- Give the graph a title, set the font size (16), weight (bold), and color (dark cyan).
- pad=20: Set the padding between the title and the graph to 20 to provide spacing.
- plt.xlabel("Year", fontsize=12, labelpad=10, color='#264653′): Sets the label for the x-axis (year), sets the font size (12) and color, and the padding (10) between the label and the axis.
- plt.ylabel("Total fertility rate (people)", fontsize=12, labelpad=10, color='#264653′): Set the label for the y-axis (fertility rate) in the same way.
9. Setting the scale
- plt.xticks(years, fontsize=10): Sets the years and font size to be displayed on the x-axis.
- plt.yticks(np.array(0.6, 1.4, 0.1), fontsize=10): Sets a tick mark on the y-axis from 0.6 to 1.4 in 0.1 increments.
10. Setting the legend
- plt.legend(loc='upper right', fontsize=11): Set the legend for the graph, adjusting the position so that it appears in the upper right corner.
11. Adjust grids and styles
- plt.grid(True, which='major', linestyle='-', linewidth=0.7, alpha=0.7): Adds a dotted grid to the graph. The grid is mainly displayed on the major scale.
12. Adjust graph margins
- plt.tight_layout(): Automatically adjusts the top, bottom, and left margins of the graph to avoid overlapping labels and graphs.
13. Graph Output
- plt.show(): Prints all the graphs you set to the screen.
With this explanation, you should be able to easily understand each element of the graph and how to set up a visually clean and trendy style.
Practical ways to keep fertility rates rebounding
So how can we keep this rebound going? There are a few alternatives that have been suggested
- Expanded parental leave and flexible work arrangements: Many parents are struggling to juggle childcare and work. We need more parental leave and more flexibility in working hours.
- Strengthening housing and economic support: Reducing the financial burden of raising a child is an important factor in the decision to have a child. We need to strengthen housing and child support.
- Ease the burden of training costs: The cost of education also has a major impact on the fertility rate. We need to consider strengthening public education to reduce the cost of private education.
Conclusion: Fertility rebound in 2025, temporary, but could it be a starting point?
If the fertility rate is Slight rebound after 10 yearswhich in itself is encouraging. However, we can't rule out the possibility that this is just a short-term bounce.
Without continued policy efforts and economic support from the government, this rebound may be short-lived. Fertility, it's time for national attention and engagement on this issue going forward.