python、pandas、matplotlibを使用した幸福度チャート

画像



冬は本当に素晴らしい時期です。 でも、冬になって起きて仕事に出るといつも思っているのに、日光が見えずに仕事から戻ってきます。 今日、私は日の出と日の入りのデータを視覚化し、多くの人によく知られている日常業務(勤務時間と起床時間)と関連付けたいと思いました。 作業には、Python(pandas + matplotlib)を使用します。 その結果を見てみましょう。



まず、視覚化できるデータが必要です。 ここで適切なキットを見つけました。 ページには、日付、日の出と日の入り、天頂と夏時間のデータを含む2つのテーブルと、市民、航海、天文のたそがれに関するデータがあります。 仕事には、日の出と日の入りの時間、市民のたそがれに関する情報、そしてもちろん、タイムラインに提示できる日付が必要です。



便宜上、プロジェクトフォルダー/ sumerkiを作成し、その中に/ inputフォルダーとアプリケーションスクリプトsumerki.pyを作成します。 入力フォルダーに、2つのファイルsumerki_1.txtとsumerki_2.txtを配置します。ここでは、サイトからテーブルを単純にコピーします。 テーブルの最初の行は次のようになります。



  1月1日09:00:39 12:33:54 16:07:09 07:06:29 +1:16
 08:14:08 07:25:39 06:40:27 18:27:20 17:42:09 16:53:40 




外部ソースからのデータで十分でしたが、今は覚醒の時間と作業時間を示すために残っています。 さらに苦労せずに、次の時間間隔を取ることにしました:目覚めのために07:00:00-20:00:00と営業日09:00:00-18:00:00。



構造はすべて明らかです。 Pythonコードを入手しましょう。



まず、必要なインポートをすべて行い、小さな設定を行います。



import os import datetime import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates from matplotlib import rc #           def stn(dstr): return mdates.datestr2num(dstr.tolist()) #         matplotlib font = {'family': 'Verdana', 'weight': 'normal'} rc('font', **font) DIR = os.path.dirname('__File__')
      
      





パンダでデータを形成しましょう(出力では、2つのデータフレームを取得します。これらのデータフレームで、S、Wを使用します)。



 #               s1 = open(os.path.join(DIR, 'input', 'sumerki_1.txt'), 'r').read().split('\n') s2 = open(os.path.join(DIR, 'input', 'sumerki_2.txt'), 'r').read().split('\n') oday = datetime.datetime.strptime('01.01.2016', '%d.%m.%Y') dates = [oday + datetime.timedelta(days=dt) for dt in range(len(s1))] #            (0, 24) s = [[dates[i[0]]] + s1[i[0]].split('\t') + s2[i[0]].split('\t') + ['00:00:01', '23:59:59'] for i in enumerate(s1)] columns = ['datetime', 'date', 'voshod', 'zenit', 'zahod', 'dolgota', 'cng', 'sum1_from', 'sum2_from', 'sum3_from', 'sum3_to', 'sum2_to', 'sum1_to', '0', '24'] S = pd.DataFrame(s, columns=columns) #  ,      /   () w = [[dt, '07:00:00', '09:00:00', '18:00:00', '20:00:00'] for dt in dates] columns = ['datetime', 'life_from', 'work_from', 'work_to', 'life_to'] W = pd.DataFrame(w, columns=columns)
      
      





ここで、受信したすべてのデータをチャートに表示するだけです。 便宜上、昼間は黄色、夕暮れはオレンジ、暗闇は星の青みがかった色を選択しようとしました。



 #      fig, ax = plt.subplots() plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) plt.gca().xaxis.set_major_locator(mdates.MonthLocator()) plt.gcf().autofmt_xdate() #      l1, = ax.plot(S['datetime'], stn(S['voshod']), 'r-', label='') l2, = ax.plot(S['datetime'], stn(S['zahod']), 'b-', label='') l3, = ax.plot(S['datetime'], stn(S['sum1_from']), 'g-', label=' ()') l4, = ax.plot(S['datetime'], stn(S['sum1_to']), 'm-', label=' ()') l5, = ax.plot(W['datetime'], stn(W['work_from']), 'k-', label=' ') l6, = ax.plot(S['datetime'], stn(W['work_to']), 'k-', label=' ') l7, = ax.plot(S['datetime'], stn(W['life_from']), 'k-', label=' ') l8, = ax.plot(S['datetime'], stn(W['life_to']), 'k-', label=' ') #    # - plt.fill_between(S['datetime'].tolist(), stn(S['voshod']), stn(S['zahod']), alpha=0.4, color='yellow', hatch='.') # C plt.fill_between(S['datetime'].tolist(), stn(S['sum1_from']), stn(S['voshod']), alpha=0.4, color='orange', hatch='.') plt.fill_between(S['datetime'].tolist(), stn(S['zahod']), stn(S['sum1_to']), alpha=0.4, color='orange', hatch='.') #  plt.fill_between(S['datetime'].tolist(), stn(S['0']), stn(S['sum1_from']), alpha=0.4, color='blue', hatch='*') plt.fill_between(S['datetime'].tolist(), stn(S['sum1_to']), stn(S['24']), alpha=0.4, color='blue', hatch='*') #      plt.fill_between(W['datetime'].tolist(), stn(W['work_from']), stn(W['work_to']), alpha=0.1, color='blue', hatch='/') plt.fill_between(W['datetime'].tolist(), stn(W['life_from']), stn(W['life_to']), alpha=0.1, color='blue', hatch='/') # ,    ax.yaxis_date() ax.xaxis_date() ax.set_xlabel("") ax.set_ylabel("") plt.title('    ( )   .') plt.legend(handles=[l1, l2, l3, l4, l6, l8], loc=1, fontsize=11) fig.autofmt_xdate() #       plt.show()
      
      







UPD(2016年1月13日)

myxoのリクエストに応じて、さまざまな緯度のグラフをいくつか提供します。 元の記事では、モスクワのスケジュール(UTC +3)。

カリーニングラード(UTC + 2)
画像



サンクトペテルブルク(UTC + 3)
画像



エカテリンブルク(UTC + 5)
画像



ノボシビルスク(UTC + 6)
画像





これらのグラフを見ると、結論から次のことがわかります。



結論に加えて、どの都市が人に適しているかについて考えます。 例えば、エカテリンブルクは私に最も感銘を受けました-特に私のように早起きの習慣がある場合は、一日の早い時間に一年中起きるのは本当に素晴らしいです。 私の愛するサンクトペテルブルクには独自の魅力があり、「白い夜」だけでなく、その雰囲気と比類のない魅力にも感銘を受けます。



ご清聴ありがとうございました!



All Articles