激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python庫 Bokeh 數據可視化實用指南

Python庫 Bokeh 數據可視化實用指南

2022-03-07 11:21Python學習與數據挖掘 Python

大家好,今天跟大家分享的是交互式可視化神器 Python Bokeh 的詳細使用教程,Bokeh是一個面向現代web瀏覽器的交互式可視化庫。它提供了多功能圖形的優雅、簡潔的構造,并在大型數據集或流式數據集上提供了高性能的交互性,接下

Python庫 Bokeh 數據可視化實用指南

 

什么是 Bokeh

Bokeh 是 Python 中的交互式可視化庫。Bokeh提供的最佳功能是針對現代 Web 瀏覽器進行演示的高度交互式圖形和繪圖。Bokeh 幫助我們制作出優雅、簡潔的圖表,其中包含各種圖表。

Python庫 Bokeh 數據可視化實用指南

Bokeh 主要側重于將數據源轉換為 JSON 格式,然后用作 BokehJS 的輸入。Bokeh的一些最佳功能是:

  • 靈活性: Bokeh 也為復雜的用例提供簡單的圖表和海關圖表。
  • 功能強: Bokeh 具有易于兼容的特性,可以與 Pandas 和 Jupyter 筆記本一起使用。
  • 樣式: 我們可以控制圖表,我們可以使用自定義 Javascript 輕松修改圖表。
  • 開源: Bokeh 提供了大量的示例和想法,并在 Berkeley Source Distribution (BSD) 許可下分發。

使用Bokeh,我們可以輕松地將大數據可視化并以吸引人的優雅方式創建不同的圖表。

 

在哪使用 Bokeh 圖

有很多可視化庫,為什么我們只需要使用Bokeh?我們可以使用 Bokeh 庫在網頁上嵌入圖表。使用Bokeh,我們可以將圖表嵌入網絡、制作實時儀表板和應用程序。Bokeh 為圖表提供了自己的樣式選項和小部件。這是使用 Flask 或 Django 在網站上嵌入Bokeh圖的優勢。

 

安裝Bokeh庫

用pip安裝Bokeh庫,運行以下命令

pip install pandas-Bokeh

為conda環境安裝Bokeh庫,運行以下命令

conda install -c patrikhlobil pandas-Bokeh

 

導入Bokeh庫

為Bokeh庫導入必要的包。

import pandas as pd
# pip install pandas_Bokeh
import pandas_Bokeh
from Bokeh.io import show, output_notebook
from Bokeh.plotting import figure
pandas_Bokeh.output_notebook()
pd.set_option("plotting.backend", "pandas_Bokeh")

Bokeh繪圖是一個用于創建交互式視覺效果的界面,我們從中導入 它作為保存我們圖表的容器。 figure

from Bokeh.plotting import figure

我們需要以下命令來顯示圖表。

from Bokeh.io import show, output_notebook

我們需要以下命令來在 jupyter notebook 中顯示圖表的輸出。

pandas_Bokeh.output_notebook()

要將圖表嵌入為 HTML,請運行以下命令。

pandas_bokeh.output_file(文件名)

Hovertool 用于在我們使用鼠標指針懸停在數據上時顯示值, ColumnDataSource 是 DataFrame 的 Bokeh 版本。

from Bokeh.models import HoverTool, ColumnDataSource

 

繪制圖表的語法

使用Pandas Bokeh

現在,通過以下代碼將Bokeh繪圖庫用于 Pandas 數據框。

dataframe.plot_Bokeh()

為Bokeh創建 Figure 對象

我們將創建一個圖形對象,它只不過是一個保存圖表的容器。我們可以給 figure() 對象取任何名字,這里我們給了 fig.

fig = figure()
"""
自定義繪圖代碼
"""
show(fig)

使用 ColumnDataSource 創建圖表

要將 ColumnDataSource 與渲染函數一起使用,我們至少需要傳遞 3 個參數:

  • x – 包含圖表 x 軸數據的 ColumnDataSource 列的名稱
  • y – 包含圖表 y 軸數據的 ColumnDataSource 列的名稱
  • source – ColumnDataSource 列的名稱,該列包含我們為 x 軸和 y 軸引用的數據

要在單獨的 HTML 文件中顯示輸出圖表,請運行以下命令。

output_file("abc.html")

 

使用Bokeh庫主題

Bokeh主題有一組預定義的設計,可以將它們應用到您的繪圖中。Bokeh 提供了五個內置主題。

  • caliber,
  • dark_minimal,
  • light_minimal,
  • night_sky,
  • contrast.

下圖顯示了圖表在內置主題中的外觀。在這里,我采取了不同主題的折線圖。

運行以下代碼以使用內置主題繪制圖表。

Python庫 Bokeh 數據可視化實用指南

 

圖表樣式

為了增強圖表,我們可以使用不同的屬性。對象共有的三組主要屬性:

  • 線屬性
  • 填充屬性
  • 文本屬性

基本造型

我將只添加自定義圖表所需的代碼,您可以根據需要添加代碼。最后,我將展示帶有演示代碼的圖表,以便清楚地理解。好吧,還有更多屬性的詳細解釋請參見官方文檔。

為圖表添加背景顏色。

fig = figure(background_fill_color="#fafafa")

設置圖表寬度和高度的值我們需要在figure()中添加高度和寬度。

fig = figure(height=350, width=500)

隱藏圖表的 x 軸和 y 軸。

fig.axis.visible=False

隱藏圖表的網格顏色。

fig.grid.grid_line_color = None

要更改圖表顏色的強度,我們使用 alpha 。

fig.background_fill_alpha=0.3

要為圖表添加標題,我們需要在 figure() 中添加標題。

fig = figure(title="abc")

要添加或更改 x 軸和 y 軸標簽,請運行以下命令。

fig.xaxis.axis_label="X-axis"
fig.yaxis.axis_label="Y-axis"

簡單樣式的演示圖表

x = list(range(11))
y0 = x

fig = figure(width=500, height=250,title="Title",background_fill_color="#fafafa")

fig.circle(x, y0, size=12, color="#53777a", alpha=0.8)
fig.grid.grid_line_color = None
fig.xaxis.axis_label="X-axis"
fig.yaxis.axis_label="Y-axis"

show(fig)

Python庫 Bokeh 數據可視化實用指南

使用 Bokeh.plotting 界面創建圖表的步驟是:

Python庫 Bokeh 數據可視化實用指南

  • 準備數據
  • 創建一個新的情節
  • 為您的數據添加渲染,以及您對繪圖的可視化自定義
  • 指定生成輸出的位置(在 HTML 文件中或在 Jupyter Notebook 中)
  • 顯示結果

 

Python 中的 Bokeh用例

 

數據

讓我們加載數據并再創建一個特征User ID;用戶 id 會告訴我們它像用戶 1、用戶 2 等哪個用戶。

import glob
path = "archive" 
all_files = glob.glob(path + "/*.csv")
li = []
usr=0
for filename in all_files:
    usr+=1
    df = pd.read_csv(filename, index_col=None, header=0)
    df["User ID"]=usr
    li.append(df)
df = pd.concat(li, axis=0, ignore_index=True)
df[:2]

Python庫 Bokeh 數據可視化實用指南

 

數據說明

  • Game Completed Date-游戲完成的日期和時間
  • Team團隊- 告訴我們玩家是冒名頂替者還是船員
  • Outcome結果- 告訴我們游戲是否贏/輸
  • Task Completed已完成的任務 - 船員完成的任務數
  • All Tasks Completed – 布爾變量顯示所有任務是否由船員完成
  • Murdered謀殺- 船員是否被謀殺
  • Imposter Kills冒名頂替者殺死 – 冒名頂替者的擊殺次數
  • Game Length游戲時長——游戲的總持續時間
  • Ejected - 玩家是否被其他玩家驅逐
  • Sabotages Fixed – 船員修復的破壞次數
  • Time to complete all tasks完成所有任務的時間——船員完成任務所用的時間
  • Rank Change排名變化- 比賽輸/贏后排名的變化
  • Region/Game Code地區/游戲代碼- 服務器和游戲代碼
  • User ID用戶 ID –用戶數量。

注意:本文不包含 EDA,但展示了如何在 Bokeh 中使用不同的圖表

看看數據的分布。

df.describe(include="O")

Python庫 Bokeh 數據可視化實用指南

我們將創建一個特征 Minute 并從 Game Lenght 中提取數據。

df["Min"] = df.apply(lambda x : x["Game Length"].split(" ")[0] , axis = 1)
df["Min"] = df["Min"].replace("m", "", regex=True)
df["Min"][:2]
0    07
1    16
Name: Min, dtype: object

現在,我們將替換 Murdered 特征的值。

df["Murdered"].replace(["No", "Yes", "-"], ["Not Murdered", "Murdered", "Missing"],inplace=True)

完成必要的清潔步驟后。首先,讓我們看看Bokeh中的基本圖表。

 

餅形圖

檢查一下游戲中是否有更多的船員或冒名頂替者,我們有總共 2227 人的數據。

  1. df_team = df.Team.value_counts() 
  2. df_team.plot_Bokeh(kind="pie", title="Ration of Mposter vs Crewmate"

Python庫 Bokeh 數據可視化實用指南

如圖所示,Cremates 占 79%,Imposters 占 21%,由此可見 Imposter: Crewmates 的比例為1:4。冒名頂替者較少,因此有可能贏得大部分比賽。

 

圓環圖

檢查游戲中是否有更多的船員或冒名頂替者被謀殺。我們將添加兩個我們將在圖表中使用的功能 Angle 和 Color。

from math import pi
df_mur = df.Murdered.value_counts().reset_index().rename(columns={"index": "Murdered", "Murdered": "Value"})
df_mur["Angle"] = df_mur["Value"]/df_mur["Value"].sum() * 2*pi
df_mur["Color"] = ["#3182bd", "#6baed6", "#9ecae1"]

df_mur

Python庫 Bokeh 數據可視化實用指南

將用annular_wedge()做一個圓環圖。

from Bokeh.transform import cumsum

fig = figure(plot_height=350,             toolbar_location=None,

tools="hover", tooltips="@Murdered: @Value", x_range=(-.5, .5))
fig.annular_wedge(x=0, y=1, inner_radius=0.15, 
                  outer_radius=0.25, direction="anticlock",

start_angle=cumsum("Angle", include_zero=True),
                  end_angle=cumsum("Angle"),

line_color="white", fill_color="Color", legend_label="Murdered", source=df_mur)

fig.axis.axis_label=None
fig.axis.visible=False
fig.grid.grid_line_color = None
show(fig)

Python庫 Bokeh 數據可視化實用指南

大多數人在游戲中被謀殺,但大部分數據丟失。所以我們不能說大多數人是在游戲中被謀殺的。

 

散點圖

首先,將創建 Sabotages fixed 和 Minutes 的數據框,并更改列名并在其中添加 T。

df_min = pd.crosstab(df["Min"], df["Sabotages Fixed"]).reset_index()
df_min = df_min.rename(columns={0.0:"0T", 1.0:"1T",
                       2.0:"2T",3.0:"3T",4.0:"4T",5.0:"5T"
                    })
df_min[:2]

Python庫 Bokeh 數據可視化實用指南

將 3 次破壞固定為 0,1 和 2 并創建一個數據框。

df_0 = df_min[["Min", "0T"]]
df_1 = df_min[["Min", "1T"]]
df_2 = df_min[["Min", "2T"]]

要制作只有一個圖例的簡單散點圖,我們可以傳遞數據并使用scatter()它來制作圖表。

df_min.plot_Bokeh.scatter(x="Min", y="1T")

Python庫 Bokeh 數據可視化實用指南

要制作包含多個圖例的散點圖,我們需要使用圓圈;這是圖形對象的一種方法。圓圈是Bokeh提供的眾多繪圖樣式之一,您可以使用三角形或更多。

fig = figure(title="Sabotages Fixed vs Minutes", 
             tools= "hover", 
             toolbar_location="above", 
             toolbar_sticky=False)
fig.circle(x="Min",y="0T", 
         size=12, alpha=0.5, 
         color="#F78888", 
         legend_label="0T", 
         source=df_0),
fig.circle(x="Min",y="1T", 
         size=12, alpha=0.5, 
         color="blue", 
         legend_label="1T", 
         source=df_1),
fig.circle(x="Min",y="2T", 
         size=12, alpha=0.5, 
         color="#626262", 
         legend_label="2T", 
         source=df_2),
show(fig)

Python庫 Bokeh 數據可視化實用指南

 

簡單直方圖

看看游戲之間的分鐘分布。將用hist來繪制直方圖。

  1. df_minutes = df["Min"].astype("int64"
  2. df_minutes.plot_Bokeh(kind="hist", title="Distribution of Minutes"

Python庫 Bokeh 數據可視化實用指南

大多數比賽有6分鐘到14分鐘的時間。

 

堆積直方圖

看看游戲長度是否會增加,因此冒名頂替者和船員會減少還是增加。我們將使用 hist來制作堆疊直方圖。

df_gm_te = pd.crosstab(df["Game Length"], df["Team"])
df_gm_te

Python庫 Bokeh 數據可視化實用指南

df_gm_te.plot_Bokeh.hist(title="Gamelegth vs Imposter/Crewmate", figsize=(750, 350))

Python庫 Bokeh 數據可視化實用指南

Bokeh中的堆疊直方圖

冒名頂替者不傾向于長時間玩游戲,他們只想殺死所有火葬并贏得游戲。

 

不同類型的條形圖

 

簡單條形圖

看看給定的任務是否由人完成。如果所有任務都完成,那么自動火葬將獲勝。

  1. df_tc = pd.DataFrame(df["Task Completed"].value_counts())[1:].sort_index().rename(columns={"Task Completed""Count"}) 
  2. df_tc.plot_Bokeh(kind="bar", y="Count", title="How many people have completed given task?", figsize=(750, 350)) 

Python庫 Bokeh 數據可視化實用指南

Bokeh中的條形圖

完成最多的任務是 7 個,完成最少的任務是 10 個。

 

堆積條形圖

看看誰贏了:冒名頂替者或火葬。我一直覺得冒名頂替者獲勝最多,因為他們只有一份工作可以殺死所有人。

df1 = pd.crosstab(df["Team"], df["Outcome"])
df1.plot_Bokeh.bar(title="Who wins: Imposter or Crewmates",stacked=True,
figsize=(550, 350))

Python庫 Bokeh 數據可視化實用指南

Bokeh中的堆積條形圖

冒名頂替者比 Crewmates 贏得更多。Imposter贏得或輸掉比賽沒有太大區別,價值非常接近。很多情況下,他們有5個火葬場和4個冒名頂替者。

 

堆積垂直條形圖

完成任務會不會贏得比賽讓我們拭目以待。

df["All Tasks Completed"].replace(["Yes","No"], ["Tasks Completed","Tasks Not Completed"], inplace=True)

df2 = pd.crosstab(df["Outcome"], df["All Tasks Completed"])
df2.plot_Bokeh.barh(title="Completeing task: win or loss", stacked=True,
figsize=(650, 350))

Python庫 Bokeh 數據可視化實用指南

Bokeh中的堆積條形圖

完成任務將自動贏得火葬。完成任務贏得比賽的人數更多。

 

雙向條形圖

用雙向條形圖看看用戶是贏了還是輸了。要制作雙向條形圖,我們需要將一個度量設為負值,這里我們將損失特征設為負值。

df_user = pd.crosstab(df["User ID"], df["Outcome"]).reset_index()
df_user["Loss"] = df_user["Loss"]*-1
df_user["User ID"] = (df_user.index+1).astype(str) + " User"
df_user = df_user.set_index("User ID")
df_user[:2]

現在完成上面的過程后,我們只需要barh() 在兩個方向上制作一個條形圖即可。

df_user.plot_Bokeh.barh(title="Users: Won or Defeat")

Python庫 Bokeh 數據可視化實用指南

Bokeh中的雙向條形圖

從圖表中,我們可以輕松區分用戶是被擊敗還是贏得了比賽。

 

折線圖

看看游戲中火化的排出比例。我們將line 用來制作折線圖。

df_crewmate = df[df["Team"] == "Crewmate"]
df_t_ej = pd.crosstab(df_crewmate["User ID"], df_crewmate["Ejected"]).reset_index()
df_t_ej = df_t_ej[["No","Yes"]]
df_t_ej.plot_Bokeh.line(title="Cremates Memebers: Ejected vs Minutes", figsize=(750, 350))

Python庫 Bokeh 數據可視化實用指南

Bokeh中的折線圖

沒有被逐出游戲的成員存在很大差異。

 

棒棒糖圖表

將獲勝的前 10 名用戶的圖表可視化。我在所有用戶 ID 中添加了一個用戶字符串。數據框看起來像這樣。

df_user_new = pd.crosstab(df["User ID"], df["Outcome"]).reset_index().sort_values(by="Win", ascending=False)[:10]
df_user_new["User ID"] = (df_user_new.index+1).astype(str) + " User"
df_user_new[:2]

在此圖表中,我們將從圖表中刪除 x 軸和 y 軸網格線。為了制作棒棒糖圖表,我們需要結合 segment() 和circle()。

x = df_user_new["Win"]

factors = df_user_new["User ID"] #.values
fig = figure(title="Top 10 Users: Win", toolbar_location=None,tools="hover", tooltips="@x",
y_range=factors, x_range=[0,75],
plot_width=750, plot_height=350)

fig.segment(0, factors, x, factors, line_width=2, line_color="#3182bd")
fig.circle(x, factors, size=15, fill_color="#9ecae1", line_color="#3182bd", line_width=3)
fig.xgrid.grid_line_color = None
fig.ygrid.grid_line_color = None
show(fig)

Python庫 Bokeh 數據可視化實用指南

Bokeh中的棒棒糖圖

 

面積圖

看看在這段時間(分鐘)內修復了多少破壞事件。在這里為了簡單起見,我們將只看到兩個破壞活動 0th 和 1st。

  1. from Bokeh.models import ColumnDataSource 
  2. from Bokeh.plotting import figure, output_file, show 
  3.  
  4. # data 
  5. df_min = pd.crosstab(df["Min"], df["Sabotages Fixed"]).reset_index() 
  6. df_min = df_min.rename(columns={0.0:"0T", 1.0:"1T",2.0:"2T",3.0:"3T",4.0:"4T",5.0:"5T"}) 
  7.  
  8. # chart 
  9. names = ["0T","1T"
  10. source = ColumnDataSource(data=dict(x = df_min.Min, 
  11.                                     y0 = df_min["0T"], 
  12.                                     y1 = df_min["1T"])) 
  13.  
  14. fig = figure(width=400, height=400, title="Sabotages Fied vs Minutes"
  15. fig.varea_stack(["y0","y1"], x="x", color=("grey""lightgrey"),legend_label=names, source=source) 
  16.  
  17. fig.grid.grid_line_color = None 
  18. fig.xaxis.axis_label="Minutes" 
  19.  
  20. show(fig) 

Python庫 Bokeh 數據可視化實用指南

Bokeh中的面積圖

隨著時間的增加,破壞活動會減少。

到目前為止,我們已經看到了Bokeh中的所有基本圖表,現在看看如何在Bokeh中使用布局。這將幫助我們創建儀表板或應用程序。因此,我們可以將特定用例的所有信息集中在一個地方。

 

Bokeh庫的布局功能

Layout 函數將讓我們構建一個由繪圖和小部件組成的網格。我們可以在一個布局中擁有盡可能多的行和列或網格。

有許多可用的布局選項:

  • 如果要垂直顯示圖,請使用**column()**函數。
  • 如果要水平顯示圖,請使用**row()**函數。
  • 如果您希望以網格方式繪制圖形,請使用**gridplot()**函數。
  • 如果您希望圖表以最佳方式放置,請使用**layout()**函數

取一個虛擬數據。

from Bokeh.io import output_file, show
from Bokeh.layouts import row,column
from Bokeh.plotting import figure
output_file("layout.html")
x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]
# create three plots
s1 = figure(width=250, height=250, background_fill_color="#fafafa")
s1.circle(x, y0, size=12, color="#53777a", alpha=0.8)
s2 = figure(width=250, height=250, background_fill_color="#fafafa")
s2.triangle(x, y1, size=12, color="#c02942", alpha=0.8)
s3 = figure(width=250, height=250, background_fill_color="#fafafa")
s3.square(x, y2, size=12, color="#d95b43", alpha=0.8)

如果我們使用 column() 函數,輸出將如下所示。

show(column(s1, s2, s3))

Python庫 Bokeh 數據可視化實用指南

如果我們使用 row() 函數,輸出將如下所示。

# 將結果排成一行并顯示
show(row(s1, s2, s3))

Python庫 Bokeh 數據可視化實用指南

在 Bokeh 中制作儀表板布局。在這里我拍了三張圖表,一張是棒棒糖圖,另外兩張是Bokeh的餅圖。

在Bokeh中設置布局的主要邏輯是我們希望如何設置圖表。創建一個如下圖所示的設計。

Python庫 Bokeh 數據可視化實用指南

layout = grid([[fig1],
               [fig2, fig3]])

在 Bokeh 中運行儀表板布局的整個代碼。

from Bokeh.io import output_file, show
from Bokeh.plotting import figure
from Bokeh.layouts import column, grid
# 1 layout
df_user_new = pd.crosstab(df["User ID"], df["Outcome"]).reset_index().sort_values(by="Win", ascending=False)[:10]
df_user_new["User ID"] = (df_user_new.index+1).astype(str) + " User"
x = df_user_new["Win"]
factors = df_user_new["User ID"] 
fig1 = figure(title="Top 10 Users: Win", toolbar_location=None,
              tools="hover", tooltips="@x",
              y_range=factors, x_range=[0,75], 
              width=700, height=250)
fig1.segment(0, factors, x, factors, line_width=2, line_color="#3182bd")
fig1.circle(x, factors, size=15, fill_color="#9ecae1", line_color="#3182bd", line_width=3)
# 2 layout
df_mur = df.Murdered.value_counts().reset_index().rename(columns={"index": "Murdered", "Murdered": "Value"})
df_mur["Angle"] = df_mur["Value"]/df_mur["Value"].sum() * 2*pi
df_mur["Color"] = ["#3182bd", "#6baed6", "#9ecae1"]
fig2 = figure(height=300,width=400,              toolbar_location=None, tools="hover", tooltips="@Murdered: @Value", x_range=(-.5, .5))
fig2.annular_wedge(x=0, y=1,  inner_radius=0.15, outer_radius=0.25, direction="anticlock",
                   start_angle=cumsum("Angle", include_zero=True), end_angle=cumsum("Angle"),
                   line_color="white", fill_color="Color", legend_label="Murdered", source=df_mur)
# 3 layout
df_team = pd.DataFrame(df.Team.value_counts()).reset_index().rename(columns={"index": "Team", "Team": "Value"})
df_team["Angle"] = df_team["Value"]/df_team["Value"].sum() * 2*pi
df_team["Color"] = ["#3182bd", "#6baed6"]

fig3 = figure(height=300, width=300, 
              toolbar_location=None, tools="hover", tooltips="@Team: @Value", x_range=(-.5, .5))
fig3.annular_wedge(x=0, y=1,  inner_radius=0.15, outer_radius=0.25, direction="anticlock",
                   start_angle=cumsum("Angle", include_zero=True), end_angle=cumsum("Angle"),
                   line_color="white", fill_color="Color", legend_label="Team", source=df_team)
# Styling
for fig in [fig1, fig2, fig3]:
        fig.grid.grid_line_color = None
for fig in [fig2, fig3]:
        fig.axis.visible=False
        fig.axis.axis_label=None
layout = grid([
                [fig1],
                [fig2, fig3]
       ])
show(layout)

Python庫 Bokeh 數據可視化實用指南

 

技術交流

歡迎轉載、收藏、有所收獲點贊支持一下!

Python庫 Bokeh 數據可視化實用指南

到此這篇關于Python庫 Bokeh 數據可視化實用指南的文章就介紹到這了,更多相關Python Bokeh數據可視化內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_38037405/article/details/121498202

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲午夜一区二区三区 | 国产一区精品视频 | 国产精品呻吟 | 激情毛片| 香蕉成人在线视频 | 免费久久久久 | 龙床上的呻吟高h | 国产一级大片 | 空姐一级毛片 | 久久久久久久99 | 久久综合精品视频 | 亚洲国产女同久久 | 免费黄色欧美视频 | 成人免费看视频 | 成年人毛片视频 | 亚洲福利在线免费观看 | 久久国产精品网 | 久久久久久久爱 | 性少妇chinesevideo | 国色天香综合网 | 欧美激情精品久久久久久久久久 | 国产免费成人 | hd porn 4k video xhicial | 久久激情国产 | 精品xxxx户外露出视频 | av免费入口 | 亚洲国产高清视频 | 精品久久久久久中文字幕 | 免费国产在线视频 | 最新视频一区二区 | 99riav国产在线观看 | 91极品在线 | 久久久久九九九女人毛片 | 国产一区二区在线观看视频 | 视频一区二区视频 | 中文字幕精品在线观看 | 久久亚洲一区二区三区成人国产 | 国产正在播放 | 妇子乱av一区二区三区 | 黄片毛片一级 | 一级黄色影院 |