下面直接给出核心代码
# 任务一:
# 用pandas 库读取 soi.long.data.csv 文件,
# 将所有时间抽取为单独的列Date(形式为YYYY-MM-01),如1866-01-01
# 所有异常值抽取为一个单独的列SOI,将所有缺失值丢弃处理,
# 并到处到新的txt文件soi_dropnan.txt,第一行为表头,列名分别为Date和SOI,
# 且表头和数据行中的不同字段信息都是用逗号分隔
def task1():
try:
# 输入数据文件和输出数据文件
file1, file2 = input("请输入数据文件名:如soi.long.data.csv"), input("请输入输出文件名:如soi_dropnan.txt")
data = pd.read_csv(file1)
except FileNotFoundError:
print('文件不存在')
return
else:
# 去除缺失值
data = data.dropna()
# 设置索引
data = data.set_index('Year')
# 把列名的月份转换为数字
data.columns = range(1, 13)
# 新建一个空的DataFrame
df = pd.DataFrame(columns=['Date', 'SOI'])
# 遍历data的行
for index, row in data.iterrows():
# 遍历data的列
for col in data.columns:
# 拼接字符串
date = str(index) + '-' + str(col) + '-01'
# 添加到df中
df = pd.concat([df, pd.DataFrame({'Date': [date], 'SOI': [row[col]]})])
# 重置索引
df = df.reset_index(drop=True)
df.to_csv(file2, index=False)
print(df)
print("任务一完成")
# 读取新的数据集soi_dropnan.txt,选择SOI字段,统计最大值、最小值、平均值。
def task2():
try:
file1 = input('请输入数据文件名:如soi_dropnan.txt')
data = pd.read_csv(file1)
except FileNotFoundError:
print('文件不存在')
return
else:
# 选择SOI字段
data = data['SOI']
print('最大值:', data.max())
print('最小值:', data.min())
print('平均值:', data.mean())
print("任务二完成")
pass
def task3():
# 重新读取文件soi_dropnan.txt,利用第三步统计结果最大值maxValue、最小值minValue,利用category = [minValue,0, maxValue]和
# labels = ['NinoRelate','LaNinaRelate',]将SOI进行离散化;
# 并将离散化结果作为一个新的列Label添加到原始数据集,并保存为soi_dropnan_result.csv,从左到右三个列名分别为
# Date、SOI、Label;
# 根据离散化结果画出饼状图,保存为soi_pie.png,要求分辨率不低于300dpi。
try:
file1 = input('请输入数据文件名:如soi_dropnan.txt')
data = pd.read_csv(file1)
except FileNotFoundError:
print('文件不存在')
return
else:
max = data['SOI'].max()
min = data['SOI'].min()
# 离散化
data['Label'] = pd.cut(data['SOI'], bins=[min, 0, max], labels=['NinoRelate', 'LaNinaRelate'])
data.to_csv('soi_dropnan_result.csv', index=False)
data['Label'].value_counts().plot.pie()
plt.savefig('soi_pie.png', dpi=400)
print("任务三完成,请查看soi_pie.png")
pass
# 读取文件soi_dropnan_result.csv,利用matplotlib 库,可视化显示SOI值,要求包括图例、图标题,x轴刻度以年显示且间隔为10,y轴显示刻度值,曲线颜色为蓝色。
def task4():
try:
file1 = input('请输入数据文件名:如soi_dropnan_result.csv')
data = pd.read_csv(file1)
except FileNotFoundError:
print('文件不存在')
return
else:
# 清洗数据,将Date列转换为时间格式
data['Date'] = pd.to_datetime(data['Date'])
data1 = pd.DataFrame
x = data['Date'].values
y = data['SOI'].values
plt.figure(figsize=(10, 6))
plt.plot(x, y, color='blue')
# 设置x轴刻度间隔为10年,只显示年份
plt.gca().xaxis.set_major_locator(mdates.YearLocator(base=10)) # set_major_locator设置主刻度
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y')) # set_major_formatter设置主刻度格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xlabel('Year')
plt.ylabel('SOI')
plt.title('SOI年份-值关系图')
plt.legend(['SOI'])
plt.savefig('soi_plot.png', dpi=400)
print("任务四完成,请查看soi_plot.png")
pass
觉得有帮助希望点个赞,鼓励分享!