JAVA里科学计算库_数据分析之“科学计算库”

本文介绍了JAVA中的科学计算库,主要以Python的Numpy和Pandas为例,讲解了数组属性、生成数组、通用操作、矩阵运算等核心概念,并展示了如何进行数据处理和分析,包括数据的读取、存储、排序、统计计算等操作。
摘要由CSDN通过智能技术生成

Numpy

import numpy as np

import matplotlib.pyplot as plt

数组属性

array.shape # 数组形状

array.ndim # 数组维数

array.size # 数组元素数量

array.itemsize # 数组元素的长度(字节)

array.dtype # 数组元素的类型

生成数组

a=np.array([[2,4,3],[75,4,36]])

# 从现有数组创建

a1=np.array(a)

# 相当于索引的形式,并没有真正的创建一个新的

a2=np.asarray(a)

# 三维数组

a1=np.array([[[1,2,3],[4,5,6],[56,465,4]],[[4,45,45],[-1,-22,6],[6,3,4]]])

# 开始,结束,生成数量

np.linspace(0,90,10)

# 开始,结束,步长

np.arange(10,50,2)

# 均值为0,标准差为1的4行5列正态分布数据

stock_change=np.random.normal(0,1,(4,5))

通用操作

# 三维数组

a1=np.array([[[1,2,3],[4,5,6],[56,465,4]],[[4,45,45],[-1,-22,6],[6,3,4]]])

a1[1,1] # array([ -1, -22, 6])

a1[1,2,0] # 6

stock_change.shape # 查看形状

stock_change.reshape([5,4]) # 5行4列,返回一个新的对象,并不改变数组本身的形状

stock_change.reshape([-1,2]) # 不知多少行,2列

stock_change.resize(10,2) # 改变数组本身的形状

stock_change.T # 转置,并不改变数组本身

array运算

np.unique(temp) # 去重

np.all(score[0:2,:]>60) # 所有的都>60 ? False

np.any(score[0:2,:]>60) # 存在一个>60 ? True

np.where(temp>60,1,0) # 大于60的置为1,否则为0

np.where(np.logical_and(temp>80,temp<90),1,0) # >80并且<90 为1,其他为0

np.where(np.logical_or(temp>80,temp<60),1,0) # 或

np.mean(temp)

np.max(temp)

np.argmax(temp) # 最大值下标

np.max(temp,axis=0) # 每一列最大值

np.argmax(temp,axis=0) # 每一列最大值的下标

矩阵运算

np.dot(a,b) # 矩阵相乘

Pandas

概述

Pandas中一共有两种数据结构,分别为:Series、DataFrame,其中Series是一维数据结构,DataFrame是二维的表格型数据结构

Series类似于一维数组,由数据和与之相关的索引构成

import numpy as np

import pandas as pd

# 默认索引

pd.Series(np.arange(10))

# 指定索引

pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])

color_count = pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})

color_count.index

color_count.values

DataFrame是一个类似于二维数组的对象,既有行索引,又有列索引

score = np.random.randint(40, 100, (10, 5))

score_df = pd.DataFrame(score)

subjects = ["语文", "数学", "英语", "政治", "体育"]

stu = ['同学' + str(i) for i in range(score_df.shape[0])]

data = pd.DataFrame(score, columns=subjects, index=stu) # 添加索引

data.shape

data.index

data.columns

data.values

data.T

data.head(5)

data.tail(5)

# 修改索引

stu = ["学生_" + str(i) for i in range(score_df.shape[0])]

data.index = stu # 必须整体全部修改,单独修改报错

# 以某一列为新的索引

df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})

df1 = df.set_index('month')

df2 = df.set_index(['year', 'month'])

df3 = df.set_index(['year', 'month'],drop=False) # 不删除原来的列,默认删除True

基本操作

data = pd.read_csv("./stock_day.csv")

data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)

# 索引

data['open']['2018-02-27'] # 只能先列后行

data.loc['2018-02-27':'2018-02-22', 'open'] # 通过索引名字获取

data.iloc[:3, :5] # 通过索引下标获取

data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]

# 赋值

data['close'] = 1

# 排序

# DataFrame排序

data.sort_values(by="open", ascending=True).head() # 默认升序

data.sort_values(by=['open', 'high'])

data.sort_index() # 对索引进行排序

# Series排序

data['p_change'].sort_index().head()

data['p_change'].sort_values(ascending=True).head()

DataFrame运算

data['open'].add(1)

data.query("open<24 & open>23").head()

data[data["open"].isin([23.53, 23.85])]

data.describe() # 计算平均值、标准差、最大值、最小值

data.max(0) # 0代表列求结果,1代表行求统计结果

data.var(0) # 方差

data.std(0) # 标准差

data.median()

data.idxmax(axis=0) # 最大值的位置

data.idxmin(axis=0) # 最小值的位置

data = data.sort_index()

stock_rise = data['p_change']

stock_rise.cummin() # 前n个数累计最小值

stock_rise.cumsum() # 前n个数累计求和

stock_rise.cumprod() # 前n个数累计乘积

文件读取与存储

# CSV

pd.read_csv('./test1.csv')

data[:10].to_csv("./test1.csv", columns=['open'],index=False)

# HDF

day_close=pd.read_hdf("./day_close.h5")

day_close.to_hdf("./test.h5")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值