コード例 #1
0
def generate_graph(fname, ttype, utype):
    """
    Make Daily Graph
    :param fname:
    :param ttype:
    :param utype:
    :return:
    """
    # Basic Setting
    sns.set(style='darkgrid')
    myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
    path = "../Data/Graph/Statistic_Graph/Day/" + fname[6:-2]
    if not os.path.isdir(path):
        os.mkdir(path)
    color_array = ['Blue', 'Red', 'Green']
    label_array = ['Borrow', 'Return', 'Total']

    # Load data and plot
    borrow_data, return_data = LoadData.load_station_count(fname, ttype, utype)

    # print('borrow_data\n', borrow_data.head())
    # print('return_data\n', return_data.head())
    # x=input()

    header = list(borrow_data.columns)
    x_data = np.array(borrow_data.index)
    print('x_data', x_data)

    x_data = np.array([i for i in range(24)])
    for col in header:
        fig, ax = plt.subplots(figsize=(8, 6), dpi=100)
        y1_data = borrow_data[col].values.T
        y2_data = return_data[col].values.T
        y3_data = y1_data + y2_data
        ax.plot(x_data, y1_data, color=color_array[0], label=label_array[0])
        ax.plot(x_data, y2_data, color=color_array[1], label=label_array[1])
        ax.plot(x_data, y3_data, color=color_array[2], label=label_array[2])

        plt.title(col, fontproperties=myfont)
        plt.xlabel('Time')
        plt.ylabel('Count')
        plt.xticks(np.arange(24), borrow_data.index, rotation=45)
        if np.sum(y3_data) == 0:
            plt.ylim(ymin=0)
        else:
            plt.ylim(ymin=0, ymax=np.max(y3_data))

        # Put a nicer background color on the legend.
        legend = ax.legend(loc='upper right')
        legend.get_frame().set_facecolor('C0')
        try:
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        except FileNotFoundError:
            col = col.replace('/', '-')
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        plt.ion()
        plt.pause(1)
        plt.close()
コード例 #2
0
 def week_time_series(fname, ttype, utype):
     """
     以一周 7天去統計每一小時區間的使用次數
     開始天數往後推 7天, 第一天 2015-01-01 是禮拜四
     以 day_time_series 計算完的 csv 檔去產生新的 csv
     """
     header = ['Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed']
     idx = []
     pd_borrow_data, pd_return_data = (pd.DataFrame() for _ in range(2))
     for file, days in zip(fname, header):
         borrow_data, return_data = LoadData.load_station_count(
             file, ttype, utype)
         idx += [(days, ) + make_tuple(x) for x in borrow_data.index]
         pd_borrow_data = pd.concat((pd_borrow_data, borrow_data),
                                    axis=0,
                                    ignore_index=True)
         pd_return_data = pd.concat((pd_return_data, return_data),
                                    axis=0,
                                    ignore_index=True)
     pd_borrow_data.index = idx
     pd_return_data.index = idx
     # print('pd_borrow_data\n', pd_borrow_data.head())
     # print('pd_return_data\n', pd_return_data.head())
     name = fname[0][6:16] + '~' + fname[-1][6:16]
     Export.week_station_count(pd_borrow_data, name, utype[0])
     Export.week_station_count(pd_return_data, name, utype[1])
コード例 #3
0
    def month_time_series(fname, ttype, utype):
        """
        以一月的天數去統計每天的使用次數
        第一個月是 2015-01 ~ 2017-05
        以 day_time_series 計算完的 csv 檔去產生新的 csv
        """
        target_timestamp = np.array([])
        start_date = datetime.datetime(2015, 1, 1)
        end_date = datetime.datetime(2017, 5, 31)
        for dt in rrule(MONTHLY, dtstart=start_date, until=end_date):
            target_timestamp = np.append(target_timestamp,
                                         dt.strftime("%Y-%m"))
        # print('target_timestamp\n', target_timestamp)

        for timestamp in target_timestamp:
            element = [x for x in fname if x.find(timestamp) != -1]
            np_borrow, np_return = (np.array([]) for _ in range(2))
            idx = np.array([])
            columns = np.array([])

            for field in element:
                idx = np.append(idx, field[6:16])
                borrow_data, return_data = LoadData.load_station_count(
                    field, ttype, utype)
                if columns.size == 0:
                    columns = borrow_data.columns

                # np_data1-> sum of the borrow_data
                # np_data2-> sum of the return_data
                np_data1 = np.sum(borrow_data.values, axis=0).reshape(1, -1)
                np_data2 = np.sum(return_data.values, axis=0).reshape(1, -1)
                if np_borrow.size == 0:
                    np_borrow = np_data1
                else:
                    np_borrow = np.concatenate((np_borrow, np_data1), axis=0)

                if np_return.size == 0:
                    np_return = np_data2
                else:
                    np_return = np.concatenate((np_return, np_data2), axis=0)

            # print('np_borrow\n', np_borrow, np_borrow.shape)
            # print('np_return\n', np_return, np_return.shape)
            pd_borrow = pd.DataFrame(np_borrow, columns=columns, index=idx)
            pd_return = pd.DataFrame(np_return, columns=columns, index=idx)
            Export.month_station_count(pd_borrow, timestamp, utype[0])
            Export.month_station_count(pd_return, timestamp, utype[1])
コード例 #4
0
def graph_by_hour(fname, ttype, utype):
    """
    Month Graph(Build One Month -> 24 hours on each day)
    Ubike-DataMining\\Data\\NewUbike\\UbikeStatistic\\Day\\
    """
    # Basic Setting
    header = [x[14:16] for x in fname]
    sns.set(style='darkgrid')
    myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
    color_array = ['Blue', 'Red', 'Green']
    label_array = ['Borrow', 'Return', 'Total']
    line_size = 0.7

    # Open or Create a folder
    name = fname[0][6:13]
    path = "../Data/Graph/Statistic_Graph/Month(hour)/" + name
    if not os.path.isdir(path):
        os.mkdir(path)

    # Load data and plot
    # x_data = np.array([i for i in range(24 * len(header))])
    pd_borrow_data, pd_return_data = (pd.DataFrame() for _ in range(2))
    for file in fname:
        borrow_data, return_data = LoadData.load_station_count(
            file, ttype, utype)
        pd_borrow_data = pd.concat((pd_borrow_data, borrow_data), axis=0)
        pd_return_data = pd.concat((pd_return_data, return_data), axis=0)

    for col in pd_borrow_data.columns:
        y1_data = pd_borrow_data[col].values
        y2_data = pd_return_data[col].values
        y3_data = y1_data + y2_data

        f, axarr = plt.subplots(3, 1, sharex='all', figsize=(16, 8), dpi=100)
        axarr[0].plot(y1_data,
                      color=color_array[0],
                      label=label_array[0],
                      linewidth=line_size)
        axarr[1].plot(y2_data,
                      color=color_array[1],
                      label=label_array[1],
                      linewidth=line_size)
        axarr[2].plot(y3_data,
                      color=color_array[2],
                      label=label_array[2],
                      linewidth=line_size)

        # Graph Setting
        # plt.tight_layout()
        axarr[0].set_title(col + '(' + name + ')', fontproperties=myfont)
        plt.xticks(np.arange(0, 24 * len(header), 24),
                   header,
                   rotation=0,
                   fontsize=12)
        for sub_plot in axarr:
            sub_plot.legend(loc='upper right')
            sub_plot.set_ylim(
                ymin=0) if np.sum(y3_data) == 0 else sub_plot.set_ylim(
                    ymin=0, ymax=np.max(y3_data))
            sub_plot.set_ylabel('次數', fontproperties=myfont)
        try:
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        except FileNotFoundError:
            col = col.replace('/', '-')
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        # plt.ion()
        # plt.pause(1)
        plt.close()
コード例 #5
0
start = time.time()

# 小波分解的層數
layer = 15

# 起始年和到哪年為止
syear = 2015
eyear = 2016
timeseries = generate_target_timeseries(syear, eyear)

# 讀檔,將每個csv檔案的資料取出
for series, target_timestamp in timeseries.items():
    total_borrow_data = pd.DataFrame()
    total_return_data = pd.DataFrame()
    for target in target_timestamp:
        borrow_data, return_data = LoadData.load_station_count(
            target, 'Day', ['BorrowStation', 'ReturnStation'])
        total_borrow_data = pd.concat((total_borrow_data, borrow_data), axis=0)
        total_return_data = pd.concat((total_return_data, return_data), axis=0)
    #
    print(total_borrow_data.shape)
    print(total_return_data.shape)

    # 進行小波分解(0 ~ N 層)
    # 並做出相對應的小波分解後的視覺化圖
    algorithm = pywt.Wavelet('db2')
    wavelet = WaveletTransform(total_borrow_data,
                               total_return_data,
                               int(layer),
                               algorithm,
                               interval=series[0])
    wavelet.fit_transform()
コード例 #6
0
def generate_graph(fname, ttype, utype):
    """
    Week Graph(Monday~Sunday)
    如果要畫一周圖的話,可以每次都先讀入 7份csv檔案來作圖
    :param fname: file name
    :param ttype: Week
    :param utype: Borrow, Return
    :return:
    """
    # Basic Setting
    header = ['Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed']
    sns.set(style='darkgrid')
    myfont = fm.FontProperties(fname='C:/Windows/Fonts/msyh.ttc')
    path = "../Data/Graph/Statistic_Graph/Week/" + fname[0][
        6:16] + '~' + fname[-1][6:16]
    if not os.path.isdir(path):
        os.mkdir(path)
    color_array = ['Blue', 'Red', 'Green']
    label_array = ['Borrow', 'Return', 'Total']

    # Load data and plot
    x_data = np.array([i for i in range(24 * len(header))])
    pd_borrow_data, pd_return_data = (pd.DataFrame() for _ in range(2))
    for file in fname:
        borrow_data, return_data = LoadData.load_station_count(
            file, ttype, utype)
        pd_borrow_data = pd.concat((pd_borrow_data, borrow_data), axis=0)
        pd_return_data = pd.concat((pd_return_data, return_data), axis=0)

    for col in pd_borrow_data.columns:
        fig, ax = plt.subplots(figsize=(16, 8), dpi=100)
        y1_data = pd_borrow_data[col].values
        y2_data = pd_return_data[col].values
        y3_data = y1_data + y2_data
        ax.plot(x_data, y1_data, color=color_array[0], label=label_array[0])
        ax.plot(x_data, y2_data, color=color_array[1], label=label_array[1])
        ax.plot(x_data, y3_data, color=color_array[2], label=label_array[2])

        plt.title(col + '(' + fname[0][6:16] + '~' + fname[-1][6:16] + ')',
                  fontproperties=myfont)
        plt.xlabel('時間軸', fontproperties=myfont)
        plt.ylabel('租借次數', fontproperties=myfont)
        plt.xticks(np.arange(0, 24 * len(header), 24),
                   header,
                   rotation=45,
                   fontsize=12)
        # plt.xticks(range(len(header)), rotation=45)
        if np.sum(y3_data) == 0:
            plt.ylim(ymin=0)
        else:
            plt.ylim(ymin=0, ymax=np.max(y3_data))

        # Put a nicer background color on the legend.
        legend = ax.legend(loc='upper right')
        legend.get_frame().set_facecolor('C0')
        # manager = plt.get_current_fig_manager()
        # manager.window.showMaximized()
        try:
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        except FileNotFoundError:
            col = col.replace('/', '-')
            photo_path = path + '/' + col + '.png'
            plt.savefig(photo_path)
        # plt.ion()
        # plt.pause(1)
        plt.close()