久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

基于Streamlit的汽車銷售分析系統(tǒng):從爬蟲到可視化的完整大數(shù)據(jù)項(xiàng)目

基于Streamlit的汽車銷售分析系統(tǒng):從爬蟲到可視化的完整大數(shù)據(jù)項(xiàng)目 每年畢業(yè)設(shè)計選題季總有同學(xué)在“大數(shù)據(jù)分析”這個方向上猶豫不決。選純算法方向擔(dān)心推公式講不透選Web開發(fā)方向又覺得不夠有技術(shù)含量選爬蟲方向又容易做出一個沒有任何分析價值的腳本集合。如果你正好處在這樣的糾結(jié)里基于 Streamlit 構(gòu)建一個國內(nèi)汽車銷售分析系統(tǒng)是一個值得認(rèn)真考慮的選項(xiàng)。這個選題最大的優(yōu)勢在于它把 Python 爬蟲、Hadoop 存儲、Spark 數(shù)據(jù)處理、Streamlit 可視化完整串成了一條數(shù)據(jù)鏈路。你不僅能展示“我會用某個框架”還能向答辯老師講清楚“數(shù)據(jù)從哪里來、經(jīng)過什么處理、最終如何呈現(xiàn)”。這篇文章會從選題價值、系統(tǒng)架構(gòu)、核心代碼實(shí)現(xiàn)、驗(yàn)證方式到答辯避坑把這個畢業(yè)設(shè)計題目的完整開發(fā)思路拆開講清楚。1. 這篇文章真正要解決的問題很多畢業(yè)生做大數(shù)據(jù)分析項(xiàng)目最常見的翻車現(xiàn)場是項(xiàng)目演示時只有幾張?zhí)崆爱嫼玫膱D表老師問“數(shù)據(jù)怎么更新的”答不上來問“數(shù)據(jù)處理邏輯在哪里”只能指著一個 SQL 文件說“這就是清洗”。這種項(xiàng)目本質(zhì)上只是一個“靜態(tài)可視化頁面”談不上大數(shù)據(jù)分析。而基于 Streamlit 的汽車銷售分析系統(tǒng)核心價值在于它不是一個“畫圖工具”而是一整套完整的數(shù)據(jù)管道。通過爬蟲獲取汽車銷量相關(guān)數(shù)據(jù)。把原始數(shù)據(jù)寫入 Hadoop HDFS 做分布式存儲。用 Spark 對海量銷售記錄做清洗和聚合統(tǒng)計。最后通過 Streamlit 提供交互式可視化面板讓用戶能按品牌、價格區(qū)間、地區(qū)、時間等維度自由篩選分析。這個選題適合以下人群有一定 Python 基礎(chǔ)希望在畢業(yè)設(shè)計中體現(xiàn)大數(shù)據(jù)技術(shù)棧但不想在研究分布式原理上耗費(fèi)過多精力的同學(xué)。它不需要你精通 Hadoop 源碼也不需要你開發(fā)復(fù)雜的機(jī)器學(xué)習(xí)模型但要求你能把這些開源組件搭建起來、串聯(lián)起來、把業(yè)務(wù)問題跑通。這種“全鏈路”能力恰恰是很多企業(yè)招聘時看重的。2. 核心技術(shù)棧拆解每個組件真正負(fù)責(zé)什么項(xiàng)目名字里出現(xiàn)的每個技術(shù)名詞在實(shí)際系統(tǒng)中都有明確的分工不能只是羅列在簡歷上。2.1 Python 與爬蟲負(fù)責(zé)數(shù)據(jù)采集。汽車銷量數(shù)據(jù)通常分布在垂直資訊網(wǎng)站、行業(yè)數(shù)據(jù)平臺或公開榜單中。使用 Python 的requests、BeautifulSoup、json等庫可以定時從這些渠道抓取品牌、車型、銷量、價格區(qū)間等字段。爬蟲是系統(tǒng)的數(shù)據(jù)入口也是整個鏈路里最容易出問題的環(huán)節(jié)因?yàn)槟繕?biāo)網(wǎng)頁結(jié)構(gòu)變化、反爬機(jī)制、數(shù)據(jù)格式不一致都會導(dǎo)致采集失敗。2.2 Hadoop HDFS負(fù)責(zé)原始數(shù)據(jù)存儲。爬蟲抓下來的數(shù)據(jù)是散亂的 JSON 或 CSV 文本如果直接交給 Spark 分析會有大量臟數(shù)據(jù)。HDFS 在這里扮演的是“數(shù)據(jù)湖泊”的角色先把原始文件統(tǒng)一上傳到 HDFS 指定目錄再做后續(xù)清洗。在畢業(yè)設(shè)計環(huán)境中通常使用 Hadoop 偽分布式模式單機(jī)就能模擬真實(shí) HDFS 的文件讀寫和副本機(jī)制。2.3 Spark負(fù)責(zé)數(shù)據(jù)清洗、統(tǒng)計分析和離線計算。它從 HDFS 讀取數(shù)據(jù)完成去重、缺失值處理、格式統(tǒng)一然后按品牌、地區(qū)、時間等維度做聚合統(tǒng)計。相比直接用 Pandas 處理Spark 的優(yōu)勢在于當(dāng)數(shù)據(jù)量達(dá)到百萬級以上時它能利用分布式計算能力同一個聚合邏輯可以平滑地從單機(jī)擴(kuò)展到集群。這在畢業(yè)設(shè)計答辯中是一個非常加分的“工程化設(shè)計點(diǎn)”。2.4 Streamlit負(fù)責(zé)交互式可視化。Streamlit 是一個 Python 開源框架能用純 Python 腳本快速構(gòu)建數(shù)據(jù)應(yīng)用。它的核心特點(diǎn)是你寫一個st.bar_chart刷新頁面就是一個圖表控件寫一個st.selectbox就能生成下拉篩選框。不需要掌握 HTML、CSS、JavaScript幾十行代碼就能做一個可交互的數(shù)據(jù)面板非常適合畢業(yè)設(shè)計這種需要快速交付演示系統(tǒng)的場景。2.5 各技術(shù)棧的分工對比組件核心職責(zé)輸入輸出Python 爬蟲數(shù)據(jù)采集公開網(wǎng)頁或 API原始 CSV/JSON 文件Hadoop HDFS分布式存儲原始文件HDFS 上的數(shù)據(jù)文件Spark數(shù)據(jù)清洗與聚合HDFS 上的文件統(tǒng)計結(jié)果表MySQL / SQLite結(jié)果存儲Spark 輸出結(jié)果結(jié)構(gòu)化結(jié)果數(shù)據(jù)Streamlit可視化交互結(jié)果數(shù)據(jù)瀏覽器訪問的分析面板3. 系統(tǒng)架構(gòu)與模塊劃分整個系統(tǒng)的架構(gòu)可以分成五個層次每一層都有一個清晰的數(shù)據(jù)入口和出口。數(shù)據(jù)采集層Python 爬蟲定時抓取生成原始數(shù)據(jù)文件 ↓ 數(shù)據(jù)存儲層原始文件上傳 Hadoop HDFS ↓ 數(shù)據(jù)處理層Spark 讀取 HDFS完成清洗和聚合統(tǒng)計 ↓ 結(jié)果存儲層統(tǒng)計結(jié)果寫入 MySQL 或 SQLite ↓ 可視化層Streamlit 讀取結(jié)果庫生成交互式 Dashboard在畢業(yè)設(shè)計論文中建議第一張架構(gòu)圖就畫這個五層模型。相比只畫一個流程圖這個分層模式能清楚展示你對系統(tǒng)整體性的把握同時也是后期寫各章分工的骨架。系統(tǒng)內(nèi)部模塊建議按功能拆分幾個獨(dú)立的 Python 包c(diǎn)rawler/爬蟲模塊負(fù)責(zé)數(shù)據(jù)采集和本地落盤。storage/負(fù)責(zé) HDFS 文件上傳和目錄管理。spark_jobs/Spark 統(tǒng)計任務(wù)一個任務(wù)對應(yīng)一個分析維度。dashboard/Streamlit 頁面腳本負(fù)責(zé)可視化查詢。config/存放數(shù)據(jù)庫連接、HDFS 地址、爬蟲目標(biāo)等配置文件。這樣拆分的好處是答辯時老師問“你這個系統(tǒng)哪些模塊是獨(dú)立可復(fù)用的”你可以直接回答每一個包都可以單獨(dú)運(yùn)行、單獨(dú)測試不是一個所有代碼堆在同一個 py 文件里的低質(zhì)量項(xiàng)目。4. 環(huán)境準(zhǔn)備與開發(fā)環(huán)境搭建在開始編碼之前先把環(huán)境準(zhǔn)備好。下面是一套適合畢業(yè)設(shè)計演示的推薦環(huán)境版本號請以官方文檔和實(shí)際安裝為準(zhǔn)不要機(jī)械照搬。4.1 Python 環(huán)境建議使用 Python 3.9 到 3.12 之間的穩(wěn)定版本。Streamlit 對 Python 版本有一定要求過老的 Python 版本可能無法安裝最新版 Streamlit。使用虛擬環(huán)境管理依賴避免多個項(xiàng)目依賴互相污染。# 創(chuàng)建并激活虛擬環(huán)境 python -m venv venv source venv/bin/activate # Windows 請使用 venv\Scripts\activate # 安裝核心依賴 pip install streamlit pip install pandas pip install plotly pip install pyspark pip install requests pip install beautifulsoup4 pip install pymysql pip install apscheduler如果你需要同時連接 Hadoop HDFS在純 Python 項(xiàng)目中可以使用hdfs庫來調(diào)用 WebHDFS 接口這比自己實(shí)現(xiàn) Hadoop RPC 協(xié)議要簡單得多。pip install hdfs4.2 Hadoop 環(huán)境畢業(yè)設(shè)計推薦使用 Hadoop 偽分布式模式。偽分布式是指在單臺服務(wù)器上以獨(dú)立進(jìn)程模擬 NameNode、DataNode、SecondaryNameNode 等角色既能展示 HDFS 的核心機(jī)制又不需要多臺物理機(jī)。啟動流程# 格式化 NameNode僅第一次啟動時執(zhí)行 hdfs namenode -format # 啟動 HDFS 服務(wù) start-dfs.sh # 驗(yàn)證是否啟動成功 jpsjps命令輸出中如果看到NameNode、DataNode、SecondaryNameNode三個進(jìn)程說明 HDFS 核心節(jié)點(diǎn)已經(jīng)正常啟動。創(chuàng)建項(xiàng)目數(shù)據(jù)目錄hdfs dfs -mkdir -p /user/student/car_sales/raw hdfs dfs -mkdir -p /user/student/car_sales/clean4.3 Spark 環(huán)境Spark 建議使用 Local 模式完成開發(fā)調(diào)試減少集群資源調(diào)度帶來的額外復(fù)雜度。在提交任務(wù)時--master local[*]表示使用本機(jī)所有可用 CPU 核心執(zhí)行任務(wù)這個參數(shù)對單機(jī)演示完全夠用。spark-submit \ --master local[*] \ --name CarSalesStatistics \ spark_jobs/sales_statistics.py4.4 數(shù)據(jù)庫環(huán)境統(tǒng)計結(jié)果存放于 MySQL 或 SQLite。MySQL 更適合展示工程化能力SQLite 更適合快速演示和打包提交。二選一即可重點(diǎn)在于表結(jié)構(gòu)設(shè)計清晰。下表是一個簡易的汽車銷量統(tǒng)計結(jié)果表設(shè)計字段名類型說明idINT主鍵自增brandVARCHAR(50)品牌名稱modelVARCHAR(100)車型名稱sale_dateVARCHAR(20)銷售日期sales_volumeINT銷量price_rangeVARCHAR(20)價格區(qū)間regionVARCHAR(20)銷售地區(qū)5. 數(shù)據(jù)采集層用 Python 爬蟲獲取汽車銷量數(shù)據(jù)爬蟲是數(shù)據(jù)入口也是最容易被忽略工程質(zhì)量的部分。不少同學(xué)把目標(biāo)網(wǎng)頁復(fù)制成 HTML 文件然后寫一個字符串解析腳本這種方式在答辯中很難自圓其說。更穩(wěn)妥的做法是先確認(rèn)目標(biāo)數(shù)據(jù)源是否允許爬蟲訪問遵守robots.txt和網(wǎng)站服務(wù)條款在代碼中做好頻率控制和異常處理僅將數(shù)據(jù)用于學(xué)習(xí)和畢業(yè)設(shè)計研究。下面是一個簡化版的采集流程結(jié)構(gòu)上先請求數(shù)據(jù)再解析字段最后保存到本地 CSV 文件。# 文件路徑crawler/car_sales_crawler.py import csv import json import random import time import requests # 演示用模擬接口地址實(shí)際項(xiàng)目需替換為確認(rèn)可合法訪問的數(shù)據(jù)源 API_URL https://example-car-data-api.com/api/v1/sales def fetch_sales_page(page: int, page_size: int 100) - list: 拉取一頁銷售記錄。 實(shí)際采集前必須確認(rèn)目標(biāo)數(shù)據(jù)源的服務(wù)條款與 robots 規(guī)則。 params { page: page, page_size: page_size } headers { User-Agent: ( Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 ) } # 注這里會進(jìn)行真實(shí)網(wǎng)絡(luò)請求本地不能訪問外網(wǎng)時 # 可以用下面的 mock_data() 返回演示數(shù)據(jù)。 resp requests.get(API_URL, paramsparams, headersheaders, timeout10) resp.raise_for_status() data resp.json() # 根據(jù)返回結(jié)構(gòu)解析記錄列表 records data.get(data, {}).get(records, []) return records def mock_data(): 僅用于本地功能演示構(gòu)造符合字段結(jié)構(gòu)的樣本數(shù)據(jù)。 brands [大眾, 豐田, 比亞迪, 本田, 長安, 吉利] models { 大眾: [朗逸, 速騰, 帕薩特], 豐田: [卡羅拉, 凱美瑞, RAV4榮放], 比亞迪: [秦PLUS, 宋PLUS, 漢], 本田: [思域, 雅閣, CR-V], 長安: [CS75 PLUS, 逸動, UNI-V], 吉利: [星越L, 帝豪, 博越L], } price_ranges [8-10萬, 10-15萬, 15-20萬, 20-30萬] regions [華東, 華南, 華北, 西南, 東北] records [] for _ in range(20): brand random.choice(brands) model random.choice(models[brand]) records.append({ brand: brand, model: model, sale_date: f2024-{random.randint(1, 12):02d}-01, sales_volume: random.randint(1000, 40000), price_range: random.choice(price_ranges), region: random.choice(regions), }) return records def save_to_csv(records: list, file_path: str) - None: 將記錄列表寫入 CSV 文件。 if not records: return fieldnames [brand, model, sale_date, sales_volume, price_range, region] with open(file_path, w, newline, encodingutf-8) as f: writer csv.DictWriter(f, fieldnamesfieldnames) writer.writeheader() writer.writerows(records) def main(): # 在線數(shù)據(jù)源不可用時切換為 mock_data() 構(gòu)造本地演示數(shù)據(jù) all_records [] for page in range(1, 6): try: records fetch_sales_page(page, page_size100) except Exception as e: print(f請求失敗使用模擬數(shù)據(jù)。錯誤信息{e}) records mock_data() all_records.extend(records) # 控制采集頻率避免對目標(biāo)站點(diǎn)造成壓力 time.sleep(random.uniform(0.5, 1.5)) save_to_csv(all_records, data/raw_sales.csv) print(f采集完成共保存 {len(all_records)} 條記錄) if __name__ __main__: main()這段代碼中有幾個針對答辯的設(shè)計點(diǎn)要提前準(zhǔn)備第一采集必須帶User-Agent并在兩次請求之間隨機(jī)休眠這體現(xiàn)的是對目標(biāo)站點(diǎn)的禮貌訪問也是爬蟲的基本素養(yǎng)。第二try...except中切換為模擬數(shù)據(jù)既能保證代碼在離線環(huán)境下可運(yùn)行也能應(yīng)對真實(shí)接口訪問失敗時系統(tǒng)不崩潰。第三字段名稱統(tǒng)一采用英文蛇形命名方便后續(xù) Spark 和 Streamlit 直接讀取避免中文字段名在數(shù)據(jù)管道中引發(fā)編碼問題。運(yùn)行方式python crawler/car_sales_crawler.py運(yùn)行完成后在data/目錄下會生成raw_sales.csv文件包含品牌、車型、銷量、日期、價格區(qū)間和地區(qū)字段。6. 數(shù)據(jù)存儲層Hadoop HDFS 上傳與目錄管理爬蟲生成的 CSV 文件還在本地下一步需要上傳到 HDFS。這一步在系統(tǒng)里的意義是把“原始數(shù)據(jù)”與“分析數(shù)據(jù)”隔離存放避免后面反復(fù)讀取本地文件產(chǎn)生路徑混亂。HDFS 常用命令# 上傳本地文件到 HDFS hdfs dfs -put data/raw_sales.csv /user/student/car_sales/raw/ # 查看文件是否上傳成功 hdfs dfs -ls /user/student/car_sales/raw/ # 查看文件大小和分塊信息 hdfs dfs -du -h /user/student/car_sales/raw/如果你希望爬蟲完成之后自動上傳文件可以在 Python 中調(diào)用 WebHDFS 接口。這里給出一個最小實(shí)現(xiàn)把本地上傳邏輯封裝起來避免每次手動執(zhí)行 HDFS 命令。# 文件路徑storage/hdfs_client.py from hdfs import InsecureClient # HDFS NameNode 地址根據(jù)實(shí)際部署環(huán)境修改 HDFS_HOST http://localhost:9870 HDFS_USER student client InsecureClient(HDFS_HOST, userHDFS_USER) def upload_to_hdfs(local_path: str, hdfs_path: str) - None: 將本地文件上傳到 HDFS 指定路徑。 local_path: data/raw_sales.csv hdfs_path: /user/student/car_sales/raw/raw_sales.csv client.upload(hdfs_path, local_path, overwriteTrue) print(f文件已上傳{local_path} - {hdfs_path}) def list_hdfs_dir(hdfs_dir: str) - list: 列出 HDFS 目錄下的文件信息。 return client.list(hdfs_dir, statusTrue) if __name__ __main__: upload_to_hdfs( data/raw_sales.csv, /user/student/car_sales/raw/raw_sales.csv ) print(list_hdfs_dir(/user/student/car_sales/raw))從教學(xué)角度看HDFS 部分不需要在論文里展開講太多底層原理但要能回答三個問題為什么用 HDFS 而不是直接放本地磁盤實(shí)際數(shù)據(jù)存儲在哪個節(jié)點(diǎn)文件的副本機(jī)制是什么能回答這三問就足以證明你不是只知道命令的工具人。7. 數(shù)據(jù)分析層Spark 清洗與銷量統(tǒng)計實(shí)現(xiàn)Spark 是整個系統(tǒng)里最能體現(xiàn)“大數(shù)據(jù)分析”的部分。它承擔(dān)的任務(wù)有兩塊第一把 HDFS 上的原始數(shù)據(jù)讀進(jìn)來第二按品牌、時間、價格區(qū)間、地區(qū)等維度做聚合統(tǒng)計。下面是一個典型的統(tǒng)計任務(wù)腳本示例# 文件路徑spark_jobs/sales_statistics.py from pyspark.sql import SparkSession from pyspark.sql.functions import sum, col, to_date, year, month from pyspark.sql.window import Window from pyspark.sql.functions import row_number # 初始化 SparkSession本地模式運(yùn)行 spark SparkSession.builder \ .appName(CarSalesAnalysis) \ .master(local[*]) \ .config(spark.sql.shuffle.partitions, 4) \ .getOrCreate() # 從 HDFS 讀取原始銷售數(shù)據(jù) sales_df spark.read.csv( hdfs://localhost:9000/user/student/car_sales/raw/, headerTrue, inferSchemaTrue ) # 數(shù)據(jù)清洗去除銷量為空或小于 0 的記錄 clean_df sales_df.filter(col(sales_volume).isNotNull()) \ .filter(col(sales_volume) 0) \ .dropDuplicates([brand, model, sale_date]) # 增加年份和月份兩列便于時間維度分析 clean_df clean_df.withColumn(sale_date, to_date(col(sale_date), yyyy-MM-dd)) \ .withColumn(year, year(col(sale_date))) \ .withColumn(month, month(col(sale_date))) # 統(tǒng)計品牌總銷量 brand_sales clean_df.groupBy(brand) \ .agg(sum(sales_volume).alias(total_sales)) \ .orderBy(col(total_sales).desc()) # 統(tǒng)計價格區(qū)間銷量分布 price_sales clean_df.groupBy(price_range) \ .agg(sum(sales_volume).alias(total_sales)) \ .orderBy(col(total_sales).desc()) # 統(tǒng)計大區(qū)銷量排名 region_sales clean_df.groupBy(region) \ .agg(sum(sales_volume).alias(total_sales)) \ .orderBy(col(total_sales).desc()) # 查看結(jié)果方便調(diào)試時確認(rèn)數(shù)據(jù)是否正確 brand_sales.show(10) price_sales.show(10) region_sales.show(10) # 寫入結(jié)果庫以 CSV 形式落盤 brand_sales.write.mode(overwrite).csv(data/output/brand_sales) price_sales.write.mode(overwrite).csv(data/output/price_sales) region_sales.write.mode(overwrite).csv(data/output/region_sales) spark.stop()這段代碼的關(guān)鍵邏輯在于用dropDuplicates去除同一品牌、車型、日期下的重復(fù)記錄這是爬蟲采集中最常見的臟數(shù)據(jù)問題。用to_date把字符串日期轉(zhuǎn)成真正的日期類型后續(xù)按年、月聚合才不容易出錯。所有聚合結(jié)果都單獨(dú)導(dǎo)出到data/output/目錄方便 Streamlit 層讀取。Spark 是否真的有必要在這個畢業(yè)設(shè)計里答案是“有必要”因?yàn)樗x了系統(tǒng)的擴(kuò)展邊界。答辯時你可以這樣說如果數(shù)據(jù)量從今天的幾千條增長到千萬條量級只需要把master從local[*]改成 YARN 集群的提交方式同一套聚合邏輯可以直接運(yùn)行在分布式環(huán)境。這種回答比任何背誦的八股文都有說服力。注意如果從 HDFS 讀取文件時遇到網(wǎng)絡(luò)不通、權(quán)限不足可以先在本地用 CSV 路徑做開發(fā)調(diào)試確認(rèn)邏輯正確后再切換回 HDFS 路徑。項(xiàng)目開發(fā)要有“先跑通、再換環(huán)境”的階段拆分意識。8. 可視化層Streamlit 交互式儀表盤實(shí)現(xiàn)Streamlit 是這個項(xiàng)目里開發(fā)效率最高的部分。你寫一個 Python 腳本保存后刷新頁面就能看到圖表和篩選器不需要配置任何前端工程。下面是一個完整的 Streamlit 應(yīng)用框架包含數(shù)據(jù)加載、側(cè)邊欄篩選、指標(biāo)卡片和三個分析頁簽。# 文件路徑dashboard/app.py import streamlit as st import pandas as pd import plotly.express as px # 頁面基礎(chǔ)配置 st.set_page_config( page_title國內(nèi)汽車銷售分析系統(tǒng), page_icon:car:, layoutwide ) st.title(國內(nèi)汽車銷售分析系統(tǒng)) st.markdown(本系統(tǒng)基于 Python 爬蟲、Hadoop HDFS、Spark 與 Streamlit 構(gòu)建數(shù)據(jù)均為教學(xué)演示樣本。) st.cache_data def load_data(): 從 Spark 輸出的結(jié)果目錄加載數(shù)據(jù)。 如果是開發(fā)階段也可以直接讀取 data/raw_sales.csv。 brand_df pd.read_csv(data/output/brand_sales/*.csv, headerNone, names[brand, total_sales]) price_df pd.read_csv(data/output/price_sales/*.csv, headerNone, names[price_range, total_sales]) region_df pd.read_csv(data/output/region_sales/*.csv, headerNone, names[region, total_sales]) return brand_df, price_df, region_df brand_df, price_df, region_df load_data() # 側(cè)邊欄篩選 st.sidebar.header(篩選條件) all_brands brand_df[brand].tolist() selected_brand st.sidebar.selectbox(選擇品牌, [全部] all_brands) all_regions region_df[region].tolist() selected_region st.sidebar.multiselect(選擇地區(qū), all_regions, defaultall_regions) # 核心指標(biāo)卡片 total_sales brand_df[total_sales].sum() brand_count brand_df.shape[0] avg_sales brand_df[total_sales].mean() col1, col2, col3 st.columns(3) col1.metric(總銷量, f{total_sales:,}) col2.metric(品牌數(shù)量, brand_count) col3.metric(品牌平均銷量, f{avg_sales:,.0f}) # 圖表區(qū) tab1, tab2, tab3 st.tabs([品牌銷量排行, 價格區(qū)間分布, 地區(qū)銷量對比]) with tab1: fig_brand px.bar( brand_df.head(10), xbrand, ytotal_sales, title品牌銷量 Top10, texttotal_sales ) st.plotly_chart(fig_brand, use_container_widthTrue) with tab2: fig_price px.pie( price_df, namesprice_range, valuestotal_sales, title價格區(qū)間銷量占比 ) st.plotly_chart(fig_price, use_container_widthTrue) with tab3: fig_region px.bar( region_df.loc[region_df[region].isin(selected_region)], xregion, ytotal_sales, title地區(qū)銷量對比, colorregion ) st.plotly_chart(fig_region, use_container_widthTrue) st.markdown(---) st.caption(數(shù)據(jù)說明本頁面展示的統(tǒng)計結(jié)果由 Spark 離線計算生成數(shù)據(jù)文件來自教學(xué)演示樣本。)8.1 Streamlit 緩存機(jī)制st.cache_data是 Streamlit 中一個非常實(shí)用的裝飾器。默認(rèn)情況下Streamlit 腳本在每次交互時都會重新執(zhí)行如果每次都重新讀 CSV 或數(shù)據(jù)庫頁面會明顯卡頓。加上這個裝飾器后同樣的參數(shù)只會加載一次數(shù)據(jù)后續(xù)交互直接走緩存頁面響應(yīng)更快。答辯演示時這個細(xì)節(jié)體現(xiàn)的是你對數(shù)據(jù)加載性能的敏感度。8.2 多頁簽設(shè)計使用st.tabs可以把品牌、價格、地區(qū)三個分析視角放在同一個頁面里而不是像傳統(tǒng) Flask 項(xiàng)目那樣跳轉(zhuǎn)多個頁面。這種設(shè)計更符合數(shù)據(jù)分析師的日常使用習(xí)慣進(jìn)入系統(tǒng)后在一個頁面內(nèi)完成所有維度的探索。8.3 跑通一個最小可運(yùn)行版本如果 Spark 輸出文件還沒有生成可以先在load_data()里臨時改為讀取data/raw_sales.csv用原始數(shù)據(jù)做圖表保證 Streamlit 頁面先能跑起來。然后再切換回 Spark 結(jié)果文件形成完整的“數(shù)據(jù)生成到展示”閉環(huán)。9. 系統(tǒng)運(yùn)行效果與答辯演示要點(diǎn)整個系統(tǒng)開發(fā)完成后的運(yùn)行命令分兩步先跑 Spark 統(tǒng)計任務(wù)再啟動 Streamlit 應(yīng)用。# 第一步執(zhí)行 Spark 統(tǒng)計任務(wù) python spark_jobs/sales_statistics.py # 第二步啟動 Streamlit 可視化服務(wù) streamlit run dashboard/app.py啟動成功后終端會輸出本地訪問地址默認(rèn)是http://localhost:8501。用瀏覽器打開后預(yù)期看到以下內(nèi)容頂部標(biāo)題與系統(tǒng)簡介。三個指標(biāo)卡片總銷量、品牌數(shù)量、品牌平均銷量。品牌銷量排行柱狀圖顯示銷量最高的前 10 個品牌。價格區(qū)間銷量占比餅圖。地區(qū)銷量對比條形圖并且可以通過側(cè)邊欄篩選地區(qū)。答辯演示時建議按以下節(jié)奏操作每一步都能對應(yīng)到系統(tǒng)功能打開 Streamlit 頁面先展示整體布局說明每一塊區(qū)域的功能與對應(yīng)數(shù)據(jù)來源。在側(cè)邊欄切換品牌和地區(qū)展示圖表的實(shí)時聯(lián)動效果證明系統(tǒng)具有交互分析能力。切換到終端窗口展示 Spark 任務(wù)執(zhí)行日志指出聚合計算的分區(qū)數(shù)量和完成耗時。打開 HDFS 目錄命令展示原始數(shù)據(jù)文件在分布式文件系統(tǒng)中的存儲位置。最后回到項(xiàng)目代碼用一兩頁 PPT 重點(diǎn)展示數(shù)據(jù)管道五層模型。如果頁面出現(xiàn)空白或圖表不顯示優(yōu)先檢查data/output/目錄下 Spark 是否生成了 CSV 文件以及文件路徑是否與pd.read_csv中的模式匹配。10. 常見問題與排查思路開發(fā)過程中最容易踩的坑按出現(xiàn)頻率從高到低排列如下。問題現(xiàn)象可能原因排查方式解決方案Streamlit 無法啟動或端口被占用8501 端口已被其他進(jìn)程占用查看終端報錯信息運(yùn)行netstat -ano | findstr 8501使用streamlit run app.py --server.port 8502更換端口pd.read_csv(data/output/brand_sales/*.csv)找不到文件Spark 輸出的文件不是單個 CSV而是目錄下的多個 part 文件用hdfs dfs -ls data/output查看目錄結(jié)構(gòu)用通配符*.csv匹配或調(diào)整 Spark 輸出為單文件模式Spark 任務(wù)運(yùn)行內(nèi)存不足本地 JVM 堆內(nèi)存設(shè)置過小查看 Spark 日志中的 OutOfMemory 信息在提交命令中添加--driver-memory 2gHDFS 上傳文件失敗NameNode 未啟動或權(quán)限不足運(yùn)行hdfs dfs -ls /測試連接重新執(zhí)行start-dfs.sh檢查用戶權(quán)限CSV 中文讀取亂碼文件編碼與讀取編碼不一致用文本編輯器查看文件編碼格式pd.read_csv中指定encodingutf-8Streamlit 頁面圖表不聯(lián)動篩選變量沒有傳給圖表數(shù)據(jù)源檢查側(cè)邊欄變量是否在px.bar中作為過濾條件在圖表繪制前增加篩選邏輯例如brand_df[brand_df[brand] selected_brand]這里單獨(dú)說一下 Spark 輸出文件的問題Spark 在分布式模式下寫入數(shù)據(jù)時默認(rèn)會在輸出目錄下生成多個part-00000文件而不是一個單獨(dú)的result.csv。如果你希望在 Streamlit 中更方便地讀取可以在寫入前調(diào)用coalesce(1)強(qiáng)制合并為一個分區(qū)輸出brand_sales.coalesce(1).write.mode(overwrite) \ .option(header, true) \ .csv(data/output/brand_sales)但要注意coalesce(1)會降低數(shù)據(jù)寫入的并行度。真實(shí)項(xiàng)目中數(shù)據(jù)量大時不建議使用這個點(diǎn)也可以在答辯時主動說明展示你對性能與易用性之間權(quán)衡的理解。11. 畢業(yè)設(shè)計最佳實(shí)踐與避坑指南這個項(xiàng)目雖然技術(shù)棧清晰但如果不注意工程規(guī)范很容易在開發(fā)過程中變得混亂。下面幾條建議來自真實(shí)開發(fā)經(jīng)驗(yàn)?zāi)軒湍闵僮吆芏鄰澛贰?1.1 數(shù)據(jù)字段統(tǒng)一命名爬蟲、Spark、Streamlit 三個環(huán)節(jié)共享同一套字段結(jié)構(gòu)。建議在項(xiàng)目根目錄維護(hù)一份README.md記錄每個字段的含義、類型和取值范圍。比如sales_volume的單位是“輛”price_range只能是預(yù)定枚舉值。這份文檔既是開發(fā)備忘也是撰寫論文時“數(shù)據(jù)字典”章節(jié)的素材。11.2 分階段推進(jìn)不要一次做完建議按以下順序推進(jìn)項(xiàng)目第一階段用模擬數(shù)據(jù)跑通 Streamlit 頁面和圖表交互。 第二階段編寫 Spark 統(tǒng)計任務(wù)產(chǎn)出統(tǒng)計結(jié)果替換 Streamlit 的數(shù)據(jù)源。 第三階段實(shí)現(xiàn)爬蟲采集真實(shí)或模擬接口數(shù)據(jù)。 第四階段接入 HDFS形成完整存儲鏈路。 第五階段加入定時調(diào)度讓系統(tǒng)能自動更新數(shù)據(jù)。每個階段都有可交付、可驗(yàn)證的成果避免最后階段才發(fā)現(xiàn)鏈路不通、無從排查。11.3 結(jié)果數(shù)據(jù)落庫而不是反復(fù)計算Spark 計算完成后把聚合結(jié)果寫入結(jié)果表或輸出文件。Streamlit 頁面只讀取結(jié)果不參與大數(shù)據(jù)計算。這樣設(shè)計的好處是頁面響應(yīng)速度與數(shù)據(jù)量解耦不會因?yàn)樵紨?shù)據(jù)增大而讓 Dashboard 變慢。11.4 善用定時任務(wù)讓數(shù)據(jù)自動更新如果希望在答辯前展示系統(tǒng)的“數(shù)據(jù)更新能力”可以用APScheduler實(shí)現(xiàn)定時采集和定時分析# 文件路徑scheduler/update_task.py from apscheduler.schedulers.blocking import BlockingScheduler from crawler.car_sales_crawler import main as crawler_main from spark_jobs.sales_statistics import main as spark_main def daily_update(): # 先采集數(shù)據(jù) crawler_main() # 再將數(shù)據(jù)上傳 HDFS # 最后執(zhí)行 Spark 統(tǒng)計任務(wù) spark_main() if __name__ __main__: scheduler BlockingScheduler() # 每天凌晨 2 點(diǎn)執(zhí)行更新任務(wù) scheduler.add_job(daily_update, cron, hour2, minute0) scheduler.start()這個模塊放在系統(tǒng)中等于給項(xiàng)目增加了一個“定時數(shù)倉更新”的場景答辯時是一個明顯的加分項(xiàng)。11.5 代碼注釋和日志規(guī)范化項(xiàng)目源碼中核心函數(shù)必須寫 docstring關(guān)鍵步驟要有日志輸出。建議使用 Python 的logging模塊把爬蟲采集量、Spark 處理耗時、Streamlit 啟動日志都記錄下來。這不僅是良好代碼習(xí)慣也方便你在論文里展示系統(tǒng)可觀測性。12. 總結(jié)與后續(xù)提升方向基于 Streamlit 的國內(nèi)汽車銷售分析系統(tǒng)本質(zhì)上是一個“大數(shù)據(jù)分析技術(shù)的完整落地案例”。它把 Python 爬蟲、Hadoop HDFS、Spark、Streamlit 這些技術(shù)名詞串成了一條真實(shí)可運(yùn)行的數(shù)據(jù)管道既能作為畢業(yè)設(shè)計選題也是一份很好的大數(shù)據(jù)應(yīng)用開發(fā)入門項(xiàng)目。后續(xù)如果還有時間可以從以下方向繼續(xù)擴(kuò)展把 Streamlit 部署到服務(wù)器通過 Nginx 反向代理讓其他人可以通過公網(wǎng)地址訪問系統(tǒng)接入更多維度的外部數(shù)據(jù)分析讓圖表更有業(yè)務(wù)意義將 Spark 計算從本地模式遷移到 YARN 集群驗(yàn)證分布式環(huán)境下的計算性能引入定時調(diào)度框架讓整個數(shù)據(jù)管道每天自動運(yùn)行。技術(shù)路線沒有唯一答案。有人用 Flask 做可視化有人用 Hive 做數(shù)據(jù)倉庫也有人用 ClickHouse 做實(shí)時查詢但核心思想是一致的數(shù)據(jù)采集、存儲、計算、展示必須是一套完整鏈路。你能把這條鏈路講透、跑通這就是一個高質(zhì)量的畢業(yè)設(shè)計。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
在线国产福利网址导航| 超碰97综合网| 91香蕉视频在线观看免费| 六月婷婷激情| 国产精品动态一区二区三区四四| 在线综合色| 日本女厕偷拍| 天天看天天干| 91色鬼| 97超级色碰碰| 在线无码操| 国产精品suv一区| 男同专区一区二区三区在线| www激情| 91热色| 亚洲 欧美 制服 另类 自拍| 欧美大香蕉97| 色婷婷狠狠18禁| 老女人老91妇女老热女| 自拍偷拍亚洲熟女妇人精品| 国产熟女自拍| 亚洲一欧洲中文字幕在线| 大香蕉综合久久| 人人做,人人操,人人摸| 久久综合乱子伦国产免费| 精品免费囯产一区二区三区| 91丨九色丨大屁股| 四虎精品永久在线播放| 国产精品青青草| 91亚洲电影| 懂色AV一区二区三区| 婷婷九月丁香| 玖玖婷婷五月天| 久久久91福利姬| 日韩激情中文字幕有码| 欧洲一区二区| 性色中出| 久操网视频| 欧美精品久久| 九九色热| 亚洲伊人成综合成人网| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 超碰色综合| 国产视频一区二区在线观看| 女人与公拘交酡2020视频| 极品粉嫩一区二区| 强奸乱伦大香蕉| 岛国999| 欧美特大黄一级片片免费| 91精品久久久久久| 午夜啊啊啊| 成年人三级黄色片视频| 天天干夜夜鈤| 打av高清| 一区三区啪啪| 免费观看日本操逼视频| 国产精品午夜精品| 国产a级精品| 日本不卡高清视频| 久久岛国| 国产久久男人天堂| 俺去也婷婷| 亚州91| 韩国国产欧美情侣视频在线| 亚洲宅男天堂| 日韩色欲久久一二三四区| 97超碰国产亚洲精品| 免费视频无码| 激情五月天丁香社区| 欧美日韩亚洲天堂| 超碰到97情色| 久久夜嗨| 91操碰| 老司机深夜18禁污污网站| 好爽要喷了| 91在线美女| 亚洲成人美女无吗| 91色人妻| 欧美成人性活片| 日影院久久婷婷夜夜网| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久久久久久久久久久黄色 | 一区二区三区成人 | 亚洲人妻在线一区| 天天综合网在线91| 婷婷五月天无码| 久久久一区二区三区四曲免费听| 久操网视频| 99久久亚洲精品无码毛片潘甜甜| 午夜福利 成人 91| 曰韩香蕉97| 日韩性色b| 精品性爱一二三区| 精品视频免费在线一区| 无码高清操逼| 久久永久无码人妻视频| 国产精品久久久久婷婷二区次| 欧美 亚洲 制服 精品| 色久桃花影院在线观看| 成人蜜乳小视频网站| 91n处女在线观看| 一直超碰| 一级性爱视频免费观看| 东京热男人的天堂| 亭亭在线资源| 色偷偷人人玩人人舔人人操人人摸人人爽| 91呆哥人妻| 被男人吃奶很爽的毛片| www.av家庭乱伦| 国产精品在线免费| 91黄射| 偷拍在线观看视频| 欧美暴力猛交| www.高清无码诱惑一区.com| 嗯嗯嗯啊啊啊操的我好爽| 婷婷五月天成人| 色色国产| 日韩人妻大香蕉| 97人人草| 蜜臀av在线播放一区二区三区| 亚洲欧美日韩精品久| 人人干黄色| 亚洲成a人v欧美综合天堂下载 | 亚欧性爱在线无码| 这里都是精品在线观看| 亚洲av无码成人精品国产| 秋霞操逼片| 国产极品粉嫩馒头一线天av| 亚洲熟女乱色一区二区三区| 久久久久久久九九九九九九| 成人精品一区二区91毛片不卡| 18禁无码永久免费无限制| 亚洲第一页第二页激情| 精品国产一区二区三区四区在线看| 强被迫伦姧在线观看无码网站| 久草精品国产99| 久久久久人妻二区精品叶可怜| 国产一区二区在线播放量| 最新国内自拍av免费| 中文字幕日韩精品久久| 黄色AAAAAAAAAAA大片| 囯产乱伦一区二区三女 | 久久熟妇五十路一区| 大香蕉欧美伊| 色狠狠一区二区三区香蕉| AV女优男人的天堂| 日本性感人妻91| A V视频日本| 日本高清_区二区三区| 亚洲成a人在线观看久| 久久精品日韩| 色综合九九| 日本久久久久久久久| 99xav| 亚洲九九视频在线观看| 亚洲 欧美 色图| 国产精品人妻无码久久久老鸭窝| www色日本| 伊人久久青青草| 久久中出在线| 日日夜夜骑| 综合国产影视三级| 色五月婷婷网| 蜜臀99久久精品| 欧美丝袜91| 男人亚洲天堂| 插日本熟女视频| 五月天婷婷综合网| 亚洲青色欧美| 人妻丰满熟妇一区二区三| 日韩精品亚洲专区在线影视| 97香焦色区| 久久久久久久久久久999| 蜜臀AV一区二区三区| 免费av高清无码| 欧美黄色大香蕉一区二区| 久草视频制服诱惑| 一起草在线视频| 色哟哟511老熟女| 欧美激情总合网| 男人成人黄色视频在线观看免费下载| 亚洲国产成人精品女人久久久| 中日韩欧美精品无码AⅤ一区二区| 日韩精品区二区三区不卡| 动漫av中文| 电家庭影院午夜69久久夜色精品国产69乱| 中文字幕av亚洲在线| 日本999精品视频| 久久激情婷婷| 狠狠色色| 欧美97av| 性爱视频久久| 大香交| 国产精品无码久久久久2025| 激激五月| 国产AAAAAABBBBB| 五月天激情小说| 俞拍自拍| 国产三区免费在线观看| 亚洲综合图色在线| 亚洲人妻中文在线视频| 人妻少妇蜜桃视频欧美一区| 精品国产AV一区天美传媒| 秋霞曰韩R级| 亚州综合图片| 又粗又长又爽在线观看| 亚洲五区熟女| 免费看A片毛毛片在线播| 亚州欧美一区| 秋霞免费AV| 欧洲精品人妻| 免费精品人妻一区二区三| 久久爱超碰网| 乱伦3P视频| 亚洲欧美日韩国产丝袜自拍中文| 国产99精品一区二区三区免费| 欧洲精品一区二区三区| 欧美一级久久久丰满| 欧美精品 - 91爱爱| 呦呦影院| 爱丝福利| 日日干夜夜干| 性夜影院爽黄A爽免费动漫| 黄色大片一区二区密桃丝袜| 思思久热在线精品66| 久久九九一区二区三区成人| 又粗又长又大国产不卡| 东京热精品97综合网| 天天弄天天操| 中日韩久久久免费看| 五月丁香综合啪啪| 97免费在线观看视频| 99成人| 五月丁香激情四射| 射欧美综合| 国产啊v在线免费播放| 成人精品欧洲亚洲| 99九九精品| 蜜桃午夜视频一区二区 | 色综合国产在线观看| www老逼91| 成人激情无码在线视频| 久久久国产护士丝袜美腿一| 白丝1区2区3区| 国产午夜福利电影免费在线观看| 天天情欲宗合网| 9999久久久久| 久久无码一区二区二三区性色| 久久精品国产久精国产| 99这里只有精品| 91被操| 福利一级版子| 激情AV| 国产无码三级视频在线观看| 97视频免费在线| 97超级久久强资源| 国产女乱淫真高清免费视频| 人妻精品一区二区| 天美传媒AV国产在线| 婷婷视频网| 色欲三区| 97在线免费看视频| 一区二区视频你懂的| 久热超碰| 无码抄逼网| 欧美成熟性爱精品| 青青草国产欧美非洲黑人| 刺激性视频黄页| 免费一级欧美片片线观看| 天天干人人乐| 2019午夜福利视频| 午夜精品久久久99| 亚洲色图大香| 乱伦AVxx| 牛黄色久午久| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲图片日本AⅤ欧美在线| 999精品乱码| 超碰天天操| 在线观看十八禁| 超碰99在线观看| 国产操操日韩三级黄| 国产精品女aA片爽爽视频| 啊嗯嗯啊好大好爽| 国产精品天干天干综合网麻豆| 99国内精品| 日韩性爱电影一区| 免费精品中文字幕| 国产精品人人爽人人做可爱福利| 97精品视频| 91丝袜人妻| 4虎在线视频| 青青草精玖玖69精品| 亚州精人品大香蕉| 午夜寂寞欧美| 亚洲av无线观看| 手机在线中文字幕国产| 激情抓乳插进去啪啪啪日韩| 五月天我淫我色av| 九九综合九九综合| 日韩免费中文字幕视频| 淫荡网址| A级毛片在线看免费| 999久久久九九九九| 成人草草视频| 黄色工厂这里只有精品| 国产女人视频三四五区| 日韩精品人妻| 91美女在线观看| 亚洲国产精品无石码久久| 2020中文字幕在线观看| 久久久久久久97| 国产白丝AV| 国产精品97视频| 易易A毛视频| 久久99久久99精品天美传媒棢·纸:.| 国产精品另类| 97免费在线观看视频| 777超碰| 免费在线视频97| 欧美97爱| 可以免费看黄片的视频| 欧美十八禁视频| 强奸乱伦AV网址| 亚洲色图一区二区三区| 人人模人人看| 熟女五十路一区二区三| 一区二区三区激情在线观看| 国产亚洲精品自在线亚洲情侣| 国产亚洲精品农村妇女| 久久久久久久久久8888| 精品人妻夜夜草| 亚州久久9| 亚洲国产青青| 午夜欧美精品久久久| 97在线免费视频| 91视频伊人| 人人人人插| 五月天大香蕉| 超碰79人人乐| 国产精品一级二级在线| 东京热大香蕉| 国产欧美精选自拍一区| 天天干一干| 国产一区麻豆免费观看| 91综合无码| 欧美在线播放| 97人人模人人爽人人| 少妇免费视频| 啊啊啊啊啊舒服| 色欲av国内精品久久久久久| 成人 日本A片无码8888| 91九九九馒头| 高清无码91| av爱爱爱| 51一区二区三区| 67914亚洲精品| 色 亚洲 91| 天天cao在线| 黄色片,com| 开心五月婷婷| 97爱啪| 欧美大香蕉久| 色嘟嘟人妻天堂网| 九久9精品| 成人无码在线视频网站| 2020中文字幕| 一区二区影视| 色官网在线| 91网18| 亚洲91射| 亚洲成人免费中文字幕| 国产少妇肉丝在线观看| 欧美啪啪天堂| 金莲网址| 欧美91精彩| 黄片视频观看| 久久99网站| 精品久久久不卡一区二区| 秋霞 色色| 日韩欧美视频青青| 久草综合网| 玖玖资源综合在线视频| 欧美A√综合网 | 男人久久精品| 国产家庭乱伦表演| 91大神电影天堂| 亚洲全色网| 五月激情影院| 射久久| 五月天色五月| 黄色工厂这里只有精品| 超碰99在线观看| 欧美 日韩第一性色| 国产亚洲精品av一区| 久久97资源 网| 国产91福利小视频在线观看| 蜜桃久久久久久| 欧美色青| 91 国产丝袜在线放观看| 久久伊人最新网址视频| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 黄片com.| 欧美第五页| 日本国产高清色www视频在线| 亚洲欧美setu| 人妻人人做人人澡人人爽欧美一区| 丰满少妇高潮无码| 乱伦a片视频| 做爱福利视频一区二区| 国精精品无码一二三区水多多| 欧美日韩大陆黑人少妇99| 成年人黄色视频免费| 91伊人影视综合| 亚洲性爱成人| 中亚黄色三级大片| 亚洲国产欧美另类自拍| 97久久精品不卡| 日韩性爱电影一区| 欧美AB在线| 嗯嗯啊啊操死我| ,成人免费啪啪视频| 中文幕97| 香蕉久久国产AV一区二区| 九九热re99re6在线精品| 丁香六月婷| AV乱伦国产| 亚洲美女 晚间男人天堂 | 999久久芭蕾| 日韩欧美亚洲一区二区三区影院| nuu12国产麻豆精品| 亚洲激情网一二三四区| .精品人妻一区二区三| 精品中文一区二区| 六月婷婷综合| 国产精品久久久久久久AV大片| 欧美论理片| 久热9| 欧美精品三区| 久久精品国产97欧美精品亚洲| 九九热精品| 国产av激情无码久久天堂| 色九九综合AV| 九九九九九九九精品视频| 亚洲无码成人精品| 啊啊啊草死我| 午夜精品久久久久久久99| 9久超碰| 十八禁的黄污污免费网站| 亚洲一区二区av| 热久日综合| 激情开心五月天| 九九久久玖玖| 在线中文AV| 青青草在线视频人人想人人上 | 91亚洲黄色网| 亚洲视频,小说| 丁香久久| 日韩精品1区2区中文字幕| 97色亚洲| 熟女91网站| 色网1| 嗯……啊…嗯嗯…啊…好舒服| 亚洲AV成人无码久久精品播放| 91香蕉国产尤物视频| 欧洲一区二区三区四区在线观看| 天综合网| 97婷婷色| 97久久久| 午夜黄色免费在线观看| 国产无码精品无码| 999精品乱码| 中文字幕免费看| 麻豆精品A片免费观看| 五月丁香综合| 精品国产片亚洲一区| 欧 美 自 拍 偷 拍| 97视频网站| 大香蕉懂9| 一二三四区操操Av| 亭亭在线资源| 欧美综合 站| 六月丁操逼| 荡小穴在线观看| 91精品丝袜久久久久久| 911粉嫩人妻| 国产人伦a片信息免费片| 国产精品久久久久久久久久梁医生| 亚洲欧美另类图片| 天天射日日干| 黑人猛交| 亚洲情色 自拍| 国产怡红院在线| 久久熟女嫩草成人片免费| 偷拍在线观看视频| 精品久久九| 超碰综合色| 久久久不卡区一区二区三区久久久| 97精品国产97久久久久久免费| 色婷婷激情| 天天干天天拍| 1区2区3区在线视频| 啊啊啊不要好疼视频| 国产亚洲一黄| 97国产精品国| 欧美第38页| 天美欧美国产| 人人摸人人舔一区二区| 欧美熟女丝袜| 久久久精| 欧美少妇人妻| 92性色国产午夜福利在线661| 在线毛片片免费观看| 翔田千里AⅤHD无码| 操逼片国产| 人妻日日干| 国产精品久久久久久久久AV大片| 可以看的av| 奸色色 男人天堂 天天射| 综合日韩激情另类图片| 天天摸夜夜操视频| 日本免费二区三区| 久久春色| 交换娇妻呻吟声不停中文字幕| 欧美中文字幕日韩在线| 一区二区视频在线播放| 婷婷九月色| av在线人气 | 久久久久成人蜜桃精品| av大香蕉网站| 超碰97导航| 亚洲欧美黄| 中文字幕一区二区三区字幕| 免费精品福利在线观看| 天天看少妇| 99精品高潮| 淫纸中9区| 一级做a爰片性色毛片久久| 色综合久久88色综合久久天天| 色色五月婷| 大香蕉97久久| 亚洲自拍青操视频| 女人被添高潮免费视频| 五月丁香六月婷| 裸体美女久久久| 激情一区二区三区在线观看| 欧美东京热精品A∨| 碰碰97| 欧美白嫩在线放| 97se综合网| 女优免费一区二区永久| 天美麻花大全视频| 在线观看AV片| 超碰成人公开| 黄片免费视频2019| 人人性爱视频免费| 日本操逼视频免费| 国产综合久久久麻桃个| 人妻91少妇| 干美女人妻| 综合性视频99| 亚洲综合伊人| 1024手机看片欧美日韩| 人妻少妇三级| 日韩美女,国产传媒,视频一区| 天天欧美色| 蜜桃色色网站视频三区| 伊人网综合在线视频| 中文字幕精品一区欧美| 岛国激情视频在线观看| 浓厚中出中文字幕在线| 国产精品久久天天干| 91大神精品长腿在线观看网站| 蜜臀视频网站| 日韩无码一级黄色av片| 欧美一二三级精品在线| 日韩人妻一区二区| 综合伊人激情| 久久性爱精品一区| av网页一区二区三区| 一级黄色性爱A级片| 超碰国产精品久| 日韩色欲久久一二三四区| 日韩操逼HD| AVE乱伦| 久久精品 六十路 熟女 欧美| 日韩日本欧美在线观看| av一区二区三区四区| 性色生活片久久毛片婬片免费放女人一级毛片| 国产一级内射无挡观看| 色久桃花影院在线观看| 97任你吞精| 激情网五月天| 中文字幕在线观看第二页| 国产精品网站www| 很黄很污的免费网站| 亚州色图欧美| 青青草华人在线欧美在线| 91精品丝袜久久久久久| 免费岛国一级片| 欧美一级特黄淫片在线观看| 国产三级电影免费观看| 欧美另类色图片| 五月天久久婷婷亚洲 | 日本东京热加勒比久久| 欧美在线干| 蜜桃传媒一区二区亚洲| 日韩/97| 少妇精品久久久八区九区| 久久精品电影在线| 91搞逼视频| 免费看一级a性色生活片久久无| 99爱爱| 精品无吗久久| 91天美免费| se吧提供国产乱老熟视频胖女人 | 日本精品成人无码| 淫色网综合| 神马九九九| 男插女青青影院| 国产精品免费视频人成| 久久只有精品一区二区三区| 我爱操| 亚洲?V无码专区在线电影| 国模精品娜娜一二三区| 天天做天天爱天天爽AV| 天天干人人乐| 人人摸人人叼| 青女在线| 国产精品白领在线观看| 天堂种子在线www网资源| 国产精品网站免费| 97综合国产| 5月婷婷6月六月丁香| 大香蕉十区| 男人的天堂va| 亚洲人妻av| 99国内熟女露脸视频| 富女玩鸭子一级毛片| 97色色婷婷| 99热日| 一级黄色性爱裸体视频| 欧美国产日韩清纯唯美| 欧美日本不卡| 欧美精品一区二区少妇免费A片| 日本高清电影欧美色图| 激情综合 婷婷五月 红杏 | 极品五月天噜噜| 黑人性欧美| 日韩性爱电影一区| 日本中文字幕熟妇| 综合免费无码中文| 亚洲国产丝袜在线观看| 婷婷丁香九月| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 丁香六月婷婷| 肥佬影院91| 综合色图区| 亚洲情色 自拍| 亚洲精品日日夜夜52| 青草伊人久久| 日韩性爱高清免费视频| 97精品视频在线| 综合欧美日本三级| 97超碰影音| 色爱综合网| 日本欧美色| 岛国色情视频在线观看| 丝袜视频一区二区在线播放国产中文| 狠狠久久手机视频精品| 99热综合在线| 91一区二区三区蜜桃| 国产精品 午夜福利| 中文字幕黄片在线| 综合色图亚洲欧美| 免费看黄片现成| 亚洲熟女一区| 秋霞曰韩R级| www.人人摸在线视频| 人妻AV 中文字幕的| 1204人成网站色www| 久久99视频| 久久婷婷欧美| 久久这里只精品99re66图| 亚洲男人天堂视频| 亚洲国男人的天堂| 亚洲欧洲自拍图片专区满春格| 亚洲美女 晚间男人天堂 | 亚州男人天堂| 一区麻豆 高清中文字幕| 人人看人人爰人人操| 懂色影视久久| 精品国产乱码久久久久久久久1 | 青青草在线视频美女| 日韩一级二级| 国产对白刺激视频| 超碰色大香蕉| 欧美狠狠操| 国语av最新自产拍在线观看| 国产日韩怡红院| 夜夜高潮夜夜爽| 亚洲欧美在线观看2021 | 午夜色婷婷| AVE乱伦| 丁香婷婷激情五月天无毒不卡 | 亚洲av无码国产精品字幕| 综合激情一一91| 久久麻豆一区二区| 久久九九视频九九视频| 欧洲精品一级二级精品综合视频综合| 91美女在线看| 91狠| 久久精品店| 美国日韩黄片| 搡老女人老91妇女熟女| 天天干天天日天天射黄色| 狠狠色噜噜狠狠狠狠2018| 精品美女少妇一区二区| av东京热男人的天堂| 亚洲色图91欧美日韩| 国产精品久久久久久久毛片1| 97天天| 久欲AV| 久久999久| 久久婷婷五月天| 亚洲无码久久久久久久| 欧美国产婷婷久久| 天天插天天操天天摸天天射天天看| 精品视频久久久久九九九九9999| 亚洲色图日韩精品| 中文字幕精品一区二| 干B网| 色婷婷一区二区三区久久午夜| 九九热超碰97亚洲最新香蕉| 成人情色一区二区| 亚洲精品aa久久伊人| 搡老熟女免费视频 | 小说区 图片区色 综合区| 后入人妻无码| 91AV国产精品| 色网1| 金典av| 久久久18禁| 国产农村妇女精品一二区| 国产精品交换一区二区| 久久久97| 26uuu性| 成人七区| 国产又大又硬又长又粗| 亚洲精品国产精品乱码不99| 久久曰曰| 久久a久久| 在线视频一区二区传媒| 中文字幕78| 东北操逼| 超碰97日韩| 精品视频久久| 精品999一区二区| 青青草福利视频| 亚洲色宗合| 超碰97护士| 亚洲综合影院| 综合伊人激情| 国产熟女完整版中字| 中文字幕中文字幕一区二区| av天堂精品久久| 国产精品激情久久久久久久| 免费精品中文字幕| 亚洲黄色a级片| 五月香婷婷| 91操人| 热天堂一区二区| 99色在线| 亚洲色9| 人妻少妇久久中文| 9997se| 91熟女丨老女人| 黄色无码高清黄色无码网站| 欧美Ⅴ性爱| 91色色网站| 亚洲精品尤物yw在线影院| 亚欧视频在线| 五月天婷婷成人网| 日少妇亚洲版| 青草园大香蕉| 日韩猛交| 免费看黄视频亚洲网站| 色婷视频| 天天添天天干电影| 神马午夜久久久| 91激情国产| 国产99热| 国产麻豆福利av在线播放| 影音先锋视频在线| 99热婷婷| 欧美第一页性| 精品国产久久乱码| 综合久久99| 欧美日韩国产成人高清| 激情综合二| 精品少妇后入一区二区三区四区人妻巨乳| 玖玖爱综合| 夜夜做夜夜爽精品视频| 亚洲美腿丝袜香蕉影视欧美成人| 风韵犹存大大大大香蕉 | 久草这里只有精品| 综合五月婷婷亚洲一区| 91oumei| 欧美日韩美女精品久草一区二区三区| 色香天天| 黄色欧美性爱视频| 嗯嗯啊操我| 舔舔啊| 日本操逼视频不卡直接放| 亚洲色图91欧美日韩| 黄页网站成人免费| 人人操人人操草草| 九九国产| 欧美日韩免费性爱| 精品96久久| 中文字幕日韩电影人妻| 亚洲成人一二三区| 色牛aV| 久久这里都是精品| 超碰色老头| 色性综合| 一区二区中文| 日本免费一区二| 亚洲一区二区在线观看91| 亚洲精品男人的天堂| 亚洲丨在线| 91热爆在线| 91 综合网| 天天干少妇| 青青草国产欧美非洲黑人| 久久久久成人蜜桃精品| 欧美日韩1234| 爱欲AV| 成人无码电影在线观看网| 自拍视频大全亚洲专媒视频/一区二区三区 | 啊啊啊好大好深| 日产狠狠干| 精品久| 嗯嗯啊啊用力视频免费| 欧美日韩啪啪电影| www.男人天堂| 睡产熟女乱伦| 干B网| 婷婷国产精品九区| Av手机版天堂网| 噜噜噜亚洲精品| 中国亚洲呦女专区| 伊人网高清| 日韩紧密久久| 97人妻免费中文字幕| 亚洲欧美天| 日本熟妇一区二区三区| 日本孕妇一区二区视频操逼免费看 | 色婷婷久久综合超碰| 黄色免费网页无码| 亚洲少妇视频| 天天亚洲综合| 在线强奷到舒服的无码视频| 中国91AV| 天堂精品小草| 欧美性爱精品一区二区| 欧美色宗合| 91超碰碰在线| 色噜噜狠狠色综无码久久合欧美| 国产在线播放成人免费| 天天干人妻| 丝袜 亚洲 偷拍| 少妇一区二区三区高速| 自拍啪啪视频| 一区二区首页| 亚洲五月婷| 久综合国内精品自在自线| 欧日韩一二三f区| 91人妻视频在线| 亚洲AV成人无码久久精品播放| 久久精品熟妇丰满人妻99| 日韩电影天堂视频二区三区| 五月丁香大香蕉| 国产日韩欧美操逼视频| julia国产在线| 免费看污网址| Av色五月| 中字乱伦AV| 一起草欧美| 欧美AB在线| 污电影在线观看| 大香蕉欧美伊| 欧美在线视频99| 国产熟女乱论| 日韩熟女操逼| 亚洲欧美黄| 天美av在线| 色网1| 男插女青青影院| 另类图片五月| 久久 国产精品 一区| 少妇无码av专区线| 日本爽爽爽爽爽爽免费视频| 97超碰精品图片| 精品少妇人妻| 中文字幕人妻色偷偷久久皮 | 尤物视频新赏网鲜网色诱网| 曰本熟女视频| 亚洲欧洲美腿丝袜| 婷婷激情五月| 五月丁香激情综合网| 国产精品无码在线| 日韩精品人妻一| 日韩免费三级黄片电影| 欧美97| 青青草中文字幕| 欧美色另类| 国产在线激情| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 狼狼色丁香久久婷婷综合五月| 国产真实子伦对白| 精…码一二三区| 久久久性爱| 男人天堂2019| 欧姜老司机| 天堂性色| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 九九热九九热| 欧美男女午夜啪啪| 天美麻豆精品视频99| 长长久久免费视频| 920日本午夜免费| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 久久午夜鲁丝片| 欧美性爱日韩高清| 国产精品探花色| 超碰国产精品久| 911av网站免费观看| 亚洲 自拍偷拍 欧美| 做爱A级亚欧| 大香网站| 国产女人91精品嗷嗷嗷嗷| 国产视频一区二区免费| 综合五月婷婷| 亚洲影视综合网| 欧美18禁91| 天天综合网1| 啊啊啊好疼| 欧美三级偷拍| 亚洲一二三四区| 国产成久久综合片| 国产美女裸体秘 永久无遮挡| 国产成人一级av88| 亚洲操人| 好吊色在线观看| 天天综合香 ld视频| 一级黄碟在线看| 大白逼三四级| 97超碰人妻| 日韩中文字幕精品一区在线| 蜜乳AV一区二区三区四| 超碰狠狠操| 尤物av网站| 九九九九一级| 天天综合官网| 亚洲成人性爱网站在线播放| 日韩欧美字幕亚洲一区二区 | 亚洲第一页第二页激情| 国产精品久久99日日| 伊人久久婷婷| 综合 青草 伊久久 影院 综合| 欧美天天综合站| 麻豆成人影音在线| 中国一级操逼视频| 99热9| 1204金沙人妻懂旧版免费| 91久热| 伊人久久综合影院精品久久久| 在线精品福利免费播放| 蜜臀久久99精品久久综合| 亚洲精品国产精品乱码不卡| 色噜噜人妻av中文字幕| 久草精品国产99| 国内精品伊人久久久久影院会| 无码一区二区三区四区五区六区七区八区九区十区视频 | 九九国产热| 综合久久9| 一级特级aaaa毛片免费观看| 91蜜臀熟女| 日韩97精| 亚洲另类欧美精品| 欧美色色色| 热的中文 热的有码 热的国产| 国产精品第一页国产大屁股视频免费区| 强奸乱伦 亚洲一区| 国产成人+综合亚洲+天堂| 欧美日韩大陆黑人少妇99| 欧美熟妇精品黑人巨大91| 国产Aα| 蜜臀AV一区二区三区激情综合| 97精品人妻一二三四| 黄色片一区二区三区四区五区 | 欧美97| 超碰99在线观看| 亚洲日本天堂| 一个国产在线综合网站| 中文字暮97| 性欧美91| 九九性爱网| 98超碰日本| 91丨豆花丨熟女| 91精品人妻一区二区三区蜜桃臀 | 夜夜爽77777| 久久久78| 五月天黄色激情视频| 淫骚熟女一区二区三区| 秋霞 色色| 国语人妻精彩刺激| 精品人妻一区二区三区不卡断| 日操粉逼逼| 色制服丝袜夫妻av一区| 久久久久久亚洲Av无码| 91色五月俺来也| 中文字幕欧美日韩三级| 综合色图区| 97色综合中文网| 色婷婷久久| 97超碰精品图片| 天美麻花大全视频| 黑人综合色| 影音先锋中文字幕日本好一区二区| 夜夜综合| 乱论91| 啊啊啊啊啊好舒服视频| 无码逼| 欧美性视频二区三区| 九九探花视频在线观看| 狠狠干2020| 国产亚洲精品自在线亚洲情侣| 激情内射| 99热在线观看| 久久超碰日韩精品| 国产精品天美传媒| 欧美不卡五十路| 看黑丝美女操逼青青网站| 亚洲乱色熟女一区| 国产精品丝袜久久亚洲不卡| 人妻中文字幕精品无码| 国产精品视频在线播放| 日韩色欲久久一二三四区| 亚洲熟女偷拍在线观看| 精品毛片久久久精品毛片| 蜜臀一二三区| 99精品在线| 98久久| 欧美日韩亚洲高清不卡一区二区三区| 午夜福利1区2区3区| 足交视频老司机| 久久色情| 9色国产精品一区粉嫩| 60秒免费小视频| 成人国产精品三级A片| 综合久久9| 国产精品色哟哟| 国产美女高潮叫床视频| 色欧美综合| 四季AV一区二区凹凸精品小说| 人妻精品一区二区在线| 九九热三级片| 精品国产99| 国模精品娜娜一二三区| 伊人加勒比| 一二三四视频在线社区中文字幕| 四虎影院成年人片| 草草电影院| 97欧美色综合| 超碰公开久久网| 欧美强奸乱能| 欧美色乱| 夜夜骑操视频| 超碰人人乐97| 日韩乱中文| 午夜操一操| 久久精品高清无码一区| 国产久久一区二区午夜| 欧美一级国产一级| 伊人91| 97就爱干| 丰满人妻一区二区三区在线| 夜间福利片1000无码| 天天综合网日韩| 插B在线观看| 国产精品午夜成人福利| 91久久久久久久久18| 另类小说综合网| 亚洲资源站| 亚欧洲一区二区视频| 国产日韩精品一区二区三区| 日本一级性爱| 国产精品免费1区2区视频| 校园春色AV天堂| 东北操逼| 美女大乳久久久久久久女人18| 五月婷婷性爱| 中日韩熟女| 国产真乱mangent| 91色宗合| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 物业黑人 AV一区| 人人摸人人干| 日韩在线视频1234| 日韩成人综合网| 国产精品一级片在线看| av一区二区三区不卡| 欧美 亚洲精品首页| 少妇特黄一区二区三区| 99蜜桃臀亚洲成人在线观看| 久久免费中文字幕在线观看| 久久久国产三级黄色片| 夜嗨影院| 强奸乱伦亚洲第一页| 中文字幕精品免费一区二区| 搡老女人老91二区| 欧美色九九| 小电影欧美91| 超碰社区97| 九99久久| 欧美色图97| 国产精品国产| 蜜桃视频啊啊啊啊| 亚洲综合骚逼| 久久伦理视频久久大香蕉视频| 天天日日本| 亚射在线| 麻豆av一区二区三区| 日韩pv中文| 亚洲有薄码区日本系列中文字幕| 青青草中文-久久青草精品一区二区三| 日韩不卡毛片Av免费高清| 性开放中文AV高清无码免费看| 亚洲免费成人在线高清无码视频| 国产精品一区二区久久精品| 欧美成人性爱视频在线播放| 国产强奸乱伦第1页| 精品九九九| 国产偷人伦激情在线观看| 国产高清自拍视频| 女沟厕偷窥piss小便| 日韩三级在线观看网站| 欧美传媒| 操逼免费视频无码国产| 欧亚成人| 久草免费在线一区二区| 欧美顶级黄片AAAAA在线免费看| 日韩少妇一区二区三区| 婷婷亚洲综合| 大香蕉亚洲中文| 九九久久久九九| 97久久久精品| 九九九九97|