我想写一份实验报告。实验目的是:掌握特征数据类型的应用,掌握文件的应用,使用matplotlib绘制图形,具备解决实际生活或专业问题的能力。实验内容需要包括:问题描述、算法设计、代码、实验收获。请给我写一份实验报告。另外,请不要使用pandas库导入数据。
时间: 2024-02-13 22:01:56 浏览: 57
好的,下面是我为你撰写的实验报告。
实验目的:
本次实验的目的是帮助学生掌握特征数据类型的应用,掌握文件的应用,使用matplotlib绘制图形,具备解决实际生活或专业问题的能力。
问题描述:
本次实验选择分析人口普查数据,并通过绘制图表展示出不同年龄段、性别、职业等因素对收入水平的影响。具体而言,我们要回答以下问题:
1. 各年龄段人口占比分布图
2. 不同性别的收入水平对比图
3. 不同职业的收入水平对比图
算法设计:
在本次实验中,我们将手动读取数据并进行数据清洗和处理,然后使用Matplotlib库绘制各种图表来展示数据。
代码:
以下是本次实验的代码实现:
``` python
import matplotlib.pyplot as plt
# 读取数据
with open('population.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 数据清洗和处理
data = []
for line in lines:
line = line.strip()
if not line:
continue
fields = line.split(',')
age = fields[0]
sex = fields[1]
job = fields[2]
income = fields[3]
count = int(fields[4])
data.append((age, sex, job, income, count))
# 统计年龄段人口占比
age_data = {}
total_count = 0
for item in data:
age = item[0]
count = item[4]
total_count += count
if age in age_data:
age_data[age] += count
else:
age_data[age] = count
labels = age_data.keys()
sizes = [age_data[label] for label in labels]
explode = [0.1 if label == '25-34' else 0 for label in labels]
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('各年龄段人口占比分布图')
plt.show()
# 统计不同性别的收入水平对比
sex_data = {}
for item in data:
sex = item[1]
income = item[3]
count = item[4]
if sex not in sex_data:
sex_data[sex] = {}
if income in sex_data[sex]:
sex_data[sex][income] += count
else:
sex_data[sex][income] = count
labels = sex_data['男'].keys()
men_sizes = [sex_data['男'][label] for label in labels]
women_sizes = [sex_data['女'][label] for label in labels]
x = range(len(labels))
width = 0.35
fig, ax = plt.subplots()
ax.bar(x - width/2, men_sizes, width, label='男')
ax.bar(x + width/2, women_sizes, width, label='女')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()
plt.title('不同性别的收入水平对比图')
plt.show()
# 统计不同职业的收入水平对比
job_data = {}
for item in data:
job = item[2]
income = item[3]
count = item[4]
if job not in job_data:
job_data[job] = {}
if income in job_data[job]:
job_data[job][income] += count
else:
job_data[job][income] = count
labels = job_data.keys()
income_levels = ['1-3万', '3-5万', '5-7万', '7-10万', '10万以上']
x = range(len(labels))
width = 0.1
fig, ax = plt.subplots()
for i in range(len(income_levels)):
income_level = income_levels[i]
sizes = [job_data[label].get(income_level, 0) for label in labels]
ax.bar(x + i*width, sizes, width, label=income_level)
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()
plt.title('不同职业的收入水平对比图')
plt.show()
```
实验收获:
通过本次实验,我们掌握了特征数据类型的应用和文件的应用,学会了如何手动读取数据并进行数据处理和Matplotlib库进行图表绘制,能够解决实际生活或专业问题。同时,我们也意识到了数据处理和可视化的重要性,这可以帮助我们更好地理解数据并做出更准确的决策。
总之,本次实验为我们提供了一个实践的机会,加深了我们对数据处理和可视化的理解,提高了我们的实际操作能力和解决问题的能力。
阅读全文