Todo el proceso del artículo obtiene datos a través de la API de Shence, genera un gráfico de tendencia de líneas discontinuas, funciones comerciales y sencillas,
- matplotlib
- peticiones
- enhebrar
recuperar datos
def getData(start, end):
sql = "select count(distinct(stu_id)) as num, date from events where "+_os+" date between '"+start+"' and '"+end+"' and business='ai' group by date order by date"
print(sql)
data = {
'format': 'json', 'q': sql}
req_url = "https://"+url+"/api/sql/query?token="+token+"&project=production"
req_header = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
response = requests.post(req_url,data = data, headers = req_header)
rst = response.text.split('\n')
del rst[-1]
print('user'+str(len(rst)))
return rst
Tenga en cuenta aquí que del rst [-1] elimina los últimos datos vacíos para evitar un análisis anormal más adelante.
El otro es el paquete de aprendizaje de solicitudes
Renderizar la imagen
def showImage(xs,ys,hs):
plt.figure(num=1, figsize=(len(xs)//5,10))
plt.ylabel('count', color='red')
plt.xticks(rotation=45, fontsize=10)
plt.xlabel("date", fontsize=10)
#设置区间
plt.xlim(0,len(ys))
plt.ylim(0,max(xs)+100)
#设置显示间隔
y_major_locator=MultipleLocator(200) # y轴 0 200 400 600间隔都是200
x_major_locator=MultipleLocator(len(xs)//30)
#设置边距
plt.subplots_adjust(left=0.05, right=0.95, top=0.9, bottom=0.1)
plt.title(gstart+"~"+gend, fontsize=20)
# 这里是核心渲染的数据
plt.plot(ys,xs, color='green', linewidth=3, label='total')
plt.plot(ys,hs, color='red', linestyle='--', linewidth=2, label='support')
# --- end --
plt.legend() #显示图例
plt.savefig("人数-"+gstart+"~"+gend+".png", bbox_inches='tight')
# plt.show();
Dirección de referencia de aprendizaje de gráfico de líneas https://www.runoob.com/w3cnote/matplotlib-tutorial.html
Foto tigre pintura gato hilo
import threading
import time
class TaskThread(threading.Thread):
def __init__(self, func, args=()):
super(TaskThread, self).__init__()
self.func = func
self.args = args
def run(self):
self.result = self.func(self.args)
def getresult(self):
try:
return self.result
except Exception as ex:
print(ex)
return "ERROR"
Hay dos líneas en la imagen, lo que significa que hay dos conjuntos de datos comparativos. Si solicita una solicitud por separado, tomará alrededor de 20 segundos para el total. Aprendamos más. Después de leer la parte del hilo, tomaré una foto. del gato y moverlo. Aproximadamente 7 ~ 9 segundos después del hilo;
def main():
usertask = taskthread.TaskThread(getUserTask, args=[gstart, gend])
helptask = taskthread.TaskThread(getHelpTask, args=[gstart, gend])
tasklist = [usertask,helptask]
usertask.start()
helptask.start()
resultlist = []
for task in tasklist:
task.join()
resultlist.append(task.getresult())
showResult(resultlist[0], resultlist[1])
if __name__ == "__main__":
_sts = int(time.time()*1000)
# user = getData(gstart, gend)
# helplist = getHelpData(gstart, gend)
# showResult(user, helplist)
main()
print('dur',int(time.time()*1000) - _sts)
- time.time () Obtiene la dirección de referencia del tipo flotante de marca de tiempo https://ibeeger.com/blog/2018/11/13/python-time-md/
El código fuente se ha enviado a git https://github.com/ibeeger/python-learn