
冬は本当に素晴らしい時期です。 でも、冬になって起きて仕事に出るといつも思っているのに、日光が見えずに仕事から戻ってきます。 今日、私は日の出と日の入りのデータを視覚化し、多くの人によく知られている日常業務(勤務時間と起床時間)と関連付けたいと思いました。 作業には、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)

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