日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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
返回資訊列表
男人的天堂va在线| 97色伦97色伦国产欧美| 欧美一区二区日韩三区| AV天天在线观看| 曰本特级特黄特色黄色A级网站高清在线免费看| 一区二区三区一亚洲中文字幕、综合区灬 | 亚洲.欧美.丝袜.中文.综合| 欧美日本不卡| 久久久久亚洲?V片无码V| 青草视频在线看看看看看看看看看| 四季AV一区二区凹凸精品小说| 九99久久| 91伊人久| 欧美在线 亚洲| 亚洲最大网站av| 一区麻豆 高清中文字幕| 国产精品白丝AV| av网站在线观看了| 思思热在线| 久久久国产护士丝袜美腿一| 亚洲AV无码成人精品久久| 福利天堂| 亚洲中文一区二区三区| 亚洲日韩XXX| 国产精品久久久久久久久久久久| 曰韩av中文字幕专区| 99热国产| 尤物av网站| 久久免费99精品久久久久久| 亚洲国产精品无码AV久久| 欧美色图亚洲激情| 久久在线观看免费视频| 婷婷伊人网| 91日韩网站| 影音先锋乱伦资源| 久久是精品| 91动漫操逼视频| 久久久九九| HEYZO高无码国产精品227| AV中文字幕剧情1区2区3| 欧美97| 亚洲色图91欧美日韩| 五月天九九日国产精品一区二区三区| 在线观看一卡二卡| 超碰国产精品久| 97天天插| 久超碰在| 国产1024在线播放| 色呦色呦色精品| 免费av大片| 大香蕉性欧美| 国产福利精品最新在线 | 精品免费1| 国产日本一区二区三区蜜臀在线观看| 97操操| 无卡一区=区| 国产做?爰片久久毛片?片美国| 日韩一级二级三级| 国产丰满熟夫69mpp| αⅴ天堂| 在线毛片片免费观看| 色综合一区二区三巨| 亚洲码在线中文在线观看| 99热色这里只有精品| 中文字幕精品免费一区二区| www久久精品| 中文字幕永久在线| 免费黄色片。| 夜夜躁狠狠躁日日躁av| 久久精品国产精品| 亚洲色吧网| 国产女人高潮嗷嗷嗷叫小说| 色综91| 成人精品一区二区三区| 久久无码电影| 日本国产欧美一区三区二区 | 欧美综合亚洲| 九九热男人天堂| 国产野战露脸在线播放| 91中出视频| 91丝袜激情在线| 操操啪| 亚洲高清视频在线免费观看| 亚洲久久天堂| 九久久精品| 91啪9色| 日本视频一区二区三区| 无遮挡一级毛片视频免费的| 一区二区高清视频| 国产第11页| www.yw尤物| 久久久久久69国产一区二区| 97综合久久| 91蜜桃传媒精品久久久一区二区| 色偷综合| 超碰在线第一页| 67194无码不卡| 日本午夜久久电影| 亚洲欧美在线观看2021| 欧美日韩在线视频网站| 综合熟妇一区二区三区| 九九九九97| 91精品成人| 91亚洲人电影| 蜜桃久久久久久久久久久久| 欧美激情专区| 97在线资源| 欧美乱妇狂野欧美在线视频| 婷婷六月色| 蜜臀AV秘一区翔田千里| 毛片电影一区二区三区| 中文字幕视频2区| 欧美性性性| 毛片电影一区二区三区| 在线观看不卡一区二区三区| 精品九九| 久久伊人最新网址视频| 超碰色综合| 超碰色老头| 美国三级日本三级久久99| 精品视频专区| 欧美第38页| 色色色热| 最新中文字幕在线亚洲| 91啦人妻| 长长久久免费视频| 欧美,日韩,中文,另类| 一类无码操逼视频| 国产肏逼网站| 中国91AV| 精品熟女呻吟久久91| 精品人妻一区二区三区不卡断| 啊啊啊啊啊啊啊在线| 天美传媒av在线| 啊啊啊97视频| 成人情色综合网| 九九九国产精品| 九九九偷拍| 91超碰丝袜制服| 中文字幕AV中出| 欧美色图 色综合图| 97美日韩视频| 久久专区| 淫荡熟女乱伦网| gogogo免费高清看中国国语| 国产精品蜜乳AV| 亚洲人成网站7777| 久久风骚城市| 91久久青青草原精品| 青青青国产手线观看视频2| 免费观看网黄| AAA久久| 五月天色色色| 欧美图片色综合| 都市激情人妻一区二区青青操视频 | 丝袜 亚洲 偷拍| 精品国产自在在线99| 成人热久久精品| 久久偷偷色综合蜜桃| 欧美亚洲手机在线| 91人妻人人澡人人爽人人精品| 国产日产精品久久快鸭的功能介绍| 一级aaaaa欧美中文字幕录像片| 亚洲精品三| 日韩99神马视频播放片在线播放| 亚av顶级裸体一区二区三区四区五区 | 日本久久超碰| 欧洲一级性爱视频在线观看| 夜夜爽妓女| www.acm成人黄色毛片| 欧美久久人体| 国产精品久久久久久久毛片1| 亚洲图片欧美91N| 劲爆欧美人妖三区91| 国产自制av蜜乳| 大屁股xxxxx| 极品粉嫩一区二区| 欧美色图片| 日本高清一区二区在线| 亚州男人的天堂| 欧美国产精品久久九九| 五月天色色色| 骚货 中文字幕 av| 欧美不卡二区| 久久111| 久久久999国产精品| 无套内射人妻在线播放| 天天爽夜夜欢视| 一本色道人妻久久| 狠狠操夜夜操蜜桃视频三区| 国产少妇内射| 免费看A片毛毛片在线播| 天天日日日射| 小说区 图片区色 综合区| 日韩成人大片在线观看| 欧美特黄视频网站| 日韩激情中文字幕有码| 日日日色色色色色| 国产精品久久aV| 殴美牲| 天堂综合网| 久久久久久久人妻| 中文乱码字幕观看视频| 久久啊哟| 亚洲久久久久| 久久久9品一区二区三区| 亚洲丝袜诱惑| 不卡码视频| 日韩无码一级黄色av片| 伊蕉97蜜桃97狠狠综合干| 十八禁视频一区二区| 欧美第38页| jazzjazz国产精品麻豆| 国产精品视频| 亚洲成人日韩小说| 97在线播放| 亚洲精品男人的天堂| AV中文字幕三四五| 丰满人妻-区二区三区免费| 9丨久久九九九| 吻戏激情性巴克| 亚州国产成人精品女人久久| 亚洲欧美激情在线视频| 午夜美女诱惑电源网| 欧美大香蕉专区网| 日韩射精| 青青草国产盗摄一二三区| 国产精品点击进入在线影院高清 | 少妇久久久久久| 久久久草成人网站久久久草成人久久久草久久久 | 黄色av一区二区在线| 疯操AV| 欧美精品第3页| 欧美岛国精品在线观看| 国产亚洲日本| 丁香久久| 日韩中文字幕精品一区在线| 超碰欧美97资源| 天天影视色香色欲| 国产综合在线视频网站| 91激情国产| 欧美大码在线视频| 亚洲黄色视频在线观看视频| 大香蕉92| 超碰性爱97| 国产99久久99热这里只有精品15 | 国产欧美日韩女同性恋ww喷水精品| J?P?NESEHD熟女熟妇伦| 无码九九| 婷婷美人网| 欧美黄片视频在线观看免费| 亚洲精品国语在线播放| 日本二三四区| 亚州色图欧美| 天天日B狠狠操| 在线人人人人人人精品超 | 成人热久久精品| 黄片直播三级黄片两女一男| 男人天堂网站| 九九热只有精品| 涩爱AV在线| 白嫩国模丰满一二三区| 91AV入口| 亚洲91网| 午夜福利 成人 91| 日韩97精| 懂色AV中文| 亚洲高清在线| 99婷婷一区二区| 久久影视二区三区行押| 殴美综合色88| 色婷网| 亚洲天堂7777| 一区二区精品日韩欧美在线观看| 婷婷五月天色网| 今日头条成人一区二区三区四虎精品| 一区二区三区精品黑丝白丝酒店对鸡| 欧美精品69性爱| 亚洲午夜精品久久久中文影院| 97色涩| 日本人体九九九九九九| 97综合在线| 操比国产| 日本日逼高清| 久草国产在线视频| 国产亚洲精品A在线观看下载| 在线啊啊啊| 日本高清加勒比| 伊人国产av| 91亚洲黑人| 婷婷丁香六月天| 操逼逼无码| 欧美午夜视频免费观看| 欧美日产国产在线成人第一区| 超碰97国产欧美| 天天操天天看| 大香蕉日亚洲日本亚大| 美女91色黄18| 欧亚揄拍偷拍精品视频| AV男人天堂网| 九九九九九九免费视频| 性交一区二区在线播放| 91久久精品美女高潮喷水| 熟女网站最新| 性欧美第一页| 精品人妻15区| 97超碰9| 日韩图色| 国产精品黑人一区二区三区| 伊人一区二区在线播放| 国产精品制服丝袜清纯唯美| 最新三级网址| av在线免费一区二区| 久久无码成人| 黄色av片三级三级三级免费看| 精品人妻中文字幕4399| 精品国产一级久久| 91欧美| 操逼www.| 久久婷婷五月综合| 91人妻超碰| 十八禁视频网站| 五月丁香六月婷综合成人综合| 无码伊人久久大杳蕉中文无码| 大伊香蕉在线视频免费| 操碰97| 国产熟女少妇一区| 青娱乐蜜桃臀AV色婷| 成人黄页| 欧美综合色,www| 91美女小视频| 久久大黄片| 午夜超爽| 中文字幕在线播放2中文字幕在线观看2| 东京日日夜夜| 四季AV综合网址| 人人色人人射人人妻| JULIA人妻风俗店中出电影| 蜜臀AV成人精品蜜臀AV久久| 久久久久久中文| 欧美不在线| 日本成人免费一区二区三区| 郑州宾馆老熟女露脸啪啪| 国产精品黄色三级av| 国产精点久久久成人| 婷婷五月色| 久草色悠悠在线视频| 国产精品一级二级在线| 久久久四区| 伊人黄色片| 亚洲精品人妻吞精av| 欧美日日网| 亚洲综合骚逼| 麻豆国产97在线| 国产黄色av大片网站| 2001天天操| 欧美亚洲宗合色性图| 外国免费性情大片| 神马久久久久久伦理片| 亚洲精品久久久久久久久豆丁网| 国产视频第2页| 91欧美经典| 欧美91视频| 综合五月婷婷| 人人澡人人弄| 91黑丝在线| 亚洲欧洲国产综合av| 嗯啊啊啊轻点视频 | 野狼激情网| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲成人精品在线一区| 在线只有精品| 秋霞午夜视频一区二区| 亚洲综合电影| 天天综合91入口| 日韩伦理视频| 久久激情四射婷婷丁香五月天| 欧美中出| 亚洲九九夜夜| 99热这里都是精品| 日韩欧无码一区二区三区免费不卡| 亚洲无码?第一页| 亚洲色欲一区二区三区| 97久久国产精品女不卡| 一区二区三区视频在线观看免费| 日韩福利综合一区| 野狼福利社区| 99久久婷婷国产综合| 嗯嗯啊啊用力视频免费| 亚洲精品久久久久久久蜜桃臀| 国产 v乱码一区二| 91精品久久久久久77777| 伊人操你| 欧美夜色| 精品伊人久久久大香线蕉小说| 亚洲射综合网| 欧美高清无码免费视频高清版| 日本福利社| 丝袜视频网国产90| 抽插无码高清一区| 亚洲人人夜夜澡人人爽| 成人三级片无码| 人人操人人射人人干| 免费福利视频中文字幕| 打av高清| 超碰色男人操熟女| 肉动漫无遮挡h在线观看| 96超碰网| 国产成人亚洲精品自产在线| 亚洲色图亚洲无码强奸乱伦| 春色综合免费| 成熟熟女国产精品一区二区| 精品欧美乱码久| 亚洲av性爱电影| 亚洲另类久操网| 超碰免费人妻在线| 欧美视频第二页| 国产亚洲性生活视频播放| 精品97精品97| 日本Xx性爱| 日日A∨| 九九九热精品| 久综合网| 啊啊啊啊啊好舒服视频| 极品少妇99| 欧美暴力猛交| 国产女性无套 免费观看| 超碰 国产熟女精品一区| 欧美国产日韩清纯唯美| 国产精品老师| 曰韩香蕉97| 久久婷婷色| 九九热三级片| 屌妞视频久久久久久久久久久久| 粉嫩粉嫩一区性色AV片| 欧美在线亚洲| 爱欲AV| av强奸乱轮| 欧洲站一级二级三级h| 伊人久久88国产女| 老子午夜伦不卡影院| 男人天堂久久精品不卡| 国产欧美美女免费观看视频| 日韩性爱1级片视频| 青青草在线视频美女| 国产伦精品一区二区三区视频女| 亚洲好看强奸乱伦| 超碰97伊人| 91在线美女| 在线看片国产精品每日更新| 秋霞一级鲁丝片A片| 我要去看2个日本美女.com曹逼| 成人一区二区三区四区| 夜间福利片1000无码| 男人天堂2030| 91N综合网在线| 综合色图区| 日韩欧美成人综合在线| 久久久久久久久国产| 天天添天天干电影| 综合久久欧美| 亚洲一级性爱视频免费看| 人人妻人人爽一区二区三区| 亚洲。天堂。日本在线观看| 干b在线性社区| 国产精品久久久三级无码| 日韩免费a级毛片无码a∨| 60秒免费视频| 99蜜桃臀久久久欧美精品网站| 日本高清电影欧美色图| 亚洲天堂无码| 小日子操bb在线看| 亚洲 欧美 精品专区 极品| 亚洲精品97久久中文字幕| 91超碰人人| 日韩欧美字幕亚洲一区二区| 高清成年美女黄网站免费大全| 亚洲97超碰| 一卡二卡三卡| 天天情欲宗合网| 亚洲综合性感在线| 欧美亚洲激情小说| 免费观看欧美日韩操逼视频| 亚洲高清无码免费观看视频| 看一级特黄a大一片| 人人操人人色人人摸| 欧美超碰在线| 亚洲高清自拍| 啊啊嗯嗯好爽| 999国产精品999久久久久久| 中文无线日韩一区| 91天天美女| 久久精品中文| 97爱碰| 91高跟美女在线播放| 欧洲射精91| 超碰亚洲欧美日韩无| 成人夜夜爽| 色婷五月天| 欧美人妻久久精品二区三区| 高清成年美女黄网站免费大全 | 一区二区偷拍拍视频| 人成午夜免费大片| 亚洲天堂久久| 婷婷五月成人| 91一区二区| 亚洲宅男天堂| 伊人97色天使| 99热导航| 秋霞福利网| 欲色啪| 啊啊啊啊,啊啊好多水| 免费超碰97久久| 色偷偷人人玩人人舔人人操人人摸人人爽 | 超碰97人妻| 校园春色 亚洲| 亚洲天堂资源在线| 综合久久少妇中文字幕| 国产JDAV无码视频在线观看| 亚洲精品97| 欧美欧美啪啪视频| 精品人妻av在线播放| 日韩少妇一区二区三区| 丁香五月电影| 欧美一区二区传媒| 91美女視頻| 国产伊人精品在线| 东京热一区二区中文字幕| 凌辱美少妇久久aV| 最新av中文字幕高清| 郑州宾馆老熟女露脸啪啪| 国产视频不卡在线观看| 久久久久中出| 久久精品视| 97综合激情| 午夜亚洲WWW湿好大| 国产操逼逼网| 天天影视网综合少妇| 啊啊啊啊在线观看网址| 精品丰满熟妇人妻一区| 成人精品无码| 亚洲性爱电影| 天天干天天干天天干| 亚洲AV乱码专区国产噜噜亚洲| 亚洲欧洲第二视频在线观看色图| 色99久草| a片偷拍视频| **一级毛片国产| 欧美亚洲性爱一区二区| 9.1小视频| 激情黄色片在线观看| 国产福利av精彩对白| 色欲天天综合网| 美女高潮视频91| 久久久久女教师免费一区 | 骚女高跟AV在线| 91人妻人人澡人人爽人人精品| 蜜乳AV.COM| 国产一级作爱毛片| 日本精品88888888| 日骚逼视频| www.久久最新地址| 亚洲成人一二三区| 久久高潮妇女视频| 嫖老熟女A片一二三区| 熟女在线视频| 成人小电影网站tex| 久久av一级av少妇av高潮 | 极品欧美一区二区三区| 五月天激情小说| 操操操操网黑人| 性爱AV天堂| 看一级黄色视频| 国产乱伦亚洲| 亚洲精品aa久久伊人| 久综合国内精品自在自线| 26uuu欧美| 婷婷五月天激情小说| 97视频900| 嫩草美女久久| 九九热免费国产视频婷婷伊人五月| 欧美偷偷网| 男人高清无码一区二区| 神马午夜久久久| 丰满少妇一区二区三区免费看| 热99这里只有精品| 99热日| 家庭乱伦国产| 欧亚综合一卡二卡中文字幕| 女生看匆91网站| 26uuu国产免费观看| 欧美日韩人妻婷婷一区| 人人操人人插人人摸人人干| 久久伊人青青草| 俺去啦俺来也久久综合| 国产精品色色| 欧美激情1区| 日韩精品1区2区中文字幕| 曰本91情色| 成人毛片免费| 好看的91视频| 欧美精品日韩久久久九| 九一综合网| 日本东京热加勒比久久| 色五月激情AV在线| 爱媛媛久久国产福利| 欧洲一区二区| 丁香六月婷婷| 国产品精品自在在线午夜免费| 精品国产网站| 岛国1区2区3区在线观看| 欧美日韩淫加| 天堂俺去俺来也www久久婷婷| julia中文字幕在线观看| 无码丰满熟妇一区二区浪潮AV| 夜草欧美| 探花一区在线| 91爱剪切久久| 亚洲人在线成线成人| 欧美天天射| 色综合加勒比四四季| 国产日韩欧美操逼视频| 伊人9| 国产丝袜视频| 亚洲一区操| 亚洲 欧美 小说| 日韩无码专区| 超碰97人妻免费在线| 亚洲老司机123专区| 国产成年精品高清在线观看91| 婷婷五月天色网| 精品丰满人妻一区二区三区免费观| 天天日天天干天天操| 中美日韩毛片| 91粉嫩萝控精品福利网站_精品影音先锋国 | 成视频在线观看免费看| 超碰地址97| 国产亚洲精品美女久久久| 日韩欧美偷拍美女视频| 尤物av网站免费在线播放| 麻豆黄色五月天| www.大香| 亚洲97综| 91女优在线观看 | 青草成人免费视频一COm| 人人超碰在线观看黄| 操逼逼无码| 亚洲无码精品AV久久久| 欧美成人一区二区| 欧美少妇熟女| Blackedraw视频一区二区| 97国产超碰| 亚春色色| 激情综合网一盗摄| 欧美久久草熟女| 91粉嫩萝控精品福利网站_精品影音先锋国 | 18禁网站在线播放| 九九九热| 久久久久久久久久久精| 成人在线午夜视频一区| 91女神在线视频| 日本3级一区二区免费| 黑人狂躁日本妞一区二区三区| 国语少妇精| 人人操人人精品影片| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 欧美AB在线观看| 国产欧美日韩在线不卡第一页| 日本色色视频网站| 91色色网站| 性91| 国语精品对白| 人妻天天爽夜夜爽2| 久久综合久色欧美综合狠狠| 91夜色chaopeng| 精品久久久久久亚洲| 国产又色又爽又舒服的三级视频| 夜嗨影院| 国语国产操逼伊人AV网| 日韩欧美成人性爱在线| 色综合天天爱去电影网| 中文字幕人妻丝袜乱一区三区| 加勒比久久av| 偷拍片久久| 99999这里都精品| 日韩78m视频| 久久偷拍人| 大香蕉 222| 久热婷婷| A久久| 麻豆视频test| 98一区二区精品| 久久人妻视频| www.狠狠干.coom | 97在线免费观看| 男人天堂欧美| 亚洲精品国产精品成人| 日韩亚洲欧美中文字幕| 大象AV在线| 收看日本人日bb| 少妇厨房愉情理伦片bd在线观看| 一级乱伦网站| 亚洲AV秘无码一区..| 天天色黄色影院天天操| 精品人妻一区二区视频| 欧美日韩 强奸乱伦| wwwxxx日本爽| 亚洲国产一区二区三区四区国产| 亚洲欧美国产日本一区二区三区| 综合久| 日本伦理一区二区| 熟妇精品juliaannAV| 精品久久久不卡一区二区| 少妇色综合| 97视频播放| 在线观看中文字幕| 国产日韩手机视频在线| 成人免费性爱视视| 久操网无码在线| 天天日B夜夜干B时时操B| 国产视频一区二区免费| 91精品久久久久久久久久| 日本亚欧爱爱| 美女久久久| 五月婷婷丁香六月丁香| 大香蕉五月天婷婷| 国产四虎在线| 91激情综合| 久久人妻| 99热99在线播放激情| 国内自拍 日韩激情 99| 看看小穴| 97网址97| 一区超碰一区| 欧美少妇色图| caoni国产亚洲av| 六月丁丁香| 美美91成人国产精品欧美精品久久久久久久| 亚洲综合贴图91 | 色月天AV导航| 蜜桃网熟妇| 中文久久| 天天躁日日躁XXXXYY| 野狼激情网| 吊色| 绯色一区二区三区不卡少妇| 在线精品福利免费播放| 国产精品久久久久久久久AV大片 | 国产不卡中文字幕免费avi| 久久是精品| 青娱乐淫乱1314| 被体育老师抱着c到高潮| 久久超碰亚洲人| 精品免费成人久久| 欧美日韩性爱电影在线| 成人情色一区二区| 国产精品另类一区大香蕉| 在线免费观看高清无码视频| 自慰白浆在线观看| 性色av一区二区| 综合夜夜| 九九热九九| 东京热不卡视频| 在线αⅴ| 九九九九久久久| 欧美91色| 高清成年美女黄网站免费大全| 人妻夜夜爽天天爽麻豆三区网站| 日韩欧美三级| 操逼无码操逼| 午夜情侣自拍网站| 超碰诱惑| 另类专区在线观看| chaopen97久久| 多毛小伙内射老太婆| 人妻出轨一区二区三区| 国产熟女高潮一区二区三区| 深夜国产一区二区三区在线看| 超碰在线香蕉| av网站国产主播在线| 99999亚洲另类| 人妻一区二区三区| 91老司机在线视频免费观看| 欧美激情黑人| 尤物视频视频官网| 国产精品美女久久久久久网站| 99re在线视频国产| 乱子伦一区二区三区国产精品| 吊色| 精品国产一区二区三区久久久蜜臀| 香蕉综合网| 手机看av网站在线看| 哈哈操电影| 日本一级性爱| 久久久久久久| 97超碰国产亚洲精品| 亚洲aw毛茸茸在线| 国产精品。| 男人亚洲91首页在线| 黄色人人| 超碰欧美97资源| 18禁超污无遮挡无码免费网| 欧美性综合| 免费在线黄片视频| 中文字幕十五区| 欧美一级国产一级| 美女干逼2| 温婉少妇玩3p| 久久久不卡区一区二区三区久久久| 99老司机精品视频在线观看| 午夜福利区| 约操熟妇| 屁股久久久久久久久| 久久精视频美日韩在线视频| 5252色欧美在线男人的天堂| 亚洲无码99| 亚洲一区日韩精品中文字幕| 91+欧美| 亚洲精品乱码线路中文字幕| 夜夜狠狠躁日日躁色视频| 人人人人插| AV中文字幕三四五| 在线观看一卡二卡| 久久青青草在线视频| 天天干天天日天天射黄色大片| 综合网91| 啊啊啊好舒服好爽啊啊啊视频| 久综合国内精品自在自线| 久久高清无码夜夜操| 九九热九九| 风韵犹存大大大大香蕉 | 蜜桃久久久久久久| 午夜福利免费精品视频| 超碰97综合在线| 国产白嫩精品久久| 亚洲国产一级精品毛一级精品看免费视频| 99999国产| 四虎AV无码| 日本Xx性爱| 男人的天堂 在线一区| 99色骚| 婷婷九月色| 一个色导综合| 91爱剪切久久| 日本超碰97日韩精品人妻| 天天躁日日躁AAA片李宗瑞| 97超碰磁| 九久久精| 粉嫩小泬久久久一区二区| 久久99亚洲精品久久99果| 久久国产在线一区二区| 91痴汉| 91天美传媒精品| 婷婷六月色开| 青娱乐欧美激情一区二区| 男人的天堂视频精品乱在线| 国产精品欧美激在线| 婷婷五月天影院| 一牛影视成人片免费| 视频不卡中文字幕| 国产风韵犹存熟妇三区| 日韩AV色图| 九九亚洲| 久久久免费的精品| 青青青国产手线观看视频2| 超碰97伊人| 午夜毛片高清免费不卡| 中文字暮97| 强奸a片网| 99性爱在线观看| 午夜人人操| 91亚洲人| 91亚洲欧美激情| 2019亚洲男人天堂| 亚洲欧美setu| 婷婷综合| 青青操在线亚洲视频观看欧美在线| 精品成人av一区二区三区在线| 偷拍三区| 人妻丝袜一区二区三区在线| 青青草国产一区二区三区| 宅男91视频在线播放| 超碰79人人乐| 操一区| 性爱av在线免费观看| 大伊香蕉在线视频免费| 亚洲欧美自拍偷拍| 国产精品内射婷婷一级二| 天天操熟妇| 91综合天天看| 国产免费一区| 天天综合麻豆视频| 蜜臀久久99'精品久久久| 亚洲性猛交| 怡红院成人av| 国产福利第一视频| 色丁香久久| 乱伦3P视频| 欧美丝袜制服久久| 在线人人人人人人精品超| 欧美日韩国产高清在线一二三区| 黑人美精品 A片| 国产黄色小视频网站| 国产强奸乱伦欧美| 26uuu最新| 综合伊人网12色| 国产精品永久免费10000| 久草尤物| 亚洲久久久久| 超碰97人人乐| 久操免费电影| 欧综合网| 中文精品少妇天堂| 久久久久久人| 丰满人妻一区二区三区四区| 猛猛干| 日韩免费av片高清无码| 亚洲国产精品成人久久蜜臀| 亚洲国产97| 欧美九九九九九| 三男一女不戴套的A片| 9国产超碰| 国产精品自拍xxxx| 啪啪91| 久草久热| 欧美日日夜夜| 免费网站观看www在线观| 久久动漫精品视频这里只有精品| 国产风韵犹存熟妇三区| 日韩97在线| 97精品一区二区视频| 亚洲精品一区二区精品| 日本一区二区三区免费观看| 日韩精品一区二区日韩| 亚洲日韩成人性爱视频| 日本三级中国三级99人妇网站| 亚洲日韩av一区二区三区百合| 日韩9999| 好湿好紧视频| 60秒不遮不挡| 久久成人国产精品| 日本在线播放不卡一区| 欧美躁死她一区二区| 青青草视频导航官网| 日韩特一级久久| 欧美天天| 国产女人高潮嗷嗷嗷叫小说| 一区三区啪啪| 欧美日韩夜夜| 看黑丝美女操逼青青网站| 国产超碰97| 青娱乐999| 入口操逼网站| 91色爽欧美| 精品999日本| 国产一线二线三线av| 东京太热男人的天堂久久久| 欧美一二三级精品在线| 天堂8在线新版官网| 宅男91视频在线播放| 青青操日韩| 91东京热男人的天堂| 91Chinese在线| 97频视在线| 国产久久久| 玖玖资源综合在线视频| 日韩人妻精品久久久久| 色综合久久夜色精品国产天堂| 999999精品| 黄色网址在线免费观看| 青久操| 哑洲在线| 91精品微拍福利| 亚洲欧美校园另类春色| 久操视频在线| 黄人人操人人操| 自拍大香蕉乱插| 欧美色66| 在线亚洲欧美| 欧美第二页| 色色色综合网| 啊啊啊啊在线播放| 国产精品麻豆成人av| 欧美三级不卡| 9 1果冻精品视频| 国内毛片无遮挡国产| 久久国内| 97综合在线观看| 快灬快灬 一下爽蜜桃在线观看| 久久九九视频九九视频| 久偷拍欧美日韩三区| 丁香五六月啪啪| 综合网欧美在线| 偷拍导航视频网站| 成人性爱美曰韩| 牛牛久久国产精品视频一二三| 一本一道久久综合久久| 特级丰满少妇一级AAAA爱毛片| 激情文学欧美| 天天日天天操天天射河南省| 国产最新AV| 青青在线视频日韩欧美| 99综合网| 99精品丰满人妻无码| 新久久AV| 超碰这里只有精品| 小说区 图片区色 综合区| 91九久| www.av家庭乱伦| 狼人综合婷婷激情四射| 精品人妻中文字幕高清| 97精品一二区| 精品欧美老熟女一二区| 偷拍自拍在线视频观看| 91AV天美在线视频| 亚洲97久久精品亚洲| 艾草av| 伦伦成年午夜免费视频| 欧洲小说色图视频另类| AV和黑人在线播放| 黄色一区三区| 牛黄色久午久| 97ai亚洲| 亚洲欧美经典一区二区| 老熟女综合网| 91熟女熟妇视频网站| 中文字幕熟女人妻丝袜丝| 啪啪啪大香蕉| 久久久久久久97| 91蜜臀在线久久久久| 成人免费性爱视视| 久久极品一区二区| 国产毛片片精品天天看视频| 超碰97最新人妻| 一个人免费HD91视频| 97精品全部| 国内自拍 日韩激情 99| 天天舔日美女视频| 翘臀vidoes| 人人做天天爱| 啊啊啊在线看| 2023天天操夜夜操| 午夜福利合集| 5252色欧美在线男人的天堂| 亚洲国产亚洲天堂| 日本不卡三级网在线播放| 99久久这里只有精品| 亚洲一二三四区机械| 精品国产99| 2019亚洲男人天堂| 日韩无码服务区| 九热中文字幕| 深夜福利黄片| 操B视频日韩无码| 探花熟女,姿勢到位,體驗感也到位| 亚洲精品无码成人久久久99| 国产综合永久精品日韩鬼片| 99视频自拍| 伊人色综合网| 天天综合香 ld视频| 亚洲欧美视| 久久亚洲中文字幕视频| 色综合婷婷| 麻豆一区二区三区精品| 一本大道久| 亚洲精品国产熟女| 亚洲九区| 情色五月天网| 91网站在线播放| 国产在线播放成人免费| 亚洲天堂AV在线播放| 亚洲 综合 欧美| 国产精品久久久久久久久久久久久久久久 | 五月婷婷六月丁香| 精品久久99| 99热日| 日本乱人伦片中文三区| 99热综合| 综合av影片| 偷拍亚洲熟女视频播放| 2020视频1区2区3区| 九九五月天| 可以免费观看的日韩av毛片| 久久神马影院| A级国产欧美激情在线| 欧美色色色| 日产成人久久| 黄片直播三级黄片两女一男| 一二三啪啪专区| 亚洲爽图| 偷拍欧美激情| 色呦呦国产精品免费看| 欧美嫩性色| 男人天堂电影院| 欧美色图私拍91| 亚洲黄片免费在线播放| 无码人妻丰满熟妇奶水区毛片| 啊啊啊啊啊好多水| ,国产乱人伦精品一区二区三区| 人人操人人爽人人操人人| 亚洲日韩肥臀视频在线观看| 国产成人欧美精品在线| 嗯嗯啊啊操死我| 婷婷丁香九月| 激情文学亚洲| 啊啊啊 在线观看| 另类小说综合网| 天堂网 主播 亚洲| 亚州一区二区| 中文伊人大香蕉视频| 中文字幕人妻资源在线| 91视频国品一二三区| 韩国一级做a久久久久| 歐美性天天| www.超碰在线| 黄色人人| 性色高清..……| 丰满少妇一区二区三区四区观看| 秋霞网—男女啪啪亚洲免费体验区 | 性做久久久久久免费观看软件| 精品少妇一区二区三区| 麻豆人妻少妇在线免费观看| 天天视频综合在线观看视频| 一区二区三区国产在线播放| 97就爱干| 青娱乐亚洲热| 丰满人妻一区二区三区| 9国产超碰| 在线免费观看高清无码视频| 老色鬼成人精品视频下载大在线观看| 亚洲精品819| 日本人妻丰满熟妇久久久久久| 欧美日韩国产精品久久色婷婷| 中文字幕日韩精品一区二区三区| 以及麻豆国产入口在线观看免费| 97久久超碰日韩精品| 狠狠爱AV| 91天天c| 97超碰在线资源网站| 97视频在线免费看| 亚洲国产一区二区三区在线| 欧美躁死她一区二区| 国产亚洲精品自在线亚洲情侣 | 91天天日| 天天淫人人妻日日色| 神马久久久久久| 性色高清在线| 视频分类 国内精品| 日日碰狠狠添天天爽超| 亚洲砖码砖专无区2023| 久久亚洲AV无码专区国产精品| 噜噜噜噜天天狠狠| 色97干| 欧美色图色综合| 中文字幕精品探花视频| 亚洲国产另类在线中文| 69视频入口| 草草影院日本第一页| 人妻aa| 92午夜免费福利视频|