statistic.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import iepy
  2. iepy.setup(__file__)
  3. import time
  4. import pandas as pd
  5. def statis():
  6. from django.db import connection
  7. cursor = connection.cursor()
  8. start_time = "2021-08-25"
  9. end_time = "2021-09-25"
  10. df_data = {"user":[],"count":[],"online":[],"secondperdoc":[]}
  11. list_user = ["test1","test7","test8","test21","test27","test2","test9","test10","test11","test12","test25","test22","test29"]
  12. for _user in list_user:
  13. sql = " select edittime as et from corpus_iedocument where edituser='%s' and edittime<='%s' and edittime>'%s' order by edittime asc"%(_user,end_time,start_time)
  14. cursor.execute(sql)
  15. rows = cursor.fetchall()
  16. list_et = []
  17. list_distance = []
  18. for row in rows:
  19. _t = time.mktime(time.strptime(str(row[0])[:19],'%Y-%m-%d %H:%M:%S'))
  20. list_et.append(_t)
  21. for i in range(1,len(list_et)):
  22. _d = list_et[i]-list_et[i-1]
  23. if _d<10*60:
  24. list_distance.append(_d)
  25. df_data["user"].append(_user)
  26. df_data["count"].append(len(list_et))
  27. df_data["online"].append(sum(list_distance)/60/60/30)
  28. df_data["secondperdoc"].append(sum(list_distance)/len(list_et) if len(list_et)>0 else 0)
  29. df = pd.DataFrame(df_data)
  30. df.to_excel("check_%s_%s.xlsx"%(start_time,end_time))
  31. def getWage(user,start_time,end_time,percentPass):
  32. import time
  33. from django.db import connection
  34. cursor = connection.cursor()
  35. and_sql = " and 1=1 "
  36. if start_time is not None:
  37. and_sql += " and to_char(edittime,'yyyy-mm-dd')>'%s' "%start_time
  38. if end_time is not None:
  39. and_sql += " and to_char(edittime,'yyyy-mm-dd')<='%s'"%end_time
  40. sql = " select human_identifier,to_char(edittime,'yyyy-mm-dd hh24:mi:ss') from corpus_iedocument where edituser='%s' %s order by edittime asc" %(user,and_sql)
  41. cursor.execute(sql)
  42. list_docid = []
  43. list_t = []
  44. set_docid_before = set()
  45. _time_split = time.mktime(time.strptime("2021-05-07 14:00:00","%Y-%m-%d %H:%M:%S"))
  46. for row in cursor.fetchall():
  47. list_docid.append(row[0])
  48. _et = time.mktime(time.strptime(row[1],"%Y-%m-%d %H:%M:%S"))
  49. if _et<_time_split:
  50. set_docid_before.add(row[0])
  51. set_first = set(list_docid[:1200])
  52. sql = " select document_id,value from brat_bratannotation where document_id in(select human_identifier from corpus_iedocument where edituser='%s' %s) "%(user,and_sql)
  53. cursor.execute(sql)
  54. eleCount = 0
  55. relCount = 0
  56. wage = 0
  57. for document_id,value in cursor.fetchall():
  58. if document_id in set_first:
  59. if document_id in set_docid_before:
  60. if len(value.strip())>0:
  61. if value[0]=="T":
  62. eleCount += 1
  63. wage += 0.03
  64. else:
  65. relCount += 1
  66. wage += 0.05
  67. else:
  68. if len(value.strip())>0:
  69. if value[0]=="T":
  70. eleCount += 1
  71. wage += 0.015
  72. else:
  73. relCount += 1
  74. wage += 0.025
  75. else:
  76. if document_id in set_docid_before:
  77. if len(value.strip())>0:
  78. if value[0]=="T":
  79. eleCount += 1
  80. wage += 0.04
  81. else:
  82. relCount += 1
  83. wage += 0.06
  84. else:
  85. if len(value.strip())>0:
  86. if value[0]=="T":
  87. eleCount += 1
  88. wage += 0.02
  89. else:
  90. relCount += 1
  91. wage += 0.03
  92. return {"docCount":len(list_docid),"eleCount":eleCount,"relCount":relCount,"wage":round(wage*percentPass,2)}
  93. if __name__=="__main__":
  94. statis()
  95. # from django.db import connection
  96. #
  97. # user = "test7"
  98. # cursor = connection.cursor()
  99. # sql = 'select max(end_time) from corpus_payroll where "user"=\'%s\''%(user)
  100. # cursor.execute(sql)
  101. # rows = cursor.fetchall()
  102. # start_time = rows[0][0]
  103. # print(getWage("test7","2021-04-25","2021-05-25",0.9))