In [1]:
import sys
from flask import Flask, render_template, abort, url_for, session
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager, Shell
from flask import Flask, render_template, abort, url_for, session
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager, Shell
from webapp import app, db, config_app, register_blueprints, celery
from webapp.services import db_service as ds,data_service as dts,holder_service as hs
import pandas as pd

from sqlalchemy import *
from pandas.tseries.offsets import QuarterEnd,DateOffset
  
reload(sys)  
sys.setdefaultencoding('utf8')

config_app(app, 'scriptfan.cfg')
ctx = app.app_context()
ctx.push()

manager=Manager(app)

app.log_format = '%(asctime)s %(funcName)s [%(levelname)s] %(message)s'
app.debug = True

In [ ]:
df3 = ds.get_global_data()

df = pd.merge(bdf, df3, how='left', on='code')
df['holder_amt'] = df['t_cap'] * df['rate'] / 100

In [ ]:
code = '300070'
data = hs.getStockHolderFromNet(code)
dts.updateStockHolder(data)

In [6]:
tdf = pd.read_sql_query("select code,trade_date,close,volume,t_cap,m_cap\
                                from stock_trade_data order by trade_date desc limit 6000", db.engine) #上市股票不足3000家,取两倍数值
tdf.groupby([tdf['code']]).first()


Out[6]:
trade_date close volume t_cap m_cap
code
000615 2019-02-19 5.31 54535458.0 4.159587e+09 3.437756e+09
000800 2019-02-19 7.35 90109802.0 1.196212e+10 1.037639e+10
000887 2019-02-21 10.64 110656875.0 1.298953e+10 1.298953e+10
002043 2019-02-20 5.69 93101703.0 4.584388e+09 4.006136e+09
002235 2019-02-25 6.31 531408869.0 3.929722e+09 3.376730e+09
002241 2019-01-30 6.60 69434207.0 2.141769e+10 2.141769e+10
002382 2019-02-19 14.91 43746080.0 1.437370e+10 7.317381e+09
002683 2019-02-18 9.02 65407048.0 6.378123e+09 5.983022e+09
002923 2019-02-19 22.94 41030333.0 2.752800e+09 9.178868e+08
300107 2019-02-19 10.98 222440925.0 6.011347e+09 5.998226e+09
300663 2019-02-19 16.46 121129094.0 3.316097e+09 2.026800e+09
300684 2019-02-19 36.33 245521554.0 5.723119e+09 2.227974e+09
600077 2019-02-19 2.84 55554324.0 3.805947e+09 3.805947e+09
600159 2019-02-19 2.72 16799881.0 2.257609e+09 2.257609e+09
600162 2019-02-19 2.66 243911389.0 9.042211e+09 7.912850e+09
600315 2019-02-18 30.32 108910050.0 2.035225e+10 2.035225e+10
600848 2019-01-29 20.36 68581985.0 2.280156e+10 1.604422e+10
600903 2019-02-19 20.33 270478301.0 1.652807e+10 9.173523e+09
603159 2019-01-29 19.00 11238786.0 1.900000e+09 4.750000e+08
603283 2019-02-19 18.73 169204562.0 3.048568e+09 7.492000e+08
603386 2019-02-19 16.26 145268694.0 3.281268e+09 9.215355e+08
603683 2019-02-19 15.48 155364029.0 1.960852e+09 6.883956e+08

In [4]:
code = '002235'
df1 = pd.read_sql_query("select * from stock_finance_data where code=%(name)s order by report_type",
                           db.engine, params={'name': code},index_col=['report_type'])

df2 = pd.read_sql_query("select report_type,jy_net,tz_in_gdtz,tz_out_gdtz,xj_net,qm_xj_ye as xjye\
                        from xueqiu_finance_cash where code=%(name)s order by report_type",
                        db.engine, params={'name': code}, index_col=['report_type'])

df3 = pd.read_sql_query("select report_type,ldzc_yszk,ldzc_yfkx as yszk,ldzc_ch as ch\
                        from xueqiu_finance_asset where code=%(name)s order by report_type",
                        db.engine, params={'name': code}, index_col=['report_type'])

pd.concat([df1,df2,df3],join='inner',axis=1)


Out[4]:
id code zyysr zyysr_qt zyysr_ttm zyylr yylr yylr_qt tzsy ywszje ... roe created_time jy_net tz_in_gdtz tz_out_gdtz xj_net xjye ldzc_yszk yszk ch
report_type
2008-06-30 139020 002235 22618.0 12451.0 44861.0 4593.0 2797.0 1627.0 0.0 254.0 ... 12.21 2019-02-19 15:50:26 -3642.0 1.0 1930.0 21197.0 26401.0 5366.0 5655.0 8820.0
2008-09-30 139021 002235 34570.0 11952.0 47568.0 6819.0 4087.0 1290.0 1.0 1.0 ... 1.00 2019-02-19 15:50:26 -4912.0 1.0 5248.0 14941.0 20145.0 5446.0 6610.0 10645.0
2008-12-31 139022 002235 48802.0 14232.0 48802.0 9736.0 5530.0 1443.0 1.0 469.0 ... 16.44 2019-02-19 15:50:26 62.0 2.0 6597.0 20865.0 26068.0 5764.0 5526.0 11225.0
2009-03-31 139023 002235 11527.0 11527.0 50162.0 2071.0 1315.0 1315.0 1.0 6.0 ... 1.00 2019-02-19 15:50:26 -8103.0 1.0 1232.0 -8935.0 17133.0 7625.0 6336.0 12849.0
2009-06-30 139024 002235 25402.0 13875.0 51586.0 4868.0 3261.0 1946.0 1.0 3.0 ... 5.02 2019-02-19 15:50:26 -4321.0 1.0 1973.0 1763.0 27831.0 6887.0 3658.0 13545.0
2009-09-30 139025 002235 42202.0 16800.0 56434.0 7901.0 4960.0 1699.0 1.0 111.0 ... 1.00 2019-02-19 15:50:26 -6204.0 1.0 3004.0 -3796.0 22272.0 8537.0 5909.0 12762.0
2009-12-31 139026 002235 53676.0 11474.0 53676.0 11594.0 4797.0 -163.0 1.0 516.0 ... 9.79 2019-02-19 15:50:26 -5812.0 7.0 2462.0 2620.0 28688.0 11041.0 5101.0 14476.0
2010-03-31 139027 002235 15165.0 15165.0 57314.0 3093.0 617.0 617.0 0.0 635.0 ... 2.25 2019-02-19 15:50:26 -9051.0 1.0 987.0 -5798.0 22890.0 12503.0 8117.0 14239.0
2010-06-30 139028 002235 29870.0 14705.0 58144.0 5102.0 -1612.0 -2229.0 179.0 2266.0 ... 0.43 2019-02-19 15:50:26 -7260.0 2.0 3968.0 -14220.0 14468.0 12685.0 6769.0 15021.0
2010-09-30 139029 002235 46869.0 16999.0 58343.0 7895.0 -1217.0 395.0 179.0 2467.0 ... 1.07 2019-02-19 15:50:26 -5793.0 2.0 6727.0 -19907.0 8781.0 11452.0 6520.0 12757.0
2010-12-31 139030 002235 64379.0 17510.0 64379.0 10435.0 -371.0 846.0 269.0 1564.0 ... 0.55 2019-02-19 15:50:26 4107.0 205.0 9918.0 -11568.0 17120.0 12479.0 7614.0 12571.0
2011-03-31 139031 002235 13239.0 13239.0 62453.0 2536.0 73.0 73.0 1.0 196.0 ... 0.22 2019-02-19 15:50:26 -3289.0 183.0 2859.0 -7334.0 9786.0 13121.0 8865.0 14209.0
2011-06-30 139032 002235 31217.0 17978.0 65726.0 6514.0 997.0 924.0 0.0 238.0 ... 1.20 2019-02-19 15:50:26 -833.0 185.0 4978.0 -5084.0 12036.0 15385.0 9058.0 13352.0
2011-09-30 139033 002235 47306.0 16089.0 64816.0 9351.0 1024.0 27.0 -81.0 265.0 ... 1.29 2019-02-19 15:50:26 1649.0 49.0 6938.0 -7253.0 9867.0 13822.0 9166.0 13010.0
2011-12-31 139034 002235 62781.0 15475.0 62781.0 11871.0 785.0 -239.0 476.0 396.0 ... 0.88 2019-02-19 15:50:26 8202.0 752.0 7096.0 -3109.0 14011.0 9387.0 5504.0 10296.0
2012-03-31 139035 002235 11111.0 11111.0 60653.0 2269.0 233.0 233.0 1.0 167.0 ... 0.63 2019-02-19 15:50:26 -2153.0 19.0 70.0 -2616.0 11395.0 8964.0 9764.0 12218.0
2012-06-30 139036 002235 27830.0 16719.0 59394.0 5402.0 1268.0 1035.0 0.0 269.0 ... 2.11 2019-02-19 15:50:26 1936.0 23.0 357.0 -8861.0 5149.0 11814.0 9856.0 13259.0
2012-09-30 139037 002235 41348.0 13518.0 56823.0 7630.0 1485.0 217.0 321.0 409.0 ... 2.74 2019-02-19 15:50:26 1087.0 65.0 1027.0 -8299.0 5712.0 11621.0 13585.0 13242.0
2012-12-31 139038 002235 57495.0 16147.0 57495.0 9725.0 1184.0 -301.0 520.0 623.0 ... 2.13 2019-02-19 15:50:26 10677.0 423.0 7398.0 -5594.0 8417.0 10203.0 7352.0 10085.0
2013-03-31 139039 002235 11281.0 11281.0 57665.0 2413.0 315.0 315.0 1.0 14.0 ... 0.54 2019-02-19 15:50:26 -4115.0 1.0 2248.0 -4252.0 4165.0 13579.0 7804.0 12544.0
2013-06-30 139040 002235 24554.0 13273.0 54219.0 5292.0 943.0 628.0 1.0 52.0 ... 1.68 2019-02-19 15:50:26 1180.0 1.0 4613.0 -3086.0 5331.0 13914.0 6831.0 13227.0
2013-09-30 139041 002235 39684.0 15130.0 55831.0 7707.0 1063.0 120.0 297.0 138.0 ... 1.93 2019-02-19 15:50:26 4020.0 1.0 5345.0 -4285.0 4132.0 14157.0 4476.0 12725.0
2013-12-31 139042 002235 55441.0 15757.0 55441.0 10513.0 991.0 -72.0 285.0 276.0 ... 2.07 2019-02-19 15:50:26 5125.0 1.0 3518.0 1225.0 9642.0 8605.0 3275.0 8745.0
2014-03-31 139043 002235 10380.0 10380.0 54540.0 2299.0 134.0 134.0 55.0 198.0 ... 0.64 2019-02-19 15:50:26 -4787.0 1.0 195.0 -6159.0 3482.0 10997.0 3435.0 9769.0
2014-06-30 139044 002235 21898.0 11518.0 52785.0 4846.0 445.0 311.0 55.0 262.0 ... 1.52 2019-02-19 15:50:26 -1754.0 7.0 322.0 -2884.0 6757.0 12100.0 3269.0 10969.0
2014-09-30 139045 002235 32621.0 10723.0 48378.0 6496.0 -211.0 -656.0 102.0 430.0 ... 0.47 2019-02-19 15:50:26 1504.0 5.0 367.0 -4087.0 5555.0 10447.0 3026.0 9665.0
2014-12-31 139046 002235 44962.0 12341.0 44962.0 4501.0 -9370.0 -9159.0 293.0 -293.0 ... -23.07 2019-02-19 15:50:26 4619.0 146.0 793.0 -2563.0 7079.0 7456.0 2786.0 5939.0
2015-03-31 139047 002235 10222.0 10222.0 44804.0 2319.0 236.0 236.0 3.0 4.0 ... 0.44 2019-02-19 15:50:26 -2141.0 1.0 9.0 -1971.0 7536.0 7473.0 4193.0 6278.0
2015-06-30 139048 002235 21324.0 11102.0 44388.0 5368.0 972.0 736.0 3.0 37.0 ... 0.90 2019-02-19 15:50:26 -573.0 44.0 1401.0 94.0 7173.0 7335.0 2591.0 6554.0
2015-09-30 139049 002235 30927.0 9603.0 43268.0 8156.0 1676.0 704.0 3.0 117.0 ... 2.38 2019-02-19 15:50:26 2903.0 63.0 1415.0 -1754.0 5437.0 8851.0 1216.0 4892.0
2015-12-31 139050 002235 43568.0 12641.0 43568.0 11088.0 2586.0 910.0 -68.0 161.0 ... 3.04 2019-02-19 15:50:26 11528.0 729.0 2212.0 3628.0 10707.0 4095.0 369.0 3898.0
2016-03-31 139051 002235 7060.0 7060.0 40406.0 1544.0 93.0 93.0 154.0 39.0 ... 0.22 2019-02-19 15:50:26 -2817.0 16.0 3.0 -3911.0 6796.0 5636.0 434.0 3463.0
2016-06-30 139052 002235 15556.0 8496.0 37800.0 4066.0 884.0 791.0 154.0 190.0 ... 1.57 2019-02-19 15:50:26 -2491.0 84.0 16.0 -2821.0 7886.0 5797.0 533.0 3788.0
2016-09-30 139053 002235 26322.0 10766.0 38963.0 8048.0 2076.0 1192.0 209.0 247.0 ... 2.28 2019-02-19 15:50:26 -2134.0 85.0 41.0 -621.0 10086.0 14386.0 597.0 4308.0
2016-12-31 139054 002235 43055.0 16733.0 43055.0 12908.0 1568.0 -508.0 157.0 385.0 ... 1.48 2019-02-19 15:50:26 7453.0 133.0 1072.0 45016.0 55723.0 9251.0 1516.0 2170.0
2017-03-31 139055 002235 12609.0 12609.0 48604.0 3726.0 1816.0 1816.0 1.0 157.0 ... 0.71 2019-02-19 15:50:26 -7011.0 1.0 606.0 -10929.0 44794.0 14791.0 2666.0 3042.0
2017-06-30 139056 002235 28606.0 15997.0 56105.0 7857.0 3359.0 1543.0 876.0 531.0 ... 1.58 2019-02-19 15:50:26 -8305.0 4.0 366.0 -12116.0 43607.0 14706.0 3967.0 3008.0
2017-09-30 139057 002235 43710.0 15104.0 60443.0 13509.0 5820.0 2461.0 985.0 620.0 ... 2.63 2019-02-19 15:50:26 -8329.0 3.0 411.0 -11912.0 43811.0 14798.0 4497.0 3847.0
2017-12-31 139058 002235 65842.0 22132.0 65842.0 15607.0 -37356.0 -43176.0 2446.0 737.0 ... -16.63 2019-02-19 15:50:26 -2231.0 1848.0 4149.0 -25725.0 29997.0 11527.0 2493.0 3478.0
2018-03-31 139059 002235 19488.0 19488.0 72721.0 4563.0 2648.0 2648.0 847.0 24.0 ... 1.18 2019-02-19 15:50:26 -5679.0 1.0 15.0 -6294.0 24836.0 15540.0 1133.0 2782.0
2018-06-30 139060 002235 34058.0 14570.0 71294.0 8878.0 5088.0 2440.0 1810.0 18.0 ... 2.23 2019-02-19 15:50:26 -15834.0 1.0 48.0 -4421.0 25577.0 18778.0 10877.0 3283.0
2018-09-30 139061 002235 47056.0 12998.0 69188.0 13210.0 6825.0 1737.0 2033.0 36.0 ... 2.97 2019-02-19 15:50:26 -16710.0 13.0 85.0 -16381.0 13616.0 19728.0 13697.0 4210.0

42 rows × 36 columns


In [5]:
code = '002235'
df1 = pd.read_sql_query("select * from stock_finance_data where code=%(name)s",
                           db.engine, params={'name': code},index_col=['report_type'])

df2 = pd.read_sql_query("select report_type,jy_net,tz_in_gdtz,tz_out_gdtz,xj_net,qm_xj_ye as xjye\
                        from xueqiu_finance_cash where code=%(name)s",
                        db.engine, params={'name': code}, index_col=['report_type'])

df3 = pd.read_sql_query("select report_type,ldzc_yszk,ldzc_yfkx as yszk,ldzc_ch as ch\
                        from xueqiu_finance_asset where code=%(name)s",
                        db.engine, params={'name': code}, index_col=['report_type'])

#pd.concat([df1,df2,df3],join='inner',axis=1)
df1.join([df2,df3])


Out[5]:
id code zyysr zyysr_qt zyysr_ttm zyylr yylr yylr_qt tzsy ywszje ... roe created_time jy_net tz_in_gdtz tz_out_gdtz xj_net xjye ldzc_yszk yszk ch
report_type
2008-06-30 139020 002235 22618.0 12451.0 44861.0 4593.0 2797.0 1627.0 0.0 254.0 ... 12.21 2019-02-19 15:50:26 -3642.0 1.0 1930.0 21197.0 26401.0 5366.0 5655.0 8820.0
2008-09-30 139021 002235 34570.0 11952.0 47568.0 6819.0 4087.0 1290.0 1.0 1.0 ... 1.00 2019-02-19 15:50:26 -4912.0 1.0 5248.0 14941.0 20145.0 5446.0 6610.0 10645.0
2008-12-31 139022 002235 48802.0 14232.0 48802.0 9736.0 5530.0 1443.0 1.0 469.0 ... 16.44 2019-02-19 15:50:26 62.0 2.0 6597.0 20865.0 26068.0 5764.0 5526.0 11225.0
2009-03-31 139023 002235 11527.0 11527.0 50162.0 2071.0 1315.0 1315.0 1.0 6.0 ... 1.00 2019-02-19 15:50:26 -8103.0 1.0 1232.0 -8935.0 17133.0 7625.0 6336.0 12849.0
2009-06-30 139024 002235 25402.0 13875.0 51586.0 4868.0 3261.0 1946.0 1.0 3.0 ... 5.02 2019-02-19 15:50:26 -4321.0 1.0 1973.0 1763.0 27831.0 6887.0 3658.0 13545.0
2009-09-30 139025 002235 42202.0 16800.0 56434.0 7901.0 4960.0 1699.0 1.0 111.0 ... 1.00 2019-02-19 15:50:26 -6204.0 1.0 3004.0 -3796.0 22272.0 8537.0 5909.0 12762.0
2009-12-31 139026 002235 53676.0 11474.0 53676.0 11594.0 4797.0 -163.0 1.0 516.0 ... 9.79 2019-02-19 15:50:26 -5812.0 7.0 2462.0 2620.0 28688.0 11041.0 5101.0 14476.0
2010-03-31 139027 002235 15165.0 15165.0 57314.0 3093.0 617.0 617.0 0.0 635.0 ... 2.25 2019-02-19 15:50:26 -9051.0 1.0 987.0 -5798.0 22890.0 12503.0 8117.0 14239.0
2010-06-30 139028 002235 29870.0 14705.0 58144.0 5102.0 -1612.0 -2229.0 179.0 2266.0 ... 0.43 2019-02-19 15:50:26 -7260.0 2.0 3968.0 -14220.0 14468.0 12685.0 6769.0 15021.0
2010-09-30 139029 002235 46869.0 16999.0 58343.0 7895.0 -1217.0 395.0 179.0 2467.0 ... 1.07 2019-02-19 15:50:26 -5793.0 2.0 6727.0 -19907.0 8781.0 11452.0 6520.0 12757.0
2010-12-31 139030 002235 64379.0 17510.0 64379.0 10435.0 -371.0 846.0 269.0 1564.0 ... 0.55 2019-02-19 15:50:26 4107.0 205.0 9918.0 -11568.0 17120.0 12479.0 7614.0 12571.0
2011-03-31 139031 002235 13239.0 13239.0 62453.0 2536.0 73.0 73.0 1.0 196.0 ... 0.22 2019-02-19 15:50:26 -3289.0 183.0 2859.0 -7334.0 9786.0 13121.0 8865.0 14209.0
2011-06-30 139032 002235 31217.0 17978.0 65726.0 6514.0 997.0 924.0 0.0 238.0 ... 1.20 2019-02-19 15:50:26 -833.0 185.0 4978.0 -5084.0 12036.0 15385.0 9058.0 13352.0
2011-09-30 139033 002235 47306.0 16089.0 64816.0 9351.0 1024.0 27.0 -81.0 265.0 ... 1.29 2019-02-19 15:50:26 1649.0 49.0 6938.0 -7253.0 9867.0 13822.0 9166.0 13010.0
2011-12-31 139034 002235 62781.0 15475.0 62781.0 11871.0 785.0 -239.0 476.0 396.0 ... 0.88 2019-02-19 15:50:26 8202.0 752.0 7096.0 -3109.0 14011.0 9387.0 5504.0 10296.0
2012-03-31 139035 002235 11111.0 11111.0 60653.0 2269.0 233.0 233.0 1.0 167.0 ... 0.63 2019-02-19 15:50:26 -2153.0 19.0 70.0 -2616.0 11395.0 8964.0 9764.0 12218.0
2012-06-30 139036 002235 27830.0 16719.0 59394.0 5402.0 1268.0 1035.0 0.0 269.0 ... 2.11 2019-02-19 15:50:26 1936.0 23.0 357.0 -8861.0 5149.0 11814.0 9856.0 13259.0
2012-09-30 139037 002235 41348.0 13518.0 56823.0 7630.0 1485.0 217.0 321.0 409.0 ... 2.74 2019-02-19 15:50:26 1087.0 65.0 1027.0 -8299.0 5712.0 11621.0 13585.0 13242.0
2012-12-31 139038 002235 57495.0 16147.0 57495.0 9725.0 1184.0 -301.0 520.0 623.0 ... 2.13 2019-02-19 15:50:26 10677.0 423.0 7398.0 -5594.0 8417.0 10203.0 7352.0 10085.0
2013-03-31 139039 002235 11281.0 11281.0 57665.0 2413.0 315.0 315.0 1.0 14.0 ... 0.54 2019-02-19 15:50:26 -4115.0 1.0 2248.0 -4252.0 4165.0 13579.0 7804.0 12544.0
2013-06-30 139040 002235 24554.0 13273.0 54219.0 5292.0 943.0 628.0 1.0 52.0 ... 1.68 2019-02-19 15:50:26 1180.0 1.0 4613.0 -3086.0 5331.0 13914.0 6831.0 13227.0
2013-09-30 139041 002235 39684.0 15130.0 55831.0 7707.0 1063.0 120.0 297.0 138.0 ... 1.93 2019-02-19 15:50:26 4020.0 1.0 5345.0 -4285.0 4132.0 14157.0 4476.0 12725.0
2013-12-31 139042 002235 55441.0 15757.0 55441.0 10513.0 991.0 -72.0 285.0 276.0 ... 2.07 2019-02-19 15:50:26 5125.0 1.0 3518.0 1225.0 9642.0 8605.0 3275.0 8745.0
2014-03-31 139043 002235 10380.0 10380.0 54540.0 2299.0 134.0 134.0 55.0 198.0 ... 0.64 2019-02-19 15:50:26 -4787.0 1.0 195.0 -6159.0 3482.0 10997.0 3435.0 9769.0
2014-06-30 139044 002235 21898.0 11518.0 52785.0 4846.0 445.0 311.0 55.0 262.0 ... 1.52 2019-02-19 15:50:26 -1754.0 7.0 322.0 -2884.0 6757.0 12100.0 3269.0 10969.0
2014-09-30 139045 002235 32621.0 10723.0 48378.0 6496.0 -211.0 -656.0 102.0 430.0 ... 0.47 2019-02-19 15:50:26 1504.0 5.0 367.0 -4087.0 5555.0 10447.0 3026.0 9665.0
2014-12-31 139046 002235 44962.0 12341.0 44962.0 4501.0 -9370.0 -9159.0 293.0 -293.0 ... -23.07 2019-02-19 15:50:26 4619.0 146.0 793.0 -2563.0 7079.0 7456.0 2786.0 5939.0
2015-03-31 139047 002235 10222.0 10222.0 44804.0 2319.0 236.0 236.0 3.0 4.0 ... 0.44 2019-02-19 15:50:26 -2141.0 1.0 9.0 -1971.0 7536.0 7473.0 4193.0 6278.0
2015-06-30 139048 002235 21324.0 11102.0 44388.0 5368.0 972.0 736.0 3.0 37.0 ... 0.90 2019-02-19 15:50:26 -573.0 44.0 1401.0 94.0 7173.0 7335.0 2591.0 6554.0
2015-09-30 139049 002235 30927.0 9603.0 43268.0 8156.0 1676.0 704.0 3.0 117.0 ... 2.38 2019-02-19 15:50:26 2903.0 63.0 1415.0 -1754.0 5437.0 8851.0 1216.0 4892.0
2015-12-31 139050 002235 43568.0 12641.0 43568.0 11088.0 2586.0 910.0 -68.0 161.0 ... 3.04 2019-02-19 15:50:26 11528.0 729.0 2212.0 3628.0 10707.0 4095.0 369.0 3898.0
2016-03-31 139051 002235 7060.0 7060.0 40406.0 1544.0 93.0 93.0 154.0 39.0 ... 0.22 2019-02-19 15:50:26 -2817.0 16.0 3.0 -3911.0 6796.0 5636.0 434.0 3463.0
2016-06-30 139052 002235 15556.0 8496.0 37800.0 4066.0 884.0 791.0 154.0 190.0 ... 1.57 2019-02-19 15:50:26 -2491.0 84.0 16.0 -2821.0 7886.0 5797.0 533.0 3788.0
2016-09-30 139053 002235 26322.0 10766.0 38963.0 8048.0 2076.0 1192.0 209.0 247.0 ... 2.28 2019-02-19 15:50:26 -2134.0 85.0 41.0 -621.0 10086.0 14386.0 597.0 4308.0
2016-12-31 139054 002235 43055.0 16733.0 43055.0 12908.0 1568.0 -508.0 157.0 385.0 ... 1.48 2019-02-19 15:50:26 7453.0 133.0 1072.0 45016.0 55723.0 9251.0 1516.0 2170.0
2017-03-31 139055 002235 12609.0 12609.0 48604.0 3726.0 1816.0 1816.0 1.0 157.0 ... 0.71 2019-02-19 15:50:26 -7011.0 1.0 606.0 -10929.0 44794.0 14791.0 2666.0 3042.0
2017-06-30 139056 002235 28606.0 15997.0 56105.0 7857.0 3359.0 1543.0 876.0 531.0 ... 1.58 2019-02-19 15:50:26 -8305.0 4.0 366.0 -12116.0 43607.0 14706.0 3967.0 3008.0
2017-09-30 139057 002235 43710.0 15104.0 60443.0 13509.0 5820.0 2461.0 985.0 620.0 ... 2.63 2019-02-19 15:50:26 -8329.0 3.0 411.0 -11912.0 43811.0 14798.0 4497.0 3847.0
2017-12-31 139058 002235 65842.0 22132.0 65842.0 15607.0 -37356.0 -43176.0 2446.0 737.0 ... -16.63 2019-02-19 15:50:26 -2231.0 1848.0 4149.0 -25725.0 29997.0 11527.0 2493.0 3478.0
2018-03-31 139059 002235 19488.0 19488.0 72721.0 4563.0 2648.0 2648.0 847.0 24.0 ... 1.18 2019-02-19 15:50:26 -5679.0 1.0 15.0 -6294.0 24836.0 15540.0 1133.0 2782.0
2018-06-30 139060 002235 34058.0 14570.0 71294.0 8878.0 5088.0 2440.0 1810.0 18.0 ... 2.23 2019-02-19 15:50:26 -15834.0 1.0 48.0 -4421.0 25577.0 18778.0 10877.0 3283.0
2018-09-30 139061 002235 47056.0 12998.0 69188.0 13210.0 6825.0 1737.0 2033.0 36.0 ... 2.97 2019-02-19 15:50:26 -16710.0 13.0 85.0 -16381.0 13616.0 19728.0 13697.0 4210.0

42 rows × 36 columns


In [ ]:
code = '603617'
import re
import urllib2
from bs4 import  BeautifulSoup
url = "http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CirculateStockHolder/stockid/" + code + ".phtml"
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
req = urllib2.Request(url=url, headers=headers)
feeddata = urllib2.urlopen(req).read()
#soup = BeautifulSoup(feeddata, "html5lib")
#paper_name = soup.html.body.find(id="CirculateShareholderTable").tbody.find_all('tr')

In [ ]:
code = '300133'
df1 = pd.read_sql_query("select * from stock_finance_data where code=%(name)s",
                           db.engine, params={'name': code})

In [ ]:
report_date = []
holder_name = []
holder_code = []
amount = []
rate = []
holder_type = []
holder_parent = []
rdate = ''
i = 0
for e in paper_name:
    t = e.find_all('td')
    s = e.find_all('strong')
    if len(s) > 0:
        if s[0].string == '截止日期':
            rdate = t[1].string
            i += 1
            if i ==1:
                latest_val = rdate

    if t[0].div:
        if t[0].div.string:
            if t[0].div.string.isdigit():
                hname = t[1].div.text
                rateStr = t[3].div.string
                if rateStr:
                    rateArray = re.findall("^[0-9]*\.?[0-9]{0,2}", rateStr)
                    rate.append(rateArray[0])
                else:
                    rate.append('0')

In [ ]:
# 获取交易数据
global_tdf = dbs.get_global_trade_data()
# 获取财务数据
global_fdf = dbs.get_global_finance_data()
# 获取财务数据
global_bdf = dbs.get_global_basic_data()

df3 = global_bdf.join([global_fdf, global_tdf], how='left')

df3[['trade_date']] = df3[['trade_date']].apply(pd.to_datetime, errors='ignore')  # 转换类型
df = df3.reset_index()

df['pe'] = df['t_cap'] / (df['jlr_ttm'] * 10000)
df['pcf'] = df['t_cap'] / (df['zyysr_ttm'] * 10000)
df['ps'] = df['t_cap'] / (df['jyjxjl_ttm'] * 10000)
df['pb'] = df['t_cap'] / (df['gdqy'] * 10000)

In [ ]:


In [ ]:
code = '002241'
report_date= '2018-06-30'
direction='next'

sql = "select max(report_date) from stock_holder where code=:code";
resultProxy = db.session.execute(text(sql), {'code': code})
_max_date = resultProxy.scalar()
if report_date == '':
    if (_max_date == None):
        _max_date = dbs.getStock(code).launch_date  # 取上市日期
    _next_date = pd.to_datetime(_max_date)
else:
    _next_date = pd.to_datetime(report_date)

if direction == 'next':
    if (_next_date.date()-_max_date).days <= 0:
        _next_date = QuarterEnd().rollforward(_next_date + DateOffset(days=1))
elif direction == 'pre':
    _next_date = QuarterEnd().rollback(_next_date - DateOffset(days=1))

submit_date = QuarterEnd().rollback(_next_date - DateOffset(days=1))

app.logger.debug('query holder data from ' + submit_date.strftime('%Y-%m-%d') +' to '+ _next_date.strftime('%Y-%m-%d'))

hdf = pd.read_sql_query("select id, code,report_date,holder_type,holder_name,holder_code,rate,amount \
                            from stock_holder where code=%(name)s and report_date>=%(submit_date)s and report_date<=%(report_date)s \
                            order by report_date desc", db.engine, \
                        params={'name': code, 'submit_date': submit_date.strftime('%Y-%m-%d'), 'report_date': _next_date.strftime('%Y-%m-%d')})

In [ ]:
from datetime import datetime
today = datetime.now()
dt_2 = QuarterEnd().rollback(today - DateOffset(years=3))
dt_2

In [ ]:
today = datetime.now()
dt_2 = QuarterEnd().rollback(today - DateOffset(years=3))
submit_date = dt_2.date()

hdf = pd.read_sql_query("select id, code,report_date,holder_type,holder_name,holder_code,rate,amount \
                            from stock_holder where code=%(name)s and report_date>=%(submit_date)s \
                            order by report_date asc,rate desc", db.engine, \
                        params={'name': code, 'submit_date': submit_date.strftime('%Y-%m-%d')})

grouped = hdf.groupby('report_date')
pre_group = pd.DataFrame()


def getValue(x, attri):
    d1 = m1_df[m1_df['holder_code'] == x]
    v1 = d1.get(attri + '_x')
    v2 = d1.get(attri + '_y')
    if v1.item() != v1.item():  # 空值判断
        return v2.item()
    else:
        return v1.item()
    
def countVar(x):
    d1 = m1_df[m1_df['holder_code'] == x]
    v1 = d1.get('rate_x')
    v2 = d1.get('rate_y')
    if v1.item() != v1.item():  # 空值判断
        return '-'
    elif v2.item() != v2.item():
        return '+'
    elif v1.item() == v2.item():
        return '0'
    else:
        return format(v1.item() - v2.item(), ',')    
    
result=[]
    
for name, group in grouped:
    if not pre_group.empty:
        m1_df = pd.merge(group,pre_group,on='holder_code',how='outer')
        m2_df = {
        'name': m1_df['holder_code'].apply(getValue, args=('holder_name',)),
        'code': m1_df['holder_code'],
        'amount': m1_df['holder_code'].apply(getValue, args=('amount',)),
        'rate': m1_df['holder_code'].apply(getValue, args=('rate',)),
        'var': m1_df['holder_code'].apply(countVar)
        }
        result.append({'report_date': name, 'data': m2_df})
    else:
        pre_group = group
        
return result

In [ ]:
grouped.first()

In [ ]:
pre_group = pd.DataFrame()
my_group = pd.DataFrame()
for name, group in grouped:
    if not pre_group.empty:
        my_group = group
        break
    else:
        pre_group = group

In [ ]:
my_group

In [ ]:
m1_df = pd.merge(my_group,pre_group,on='holder_code',how='outer')
m1_df

In [ ]:
m2_df = pd.DataFrame({
        'name': m1_df['holder_code'].apply(getValue, args=('holder_name',)),
        'code': m1_df['holder_code'].apply(getValue, args=('holder_code',)),
        'report_date': m1_df['holder_code'].apply(getValue, args=('report_date',)),
        'amount': m1_df['holder_code'].apply(getValue, args=('amount',)),
        'rate': m1_df['holder_code'].apply(getValue, args=('rate',)),
        'var': m1_df['holder_code'].apply(countVar)
    })

In [ ]:
m2_df = pd.DataFrame({
        'name': m1_df['holder_code'].apply(getValue, args=('holder_name',)),
        'code': m1_df['holder_code'].apply(getValue, args=('holder_code',)),
        'report_date': m1_df['holder_code'].apply(getValue, args=('report_date',)),
        'amount': m1_df['holder_code'].apply(getValue, args=('amount',)),
        'rate': m1_df['holder_code'].apply(getValue, args=('rate',)),
        'var': m1_df['holder_code'].apply(countVar)
    })

In [ ]:
def fixHolderName(x):
    d1 = hdf[hdf['id'] == x]
    v1 = d1.get('holder_code').item()
    v2 = d1.get('holder_name').item()
    if v1 == None:  # 空值判断
        return v2
    else:
        return v1

hdf['holder_name_new'] = hdf['id'].apply(fixHolderName)

t2_df = hdf[:10]
t3_df = hdf[10:20]
m1_df = pd.merge(t2_df, t3_df, how='outer', on='holder_name_new')

def getReportDate(x, attri):
    d1 = m1_df[m1_df['holder_name_new'] == x]
    v1 = d1.get(attri + '_x')
    v2 = d1.get(attri + '_y')
    if v1 == None:  # 空值判断
        return v2
    else:
        return v1

def getValue(x, attri):
    d1 = m1_df[m1_df['holder_name_new'] == x]
    v1 = d1.get(attri + '_x')
    v2 = d1.get(attri + '_y')
    if v1.item() != v1.item():  # 空值判断
        return v2.item()
    else:
        return v1.item()

def countVar(x):
    d1 = m1_df[m1_df['holder_name_new'] == x]
    v1 = d1.get('rate_x')
    v2 = d1.get('rate_y')
    if v1.item() != v1.item():  # 空值判断
        return '减持'
    elif v2.item() != v2.item():
        return '新进'
    elif v1.item() == v2.item():
        return '不变'
    else:
        return format(v1.item() - v2.item(), ',')

m2_df = pd.DataFrame({
    'name': m1_df['holder_name_new'].apply(getValue, args=('holder_name',)),
    'code': m1_df['holder_name_new'].apply(getValue, args=('holder_code',)),
    'report_date': m1_df['holder_name_new'].apply(getValue, args=('report_date',)),
    'amount': m1_df['holder_name_new'].apply(getValue, args=('amount',)),
    'rate': m1_df['holder_name_new'].apply(getValue, args=('rate',)),
    'var': m1_df['holder_name_new'].apply(countVar)
})

(_next_date.strftime('%Y-%m-%d'),m2_df)

In [ ]:
from datetime import datetime
today = datetime.now()
dt_2 = QuarterEnd().rollback(today - DateOffset(months=18))
dt_2.date()

In [ ]:
from pandas.tseries.offsets import *
today = datetime.now().date()
d = today - pd.DateOffset(months=18)
QuarterEnd().rollback(d)

In [ ]:
pd.date_range(end=datetime.now().date(), periods=5, freq='Q')

In [ ]:
import re
temp = u"想做/ 兼_职/学生_/ 的 、加,我Q:  1 5.  8 0. !!??  8 6 。0.  2。 3     有,惊,喜,哦"
#string = re.sub(u"[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "",temp)
string = re.sub(u"[\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "",temp)
print string

In [ ]:
import re
temp = u'上海重阳战略投资有限公司–重阳战略同智基金'
#string = re.sub(u"[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "",temp)
string = re.sub(u"[\–\-\-\:\s+\.\!\/_,$%^*(+\"\')]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "",temp)
print string

In [ ]:
mkey = u'重阳'
tdf = pd.read_sql_query(
        "select sh.holder_name,sh.holder_code,sh.holder_type,sh.report_date from stock_holder sh " \
        "where sh.holder_code like %(mkey)s order by report_date desc", db.engine, \
        params={'mkey': '%' + mkey + '%'})
gtdf = tdf.groupby(['holder_code'])
bdf = gtdf.first()
bdf['hold_size'] = gtdf.size()
bdf

In [ ]:
hs.getStockHolderFromNet('002241')

In [ ]:


In [ ]:
import re
str = "1230,23"
#re.findall("^[0-9]*\.?[0-9]{0,2}",str)[0]
#re.findall("^([1-9]*.[0-9]{0,2})",str)

re.match("^\-+",str)

In [ ]:
re.search('^([1-9][0-9]*)+(.[0-9]{1,2})*$', str).group(0)

In [ ]:
re.findall("^[0-9]*\.?[0-9]{0,2}", "")

In [ ]:
import threading,multiprocessing
g_queue = multiprocessing.Queue()

def init_queue():
    print("init g_queue start")
    while not g_queue.empty():
        g_queue.get()
    for _index in range(10):
        g_queue.put(_index)
    print("init g_queue end")
    return

In [ ]:
g_queue

In [ ]:
import time
# 定义一个IO密集型任务:利用time.sleep()
def task_io(task_id):
    print("IOTask[%s] start" % task_id)
    while not g_queue.empty():
        time.sleep(1)
        try:
            data = g_queue.get(block=True, timeout=1)
            print("IOTask[%s] get data: %s" % (task_id, data))
        except Exception as excep:
            print("IOTask[%s] error: %s" % (task_id, str(excep)))
    print("IOTask[%s] end" % task_id)
    return

print("========== 直接执行IO密集型任务 ==========")
init_queue()
time_0 = time.time()
task_io(0)
print("结束", time.time() - time_0, "\n")

print("========== 多线程执行IO密集型任务 ==========")
init_queue()
time_0 = time.time()
thread_list = [threading.Thread(target=task_io, args=(i,)) for i in range(5)]
for t in thread_list:
    t.start()
for t in thread_list:
    if t.is_alive():
        t.join()
print("结束", time.time() - time_0, "\n")

In [ ]:
import time
def simple_generator_function():
        i = 0
        while i < 50:
            i = i +1
        time.sleep(5)    
        yield i
        i = 0
        
for value in simple_generator_function():  
    print(value)

In [ ]:
#encoding:UTF-8  
def yield_test(n):  
    for i in range(n): 
        print(">>>>>>>") 
        yield call(i)  
        print("i=",i)      
    
  
def call(i):  
    return i*2  
  
for i in yield_test(5):  
    print(i,",")

In [ ]: