Django–Tushare数据可视化
Django连接MySQL对数据进行网页展示
最近做了一个作业,,通过百度啊社区啊什么的学习,终于做出了完整的项目,大概是这样的:通过Django连接mysql,运用pycharm使用tushare,调取数据并进行数据展示!
项目内容:
- 通过行情图的方式展示给定个股的过去 6 个月的日线交易数据(开盘价、收
盘价、最高价、最低价、成交量); - 通过列表等方式展示上市公司基本信息;
- 通过列表方式展示上市公司前十大股东;
- 通过列表方式展示上市公司的前十大流通股股东
首先是Django的学习啦,创建项目及APP
参考网址:https://docs.djangoproject.com/en/2.2/intro/tutorial01/
项目就叫Shares吧,刚知道有股票的意思
django-admin startproject shares
就叫股票吧GP
python manage.py startapp GP
本地文件目录
后面会慢慢添加内容,本地文件目录结构:
先创建数据库吧,下面就要用到了,小草的是shares
进行拉取Tushare数据
首先是‘股票数据导入.py’调取数据
// 股票数据导入.py
from sqlalchemy import create_engine
import tushare as ts
import pandas as pd
cn = create_engine('mysql+pymysql://root(mysql名字,小草的名字是默认的):mysql密码@localhost:3306(还是默认的啦)/shares?charset=utf8')
pro = ts.pro_api('') ####详细查看自己tushare的个人页面
company = pro.stock_company(exchange='SZSE', fields='ts_code,chairman,manager,secretary,reg_capital,setup_date,province')
shareholder = pro.query('top10_holders', ts_code='600000.SH', start_date='20190101', end_date='20190501')
shareholder1 = pro.top10_floatholders(ts_code='600000.SH', start_date='20190101', end_date='20190601')
Ddata = pro.daily(ts_code='000001.SZ', start_date='20190101', end_date='20190601', fields='ts_code,trade_date,open,high,low,close,vol')
company.to_sql('company_basic',cn,index=False)
shareholder.to_sql('shareholder_basic',cn,index=False)
shareholder1.to_sql('shareholder1_basic',cn,index=False)
Ddata.to_sql('k_data',cn,index=False)
from django.db import models
class company_basic(models.Model):
ts_code = models.CharField(max_length=100,null=True)
chairman = models.CharField(max_length=100,null=True)
manager = models.CharField(max_length=100,null=True)
secretary = models.CharField(max_length=100,null=True)
reg_capital = models.CharField(max_length=100,null=True)
setup_date = models.CharField(max_length=100,null=True)
province = models.CharField(max_length=100,null=True)
def __str__(self):
return self.ts_code
class shareholder_basic(models.Model):
ts_code = models.CharField(max_length=100,null=True)
ann_date = models.CharField(max_length=100,null=True)
end_date = models.CharField(max_length=100,null=True)
holder_name = models.CharField(max_length=100,null=True)
hold_amount = models.CharField(max_length=100,null=True)
hold_ratio = models.CharField(max_length=100,null=True)
def __str__(self):
return self.ts_code
class shareholder1_basic(models.Model):
ts_code = models.CharField(max_length=100,null=True)
ann_date = models.CharField(max_length=100,null=True)
end_date = models.CharField(max_length=100,null=True)
holder_name = models.CharField(max_length=100,null=True)
hold_amount = models.CharField(max_length=100,null=True)
def __str__(self):
return self.ts_code
class K_data(models.Model):
ts_code = models.CharField(max_length=100, null=True)
trade_date=models.CharField(max_length=100,null=True)
open = models.FloatField(max_length=100,null=True)
high = models.FloatField(max_length=100,null=True)
close = models.FloatField(max_length=100,null=True)
low= models.FloatField(max_length=100,null=True)
vol = models.FloatField(max_length=100,null=True)
def __str__(self):
return self.ts_code
通过cmd进行数据迁移
python manage.py migrate
python manage.py makemigrations GP
python manage.py sqlmigrate GP 0001
然后通过mysql导入数据到shares
1) use shares;
2)insert gp_company_basic(ts_code,chairman,manager,secretary,reg_capital,setup_date,province) select ts_code,chairman,manager,secretary,reg_capital,setup_date,province from company_basic;
3)insert gp_shareholder_basic(ts_code,ann_date,end_date,holder_name,hold_amount,hold_ratio) select ts_code,ann_date,end_date,holder_name,hold_amount,hold_ratio from shareholder_basic;
4)insert gp_shareholder1_basic(ts_code,ann_date,end_date,holder_name,hold_amount) select ts_code,ann_date,end_date,holder_name,hold_amount from shareholder1_basic;
5)insert gp_K_data(ts_code,trade_date,open,high,close,low,vol) select ts_code,trade_date,open,high,close,low,vol from K_data;
开始写html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title >股票展示</title>
<style type="text/css">
body{
background: #ddd;}
h1{
background: #71a879;text-align: center;}
div{
height:50px;color:#fff;font-size:24px;text-align:center}
.box1{
background: #71a879;text-align: center;}
.box2{
background: #6a8bbc;line-height: 50px;text-align: center;