数据包含以下因子:国家/宗教,出生年份,年龄,性别。根据这些信息,如何使用Jupyter Notebook绘制一张人口金字塔图
时间: 2024-03-31 08:38:22 浏览: 151
要绘制人口金字塔图,可以按照以下步骤操作:
1. 在Jupyter Notebook中打开一个新的Notebook文件,在第一行输入以下代码以导入必要的库:
```python
import pandas as pd
import matplotlib.pyplot as plt
```
2. 接下来,创建一个包含人口数据的Pandas DataFrame,其中包含以下列:国家/宗教,出生年份,年龄和性别。例如:
```python
data = {'Country/Religion': ['USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA'],
'Year of Birth': [2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005],
'Age': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
'Gender': ['M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M']}
df = pd.DataFrame(data)
```
3. 使用Pandas的groupby()函数将数据按性别分组,并计算每个年龄组的人口数量。
```python
male_data = df[df['Gender']=='M'].groupby('Age').size()
female_data = df[df['Gender']=='F'].groupby('Age').size()
```
4. 使用Matplotlib绘制人口金字塔图。首先,创建一个新的Figure对象,并添加两个子图,一个用于男性数据,一个用于女性数据。接下来,使用barh()函数绘制水平条形图。
```python
fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(8, 5))
ax1.barh(male_data.index, male_data.values, align='center', color='blue')
ax2.barh(female_data.index, -female_data.values, align='center', color='red')
```
5. 最后,添加标签和标题,并显示图表。
```python
ax1.set(title='Male', xlabel='Number of people')
ax2.set(title='Female', xlabel='Number of people', xlim=[-max(female_data.values)-100, max(male_data.values)+100])
ax1.set_ylabel('Age')
plt.show()
```
完整的代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
data = {'Country/Religion': ['USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA'],
'Year of Birth': [2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005],
'Age': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
'Gender': ['M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M', 'M']}
df = pd.DataFrame(data)
male_data = df[df['Gender']=='M'].groupby('Age').size()
female_data = df[df['Gender']=='F'].groupby('Age').size()
fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(8, 5))
ax1.barh(male_data.index, male_data.values, align='center', color='blue')
ax2.barh(female_data.index, -female_data.values, align='center', color='red')
ax1.set(title='Male', xlabel='Number of people')
ax2.set(title='Female', xlabel='Number of people', xlim=[-max(female_data.values)-100, max(male_data.values)+100])
ax1.set_ylabel('Age')
plt.show()
```
这样就可以绘制一个简单的人口金字塔图了,具体效果如下图所示:
![人口金字塔图](https://img-blog.csdnimg.cn/20210929221631580.png)
阅读全文