Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊
matplotlib官方文檔:https://matplotlib.org/stable/users/index.html
matplotlib是一個(gè)繪圖庫(kù),它可以創(chuàng)建常用的統(tǒng)計(jì)圖,包括條形圖、箱型圖、折線圖、散點(diǎn)圖、餅圖和直方圖。
一、條形圖bar()
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') # 修改背景為條紋 plt.style.use('ggplot') classes = ['3班', '4班', '5班', '6班'] classes_index = range(len(classes)) print(list(classes_index)) # [0, 1, 2, 3] student_amounts = [66, 55, 45, 70] # 畫布設(shè)置 fig = plt.figure() # 1,1,1表示一張畫布切割成1行1列共一張圖的第1個(gè);2,2,1表示一張畫布切割成2行2列共4張圖的第一個(gè)(左上角) ax1 = fig.add_subplot(1, 1, 1) ax1.bar(classes_index, student_amounts, align='center', color='darkblue') ax1.xaxis.set_ticks_position('bottom') ax1.yaxis.set_ticks_position('left') plt.xticks(classes_index, classes, rotation=0, fontsize=13, fontproperties=font) plt.xlabel('班級(jí)', fontproperties=font, fontsize=15) plt.ylabel('學(xué)生人數(shù)', fontproperties=font, fontsize=15) plt.title('班級(jí)-學(xué)生人數(shù)', fontproperties=font, fontsize=20) # 保存圖片,bbox_inches='tight'去掉圖形四周的空白 # plt.savefig('classes_students.png', dpi=400, bbox_inches='tight') plt.show()
二、直方圖
import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') # 修改背景為條紋 plt.style.use('ggplot') mu1, mu2, sigma = 50, 100, 10 # 構(gòu)造均值為50的符合正態(tài)分布的數(shù)據(jù) x1 = mu1 + sigma * np.random.randn(10000) print(x1) # [59.00855949 43.16272141 48.77109774 ... 57.94645859 54.70312714 # 58.94125528] # 構(gòu)造均值為100的符合正態(tài)分布的數(shù)據(jù) x2 = mu2 + sigma * np.random.randn(10000) print(x2) # [115.19915511 82.09208214 110.88092454 ... 95.0872103 104.21549068 # 133.36025251] fig = plt.figure() ax1 = fig.add_subplot(121) # bins=50表示每個(gè)變量的值分成50份,即會(huì)有50根柱子 ax1.hist(x1, bins=50, color='darkgreen') ax2 = fig.add_subplot(122) ax2.hist(x2, bins=50, color='orange') fig.suptitle('兩個(gè)正態(tài)分布', fontproperties=font, fontweight='bold', fontsize=15) ax1.set_title('綠色的正態(tài)分布', fontproperties=font) ax2.set_title('橙色的正態(tài)分布', fontproperties=font) plt.show()
三、折線圖
import numpy as np from numpy.random import randn import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') # 修改背景為條紋 plt.style.use('ggplot') np.random.seed(1) # 使用numpy的累加和,保證數(shù)據(jù)取值范圍不會(huì)在(0,1)內(nèi)波動(dòng) plot_data1 = randn(40).cumsum() print(plot_data1) # [ 1.62434536 1.01258895 0.4844172 -0.58855142 0.2768562 -2.02468249 # -0.27987073 -1.04107763 -0.72203853 -0.97140891 0.49069903 -1.56944168 # -1.89185888 -2.27591324 -1.1421438 -2.24203506 -2.41446327 -3.29232169 # -3.25010794 -2.66729273 -3.76791191 -2.6231882 -1.72159748 -1.21910314 # -0.31824719 -1.00197505 -1.12486527 -2.06063471 -2.32852279 -1.79816732 # -2.48982807 -2.8865816 -3.5737543 -4.41895994 -5.09020607 -5.10287067 # -6.22018102 -5.98576532 -4.32596314 -3.58391898] plot_data2 = randn(40).cumsum() plot_data3 = randn(40).cumsum() plot_data4 = randn(40).cumsum() plt.plot(plot_data1, marker='o', color='red', linestyle='-', label='紅實(shí)線') plt.plot(plot_data2, marker='x', color='orange', linestyle='--', label='橙虛線') plt.plot(plot_data3, marker='*', color='yellow', linestyle='-.', label='黃點(diǎn)線') plt.plot(plot_data4, marker='s', color='green', linestyle=':', label='綠點(diǎn)圖') # loc='best'給label自動(dòng)選擇最好的位置 plt.legend(loc='best', prop=font) plt.show()
四、散點(diǎn)圖+直線圖
import numpy as np from numpy.random import randn import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') # 修改背景為條紋 plt.style.use('ggplot') x = np.arange(1, 20, 1) print(x) # [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] # 擬合一條水平散點(diǎn)線 np.random.seed(1) y_linear = x + 10 * np.random.randn(19) # print(y_linear) # [ 17.24345364 -4.11756414 -2.28171752 -6.72968622 13.65407629 # -17.01538697 24.44811764 0.38793099 12.19039096 7.50629625 # 25.62107937 -8.60140709 9.77582796 10.15945645 26.33769442 # 5.00108733 15.27571792 9.22141582 19.42213747] # 擬合一條x2的散點(diǎn)線 y_quad = x**2 + 10 * np.random.randn(19) print(y_quad) # [ 6.82815214 -7.00619177 20.4472371 25.01590721 30.02494339 # 45.00855949 42.16272141 62.77109774 71.64230566 97.3211192 # 126.30355467 137.08339248 165.03246473 189.128273 216.54794359 # 249.28753869 288.87335401 312.82689651 363.34415698] # s是散點(diǎn)大小 fig = plt.figure() ax1 = fig.add_subplot(121) plt.scatter(x, y_linear, s=30, color='r', label='藍(lán)點(diǎn)') plt.scatter(x, y_quad, s=100, color='b', label='紅點(diǎn)') ax2 = fig.add_subplot(122) plt.plot(x, y_linear, color='r') plt.plot(x, y_quad, color='b') # 限制x軸和y軸的范圍取值 plt.xlim(min(x) - 1, max(x) + 1) plt.ylim(min(y_quad) - 10, max(y_quad) + 10) fig.suptitle('散點(diǎn)圖+直線圖', fontproperties=font, fontsize=20) ax1.set_title('散點(diǎn)圖', fontproperties=font) ax1.legend(prop=font) ax2.set_title('直線圖', fontproperties=font) plt.show()
五、餅圖
import numpy as np import matplotlib.pyplot as plt from pylab import mpl from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') mpl.rcParams['font.sans-serif'] = ['SimHei'] fig, ax = plt.subplots(subplot_kw=dict(aspect="equal")) recipe = ['優(yōu)', '良', '輕度污染', '中度污染', '重度污染', '嚴(yán)重污染', '缺'] data = [2, 49, 21, 9, 11, 6, 2] colors = ['lime', 'yellow', 'darkorange', 'red', 'purple', 'maroon', 'grey'] wedges, texts, texts2 = ax.pie(data, wedgeprops=dict(width=0.5), startangle=40, colors=colors, autopct='%1.0f%%', pctdistance=0.8) plt.setp(texts2, size=14, weight="bold") bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72) kw = dict(xycoords='data', textcoords='data', arrowprops=dict(arrowstyle="->"), bbox=None, zorder=0, va="center") for i, p in enumerate(wedges): ang = (p.theta2 - p.theta1) / 2. + p.theta1 y = np.sin(np.deg2rad(ang)) x = np.cos(np.deg2rad(ang)) horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))] connectionstyle = "angle,angleA=0,angleB={}".format(ang) kw["arrowprops"].update({"connectionstyle": connectionstyle}) ax.annotate(recipe[i], xy=(x, y), xytext=(1.25 * np.sign(x), 1.3 * y), size=16, horizontalalignment=horizontalalignment, fontproperties=font, **kw) ax.set_title("餅圖示例", fontproperties=font) plt.show() # plt.savefig('jiaopie2.png')
六、箱型圖
箱型圖:又稱為盒須圖、盒式圖、盒狀圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計(jì)圖(在數(shù)據(jù)分析中常用在異常值檢測(cè))
包含一組數(shù)據(jù)的:最大值、最小值、中位數(shù)、上四分位數(shù)(Q3)、下四分位數(shù)(Q1)、異常值
- 中位數(shù) →一組數(shù)據(jù)平均分成兩份,中間的數(shù)
- 上四分位數(shù)Q1 →是將序列平均分成四份,計(jì)算(n+1)/4與(n-1)/4兩種,一般使用(n+1)/4
- 下四分位數(shù)Q3 →是將序列平均分成四份,計(jì)算(1+n)/4*3=6.75
- 內(nèi)限 →T形的盒須就是內(nèi)限,最大值區(qū)間Q3+1.5IQR,最小值區(qū)間Q1-1.5IQR (IQR=Q3-Q1)
- 外限 →T形的盒須就是內(nèi)限,最大值區(qū)間Q3+3IQR,最小值區(qū)間Q1-3IQR (IQR=Q3-Q1)
- 異常值 →內(nèi)限之外 - 中度異常,外限之外 - 極度異常
import numpy as np import matplotlib.pyplot as plt import pandas as pd from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) plt.figure(figsize=(10, 4)) # 創(chuàng)建圖表、數(shù)據(jù) f = df.boxplot( sym='o', # 異常點(diǎn)形狀,參考marker vert=True, # 是否垂直 whis=1.5, # IQR,默認(rèn)1.5,也可以設(shè)置區(qū)間比如[5,95],代表強(qiáng)制上下邊緣為數(shù)據(jù)95%和5%位置 patch_artist=True, # 上下四分位框內(nèi)是否填充,True為填充 meanline=False, showmeans=True, # 是否有均值線及其形狀 showbox=True, # 是否顯示箱線 showcaps=True, # 是否顯示邊緣線 showfliers=True, # 是否顯示異常值 notch=False, # 中間箱體是否缺口 return_type='dict' # 返回類型為字典 ) plt.title('boxplot') for box in f['boxes']: box.set(color='b', linewidth=1) # 箱體邊框顏色 box.set(facecolor='b', alpha=0.5) # 箱體內(nèi)部填充顏色 for whisker in f['whiskers']: whisker.set(color='k', linewidth=0.5, linestyle='-') for cap in f['caps']: cap.set(color='gray', linewidth=2) for median in f['medians']: median.set(color='DarkBlue', linewidth=2) for flier in f['fliers']: flier.set(marker='o', color='y', alpha=0.5) # boxes, 箱線 # medians, 中位值的橫線, # whiskers, 從box到error bar之間的豎線. # fliers, 異常值 # caps, error bar橫線 # means, 均值的橫線 plt.show()
七、plot函數(shù)參數(shù)
- 線型linestyle(-,-.,--,..)
- 點(diǎn)型marker(v,^,s,*,H,+,x,D,o,…)
- 顏色color(b,g,r,y,k,w,…)
八、圖像標(biāo)注參數(shù)
- 設(shè)置圖像標(biāo)題:plt.title()
- 設(shè)置x軸名稱:plt.xlabel()
- 設(shè)置y軸名稱:plt.ylabel()
- 設(shè)置X軸范圍:plt.xlim()
- 設(shè)置Y軸范圍:plt.ylim()
- 設(shè)置X軸刻度:plt.xticks()
- 設(shè)置Y軸刻度:plt.yticks()
- 設(shè)置曲線圖例:plt.legend()
九、Matplolib應(yīng)用
import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc') header_list = ['方程組', '函數(shù)', '導(dǎo)數(shù)', '微積分', '線性代數(shù)', '概率論', '統(tǒng)計(jì)學(xué)'] py3_df = pd.read_excel('py3.xlsx', header=None, skiprows=[0, 1], names=header_list) # 處理帶有NaN的行 py3_df = py3_df.dropna(axis=0) # print(py3_df) # 自定義映射 map_dict = { '不會(huì)': 0, '了解': 1, '熟悉': 2, '使用過(guò)': 3, } for header in header_list: py3_df[header] = py3_df[header].map(map_dict) unable_series = (py3_df == 0).sum(axis=0) know_series = (py3_df == 1).sum(axis=0) familiar_series = (py3_df == 2).sum(axis=0) use_series = (py3_df == 3).sum(axis=0) unable_label = '不會(huì)' know_label = '了解' familiar_label = '熟悉' use_label = '使用過(guò)' for i in range(len(header_list)): bottom = 0 # 描繪不會(huì)的條形圖 plt.bar(x=header_list[i], height=unable_series[i], width=0.60, color='r', label=unable_label) if unable_series[i] != 0: plt.text(header_list[i], bottom, s=unable_series[i], ha='center', va='bottom', fontsize=15, color='white') bottom += unable_series[i] # 描繪了解的條形圖 plt.bar(x=header_list[i], height=know_series[i], width=0.60, color='y', bottom=bottom, label=know_label) if know_series[i] != 0: plt.text(header_list[i], bottom, s=know_series[i], ha='center', va='bottom', fontsize=15, color='white') bottom += know_series[i] # 描繪熟悉的條形圖 plt.bar(x=header_list[i], height=familiar_series[i], width=0.60, color='g', bottom=bottom, label=familiar_label) if familiar_series[i] != 0: plt.text(header_list[i], bottom, s=familiar_series[i], ha='center', va='bottom', fontsize=15, color='white') bottom += familiar_series[i] # 描繪使用過(guò)的條形圖 plt.bar(x=header_list[i], height=use_series[i], width=0.60, color='b', bottom=bottom, label=use_label) if use_series[i] != 0: plt.text(header_list[i], bottom, s=use_series[i], ha='center', va='bottom', fontsize=15, color='white') unable_label = know_label = familiar_label = use_label = '' plt.xticks(header_list, fontproperties=font) plt.ylabel('人數(shù)', fontproperties=font) plt.title('Python3期數(shù)學(xué)摸底可視化', fontproperties=font) plt.legend(prop=font, loc='upper left') plt.show()
方程組 函數(shù) 導(dǎo)數(shù) 微積分 線性代數(shù) 概率論 統(tǒng)計(jì)學(xué) 0 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 1 使用過(guò) 使用過(guò) 了解 不會(huì) 不會(huì) 不會(huì) 不會(huì) 2 使用過(guò) 使用過(guò) 熟悉 不會(huì) 不會(huì) 不會(huì) 不會(huì) 3 熟悉 熟悉 熟悉 了解 了解 了解 了解 4 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 5 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 了解 6 熟悉 熟悉 熟悉 熟悉 熟悉 熟悉 不會(huì) 7 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 8 熟悉 熟悉 熟悉 熟悉 熟悉 使用過(guò) 使用過(guò) 9 熟悉 熟悉 使用過(guò) 不會(huì) 使用過(guò) 使用過(guò) 不會(huì) 10 使用過(guò) 使用過(guò) 熟悉 熟悉 熟悉 熟悉 熟悉 11 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 12 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 13 使用過(guò) 使用過(guò) 了解 不會(huì) 不會(huì) 不會(huì) 不會(huì) 14 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 15 使用過(guò) 使用過(guò) 熟悉 不會(huì) 不會(huì) 不會(huì) 不會(huì) 16 熟悉 熟悉 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 17 使用過(guò) 使用過(guò) 使用過(guò) 了解 不會(huì) 不會(huì) 不會(huì) 18 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 熟悉 熟悉 熟悉 19 使用過(guò) 使用過(guò) 使用過(guò) 了解 不會(huì) 不會(huì) 不會(huì) 20 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 21 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 22 使用過(guò) 很了解 熟悉 了解一點(diǎn),不會(huì)運(yùn)用 了解一點(diǎn),不會(huì)運(yùn)用 了解 不會(huì) 23 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 熟悉 使用過(guò) 熟悉 24 熟悉 熟悉 熟悉 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 25 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 26 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 27 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 28 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 了解 29 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 了解 不會(huì) 30 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 31 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 使用過(guò) 使用過(guò) 32 熟悉 熟悉 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 33 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 熟悉 使用過(guò) 熟悉 34 熟悉 熟悉 熟悉 使用過(guò) 使用過(guò) 熟悉 不會(huì) 35 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 36 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 了解 37 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 38 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 39 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 40 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 41 使用過(guò) 使用過(guò) 熟悉 了解 了解 了解 不會(huì) 42 使用過(guò) 使用過(guò) 使用過(guò) 不會(huì) 不會(huì) 不會(huì) 不會(huì) 43 熟悉 使用過(guò) 了解 了解 不會(huì) 不會(huì) 不會(huì)
到此這篇關(guān)于Python中數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化
- Python?matplotlib數(shù)據(jù)可視化圖繪制
- python數(shù)據(jù)可視化matplotlib繪制折線圖示例
- Python數(shù)據(jù)分析應(yīng)用之Matplotlib數(shù)據(jù)可視化詳情
- Python數(shù)據(jù)可視化之matplotlib.pyplot繪圖的基本參數(shù)詳解
- Python數(shù)據(jù)可視化之使用matplotlib繪制簡(jiǎn)單圖表
- Python利用matplotlib模塊數(shù)據(jù)可視化繪制3D圖
- Python Matplotlib數(shù)據(jù)可視化模塊使用詳解
相關(guān)文章
python讀取與處理netcdf數(shù)據(jù)方式
今天小編就為大家分享一篇python讀取與處理netcdf數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02狀態(tài)機(jī)的概念和在Python下使用狀態(tài)機(jī)的教程
這篇文章主要介紹了狀態(tài)機(jī)的概念和在Python下使用狀態(tài)機(jī)的教程,本文來(lái)自于IBM官方開發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04Python對(duì)切片命名的實(shí)現(xiàn)方法
在本篇文章里我們給大家分享了關(guān)于Python對(duì)切片命名的實(shí)現(xiàn)方法的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。2018-10-10Appium自動(dòng)化測(cè)試實(shí)現(xiàn)九宮格解鎖
本文主要介紹了Appium自動(dòng)化測(cè)試實(shí)現(xiàn)九宮格解鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02python使用tomorrow實(shí)現(xiàn)多線程的例子
今天小編就為大家分享一篇python使用tomorrow實(shí)現(xiàn)多線程的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python簡(jiǎn)單實(shí)現(xiàn)區(qū)域生長(zhǎng)方式
今天小編就為大家分享一篇Python簡(jiǎn)單實(shí)現(xiàn)區(qū)域生長(zhǎng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01對(duì)python3中pathlib庫(kù)的Path類的使用詳解
今天小編就為大家分享一篇對(duì)python3中pathlib庫(kù)的Path類的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python使用正則匹配實(shí)現(xiàn)抓圖代碼分享
本文給大家分享的是個(gè)人的第一個(gè)作品,使用Python正則匹配實(shí)現(xiàn)抓圖代碼,非常的簡(jiǎn)單實(shí)用,推薦給大家,小伙伴們可以自由擴(kuò)展下。2015-04-04Python運(yùn)維自動(dòng)化之nginx配置文件對(duì)比操作示例
這篇文章主要介紹了Python運(yùn)維自動(dòng)化之nginx配置文件對(duì)比操作,涉及Python針對(duì)文件的讀取、遍歷、比較進(jìn)而達(dá)到差異對(duì)比的相關(guān)操作技巧,需要的朋友可以參考下2018-08-08