【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日个股成交额图

上次分享了一段代码用于绘制每日行业交易额的图: 

【程序员股民系列】如何用python, pandas, numpy, matplotlib绘制每日行业成交额图

分析粒度略粗,只到行业这一层,把代码稍微改改,就可以用于分析行业内个股。

输入数据格式依然如下:

这里再简单贴一下代码:

import pandas as pd
from collections import defaultdict
from matplotlib import pyplot as plt
import numpy as np
import math
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题


def def_value():
    return 0


amountmap = defaultdict(def_value)

date_str = "2021-01-28"
input_file = "/tmp/{0}股票数据.xlsx".format(date_str)
output = "/tmp/个股日成交额{0}.png".format(date_str)


def draw_a_pie_chart(input_dict):
    industries = []
    data = []
    for k, v in amountmap.items():
        industries.append(k)
        data.append(v)
    data_np = np.array(data)
    industries_np = np.char.array(industries)
    _ = plt.figure(figsize=(10, 7))
    plt.title(date_str+'日个股成交额', loc='center')
    plt.pie(data_np)
    # show plot
    porcent = 100.*data_np/data_np.sum()
    # print(porcent)
    patches, _ = plt.pie(data_np, startangle=20, radius=1.2)
    labels = ['{0} = {1:1.2f} %, 成交额(万元):{2}'.format(
        i, j, k) for i, j, k in zip(industries_np, porcent, data_np)]
    sort_legend = True
    if sort_legend:
        patches, labels, _ = zip(*sorted(zip(patches, labels, data_np),
                                         key=lambda x: x[2],
                                         reverse=True))
    plt.legend(patches, labels, loc='best', bbox_to_anchor=(-0.4, 2.),
               fontsize=8)
    print("文件存储到: {0}".format(output))
    
    sorted_labes, _ = zip(*sorted(zip(industries, data_np), key=lambda x:x[1], reverse=True))
    print(sorted_labes[0:10])
    
    plt.savefig(output, bbox_inches='tight')
    # plt.show()


if __name__ == "__main__":
    excel_data_df = pd.read_excel(input_file, sheet_name='Sheet2')
    df = pd.DataFrame(excel_data_df, columns=['名称', '成交额'])
    for index, row in df.iterrows():
        name = row['名称']
        amount = row['成交额']
        if(not isinstance(name, str) or len(name) < 1 or math.isnan(amount)):
            continue
        amountmap[name] = amountmap[name]+amount

    draw_a_pie_chart(amountmap)

这里以软件服务行业为例,得到的2021-01-28日的结果如图:

关注top 10即可。

抓个头看看科大讯飞,貌似短线可以入一下~

 

附加一组全A股范围内的成交额top ten :

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值