数据分析之dataframe基础操作巩固-股票分析(代码片段)

freedom0923 freedom0923     2022-12-02     424

关键词:

需求:股票分析

  • 使用tushare包获取某股票的历史行情数据。
    • tushare财经数据接口包,基于该模块可以获取任意股票的历史交易数据
    • pip install tushare
  • 输出该股票所有收盘比开盘上涨3%以上的日期。
  • 输出该股票所有开盘比前日收盘跌幅超过2%的日期。
  • 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?
import pandas as pd
import tushare as ts

df = ts.get_k_data(code=‘600519‘,start=‘1990‘)
#df的持久化存储
df.to_csv(‘maotai.csv‘)
#读取本地数据
df = pd.read_csv(‘./maotai.csv‘)
df.head(5)

df.info()
#每一列的数据类型
#哪些列中存在空值
<class ‘pandas.core.frame.DataFrame‘>
RangeIndex: 4493 entries, 0 to 4492
Data columns (total 7 columns):
date      4493 non-null object
open      4493 non-null float64
close     4493 non-null float64
high      4493 non-null float64
low       4493 non-null float64
volume    4493 non-null float64
code      4493 non-null int64
dtypes: float64(5), int64(1), object(1)
memory usage: 245.8+ KB
  • 在观察数据的时候,如果发现时间数据为字符串类型则需要将其转换成时间序列类型
    技术图片
df[‘date‘] = pd.to_datetime(df[‘date‘])
#将date列作为源数据的行索引,inplace=True 意思是对df进行直接操作
df.set_index(‘date‘,inplace=True)
# 输出该股票所有收盘比开盘上涨3%以上的日期
#(收盘-开盘)/开盘 > 0.03
(df[‘close‘] - df[‘open‘]) / df[‘open‘] > 0.03

# 经验:在df的处理过程中,如果遇到了一组布尔值,下一步马上将布尔值作为源数据的行索引
df.loc[(df[‘close‘] - df[‘open‘]) / df[‘open‘] > 0.03] #可以获取true对应行数据
df.loc[(df[‘close‘] - df[‘open‘]) / df[‘open‘] > 0.03].index

# 输出该股票所有开盘比前日收盘跌幅超过2%的日期。
# (开盘-前日收盘)/前日收盘 < -0.02
(df[‘open‘] - df[‘close‘].shift(1)) / df[‘close‘].shift(1) < -0.02
df.loc[(df[‘open‘] - df[‘close‘].shift(1)) / df[‘close‘].shift(1) < -0.02].index
# shift(1)正数表示数据下移,负数表示上移
  • 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?
    • 买入(开盘)
      • 一个完整的年需要买入12手==1200只
    • 卖出(收盘)
      • 一个完整的年需要卖出1次股票,一次卖出1200只
      • 特殊情况:2020年只可以买入股票无法卖出股票,没有及时卖出的股票的实际价值也要计算到总收益中
new_df = df[‘2010‘:‘2020‘]
# 买股票
# 1.获取每一个完整的年对应每个月第一个交易日的行数据,行数据中可以提取出开盘价(买入股票的单价)
# 实现的技术:数据的重新取样
new_df.resample(rule=‘M‘) #将每一年中每一个对应的数据取出
new_df.resample(rule=‘M‘).first() #将月份数据中的第一行数据取出
#买入股票花费的总钱数
cost_money = (new_df.resample(rule=‘M‘).first()[‘open‘]).sum() * 100
cost_money
#卖出股票的钱数
new_df.resample(rule=‘A‘)#将2010-2020年,每一年的数据取出
new_df.resample(rule=‘A‘).last()[:-1] #每一年最后一个交易日对应的行数据

recv_money = new_df.resample(rule=‘A‘).last()[:-1][‘close‘].sum() *1200
recv_money
#剩余股票的价值也要计算到总收益中,剩余股票价值的单价可以用最近一天的收盘价来表示
last_price = new_df[-1:][‘close‘][0]
last_monry = 6*100*last_price
#总收益
last_monry + recv_money - cost_money
  • 注意:上述对数据进行重新取样操作的前提,源数据中行索引为时间序列类型

  • 总结

    • df的持久化存储
      • df.to_xxx():可以将df中的值进行任意形式的持久化存储
    • df的加载:
      • pd.read_xxx():可以将外部数据加载到df中
    • 如何将字符串形式的时间值转换成时间序列类型
      • pd.to_datetime(df[‘date])
    • 如何将某一列作为源数据的行索引
      • df.set_index(‘colName‘)
    • 如何将Series进行整体的上下移动
      • Series.shift(1)
        • 正数表示下移,负数表示上移
    • 数据的重新取样
      • df.resample(rule=‘‘)
      • df.resample(rule=‘‘).last/first()
    • 可以直接将布尔值作为df的行索引,就可以取出True对应的行数据。

python数据分析pandas之dataframe初识(代码片段)

Python数据分析pandas之dataframe初识声明与简介pandas是一个基于python的、快速的、高效、灵活、易用的开源的数据处理、分析包(工具)。。pandas构建在numpy之上,它通过DataFrame(数据框)来操作数据。数据框是一个高效的... 查看详情

dataframe的级联与合并操作(代码片段)

文章目录一、级联操作1.1匹配级联1.2不匹配级联二、合并操作2.1一对一合并2.2一对多合并2.3多对多合并2.4key的规范化三、案例-股票分析1.使用`tushare包`获取某股票的历史行情数据2.输出该股票所有收盘比开盘上涨3%以上的日... 查看详情

pyspark常用数据分析基础操作

文章目录一、pyspark.sql部分1.窗口函数2.更换列名:3.sql将一个字段根据某个字符拆分成多个字段显示4.pd和spark的dataframe进行转换:5.报错ValueError:Someoftypescannotbedeterminedafterinferring6.df按行打乱7.表格的联结8.dataframe的操作9.cre... 查看详情

数据分析之pandas(代码片段)

...brary或pandas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需要的工具。pandas提供了大量能使我们快速便捷 查看详情

《pandascookbook》第02章dataframe基本操作

参考技术A第01章Pandas基础第02章DataFrame运算第03章数据分析入门第04章选取数据子集第05章布尔索引第06章索引对齐第07章分组聚合、过滤、转换第08章数据清理第09章合并Pandas对象第10章时间序列分析第11章用Matplotlib、Pandas、Seaborn... 查看详情

100天精通python(数据分析篇)——第55天:pandas之dataframe对象大总结(代码片段)

文章目录每篇前言一、什么是DataFrame?二、创建DataFrame对象1.list列表构建DataFrame2.dict字典构建DataFrame3.ndarray创建DataFrame4.Series创建DataFrame三、列索引操作1.读取单列2.读取不连续索引3.添加新列4.删除列四、索引读取数据操作1.... 查看详情

100天精通python(数据分析篇)——第55天:pandas之dataframe对象大总结(代码片段)

文章目录每篇前言一、什么是DataFrame?二、创建DataFrame对象1.list列表构建DataFrame2.dict字典构建DataFrame3.ndarray创建DataFrame4.Series创建DataFrame三、列索引操作1.读取单列2.读取不连续索引3.添加新列4.删除列四、索引读取数据操作1.... 查看详情

数据分析03/基于pandas进行股票分析(代码片段)

数据分析03/基于pandas的DateFrame进行股票分析需求1:对茅台股票分析使用tushare包获取某股票的历史行情数据。tushare:财经数据接口包pipinstalltushare输出该股票所有收盘比开盘上涨3%以上的日期。输出该股票所有开盘比前日收盘跌幅... 查看详情

spark快速大数据分析之rdd基础

 Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义的对象。用户可以使用两种方法创建R... 查看详情

数据分析之pandas(代码片段)

文章目录1.基本数据格式1.1.Series1.1.1.series创建1.1.2.Series基本属性1.1.3.Series数据访问1.1.4.Series数据删除和修改1.2.DataFrame1.2.1.DataFrame创建1.2.2.DataFrame基本属性1.2.3.DataFrame数据访问和遍历1.2.3.1.数据访问1.2.3.2.数据遍历1.2.4.DataFrame数据... 查看详情

数据分析三剑客之pandas

....net中的datatable,即一个内存表,有了这样的数据结构进行数据分析即容易的多,可以通过python程序化处理达到类似于excel中的功能以下对series和dataframe的操作,分别介绍series:series的创建可以直接通过数组或者借用nump 查看详情

python数据分析之dataframe分组(groupby)(代码片段)

Dataframe分组统计groupby函数对数据进行分组统计主要使用Dataframe函数,其功能如下:根据给定的条件将数据拆分成组。每个组都可单独应用函数(如sum、mean、std等)。将结果合并到一个数据结果中。语法如下:... 查看详情

spark2dataframe数据框常用操作之分析函数--排名函数row_number,rank,dense_rank,percent_rank

selectgender,      age,      row_number()over(partitionbygenderorderbyage)asrowNumber,      rank()over(partiti 查看详情

数据分析之pandas合并操作总结

...基础是Numpy(提供高性能的矩阵运算),用于数据挖掘和数据分析,同时也提供数据清洗功能。Pandas做分析数据,可以分为索引、分组、变形及合并四种操作。前边已经介绍过​​索引操作​​、​​分组操作​​及​​变形操... 查看详情

pandas基础学习

1.介绍pandas是常用的数据分析库,用于处理表格型或者异质性数据,主要有两种数据类型:Series和DataFrame。本文采用的是Jupyternotebook,导入库语句:importpandasaspdSeries是一维数据型对象,粗略的理解,有一点似于C语言中的数组值valu... 查看详情

python实战基础pandas如何给股票数据新增年份和月份(代码片段)

...景二、主要知识点文件读写基础语法PandasPandas的Series对象DataFrame三、菜鸟实战1、创建python文件 2、运行结果一、实战场景实战场景:Pandas如何给股票数据新增年份和月份二、主要知识点文件读写基础语法PandasPandas的Series对象... 查看详情

站点分析基础概念之訪问停留时间

类型:计数度量定义:訪问停留时间(VisitDuration)是指一次訪问的持续时间。典型的计算方法是在一次訪问中,用户最后一次操作发生的时间减去第一次操作发生的时间。扩展:      ●FAQ:为什么訪问停... 查看详情

python数据分析之pandas(代码片段)

上一节介绍的Pandas的简单应用,包括pandas中Series和DataFrame类型数据的创建,以及对DataFrame的转置和排序。今天讲的是pandas的数据选择、设置值和处理丢失数据三类方法。一、数据选择#导库importpandasaspdimportnumpyasnp1、选择... 查看详情