实验03 Numpy实现数据分析
实验学时:2学时
实验类型:验证
实验要求:必修
一、实验目的
- 掌握Numpy的字符串函数
- 掌握Numpy 统计函数
- 掌握Numpy排序、分组、线性代数函数
二、实验要求
通过编程实现使用Numpy字符串函数进行文本处理,使用统计函数进行数据分析等常用操作。
三、实验内容
任务1. 现有股票数据文件“股票数据分析.csv”,内有“日期,开盘价,最高价,最低价,收盘价,涨跌额,涨跌幅(%),成交量(股),成交金额(元)”等字段,现要分析成交量加权平均价格、时间加权平均价格、平均价、最高价、最低价、股票收益率。用Python与第三方库Numpy编写程序实现。
任务2. 在任务1的基础上,按周汇总计算每周开盘价(monday_open)、收盘价(friday_close)、最高价(week_high)、最低价(week_low)。用Python与第三方库Numpy编写程序实现。
任务3. 现有某校参加计算机等级考试的成绩数据文件“计算机等级考试成绩.xls”,现要进行如下数据分析:
(1)统计“电子信息工程”专业缺考的人数(成绩为0或空缺视为缺考)及缺考率(缺考率=(缺考人数*100/专业总人数)%);
(2)统计“动画”专业考试通过的人数(成绩>=60视为考试通过)及通过率。
用Python与第三方库Numpy编写程序实现。
test3.py
# edcoding:utf-8
from datetime import datetime
import numpy as np
import pandas as pd
np.set_printoptions(threshold=np.inf)
def task1():
spj, cjl = np.loadtxt(open("股票数据分析.csv", encoding='utf-8'), dtype=str, delimiter=',', usecols=(5, 8),
unpack=True, skiprows=1)
spl = []
for i in range(0, spj.size):
try:
spl.append(float(spj[i]))
except:
continue
sp = np.array(spl)
cj1 = []
for i in range(0, cjl.size):
try:
cj1.append(float(cjl[i]))
except:
continue
cj = np.array(cj1)
print("收盘价".center(60, '='), '\n', sp)
print("成交量".center(60, '='), '\n', cj)
cj_mean = np.average(sp, weights=cj)
print("成交量加权平均价格".center(30, '='), '\n', cj_mean)
t = np.arange(len(sp))
time_mean = np.average(sp, weights=t)
print("时间加权平均价格".center(30, '='), '\n', time_mean)
ave = np.mean(sp)
print("收盘价的平均价格".center(30, '='), '\n', ave)
sp_max = np.max(sp)
sp_min = np.min(sp)
print("最高收盘价、最低收盘价".center(30, '='), '\n', sp_max, sp_min)
sp_ptp = np.ptp(sp)
sp_mid = np.median(sp)
sp_var = np.var(sp)
gpsyl = np.diff(sp) / sp[:1]
dssyl = np.diff(np.log(sp))
print("股票收益率、对数收益率".center(30, '='), '\n', gpsyl)
print("股票对数收益率".center(30, '='), '\n', dssyl)
zsyl = np.where(gpsyl > 0)
print("收益率为正的交易日".center(30, '='), '\n', zsyl)
def task2():
rq, kpj, spj = np.loadtxt(open("股票数据分析.csv", encoding='utf-8'), dtype=np.str_, delimiter=',', usecols=(1, 2, 5),
unpack=True, skiprows=1)
list_kpj = []
list_spj = []
kpjsum = 0
spjsum = 0
for i in range(0, kpj.size):
try:
date_str = rq[i]
date_obj = datetime.strptime(date_str, "%Y%m%d")
day_of_week = date_obj.weekday()
if day_of_week == 0:
kpjsum += float(kpj[i])
list_kpj.append(kpjsum)
kpjsum = 0
spjsum += float(spj[i])
list_spj.append(spjsum)
spjsum = 0
else:
kpjsum += float(kpj[i])
spjsum += float(spj[i])
except:
continue
kp = np.array(list_kpj)
print("每周开盘价总和:", kp)
print("=" * 30)
sp = np.array(list_spj)
print("每周收盘价总和:", sp)
print("=" * 30)
print("最高开盘价:", np.max(kp))
print("最低开盘价:", np.min(kp))
print("=" * 30)
print("最高收盘价:", np.max(sp))
print("最低收盘价:", np.min(sp))
def task3():
df = pd.read_csv("计算机等级考试成绩.csv")
missing_exam = df[(df['成绩'] == 0) | df['成绩'].isnull()]
missing_count = len(missing_exam)
total_count = len(df[df['专业'] == '电子信息工程'])
missing_rate = (missing_count / total_count) * 100
pass_count = len(df[(df['专业'] == '动画') & (df['成绩'] >= 60)])
print(f"电子信息工程专业缺考人数: {missing_count}")
print(f"电子信息工程专业缺考率: {missing_rate:.2f}%")
print(f"动画专业考试通过人数: {pass_count}")
if __name__ == '__main__':
task1()
task2()
task3()
标签:数据分析,03,30,df,sp,print,np,Numpy
From: https://www.cnblogs.com/IvanKK/p/17936722