实验4.1:Numpy数据分析
题目描述:利用numpy库完成2项编程任务。实验效果如图1所示。
(1)创建一个一维数组arr1,存放10个[10, 99]随机整数,计算其最大值,最小值和平均值。
(2)创建一个二维数组arr2,存放5行5列共25个[10, 99]随机整数,计算其最大值,最小值和平均值。
import numpy as np
import random
arr1 = np.random.randint(10,99,size=[10])
a = 0
max1 = np.max(arr1)
min1 = np.min(arr1)
mean1 = np.mean(arr1)
print('一维数组:',arr1)
print('最大值:',max1)
print('最小值:',min1)
print('平均值:',mean1)
arr2 = np.random.randint(10,99,size=[25]).reshape(5,5)
max2 = np.max(arr2)
min2 = np.min(arr2)
mean2 = np.mean(arr2)
print('二维数组:',arr2)
print('最大值:',max2)
print('最小值:',min2)
print('平均值:',mean2)
实验4.2:Pandas数据分析
题目描述:利用pandas库完成2项编程任务。
(1)利用列表、元组和字典分别创建3个一级索引的数据结构Series。。
(2)利用字典和Series分别创建2个二级索引的数据结构DataFrame。。
from pandas import Series
from pandas import DataFrame
a = [98,88,78,68]
b = ['C++程序设计','Python程序设计','Java程序设计','物联网工程']
c = {'201801':['张珊',18,'女','计算机1801'],'201802':['李斯',19,'男','计算机1802'],'201803':['王武',18,'男','计算机1803'],'201804':['赵柳',19,'女','计算机1804']}
sa = Series(a,index=['No1','No2','No3','No4'])
sb = Series(b,index=['cI0001','cI0002','cI0003','cI0004'])
sc = Series(c)
print(sa)
print(sb)
print(sc)
obj1 = {'学号':['201801','201802','201803','201804','201801'],'姓名':['张珊','李斯','王武','赵柳','周琪'],'年龄':['18','19','19','18','18'],'性别':['女','男','男','女','女'],'班级':['计算机1801','计算机1802','计算机1803','计算机1804','计算机1801']}
obj2 = {'工号':['2001020','2001020','2001030','2001044','2001050'],'姓名':['张珊','李斯','王武','赵柳','周琪'],'年龄':['38','39','39','38','38'],'性别':['女','男','男','女','女'],'职称':['副教授','副教授','副教授','副教授','副教授']}
def_obj1 = DataFrame(obj1)
def_obj2 = DataFrame(obj2)
print(def_obj1)
print(def_obj2)
实验4.3:Scipy数据分析
题目描述:利用scipy库完成编程任务。
求解线性方程组。如公式(1)所示。
(1)
import scipy
from scipy import linalg
a = scipy.mat('[5 2 3;2 3 -4;3 -4 -5]')
b = scipy.mat('[6;7;8]')
solve = linalg.solve(a,b)
print(solve)
实验4.4:matplotlib数据可视化
题目描述:完成5项编程任务。
(1)利用Numpy和Pandas创建商店2021年模拟营业数据data.csv,包含两列(日期date、销量amount)。数据随机365条,date起于2021-01-01止于2021-12-31,amount范围[300,600]。
图4-1
(2)利用pandas读取文件data.csv中数据,创建DataFrame,删除所有缺失值。
(3)利用matplotlib生成折线图,按每天进行统计,显示商店每天销量,图形保存为本地文件day_amount_plot.png。实验效果如图4-2所示。
提示:代码流程参见9-4讲P17的例1,或教材案例
折线图:plt.plot(df["date"],df["amount"],label="day->amount",color="red",linewidth=2)
图4-2
(4)利用matplotlib生成柱状图,按月份进行统计,显示商店每月的销量情况,并把图形保存为本地文件month_amount_bar.png。实验效果如图4-3所示。分析数据,找出相邻两个月最大涨幅,并把涨幅最大的月份写入到文件maxMonth.txt中。
提示:
需要月份销量统计:
柱状图:plt.bar(df1["month"],df1["amount"],label="month->amount",color="blue")
图4-3
相邻月份涨幅:
(5)利用matplotlib生成饼图,按季度进行统计,显示商店4个季度的销量分布情况,并把图形保存为本地文件season_amount_pie.png。实验效果如图4-4所示。
提示:season1= df1[:3]['amount'].sum() #第1季度(01-03月)数据统计
饼图:plt.pie([season1, season2, season3, season4],labels=["season1", "season2", "season3", "season4"])
图4-4
import numpy as np
import pandas as pd
arr1 = np.arange('2021-01-01','2022-01-01',dtype = 'datetime64[D]')
arr2 = np.random.randint(300,600,size=[len(arr1)])
data = pd.DataFrame({'data':arr1,'amount':arr2})
data.to_csv('Data.csv',index=False)
df = pd.read_csv('Data.csv',encoding='unicode_escape')
import matplotlib.pyplot as plt
plt.figure(figsize=(8,4))
plt.plot(df["data"],df["amount"],label="day->amount",color="red",linewidth=2)
plt.title('销量')
plt.ylim(300,600)
plt.xlim('2021-01-01','2022-01-01')
plt.ylabel('day')
plt.xlabel('amount')
plt.savefig('day_amount_plot.png')
plt.show()
df1=df
df1['month']=df1['data'].map(lambda x: x[:x.rindex('-')])
df1=df1.groupby(by='month',as_index=False).sum()
plt.figure(figsize=(8,4))
plt.bar(df1["month"],df1["amount"],label="month->amount",color="blue")
plt.title('销量')
plt.ylim(0,20000)
plt.ylabel('day')
plt.xlabel('amount')
plt.savefig('day_amount_bar.png')
plt.show()
df2 = df1['amount'].diff()
m = df2.nlargest(1).keys()[0]
with open('max_month.txt','w') as txtfile:
txtfile.write(df1.loc[m,'month'])
txtfile.close()
season1 = df1[:3]['amount'].sum()
season2 = df1[3:6]['amount'].sum()
season3 = df1[6:9]['amount'].sum()
season4 = df1[9:12]['amount'].sum()
plt.pie([season1, season2, season3, season4],labels=["season1", "season2", "season3", "season4"])
plt.figure(figsize=(8,8))
plt.title('销量')
plt.savefig('day_amount_pie.png')
plt.show()