文章目录

  • 题目要求
  • 数据源
    • 代码
      • 简单版
      • 复杂版
      • 遗忘的知识
        • 1. numpy
        • 2. json和python数据转换

题目要求

excel里的股票数据搞成K线图

数据源

阿里巴巴2020年股票数据.xlsx

代码

简单版

"""
Time:2021/6/12 14:24
Author:小李今天敲代码了吗
"""
from openpyxl import load_workbook
from pyecharts import options as opts
from pyecharts.charts import Kline
import numpy as np
# 股票K线图
"""
step1: 搞个二维表装数据
step2:把时间和数据分开,用了numpy,
step3: 函数
用了np.tolist把np转list
"""def get_stock_all(file_addr):# 创建一个工作簿,这里用不到,因为我只想打开一个工作簿# wb =Workbook()# 打开文件wb = load_workbook(file_addr)# 激活工作簿ws = wb.active# 读取数据all_list = []# print(ws.max_column)for r in range(2, ws.max_row + 1):row_list = []for c in range(1, ws.max_column):val = ws.cell(r, c).value# print(val)row_list.append(val)all_list.append(row_list)data = all_listreturn data# 这个是引用的改的
def k_line(data: list):# 对二维函数的处理data_sha = np.array(data)  # list转npdata_fin = data_sha[:, 1:6].tolist()  # np转listc = (Kline().add_xaxis([data[i][0].date() for i in range(len(data))]).add_yaxis("kline", data_fin).set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True),yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),datazoom_opts=[opts.DataZoomOpts(type_="inside")],title_opts=opts.TitleOpts(title="Kline-DataZoom-inside"),).render("kline_datazoom_inside.html"))if __name__=='__main__':file_addr=r'..\python_with_mysql\数据库相关操作\阿里巴巴2020年股票数据.xlsx'k_line(get_stock_all(file_addr))

复杂版

"""
Time:2021/6/12 16:03
Author:小李今天敲代码了吗
"""from typing import List, Unionfrom openpyxl import load_workbook
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Griddef get_data(file_addr):wb = load_workbook(file_addr)# 激活工作簿ws = wb.active# 读取数据all_list = []# print(ws.max_column)for r in range(2, ws.max_row + 1):row_list = []val = str(ws.cell(r, 1).value.date())# print(val,type(val))row_list.append(val)for c in range(2, ws.max_column):val = ws.cell(r, c).value# print(val)row_list.append(val)all_list.append(row_list)json_response = all_list# 解析数据return split_data(data=json_response)# def get_data():
#     response = requests.get(
#         url="https://echarts.apache.org/examples/data/asset/data/stock-DJI.json"
#     )
#     json_response = response.json()
#     # 解析数据
#     print(type(json_response),json_response)
#     return split_data(data=json_response)# 引用的 具体的处理没研究
def split_data(data):category_data = []values = []volumes = []for i, tick in enumerate(data):# print(tick)category_data.append(tick[0])values.append(tick)# print(type(tick[0]))volumes.append([i, tick[4], 1 if tick[1] > tick[2] else -1])return {"categoryData": category_data, "values": values, "volumes": volumes}def calculate_ma(day_count: int, data):result: List[Union[float, str]] = []for i in range(len(data["values"])):if i < day_count:result.append("-")continuesum_total = 0.0for j in range(day_count):sum_total += float(data["values"][i - j][1])result.append(abs(float("%.3f" % (sum_total / day_count))))return resultdef draw_charts():kline_data = [data[1:-1] for data in chart_data["values"]]kline = (Kline().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="Dow-Jones index",y_axis=kline_data,itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),).set_global_opts(legend_opts=opts.LegendOpts(is_show=False, pos_bottom=10, pos_left="center"),datazoom_opts=[opts.DataZoomOpts(is_show=False,type_="inside",xaxis_index=[0, 1],range_start=98,range_end=100,),opts.DataZoomOpts(is_show=True,xaxis_index=[0, 1],type_="slider",pos_top="85%",range_start=98,range_end=100,),],yaxis_opts=opts.AxisOpts(is_scale=True,splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type="cross",background_color="rgba(245, 245, 245, 0.8)",border_width=1,border_color="#ccc",textstyle_opts=opts.TextStyleOpts(color="#000"),),visualmap_opts=opts.VisualMapOpts(is_show=False,dimension=2,series_index=5,is_piecewise=True,pieces=[{"value": 1, "color": "#00da3c"},{"value": -1, "color": "#ec0000"},],),axispointer_opts=opts.AxisPointerOpts(is_show=True,link=[{"xAxisIndex": "all"}],label=opts.LabelOpts(background_color="#777"),),brush_opts=opts.BrushOpts(x_axis_index="all",brush_link="all",out_of_brush={"colorAlpha": 0.1},brush_type="lineX",),))line = (Line().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="MA5",y_axis=calculate_ma(day_count=5, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA10",y_axis=calculate_ma(day_count=10, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA20",y_axis=calculate_ma(day_count=20, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA30",y_axis=calculate_ma(day_count=30, data=chart_data),is_smooth=True,is_hover_animation=False,linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))bar = (Bar().add_xaxis(xaxis_data=chart_data["categoryData"]).add_yaxis(series_name="Volume",y_axis=chart_data["volumes"],xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category",is_scale=True,grid_index=1,boundary_gap=False,axisline_opts=opts.AxisLineOpts(is_on_zero=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),axislabel_opts=opts.LabelOpts(is_show=False),split_number=20,min_="dataMin",max_="dataMax",),yaxis_opts=opts.AxisOpts(grid_index=1,is_scale=True,split_number=2,axislabel_opts=opts.LabelOpts(is_show=False),axisline_opts=opts.AxisLineOpts(is_show=False),axistick_opts=opts.AxisTickOpts(is_show=False),splitline_opts=opts.SplitLineOpts(is_show=False),),legend_opts=opts.LegendOpts(is_show=False),))# Kline And Lineoverlap_kline_line = kline.overlap(line)# Grid Overlap + Bargrid_chart = Grid(init_opts=opts.InitOpts(width="1000px",height="800px",animation_opts=opts.AnimationOpts(animation=False),))grid_chart.add(overlap_kline_line,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),)grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", pos_top="63%", height="16%"),)grid_chart.render("professional_kline_brush.html")if __name__ == "__main__":file_addr = r'..\python_with_mysql\数据库相关操作\阿里巴巴2020年股票数据.xlsx'chart_data = get_data(file_addr)draw_charts()

遗忘的知识

1. numpy

对二维数组进行切片的时候,可以先把list转成np,处理之后,再用np转list

参考文章Python二维数组与三维数组切片详解

2. json和python数据转换

json 类型转换到 python 的类型对照表:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

ython数据转换

json 类型转换到 python 的类型对照表:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

数据可视化7_股票K线图相关推荐

  1. 利用python的tushare库获取在线数据,绘制股票k线图

    可视化是python的一个强大功能,也是金融数据分析中重要的工具.本文给出的python代码可以用于绘制贵州茅台(600519)在2019年1月1日到2019年12月31日的周k线图. 注意:本文使用 ...

  2. 利用JFreeChart绘制股票K线图

    因为工作的需要,接触了一些股票图形绘制类的工作,其中最主要的还是股票K线图的绘制了,如果利用编程语言最底层的图形绘制方法去绘制这类图形,如果对编程语言不是特别熟悉的话,一般是有很大的困难的,通过在网上 ...

  3. java绘制均线图_利用JFreeChart绘制股票K线图完整解决方案

    因为工作的需要,接触了一些股票图形绘制类的工作,其中最主要的还是股票K线图的绘制了,如果利用编程语言最底层的图形绘制方法去绘制这类图形,如果对编程语言不是特别熟悉的话,一般是有很大的困难的,通过在网上 ...

  4. 利用JFreeChart绘制股票K线图完整解决方案

    网上有很多人在询问如何使用jfreechart来绘制股票K线图,通过阅读其中的一些例子来看,大多比较的凌乱,没有给出一个符合中国股票市场的K线图实例,因为中国的股票市场K线图的颜色表示与国外存在一点差 ...

  5. 使用jfreeChart绘制股票K线图

    http://blog.csdn.net/tufeng1992/article/details/50953419 因项目需要画K线图,上面的原文中有些类jFreeChart已经废弃,有些改了类名,运行 ...

  6. plotly基于dataframe数据绘制股票K线图并过滤非交易时间

    plotly基于dataframe数据绘制股票K线图并过滤非交易时间 #ohlc过滤非交易时间: import plotly as py # 导入plotly库并命名为py import plotly ...

  7. python数据科学包(七)—— matplotlib实战之绘制球员能力图和股票K线图

    1.球员能力图 # -*- coding: utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as p ...

  8. 如何使用Tushare和Echarts来画股票K线图

    如何使用Tushare和Echarts来画股票K线图 技术支持 Tushare大数据社区官网 ​ 首先介绍一下这次要使用的两个工具,Tushare是一个基于Python的金融数据接口,拥有丰富的数据内 ...

  9. 太酷炫了,用python绘制股票K线图!

    大家好,我是小五 发现大家还是最喜欢股票基金话题呀~ 那说到股票基金就不得不提--K线图! 那小五今天就带大家???? 用python来轻松绘制高颜值的K线图???? 获取股票交易数据 巧妇难为无米之 ...

最新文章

  1. [转]php socket编程通信
  2. poj1815最小割
  3. Eclipse真机测试注意事项
  4. Java常用API (四) 包装类
  5. 虚拟机7.1.4序列号
  6. MyEclipse6.5安装SVN插件的方法--在线安装
  7. bmp 像素点 php,读取BMP图像每一像素点RGB数据 | 学步园
  8. 今天说说微博中的“飞秋下载”
  9. 二叉树的常用操作(节点的后继节点)
  10. 李宏毅机器学习——概率分类模型
  11. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 路由 IngressRoute【traefik2.X】
  12. NSIS脚本开发总结
  13. 临床医师看过来:5个理由告诉你,为什么JMP软件更适合你?
  14. 阿里云个人网站免费绑定SSL证书(超详细图文教程)
  15. oracle kup04040,ORA-20011: Approximate NDV failed: ORA-29913: 执行 ODCIEXTTABLEOPE
  16. 稀奇古怪--JAVA篇
  17. endnote x9 word 闪退
  18. Google AI逆天了!
  19. 168元 vsol 2.5G ONU光猫V2802RH G800-04G 修改GPON SN
  20. 国家税务总局河南省电子税务局中,交契税时,报房屋属地税务机关必填的解决方法

热门文章

  1. 计算机显存影响什么,笔记本独立显存是什么意思(电脑误区:显存越大,性能就越好)...
  2. Intel HD Graphics 620 (华硕FL5900U) Windows7下安装显卡驱动
  3. Flyio封装API接口(uniapp开发微信小程序)
  4. 爬虫(4)-使用Ajax爬取今日头条表情包图片
  5. 十一. k8s--dashboard部署
  6. ps眼睫毛笔刷的使用
  7. 虚幻引擎源码分析(5)
  8. win10中Edge浏览器莫名崩溃,STATUS_INVALID_IMAGE_HASH
  9. microsoft edge怎么截长图_苹果安卓手机怎么截长图?超简单的方法拿走不谢
  10. 比尔盖茨/UNIX之父/Donald Knuth/Dijkstra等全球IT大师的编程名言