def show_entries(): # 全件検索 # entries = Entry.scan() # 条件指定(キーを指定せずに検索) # entries = Entry.scan(Entry.MeasureDateTime.contains('20201123')) # 1日前の時間表記(yyyyMMddhhmmss)を取得する yesterday = (datetime.now(timezone(timedelta(hours=+9), 'JST')) - timedelta(days=1)).strftime('%Y%m%d%H%M%S') # 1日前までのデータをDynamoDBより取得する entries = Entry.scan(Entry.MeasureDateTime >= yesterday) # 条件指定(キーを指定してから検索) # entries = Entry.query("aaa", Entry.MeasureDateTime.contains('20201123')) entries = sorted(entries, key=lambda x: x.MeasureDateTime) #entries = sorted(entries, key=lambda x: x.MeasureDateTime, reverse=True) for entry in entries: try: entry.MeasureDateTimeStr = parse( entry.MeasureDateTime).strftime('%m/%d %H:%M') except: entry.MeasureDateTimeStr = "時間不明" return render_template('index.html', entries=entries)
def show_entries(): # 記事の一覧を表示 entries = Entry.scan() # 全ての記事を取得 entries = sorted(entries, key=lambda x: x.id, reverse=True) return render_template('entries/index.html', entries=entries)
def graph1(): # 【AWS IAM関連情報】 # IAMユーザーに割り当てたポリシー # AmazonDynamoDBFullAccess # AWSLambdaDynamoDBExecutionRole # profile名 # 環境編巣にAWS_DEFAULT_PROFILE, AWS_PROFILEとして定義した。 dynamodb = boto3.resource("dynamodb") # TODO 2回DBにアクセスする理由はないので後で修正する # 1日前の時間表記(yyyyMMddhhmmss)を取得する yesterday = (datetime.now(timezone(timedelta(hours=+9), 'JST')) - timedelta(days=1)).strftime('%Y%m%d%H%M%S') # 1日前までのデータをDynamoDBより取得する entries = Entry.scan(Entry.MeasureDateTime >= yesterday) entries = sorted(entries, key=lambda x: x.MeasureDateTime) df = pd.DataFrame(columns=["人数"]) for entry in entries: df.loc[entry.MeasureDateTime] = entry.value #table = dynamodb.Table(os.environ['table_name']) #response = table.scan() #df = pd.json_normalize(response["Items"]) # YYYYMMDDHHMMSS形式を日付として認識させる df.index = pd.to_datetime(df.index) #df.MeasureDateTime = pd.to_datetime(df.MeasureDateTime) # data["value"]はDecimalで入っているが。 # Decimalは直接表示できないので、floatに変換 df = df.astype({"人数": float}) #df = df.astype({"value": float}) # 日付でソートする。戻り値を受け取らないとソートされないので注意 #df = df.sort_values(by='MeasureDateTime') fig, ax = plt.subplots() # x軸の目盛りは1時間ごとにする(set_major_locatorで目盛りを打つ場所を決める) ax.xaxis.set_major_locator(mdates.HourLocator(interval=4)) # x軸の目盛りの表示形式を設定する(set_major_formatterで目盛りに書く内容を決める) ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M')) # 補助目盛線を付加する ax.xaxis.set_minor_locator(mdates.HourLocator()) plt.plot(df.index, df["人数"]) #plt.plot(df.MeasureDateTime, df.value) # ax.plot(df.MeasureDateTime, df.value)というのもある plt.title('時間と人数の推移') # plt.xlabel('X軸ラベル') # plt.ylabel('人数') plt.ylabel("人数", rotation=0, labelpad=20) # 縦書きにする場合 # ax.set_ylabel("人\n数", rotation=0, va='center') plt.grid() # 補助目盛は点線にする plt.grid(True, which="minor", linestyle="--") # 主目盛は実線 # plt.grid(True, which="major", linestyle="-") canvas = FigureCanvasAgg(fig) png_output = BytesIO() canvas.print_png(png_output) data = png_output.getvalue() response = make_response(data) response.headers['Content-Type'] = 'image/png' response.headers['Content-Length'] = len(data) return response
def show_entries(): entries = Entry.scan() #PynamoDBのメソッド。すべての記事を取得 entries = sorted(entries, key=lambda x: x.id, reverse=True) #timestamp順に記事をソート。 return render_template('entries/index.html', entries=entries)