2017-05-20 10 views
1

私は2ヶ月の温度データを持っており、その日の温度限界に応じて毎日赤色または緑色のいずれかで表示するカレンダーヒートマップを作成しようとしています。私はこの目的のために、特定の日が緑か赤かに関する情報を持つ辞書を作成しました。私はまた、パンダのデータフレームを作成しました。カレンダーPython辞書またはパンダのデータフレーム/シリーズのヒートマップを2ヶ月間

私のデータベーステーブルのデータはこのように見えます。 2つの列のみから構成されています。


import datetime 
import calendar 
import mysql.connector 
import datetime 
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from mysql.connector import errorcode 


cnx = mysql.connector.connect(user='robbin', password='xxxx', database='rob') 
cursor = cnx.cursor() 

start_time = 1464739200 

query = ("SELECT usec ,`temp_data` " 
    "FROM rob_tab WHERE usec >= %s " 
    "AND usec <= %s") 

for i in range(61): 
    current_start_ts = (start_time + (i*86400)) 
    current_day = datetime.datetime.fromtimestamp(current_start_ts) 
    current_end_ts = (start_time + (i*86400)) + 86399 
    cursor.execute(query, (current_start_ts , current_end_ts)) 
    rows = cursor.fetchall() 
    rows_arr = np.array(rows) 
    print 'type of the rows_arr: ', type(rows_arr) 
    data = {} 
    if len(rows_arr) == 0: 
     data[current_day] = 'grey' 
    else: 
     for item, index in rows_arr: 
      if index >= 34 or index <= 20: 
       data[current_day] = 'red' 
       break 
      else: 
       pass 
       data[current_day] = 'green' 
    daf = pd.DataFrame(data.items(), columns=['Date', 'DateValue']) 
が私は好きで、以下のいくつかの行を試してみました:日付と温度値

usec  temp_data 
1464739200 32 
1464825600 31.32 
1464912000 33.2 
1464998400 29.56 
. 
. 
. 
.1469923200 28.45 

辞書には、次のように

data is here: {datetime.datetime(2016, 6, 1, 2, 0): 'grey'} 
data is here: {datetime.datetime(2016, 6, 2, 2, 0): 'green'} 
. 
. 
. 
data is here: {datetime.datetime(2016, 7, 29, 2, 0): 'green'} 
data is here: {datetime.datetime(2016, 7, 30, 2, 0): 'green'} 
data is here: {datetime.datetime(2016, 7, 31, 2, 0): 'green'} 

私のコードがあるのDateTimeするエポック時刻を変換した後、このようになります。上記コードで

for item, index in data.iteritems(): 
     print 'index::', index 
    # print 'temp values in list: ', item 
    events = pd.Series(data[current_day], index=dat) 
    print 'events::', events 
    calmap.yearplot(events, monthlabels=['june', 'july']) 

and i got the following error: 
    index:: grey 
    events:: 2016-06-01 02:00:00 grey 
    dtype: object 
    plot_data = np.ma.masked_where(np.isnan(plot_data), plot_data) 
    TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 

私は1つの例を発見し、この例へのリンクは 'Matplotlib and Numpy - Create a calendar heatmap' です。私はこの例を見ていますが、私の場合と少し違うので、私のコードにそれを変更することができませんでした。

私の場合、辞書またはパンダのデータフレームを持っていましたが、表示するのに2ヶ月しかかかりませんでした。私はこの問題をpandasデータフレームまたは辞書だけを使って解決したいので、私の質問は私が言及した例とは全く違うものになります。なぜなら、彼はパンダをまったく使用したくないからです。

誰かが私に手伝ったり、カレンダーのヒートマップを作成してくれたら嬉しいです。

+0

あなたは、チャート/画像がどのように見えるかの例を持っていますか? –

+0

@ScottBostonはい私は自分の質問を編集し、どのように見えるかをイメージに追加します。助けてくれてありがとう – robbin

+0

明確な問題の説明はありません。また、例を見つけた場合は、その例にリンクして、人々が実際にあなたのニーズに適応させるのを助けることができます。最後に[mcve]を指定すると、ヘルプを劇的に入手する機会が増えます。 – ImportanceOfBeingErnest

答えて

1

Google検索を高速化するとhttps://pythonhosted.org/calmap/になりました。これは、プログラマが非常に小さなコードでカレンダーヒートマップを作成することを可能にします。

リンクから:NPとして

輸入numpyの。 yearplotを使用して、PD 輸入calmap

all_days = pd.date_range('1/15/2014', periods=700, freq='D') days = np.random.choice(all_days, 500) events = pd.Series(np.random.randn(len(days)), index=days)

としてnp.random.seed(合計(マップ(ORD、 'calmap'))) 輸入パンダ()、我々は簡単に超えるこれらのイベントのヒートマップをプロットすることができます年:

calmap.yearplot(events, year=2015)

関連する問題