精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

7款Python數據圖表工具的比較

大數據 數據可視化
本文會基于一份真實的數據,使用這些庫來對數據進行可視化。通過這些對比,我們期望了解每個庫所適用的范圍,以及如何更好的利用整個 Python 的數據可視化的生態(tài)系統(tǒng)。

[[200381]]

Python 的科學棧相當成熟,各種應用場景都有相關的模塊,包括機器學習和數據分析。數據可視化是發(fā)現數據和展示結果的重要一環(huán),只不過過去以來,相對于 R 這樣的工具,發(fā)展還是落后一些。

幸運的是,過去幾年出現了很多新的Python數據可視化庫,彌補了一些這方面的差距。matplotlib 已經成為事實上的數據可視化方面最主要的庫,此外還有很多其他庫,例如vispy,bokeh, seaborn, pyga, folium 和 networkx,這些庫有些是構建在 matplotlib 之上,還有些有其他一些功能。

本文會基于一份真實的數據,使用這些庫來對數據進行可視化。通過這些對比,我們期望了解每個庫所適用的范圍,以及如何更好的利用整個 Python 的數據可視化的生態(tài)系統(tǒng)。

我們在 Dataquest 建了一個交互課程,教你如何使用 Python 的數據可視化工具。如果你打算深入學習,可以點這里。

探索數據集

在我們探討數據的可視化之前,讓我們先來快速的瀏覽一下我們將要處理的數據集。我們將要使用的數據來自 openflights。我們將要使用航線數據集、機場數據集、航空公司數據集。其中,路徑數據的每一行對應的是兩個機場之間的飛行路徑;機場數據的每一行對應的是世界上的某一個機場,并且給出了相關信息;航空公司的數據的每一行給出的是每一個航空公司。

首先我們先讀取數據:

  1. # Import the pandas library. 
  2. import pandas 
  3. Read in the airports data. 
  4. airports = pandas.read_csv("airports.csv", header=None, dtype=str) 
  5. airports.columns = ["id""name""city""country""code""icao""latitude""longitude""altitude""offset""dst""timezone"
  6. Read in the airlines data. 
  7. airlines = pandas.read_csv("airlines.csv", header=None, dtype=str) 
  8. airlines.columns = ["id""name""alias""iata""icao""callsign""country""active"
  9. Read in the routes data. 
  10. routes = pandas.read_csv("routes.csv", header=None, dtype=str) 
  11. routes.columns = ["airline""airline_id""source""source_id""dest""dest_id""codeshare""stops""equipment" 

這些數據沒有列的***項,因此我們通過賦值 column 屬性來添加列的***項。我們想要將每一列作為字符串進行讀取,因為這樣做可以簡化后續(xù)以行 id 為匹配,對不同的數據框架進行比較的步驟。我們在讀取數據時設置了 dtype 屬性值達到這一目的。

我們可以快速瀏覽一下每一個數據集的數據框架。

  1. airports.head() 

 

  1. airlines.head() 

 

  1. routes.head()  

 

我們可以分別對每一個單獨的數據集做許多不同有趣的探索,但是只要將它們結合起來分析才能取得***的收獲。Pandas 將會幫助我們分析數據,因為它能夠有效的過濾權值或者通過它來應用一些函數。我們將會深入幾個有趣的權值因子,比如分析航空公司和航線。

那么在此之前我們需要做一些數據清洗的工作。

  1. routes = routes[routes["airline_id"] != "\\N"

這一行命令就確保了我們在 airline_id 這一列只含有數值型數據。

制作柱狀圖

現在我們理解了數據的結構,我們可以進一步地開始描點來繼續(xù)探索這個問題。首先,我們將要使用 matplotlib 這個工具,matplotlib 是一個相對底層的 Python 棧中的描點庫,所以它比其他的工具庫要多敲一些命令來做出一個好看的曲線。另外一方面,你可以使用 matplotlib 幾乎做出任何的曲線,這是因為它十分的靈活,而靈活的代價就是非常難于使用。

我們首先通過做出一個柱狀圖來顯示不同的航空公司的航線長度分布。一個柱狀圖將所有的航線的長度分割到不同的值域,然后對落入到不同的值域范圍內的航線進行計數。從中我們可以知道哪些航空公司的航線長,哪些航空公司的航線短。

為了達到這一點,我們需要首先計算一下航線的長度,***步就要使用距離公式,我們將會使用余弦半正矢距離公式來計算經緯度刻畫的兩個點之間的距離。

  1. import math 
  2. def haversine(lon1, lat1, lon2, lat2): 
  3.     # Convert coordinates to floats. 
  4.     lon1, lat1, lon2, lat2 = [float(lon1), float(lat1), float(lon2), float(lat2)] 
  5.     # Convert to radians from degrees. 
  6.     lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2]) 
  7.     # Compute distance. 
  8.     dlon = lon2 - lon1  
  9.     dlat = lat2 - lat1  
  10.     a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2 
  11.     c = 2 * math.asin(math.sqrt(a))  
  12.     km = 6367 * c 
  13.     return km  

然后我們就可以使用一個函數來計算起點機場和終點機場之間的單程距離。我們需要從路線數據框架得到機場數據框架所對應的 source_id 和 dest_id,然后與機場的數據集的 id 列相匹配,然后就只要計算就行了,這個函數是這樣的:

  1. def calc_dist(row): 
  2.     dist = 0 
  3.     try: 
  4.         # Match source and destination to get coordinates. 
  5.         source = airports[airports["id"] == row["source_id"]].iloc[0] 
  6.         dest = airports[airports["id"] == row["dest_id"]].iloc[0] 
  7.         # Use coordinates to compute distance. 
  8.         dist = haversine(dest["longitude"], dest["latitude"], source["longitude"], source["latitude"]) 
  9.     except (ValueError, IndexError): 
  10.         pass 
  11.     return dist  

如果 source_id 和 dest_id 列沒有有效值的話,那么這個函數會報錯。因此我們需要增加 try/catch 模塊對這種無效的情況進行捕捉。

***,我們將要使用 pandas 來將距離計算的函數運用到 routes 數據框架。這將會使我們得到包含所有的航線線長度的 pandas 序列,其中航線線的長度都是以公里做單位。

  1. route_lengths = routes.apply(calc_dist, axis=1) 

現在我們就有了航線距離的序列了,我們將會創(chuàng)建一個柱狀圖,它將會將數據歸類到對應的范圍之內,然后計數分別有多少的航線落入到不同的每個范圍:

  1. import matplotlib.pyplot as plt  
  2. %matplotlib inline  
  3.  
  4. plt.hist(route_lengths, bins=20)  

 

我們用 import matplotlib.pyplot as plt 導入 matplotlib 描點函數。然后我們就使用 %matplotlib inline 來設置 matplotlib 在 ipython 的 notebook 中描點,最終我們就利用 plt.hist(route_lengths, bins=20) 得到了一個柱狀圖。正如我們看到的,航空公司傾向于運行近距離的短程航線,而不是遠距離的遠程航線。

使用 seaborn

我們可以利用 seaborn 來做類似的描點,seaborn 是一個 Python 的高級庫。Seaborn 建立在 matplotlib 的基礎之上,做一些類型的描點,這些工作常常與簡單的統(tǒng)計工作有關。我們可以基于一個核心的概率密度的期望,使用 distplot 函數來描繪一個柱狀圖。一個核心的密度期望是一個曲線 —— 本質上是一個比柱狀圖平滑一點的,更容易看出其中的規(guī)律的曲線。

  1. import seaborn 
  2.  
  3. seaborn.distplot(route_lengths, bins=20) 

 

正如你所看到的那樣,seaborn 同時有著更加好看的默認風格。seaborn 不含有與每個 matplotlib 的版本相對應的版本,但是它的確是一個很好的快速描點工具,而且相比于 matplotlib 的默認圖表可以更好的幫助我們理解數據背后的含義。如果你想更深入的做一些統(tǒng)計方面的工作的話,seaborn 也不失為一個很好的庫。

條形圖

柱狀圖也雖然很好,但是有時候我們會需要航空公司的平均路線長度。這時候我們可以使用條形圖--每條航線都會有一個單獨的狀態(tài)條,顯示航空公司航線的平均長度。從中我們可以看出哪家是國內航空公司哪家是國際航空公司。我們可以使用pandas,一個python的數據分析庫,來酸楚每個航空公司的平均航線長度。

  1. import numpy 
  2. # Put relevant columns into a dataframe. 
  3. route_length_df = pandas.DataFrame({"length": route_lengths, "id": routes["airline_id"]}) 
  4. # Compute the mean route length per airline. 
  5. airline_route_lengths = route_length_df.groupby("id").aggregate(numpy.mean) 
  6. # Sort by length so we can make a better chart. 
  7. airline_route_lengths = airline_route_lengths.sort("length", ascending=False 

我們首先用航線長度和航空公司的id來搭建一個新的數據框架。我們基于airline_id把route_length_df拆分成組,為每個航空公司建立一個大體的數據框架。然后我們調用pandas的aggregate函數來獲取航空公司數據框架中長度列的均值,然后把每個獲取到的值重組到一個新的數據模型里。之后把數據模型進行排序,這樣就使得擁有最多航線的航空公司拍到了前面。

這樣就可以使用matplotlib把結果畫出來。

  1. plt.bar(range(airline_route_lengths.shape[0]), airline_route_lengths["length"]) 

 

Matplotlib的plt.bar方法根據每個數據模型的航空公司平均航線長度(airline_route_lengths[“length”])來做圖。

問題是我們想看出哪家航空公司擁有的航線長度是什么并不容易。為了解決這個問題,我們需要能夠看到坐標軸標簽。這有點難,畢竟有這么多的航空公司。一個能使問題變得簡單的方法是使圖表具有交互性,這樣能實現放大跟縮小來查看軸標簽。我們可以使用bokeh庫來實現這個--它能便捷的實現交互性,作出可縮放的圖表。

要使用booked,我們需要先對數據進行預處理:

  1. def lookup_name(row): 
  2.     try: 
  3.         # Match the row id to the id in the airlines dataframe so we can get the name
  4.         name = airlines["name"][airlines["id"] == row["id"]].iloc[0] 
  5.     except (ValueError, IndexError): 
  6.         name = "" 
  7.     return name 
  8. Add the index (the airline ids) as a column
  9. airline_route_lengths["id"] = airline_route_lengths.index.copy() 
  10. # Find all the airline names. 
  11. airline_route_lengths["name"] = airline_route_lengths.apply(lookup_name, axis=1) 
  12. # Remove duplicate values in the index
  13. airline_route_lengths.index = range(airline_route_lengths.shape[0])  

上面的代碼會獲取airline_route_lengths中每列的名字,然后添加到name列上,這里存貯著每個航空公司的名字。我們也添加到id列上以實現查找(apply函數不傳index)。

***,我們重置索引序列以得到所有的特殊值。沒有這一步,Bokeh 無法正常運行。

現在,我們可以繼續(xù)說圖表問題:

  1. import numpy as np 
  2. from bokeh.io import output_notebook 
  3. from bokeh.charts import Bar, show 
  4. output_notebook() 
  5. p = Bar(airline_route_lengths, 'name'values='length', title="Average airline route lengths"
  6. show(p)  

用 output_notebook 創(chuàng)建背景虛化,在 iPython 的 notebook 里畫出圖。然后,使用數據幀和特定序列制作條形圖。***,顯示功能會顯示出該圖。

這個圖實際上不是一個圖像--它是一個 JavaScript 插件。因此,我們在下面展示的是一幅屏幕截圖,而不是真實的表格。

有了它,我們可以放大,看哪一趟航班的飛行路線最長。上面的圖像讓這些表格看起來擠在了一起,但放大以后,看起來就方便多了。

水平條形圖

Pygal 是一個能快速制作出有吸引力表格的數據分析庫。我們可以用它來按長度分解路由。首先把我們的路由分成短、中、長三個距離,并在 route_lengths 里計算出它們各占的百分比。

  1. long_routes = len([k for k in route_lengths if k > 10000]) / len(route_lengths) 
  2.  
  3. medium_routes = len([k for k in route_lengths if k < 10000 and k > 2000]) / len(route_lengths) 
  4.  
  5. short_routes = len([k for k in route_lengths if k < 2000]) / len(route_lengths)  

然后我們可以在 Pygal 的水平條形圖里把每一個都繪成條形圖:

  1. import pygal 
  2. from IPython.display import SVG 
  3. chart = pygal.HorizontalBar() 
  4. chart.title = 'Long, medium, and short routes' 
  5. chart.add('Long', long_routes * 100) 
  6. chart.add('Medium', medium_routes * 100) 
  7. chart.add('Short', short_routes * 100) 
  8. chart.render_to_file('routes.svg'
  9. SVG(filename='routes.svg' 

 

首先,我們創(chuàng)建一個空圖。然后,我們添加元素,包括標題和條形圖。每個條形圖通過百分比值(***值是100)顯示出該類路由的使用頻率。

***,我們把圖表渲染成文件,用 IPython 的 SVG 功能載入并展示文件。這個圖看上去比默認的 matplotlib 圖好多了。但是為了制作出這個圖,我們要寫的代碼也多很多。因此,Pygal 可能比較適用于制作小型的展示用圖表。

散點圖

在散點圖里,我們能夠縱向比較數據。我們可以做一個簡單的散點圖來比較航空公司的 id 號和航空公司名稱的長度:

  1. name_lengths = airlines["name"].apply(lambda x: len(str(x))) 
  2.  
  3. plt.scatter(airlines["id"].astype(int), name_lengths) 

 

首先,我們使用 pandasapplymethod 計算每個名稱的長度。它將找到每個航空公司的名字字符的數量。然后,我們使用 matplotlib 做一個散點圖來比較航空 id 的長度。當我們繪制時,我們把 theidcolumn of airlines 轉換為整數類型。如果我們不這樣做是行不通的,因為它需要在 x 軸上的數值。我們可以看到不少的長名字都出現在早先的 id 中。這可能意味著航空公司在成立前往往有較長的名字。

我們可以使用 seaborn 驗證這個直覺。Seaborn 增強版的散點圖,一個聯(lián)合的點,它顯示了兩個變量是相關的,并有著類似地分布。

  1. data = pandas.DataFrame({"lengths": name_lengths, "ids": airlines["id"].astype(int)}) 
  2.  
  3. seaborn.jointplot(x="ids", y="lengths", data=data) 

 

上面的圖表明,兩個變量之間的相關性是不明確的——r 的平方值是低的。

靜態(tài) maps

我們的數據天然的適合繪圖-機場有經度和緯度對,對于出發(fā)和目的機場來說也是。

***張圖做的是顯示全世界的所有機場。可以用擴展于 matplotlib 的 basemap 來做這個。這允許畫世界地圖和添加點,而且很容易定制。

  1. # Import the basemap package 
  2. from mpl_toolkits.basemap import Basemap 
  3. Create a map on which to draw.  We're using a mercator projection, and showing the whole world. 
  4. m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution='c'
  5. # Draw coastlines, and the edges of the map. 
  6. m.drawcoastlines() 
  7. m.drawmapboundary() 
  8. Convert latitude and longitude to x and y coordinates 
  9. x, y = m(list(airports["longitude"].astype(float)), list(airports["latitude"].astype(float))) 
  10. # Use matplotlib to draw the points onto the map. 
  11. m.scatter(x,y,1,marker='o',color='red'
  12. # Show the plot. 
  13. plt.show()  

在上面的代碼中,首先用 mercator projection 畫一個世界地圖。墨卡托投影是將整個世界的繪圖投射到二位曲面。然后,在地圖上用紅點點畫機場。

上面地圖的問題是找到每個機場在哪是困難的-他們就是在機場密度高的區(qū)域合并城一團紅色斑點。

就像聚焦不清楚,有個交互制圖的庫,folium,可以進行放大地圖來幫助我們找到個別的機場。

  1. import folium 
  2. # Get a basic world map. 
  3. airports_map = folium.Map(location=[30, 0], zoom_start=2) 
  4. # Draw markers on the map. 
  5. for name, row in airports.iterrows(): 
  6.     # For some reason, this one airport causes issues with the map. 
  7.     if row["name"] != "South Pole Station"
  8.         airports_map.circle_marker(location=[row["latitude"], row["longitude"]], popup=row["name"]) 
  9. Create and show the map. 
  10. airports_map.create_map('airports.html'
  11. airports_map  

Folium 使用 leaflet.js 來制作全交互式地圖。你可以點擊每一個機場在彈出框中看名字。在上邊顯示一個截屏,但是實際的地圖更令人印象深刻。Folium 也允許非常廣闊的修改選項來做更好的標注,或者添加更多的東西到地圖上。

畫弧線

在地圖上看到所有的航空路線是很酷的,幸運的是,我們可以使用 basemap 來做這件事。我們將畫弧線連接所有的機場出發(fā)地和目的地。每個弧線想展示一個段都航線的路徑。不幸的是,展示所有的線路又有太多的路由,這將會是一團糟。替代,我們只現實前 3000 個路由。

  1. # Make a base map with a mercator projection.  Draw the coastlines. 
  2. m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution='c'
  3. m.drawcoastlines() 
  4. # Iterate through the first 3000 rows
  5. for name, row in routes[:3000].iterrows(): 
  6.     try: 
  7.         # Get the source and dest airports. 
  8.         source = airports[airports["id"] == row["source_id"]].iloc[0] 
  9.         dest = airports[airports["id"] == row["dest_id"]].iloc[0] 
  10.         # Don't draw overly long routes. 
  11.         if abs(float(source["longitude"]) - float(dest["longitude"])) < 90: 
  12.             # Draw a great circle between source and dest airports. 
  13.             m.drawgreatcircle(float(source["longitude"]), float(source["latitude"]), float(dest["longitude"]), float(dest["latitude"]),linewidth=1,color='b'
  14.     except (ValueError, IndexError): 
  15.         pass 
  16.      
  17. # Show the map. 
  18. plt.show()  

 

上面的代碼將會畫一個地圖,然后再在地圖上畫線路。我們添加一了寫過濾器來阻止過長的干擾其他路由的長路由。

畫網絡圖

我們將做的最終的探索是畫一個機場網絡圖。每個機場將會是網絡中的一個節(jié)點,并且如果兩點之間有路由將劃出節(jié)點之間的連線。如果有多重路由,將添加線的權重,以顯示機場連接的更多。將使用 networkx 庫來做這個功能。

首先,計算機場之間連線的權重。

  1. # Initialize the weights dictionary. 
  2. weights = {} 
  3. # Keep track of keys that have been added once -- we only want edges with a weight of more than 1 to keep our network size manageable. 
  4. added_keys = [] 
  5. # Iterate through each route. 
  6. for name, row in routes.iterrows(): 
  7.     # Extract the source and dest airport ids. 
  8.     source = row["source_id"
  9.     dest = row["dest_id"
  10.      
  11.     # Create a key for the weights dictionary. 
  12.     # This corresponds to one edge, and has the start and end of the route. 
  13.     key = "{0}_{1}".format(source, dest) 
  14.     # If the key is already in weights, increment the weight. 
  15.     if key in weights: 
  16.         weights[key] += 1 
  17.     # If the key is in added keys, initialize the key in the weights dictionary, with a weight of 2. 
  18.     elif key in added_keys: 
  19.         weights[key] = 2 
  20.     # If the key isn't in added_keys yet, append it. 
  21.     # This ensures that we aren't adding edges with a weight of 1. 
  22.     else
  23.         added_keys.append(key 

一旦上面的代碼運行,這個權重字典就包含了每兩個機場之間權重大于或等于 2 的連線。所以任何機場有兩個或者更多連接的路由將會顯示出來。

  1. # Import networkx and initialize the graph. 
  2. import networkx as nx 
  3. graph = nx.Graph() 
  4. # Keep track of added nodes in this set so we don't add twice. 
  5. nodes = set() 
  6. # Iterate through each edge. 
  7. for k, weight in weights.items(): 
  8.     try: 
  9.         # Split the source and dest ids and convert to integers. 
  10.         source, dest = k.split("_"
  11.         source, dest = [int(source), int(dest)] 
  12.         # Add the source if it isn't in the nodes. 
  13.         if source not in nodes: 
  14.             graph.add_node(source) 
  15.         # Add the dest if it isn't in the nodes. 
  16.         if dest not in nodes: 
  17.             graph.add_node(dest) 
  18.         # Add both source and dest to the nodes set
  19.         # Sets don't allow duplicates. 
  20.         nodes.add(source) 
  21.         nodes.add(dest) 
  22.          
  23.         # Add the edge to the graph. 
  24.         graph.add_edge(source, dest, weight=weight) 
  25.     except (ValueError, IndexError): 
  26.         pass 
  27. pos=nx.spring_layout(graph) 
  28. # Draw the nodes and edges. 
  29. nx.draw_networkx_nodes(graph,pos, node_color='red', node_size=10, alpha=0.8) 
  30. nx.draw_networkx_edges(graph,pos,width=1.0,alpha=1) 
  31. # Show the plot. 
  32. plt.show() 

總結

有一個成長的數據可視化的 Python 庫,它可能會制作任意一種可視化。大多數庫基于 matplotlib 構建的并且確保一些用例更簡單。如果你想更深入的學習怎樣使用 matplotlib,seaborn 和其他工具來可視化數據,在這兒檢出其他課程。

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2020-11-17 08:58:32

開源工具報表

2017-07-12 15:32:12

大數據大數據技術Python

2015-08-26 13:11:54

數據Python

2021-01-04 09:52:35

Git開源報表工具

2020-11-17 16:22:45

開源工具報表

2020-09-17 12:30:51

Linux比較工具命令

2015-07-23 10:49:06

Python工具數據科學

2018-09-07 11:12:19

CICD工具

2021-04-01 10:22:42

工具Linux文件

2015-12-02 09:44:04

Python視化工具

2018-03-28 14:33:33

數據分析師工具Spark

2013-12-06 14:09:22

Linux運維工具

2017-02-14 11:28:29

互聯(lián)網 報表

2020-09-21 09:50:07

Linux工具命令

2019-11-22 08:52:32

MacEvernoteMWeb

2020-05-06 11:45:08

Mac工具語法

2021-01-08 09:00:00

開發(fā)工具技術

2024-03-08 12:09:26

數據可視化圖表

2018-05-10 09:00:57

數據分析工具可視化

2018-12-26 15:14:56

點贊
收藏

51CTO技術棧公眾號

欧美国产97人人爽人人喊| 国产在线欧美在线| 在线免费av网| 99热这里只有精品首页 | 国产精品爽爽久久| 欧美挤奶吃奶水xxxxx| 国产精品久久久久久久久免费相片 | 无需播放器的av| 好吊色在线观看| 久久久久电影| 91国偷自产一区二区三区观看 | 国产视频一区免费看| 欧美在线观看一区| 久久国产日韩欧美| 国产一级片网址| 久久综合色占| 狠狠色香婷婷久久亚洲精品| 成人资源av| 四虎精品免费视频| 成人av色网站| 亚洲国产精品av| 91香蕉视频在线下载| 午夜精品一区二区三级视频| av成人在线看| 亚洲高清免费观看高清完整版在线观看| 91九色蝌蚪国产| 色撸撸在线视频| 成人免费视频观看| 午夜精品成人在线视频| 国新精品乱码一区二区三区18| 国产精品天天干| 欧美大片免费高清观看| 91色视频在线| 欧美中文字幕视频| 国产熟女一区二区| 老汉色老汉首页av亚洲| 欧美日韩加勒比精品一区| 在线丝袜欧美日韩制服| 国产老妇伦国产熟女老妇视频| 一本色道久久| 亚洲美女中文字幕| 久久午夜夜伦鲁鲁一区二区| eeuss影院www在线观看| 亚洲综合图色| 91福利视频网站| 国产深夜男女无套内射| 男男激情在线| 毛片av一区二区| 日韩性生活视频| 在线成人精品视频| 激情网站在线| 成人综合在线观看| 日本精品在线视频| 北条麻妃在线观看视频| 欧美亚洲激情| 日韩一区二区三区视频在线观看| 国产成人一区二区三区别| 亚州男人的天堂| 青青青爽久久午夜综合久久午夜| 久久精品一区中文字幕| 蜜桃色一区二区三区| 忘忧草在线影院两性视频| 欧美国产激情二区三区| 日韩精品在在线一区二区中文| 91精品国产乱码久久久| 伊人成人在线视频| 尤物99国产成人精品视频| 中文字幕第10页| 正在播放日韩精品| 欧美性猛交xxxx黑人猛交| 一区二区精品在线| 亚洲av电影一区| 不卡电影免费在线播放一区| 国产日韩中文在线| 久久精品无码人妻| 99国产精品自拍| 91精品国产精品| 99久久久免费精品| 永久91嫩草亚洲精品人人| 亚洲裸体xxxx| 美女脱光内衣内裤| 亚洲综合色婷婷在线观看| 色综合一区二区三区| 污污污污污污www网站免费| 国产在线自天天| 成人午夜又粗又硬又大| 国产亚洲精品自在久久| 同心难改在线观看| 国产成人av电影免费在线观看| 国产精品久久久久91| 香蕉视频一区二区| 在线中文字幕亚洲| 国内揄拍国内精品少妇国语| 夫妻性生活毛片| 在线播放亚洲| 日本高清久久天堂| 国产又粗又长视频| 99久久综合99久久综合网站| 91精品国产99久久久久久红楼 | 日韩av在线网| 国产精品探花在线播放| 影音成人av| 福利微拍一区二区| 九九热精品在线播放| 久久91导航| 黑人与娇小精品av专区| 污污网站在线观看视频| 国产一区二区精品调教| 欧美一区二区三区思思人| 亚洲 激情 在线| 一区二区三区四区精品视频| 亚洲天堂男人天堂女人天堂| 蜜桃传媒一区二区亚洲av| 久久丝袜视频| 日韩专区中文字幕| 亚洲精品男人的天堂| 国产一区二区三区久久| 成人av在线天堂| 在线免费观看一区二区| 成人精品亚洲人成在线| 亚洲午夜精品国产| 无码小电影在线观看网站免费| 91精品国产色综合久久ai换脸| 中文字幕丰满孑伦无码专区| 午夜精品国产| 欧美日韩国产成人在线观看| 国产女人被狂躁到高潮小说| 你懂的成人av| 国产精品久久久久久亚洲影视| www.五月婷婷.com| 日韩激情视频网站| 国产日韩中文字幕在线| 欧美视频免费一区二区三区| 一区二区免费在线播放| 成人免费在线网| 女人让男人操自己视频在线观看| 欧美性猛交xxxxx免费看| 永久av免费在线观看| 人人狠狠综合久久亚洲婷| 欧美一区二区三区图| 国产一级免费视频| 麻豆91在线观看| 日本午夜一区二区三区| 日韩免费网站| 一区二区三区中文字幕| 久久久久免费看黄a片app| 永久免费观看精品视频| 亚洲黄色有码视频| 成人无码av片在线观看| 久久黄色影院| 91欧美激情另类亚洲| 成人性生交大片免费看午夜| 色婷婷一区二区三区四区| 在线观看日韩精品视频| 日本a口亚洲| 国产精品高精视频免费| 国产香蕉视频在线看| 亚洲日本一区二区三区| 国产av麻豆mag剧集| 99国产精品免费网站| 久久久久久久久久久国产| 黄色片视频免费| 国产精品亚洲人在线观看| 久久久国产精品一区二区三区| 91超碰在线播放| 欧美日韩精品欧美日韩精品| 国产污在线观看| 欧美成人精品一区二区三区在线看| 久久久久久国产| 成人毛片视频免费看| 性做久久久久久免费观看 | 黄色av一区二区| 中文一区一区三区高中清不卡| 超碰在线播放91| 中文字幕人成人乱码| 国产精品久久亚洲7777| 免费a在线观看| 色老汉av一区二区三区| 日本在线观看网址| 国产福利一区二区三区视频在线 | 欧美在线视频一区| 国产视频精品久久| 欧美日韩国产综合视频在线观看| 日本中文字幕免费在线观看| 久久亚洲一区| 国产精品一区二区三区在线 | 亚洲欧洲精品视频| 91国偷自产一区二区三区成为亚洲经典| youjizz亚洲女人| 亚洲精品影视| 波多野结衣成人在线| 日本在线www| 日韩欧美的一区二区| 日本激情视频一区二区三区| 国产精品伊人色| 国产中文字幕免费观看| 成人高潮a毛片免费观看网站| 91精品国产电影| 午夜精品一区| 亚洲国产成人久久| 久久久无码一区二区三区| 国内精品在线播放| 一区二区日本伦理| 国产精品成人自拍| 欧美激情一级精品国产| 四虎精品在线| 日韩一区二区在线免费观看| 国产无人区码熟妇毛片多| 成人爱爱电影网址| 污污网站免费观看| 99热这里只有成人精品国产| 艳色歌舞团一区二区三区| 久久99国产精品久久99大师| 国产精品夜色7777狼人| 91精品专区| 欧美精品xxxxbbbb| 国产成人免费在线观看视频| 麻豆专区一区二区三区四区五区| 蜜桃传媒一区二区三区| 99热在线成人| 91在线精品观看| 韩国成人在线| 7m第一福利500精品视频| 男人天堂久久久| 日韩一区二区免费高清| 在线免费观看国产精品| 午夜伦欧美伦电影理论片| 无码黑人精品一区二区| 国产欧美日韩不卡免费| 中文字幕视频三区| 日韩影院免费视频| 欧美丰满熟妇bbbbbb百度| 亚洲精品国产动漫| 成人欧美一区二区三区在线观看| 日日夜夜亚洲| 久久久欧美一区二区| av免费在线免费观看| 亚洲第一区第二区| www.久久精品.com| 精品欧美激情精品一区| 久久久无码精品亚洲国产| 亚洲精品视频在线| 动漫精品一区二区三区| 波多野结衣亚洲一区| jjzzjjzz欧美69巨大| 高清在线观看日韩| 一二三区视频在线观看| 国产美女一区| 久久久久久久久久久99| 亚洲成人在线| 国产精品久久..4399| 欧美中文一区二区| 日韩精彩视频| 欧美日韩在线二区| 国产精品国产精品国产专区不卡| 一区二区三区视频播放| 国产精品推荐精品| 女人抽搐喷水高潮国产精品| 久草精品电影| 九色精品91| 亚洲高清乱码| 日韩大尺度在线观看| 成人av资源在线播放| 北岛玲精品视频在线观看| 亚洲a∨日韩av高清在线观看| 女人让男人操自己视频在线观看| 69久久夜色精品国产69| 爱情电影社保片一区| 欧美理论片在线观看| 调教一区二区| 色妞在线综合亚洲欧美| 午夜成人免费影院| 亚洲欧美在线播放| 国产超碰人人模人人爽人人添| 色综合一区二区三区| 青娱乐在线免费视频| 91精品国产综合久久久蜜臀粉嫩| 日本中文字幕第一页| 欧洲av在线精品| 国产精品xxxx喷水欧美| 亚洲欧美电影一区二区| 日本免费一二三区| 欧洲精品在线观看| 亚洲成人久久精品| 欧美高清视频在线高清观看mv色露露十八 | 国产免费无码一区二区| 成人av午夜电影| 亚洲精品国产精品国自| 亚洲激情中文1区| 国产精品久久久久久久久久久久久久久久久| 色诱视频网站一区| 国产成人精品白浆久久69| 亚洲精品动漫100p| 日本在线观看网站| 1769国产精品| 9.1麻豆精品| 久久精品成人一区二区三区蜜臀| 日韩在线不卡| 玖玖玖精品中文字幕| 丁香婷婷成人| 日韩在线三级| 国产精品大片| 永久免费看av| 亚洲精品午夜av福利久久蜜桃| 日韩人妻无码精品久久久不卡| 日韩高清在线一区| 一级少妇精品久久久久久久| 中文字幕欧美国产| 好吊操这里只有精品| 欧美群妇大交群的观看方式| 日本午夜在线| 亚洲欧洲在线看| 在线不卡日本v二区707| 国产精品都在这里| 国产无遮挡裸体免费久久| 亚洲在线播放电影| 久久国产毛片| 艳妇乳肉豪妇荡乳xxx| 91老司机福利 在线| 青青草原国产视频| 亚洲一区免费观看| 日本一级一片免费视频| 在线播放一区二区三区| 色就是色亚洲色图| 久久久免费精品视频| 欧美一级大片在线视频| 成人a级免费视频| 精品国产精品久久一区免费式| 超级碰在线观看| 日本美女一区二区| 色婷婷av777| 精品欧美激情精品一区| 欧美熟妇交换久久久久久分类 | 亚洲福利电影网| 国产精品一区二区av白丝下载| 亚洲视频在线看| 亚洲优女在线| 久久视频在线观看中文字幕| 亚洲精品孕妇| 91玉足脚交白嫩脚丫| 久久人人爽爽爽人久久久| 瑟瑟视频在线观看| 欧美日韩国产精品一区二区三区四区| 午夜精品无码一区二区三区| 久久福利网址导航| 国产激情在线播放| 日本久久久久久久| 曰本一区二区三区视频| 成人av一级片| 91热门视频在线观看| 在线观看日本视频| 亚洲男人天堂古典| 免费亚洲电影| 日本一区免费| 热久久免费视频| 亚洲aaa视频| 在线91免费看| 国产一区二区三区不卡在线| 国产精品久久久久久久久久新婚| 欧美艳星介绍134位艳星| 成人免费在线观看视频网站| 国产精品久久免费看| 久久网一区二区| 精品国产伦一区二区三区免费| 经典三级在线| 国产精品久久精品| 久久亚洲国产| 黄色片子免费看| 午夜电影一区二区| 国产日产精品久久久久久婷婷| 国产精品日韩欧美| 欧美在线1区| av在线播放网址| 91久久线看在观草草青青| 亚洲麻豆精品| caoporen国产精品| 国产视频一区欧美| 波兰性xxxxx极品hd| 亚洲成人av片在线观看| 韩国美女久久| 中文字幕中文字幕在线中一区高清| 国产福利精品导航| 亚洲综合久久网| 久久精品一本久久99精品| 国产精品白丝av嫩草影院| 99免费视频观看| 亚洲精品免费播放| 男生女生差差差的视频在线观看| 国产日韩一区在线| 一区二区国产精品| 国产又粗又猛又爽又黄的视频四季| 日韩一级精品视频在线观看| 亚洲欧美韩国| 日韩最新中文字幕| 精品一区二区三区免费播放| 精品无码在线观看| 日韩欧美色综合| 日韩欧美一区二区三区免费观看| 亚洲黄色网址在线观看| 久久综合成人精品亚洲另类欧美|