[Python]データの取得、折れ線グラフのメモのレンダリング、整理のためのマルチスレッド

記事の全プロセスは、Shence apiを介してデータを取得し、破線のトレンドチャート、ビジネス関数、および単純なものを生成します。

  • matplotlib
  • リクエスト
  • スレッド

データを取得する


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

ここで、del rst [-1]は最後の空のデータを削除して、後で異常な解析が行われないようにすることに注意してください。
もう1つは、リクエストパッケージの学習です。
ここに画像の説明を挿入

画像をレンダリングする

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();

ここに画像の説明を挿入
折れ線グラフ学習参照アドレスhttps://www.runoob.com/w3cnote/matplotlib-tutorial.html

写真虎絵猫糸

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"

写真には2行あり、比較データが2セットあります。別途リクエストすると全体で約20秒かかります。詳しく見ていきましょう。スレッド部分を読んだ後、写真を撮ります。猫のとそれを移動します。スレッドの約7〜9秒後。


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)

ソースコードはgithttps://github.com/ibeeger/python-learnに送信されました

おすすめ

転載: blog.csdn.net/uk_51/article/details/109052582