第一个数据清洗代码手记

# -*- coding: utf-8 -*-
"""
Created on Wed Nov  9 11:01:04 2016

@author: admin
"""
from multiprocessing import Queue
import time
import signal
from sdk import *
import sys

import os
import pandas  as pd
import numpy as np
from pandas import Series, DataFrame
import glob
import re
import time

# 循环处理各个月份
for i in range(1, 2):
    #进行月份的转化
    s = str(i).zfill(2)
    #选取每一年的时间
    time_of_this_year = '2016'
    time_of_this_date = 20160203
    s1 = 'DZH-SZ' + time_of_this_year + s + '-TXT'
    all_date_list = glob.glob(r'E:\股票\股票l1\股票5档分笔%s年TXT\%s\*' % (time_of_this_year,s1))  # 获取一个月里面所有的天数列表

    sdk = SDK('https://api.kuaiyudian.com/rpc')  # 获取前一日数据
    #定义数据表
    preClosePriceDic = {}
    #对每一天的数据循环进行处理
    for each_day_list in all_date_list:
        try:
            current_date = re.search(r'\d{8}$', each_day_list).group()  # 截取每一个地址的日期
            current_date_font_change = time.strftime('%Y-%m-%d', time.strptime(current_date, '%Y%m%d'))  # 转换日期格式
        except:
            print('we can not get the right date' + current_date)
            continue
            #对特定日期进行处理
        if int(current_date) < time_of_this_date:
            print(current_date + 'is proceeding')
            data = sdk.get_bars_by_date(current_date_font_change)  # 获取收盘价
            for d in data:  # 循环data数据,截取昨日收盘价
                preClosePriceDic[d['symbol']] = d['preClosePrice']
            n2 = r'E:\股票\股票l1\股票5档分笔%s年TXT\%s\%s\*.txt' % (time_of_this_year,s1, current_date)  # 将时间导入到新的地址里面

            f = glob.glob(n2)  # 获取一天里面所有数据的列表
            #对一天内所有的数据进行处理
            for k in f:
                try:
                    # 由于数据列标题有时候后会出现改变,所以把日期和时间改为位置1和位置2
                    k2 = re.search(r'\d{6}[_]', k)  # 截取数据的名字
                    stockcode = (re.search(r'\d{6}', k2.group())).group()  # 股票名称
                    # print(stockcode + 'is proceding')
                    # print('this----->' + k + 'can not been cleaned')
                    stocksymbol = 'sz' + stockcode
                except:
                    print('we can not get this file' + k)
                    continue

                try:
                    if stocksymbol in preClosePriceDic.keys():
                        # 读取每一个txt格式数据到df
                        df = pd.read_csv(k, sep=',', encoding='gb2312', parse_dates={'timestamp': [0, 1]})
                        # print('we can read'+ stocksymbol)
                        df['preClosePrice'] = float(preClosePriceDic[stocksymbol])
                        df['timestamp'] = df['timestamp'].astype(np.int64) // 10 ** 9
                        if stocksymbol == 'sh603633':
                            df['hardenPrice'] = round(df['preClosePrice'] * 1.44, 3)  # 新股则乘以1.44
                        else:
                            df['hardenPrice'] = round(df['preClosePrice'] * 1.1, 3)  # 旧股则乘以1.1
                        #由于特殊值的出现,需要对数据进行容错化处理
                        if '额' in df.columns:
                            df.rename(columns={'额': 'amount'}, inplace=True)
                        elif '额、属性(持仓增减)' in df.columns:
                            df.rename(columns={'额、属性(持仓增减)': 'amount'}, inplace=True)
                        df['dehardenPrice'] = round(df['preClosePrice'] * 0.9, 3)
                        df['highPrice'] = df['成交价'].expanding().max()
                        df['lowPrice'] = df['成交价'].expanding().min()
                        df['openPrice'] = df.get_value(0, '成交价')  # 开盘价  如何获取当前日的第一个价格
                        df['symbol'] = stocksymbol  # 手动。。。。。如何取出名字
                        df['stockName'] = stockcode  # 手动。。。。如何将其进行一一对应
                        df['orderNum'] = 5  # 固定为5
                        df['status'] = 'PZ'  # 分比数据固定为PZ

                        df.rename(columns={
                            '成交价': 'nowPrice',
                            '总量': 'volume',
                            'B1价': 'bidv1',
                            'B1量': 'bidp1',
                            'B2价': 'bidv2',
                            'B2量': 'bidp2',
                            'B3价': 'bidv3',
                            'B3量': 'bidp3',
                            'B4价': 'bidv4',
                            'B4量': 'bidp4',
                            'B5价': 'bidv5',
                            'B5量': 'bidp5',
                            'S1价': 'askv1',
                            'S1量': 'askp1',
                            'S2价': 'askv2',
                            'S2量': 'askp2',
                            'S3价': 'askv3',
                            'S3量': 'askp3',
                            'S4价': 'askv4',
                            'S4量': 'askp4',
                            'S5价': 'askv5',
                            'S5量': 'askp5', }, inplace=True)
                        # 重新排序

                        df2 = df.reindex(columns=['symbol',
                                                  'stockName',
                                                  'timestamp',
                                                  'preClosePrice',
                                                  'hardenPrice',
                                                  'dehardenPrice',
                                                  'openPrice',
                                                  'highPrice',
                                                  'lowPrice',
                                                  'nowPrice',
                                                  'volume',
                                                  'amount',
                                                  # 'askVolume',
                                                  # 'bidVolume',
                                                  # 'totalTrades', #当日成交笔数
                                                  'orderNum',
                                                  'status',
                                                  'bidv1',
                                                  'bidp1',
                                                  'bidv2',
                                                  'bidp2',
                                                  'bidv3',
                                                  'bidp3',
                                                  'bidv4',
                                                  'bidp4',
                                                  'bidv5',
                                                  'bidp5',
                                                  'askv1',
                                                  'askp1',
                                                  'askv2',
                                                  'askp2',
                                                  'askv3',
                                                  'askp3',
                                                  'askv4',
                                                  'askp4',
                                                  'askv5',
                                                  'askp5',
                                                  ])
                        #生产新的文件
                        newpath = r'E:\stock_data_rx_daily-sparate\rx_data_sz_%s/%s/' % (time_of_this_year,current_date)
                        if not os.path.exists(newpath):
                            os.makedirs(newpath)
                        df2.to_csv(newpath + '/%s.csv' % (stockcode), index=False, header=False)

                except:
                    print('we can not change the right function of this' + k)
                    continue

            #rx_all_data_list = glob.glob(r'E:\stock_data_rx_daily-sparate\rx_data_sh_%s\*'%(time_of_this_year))


            print('we are emerging date with ' +current_date)
            outfile = open(r'E:\stock_data_rx\SZ\%s\%s.csv'%(time_of_this_year,current_date),'a')
            g = glob.glob(r'E:\stock_data_rx_daily-sparate\rx_data_sz_%s\%s\*.csv' % (time_of_this_year,current_date))
            for n in g:
                inputfile = open(n, 'r')
                # print 'we can open this file'  + n
                for line in inputfile:
                    outfile.write(line)
            outfile.close()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容