提取股票信息 pandas

# -*- coding: utf-8 -*-
"""
Created on Fri Apr  7 17:30:40 2017

@author: Administrator
"""

#!/usr/local/bin/python3
#coding=utf-8
#source http://www.cnblogs.com/txw1958/

import os, io, sys, re, time, json, base64
import webbrowser, urllib.request


period_All_List = [
                    "min",      #分时线
                    "daily",    #日K线
                    "weekly",   #周K线
                    "monthly"   #月K线
                  ]
period_min = period_All_List[0]
period_daily = period_All_List[1]

ChinaStockIndexList = [
    "000001", # sh000001 上证指数
    "399001", # sz399001 深证成指
    "000300", # sh000300 沪深300
    "399005", # sz399005 中小板指
    "399006", # sz399006 创业板指
    "000003",  # sh000003 B股指数
]
ChinaStockIndividualList = [
    "000063", #  中兴通讯
    "600036", #  招商银行
]

WorldStockIndexList = [
    {'code':"000001", 'yahoo':"000001.SS",'name':{'chinese':"中国上证指数", 'english':"CHINA SHANGHAI COMPOSITE INDEX"}},
    {'code':"399001", 'yahoo':"399001.SZ",'name':{'chinese':"中国深证成指", 'english':"SZSE COMPONENT INDEX"}},
    {'code':"DJI", 'yahoo':"^DJI",'name':{'chinese':"美国道琼斯工业平均指数", 'english':"Dow Jones Industrial Average"}},
    {'code':"IXIC", 'yahoo':"^IXIC",'name':{'chinese':"美国纳斯达克综合指数", 'english':"NASDAQ Composite"},},
    {'code':"GSPC", 'yahoo':"^GSPC",'name':{'chinese':"美国标准普尔500指数", 'english':"S&P 500"}},
    {'code':"N225", 'yahoo':"^N225",'name':{'chinese':"日本日经225指数", 'english':"NIKKEI 225"}},
    {'code':"TWII", 'yahoo':"^TWII",'name':{'chinese':"台湾台北加权指数", 'english':"TSEC weighted index"}},
    {'code':"HSI", 'yahoo':"^HSI",'name':{'chinese':"香港恒生指数", 'english':"HANG SENG INDEX"}},
    {'code':"FCHI", 'yahoo':"^FCHI",'name':{'chinese':"法国CAC40指数", 'english':"CAC 40"}},
    {'code':"FTSE", 'yahoo':"^FTSE",'name':{'chinese':"英国富时100指数", 'english':"FTSE 100"}},
    {'code':"GDAXI", 'yahoo':"^GDAXI",'name':{'chinese':"德国法兰克福DAX指数", 'english':"DAX"}
    }
]
WorldStockIndexList_SP500 =  WorldStockIndexList[7]

#国内股票数据:指数
def getChinaStockIndexInfo(stockCode, period):
    try:
        exchange = "sz" if (int(stockCode) // 100000 == 3) else "sh"
        #http://hq.sinajs.cn/list=s_sh000001
        dataUrl = "http://hq.sinajs.cn/list=s_" + exchange + stockCode
        stdout = urllib.request.urlopen(dataUrl)
        stdoutInfo = stdout.read().decode('gb2312')
        tempData = re.search('''(")(.+)(")''', stdoutInfo).group(2)
        stockInfo = tempData.split(",")
        #stockCode = stockCode,
        stockName   = stockInfo[0]
        stockEnd    = stockInfo[1]  #当前价,15点后为收盘价
        stockZD     = stockInfo[2]  #涨跌
        stockLastEnd= str(float(stockEnd) - float(stockZD)) #开盘价
        stockFD     = stockInfo[3]  #幅度
        stockZS     = stockInfo[4]  #总手
        stockZS_W   = str(int(stockZS) / 100)
        stockJE     = stockInfo[5]  #金额
        stockJE_Y   = str(int(stockJE) / 10000)
        content = "#" + stockName + "#" + "(" + str(stockCode) + ")" + " 收盘:" \
          + stockEnd + ",涨跌:" + stockZD + ",幅度:" + stockFD + "%" \
          + ",总手:" + stockZS_W + "万" + ",金额:" + stockJE_Y + "亿" + "  "

        imgPath = "http://image.sinajs.cn/newchart/" + period + "/n/" + exchange + str(stockCode) + ".gif"
        twitter = {'message': content, 'image': imgPath}

    except Exception as e:
        print(">>>>>> Exception: " + str(e))
    else:
        return twitter
    finally:
        None

#国内股票数据:个股
def getChinaStockIndividualInfo(stockCode, period):
    try:
        exchange = "sh" if (int(stockCode) // 100000 == 6) else "sz"
        dataUrl = "http://hq.sinajs.cn/list=" + exchange + stockCode
        stdout = urllib.request.urlopen(dataUrl)
        stdoutInfo = stdout.read().decode('gb2312')
        tempData = re.search('''(")(.+)(")''', stdoutInfo).group(2)
        stockInfo = tempData.split(",")
        #stockCode = stockCode,
        stockName   = stockInfo[0]  #名称
        stockStart  = stockInfo[1]  #开盘
        stockLastEnd= stockInfo[2]  #昨收盘
        stockCur    = stockInfo[3]  #当前
        stockMax    = stockInfo[4]  #最高
        stockMin    = stockInfo[5]  #最低
        stockUp     = round(float(stockCur) - float(stockLastEnd), 2)
        stockRange  = round(float(stockUp) / float(stockLastEnd), 4) * 100
        stockVolume = round(float(stockInfo[8]) / (100 * 10000), 2)
        stockMoney  = round(float(stockInfo[9]) / (100000000), 2)
        stockTime   = stockInfo[31]

        content = "#" + stockName + "#(" + stockCode + ")" + " 开盘:" + stockStart \
        + ",最新:" + stockCur + ",最高:" + stockMax + ",最低:" + stockMin \
        + ",涨跌:" + str(stockUp) + ",幅度:" + str(stockRange) + "%" \
        + ",总手:" + str(stockVolume) + "万" + ",金额:" + str(stockMoney) \
        + "亿" + ",更新时间:" + stockTime + "  "

        imgUrl = "http://image.sinajs.cn/newchart/" + period + "/n/" + exchange + str(stockCode) + ".gif"
        twitter = {'message': content, 'image': imgUrl}

    except Exception as e:
        print(">>>>>> Exception: " + str(e))
    else:
        return twitter
    finally:
        None

#全球股票指数
def getWorldStockIndexInfo(stockDict):
    try:
        #http://download.finance.yahoo.com/d/quotes.csv?s=^IXIC&f=sl1c1p2l
        yahooCode = stockDict['yahoo']
        dataUrl = "http://download.finance.yahoo.com/d/quotes.csv?s=" + yahooCode + "&f=sl1c1p2l"

        stdout = urllib.request.urlopen(dataUrl)
        stdoutInfo = stdout.read().decode('gb2312')
        tempData = stdoutInfo.replace('"', '')
        stockInfo = tempData.split(",")
        stockNameCn = stockDict['name']['chinese']
        stockNameEn = stockDict['name']['english']
        stockCode   = stockDict['code']
        stockEnd    = stockInfo[1]  #当前价,5点后为收盘价
        stockZD     = stockInfo[2]  #涨跌
        stockLastEnd= str(float(stockEnd) - float(stockZD)) #开盘价
        stockFD     = stockInfo[3]  #幅度
        percent     = float(stockFD.replace("%", ""))
        matchResult = re.search("([\w?\s?:]*)(\-)", stockInfo[4])  #日期和最新值
        stockDate   = matchResult.group(1)

        content = "#" + stockNameCn + "# " + stockNameEn + "(" + stockCode + ")" \
          + " 当前:" + stockEnd + ", 涨跌:" + stockZD + ", 幅度:" + stockFD \
          + ", 最后交易时间:" + stockDate

        twitter = content

    except Exception as err:
        print(">>>>>> Exception: " + yahooCode + " " + str(err))
    else:
        return twitter
    finally:
        None

def test_china_index_data():
    for stockCode in ChinaStockIndexList:
        twitter = getChinaStockIndexInfo(stockCode, period_daily)
        print(twitter['message'] + twitter['image'])

def test_china_individual_data():
    for stockCode in ChinaStockIndividualList:
        twitter = getChinaStockIndividualInfo(stockCode, period_min)
        print(twitter['message'] + twitter['image'])

def test_global_index_data():
    for stockDict in WorldStockIndexList:
        print(getWorldStockIndexInfo(stockDict))


def main():
    "main function"
    print(base64.b64decode(b'Q29weXJpZ2h0IChjKSAyMDEyIERvdWN1YmUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg==').decode())
    test_china_index_data()
    test_china_individual_data()
    test_global_index_data()

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 中,可以使用 numpy 和 pandas 这两个库来进行股票数据分析。 使用 numpy: - 你可以使用 numpy 的 loadtxt() 函数来读取股票数据文件,例如 CSV 文件。 使用 pandas: - 你可以使用 pandas 的 read_csv() 函数来读取股票数据文件,例如 CSV 文件。 - 你还可以使用 pandas 的 DataFrame 类型来存储和处理股票数据。 DataFrame 可以被看作是一个二维表格,其中包含多行和多列。你可以使用类似于 Excel 的方式来访问和操作 DataFrame 中的数据。 例如,你可以使用以下代码来读取 CSV 文件并将其存储在 DataFrame 中: ``` import pandas as pd df = pd.read_csv('stock_data.csv') ``` 然后,你可以使用 DataFrame 的各种方法来提取和处理数据,例如: - df.head() 可以显示 DataFrame 的前几行 - df.tail() 可以显示 DataFrame 的后几行 - df['column_name'] 可以访问 DataFrame 中的某一列 - df.describe() 可以计算 DataFrame 中数值型列的统计信息 有关使用 numpy 和 pandas 进行股票数据分析的更多信息,你可以参考官方文档或搜索在线教程。 ### 回答2: 对于numpy和pandas库而言,在Python中进行股票数据分析时,可以使用它们来提取数据。 首先,numpy是一个强大的数学库,可以在Python中进行数值计算和矩阵运算。在股票数据分析中,可以使用numpy库中的函数来处理和计算一维或多维数组。例如,可以使用numpy中的函数来计算收盘价的平均值、最大值、最小值等统计指标。此外,numpy提供了一些方便的函数来处理缺失值、数据排序以及数组的拼接和切片等操作,这些功能对于股票数据分析非常有用。 其次,pandas是一个数据处理和分析库,它建立在numpy的基础上,提供了更高级的数据结构和功能,可以用于更方便地操作和分析股票数据。pandas的主要数据结构是DataFrame,它类似于Excel中的一张表,可以方便地存储和处理二维数据。在股票数据分析中,可以使用pandas来读取和处理CSV或Excel格式的股票数据文件,将数据转化为DataFrame的形式进行分析。通过pandas,可以方便地进行数据过滤、排序、分组和计算等操作,同时还可以使用pandas的时间序列功能来处理和分析时间相关的股票数据。 总结来说,numpy和pandas是Python中常用的数据处理和分析库,在股票数据分析中,可以通过numpy来进行一些数值计算和数组操作,而pandas则更适用于读取、处理和分析股票数据,提供了丰富的功能和数据结构来便于进行数据分析和监视。使用这两个库可以方便地提取和处理股票数据,进而进行更深入的数据分析和决策。 ### 回答3: 在使用numpy和pandas进行股票数据分析时,可以通过几种方式提取数据。 首先,可以使用numpy和pandas的基本操作方法,如切片、索引和过滤来提取数据。比如,使用切片操作可以按照时间范围来提取特定的股票数据,或者按照股票代码提取特定股票的数据。通过使用索引,可以提取指定列或行的数据,如提取收盘价、成交量等特定的指标数据。 其次,numpy和pandas提供了一些高级功能,如函数和方法,可以帮助更灵活地提取数据。例如,可以使用pandas的groupby函数按照特定的条件对数据进行分组,并计算分组后的统计指标。另外,numpy和pandas还提供了一些时间序列分析的方法,如滚动窗口函数rolling和指数加权移动平均函数ewm,可以用来提取特定时间段的数据并进行分析。 此外,如果需要从外部数据源获取股票数据,可以使用pandas的read_csv函数读取csv文件,或者使用pandas-datareader库向在线数据接口请求股票数据。 综上所述,使用numpy和pandas进行股票数据分析时,可以利用基本操作和高级功能来提取和处理数据,以满足不同的需求。这些工具的强大功能和灵活性使得股票数据分析更加方便和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值