日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
九九亚洲| 国产黄色动态精品| 日韩欧洲操屄视频| 激情四射婷婷六月天| 岛国成人av在线播放网址| 欧州91高潮| 男人的天堂在线| 99自拍视频在线观看| 视频不卡中文字幕| 久久久96精品| 久久久久9999妇女| 97舔舔| 人人操我人人干| 国产精品国产| 欧美少妇高潮视频| 久草综合视频| 夜夜欢天天干| 黑人精品欧美一区二区蜜桃| 欧美性爱一区二区三区四区| 黄色污污污污污污网站| 欧美成va视频网站| 亚洲无码?第一页| 国产精选视频| 免费男人的天堂| a人欧美综合天堂麻豆| 2020中文在线一区二区三区| 久久无码一区二区二三区性色| 日韩青久久| 91欧美长吊| 91oumei| www.av在线观看| 俄罗斯一区二区视频在线观看| 熟妇色99| 精品国产乱码久久久久久网站入口| 欧美激情久| 高潮内射在线| 青青草日逼视频| 91黑丝在线播放| 探花精品视频| 91精品国产高清久久久久久,亚洲成人 | 五月丁香综合| 女同性恋久久| 韩国一级做A片免费的| 啪啪资源网| 亚洲一区操| 欧美影院一区二区三区| 精品视频免费在线一区| 久久免费看高潮毛片韩国| 婷婷丁香成人| 小草精彩毛片| 国产精品久久久久久久久久久久久久久久 | 精品人妻一区二区三区-国产| 亚洲五月丁香花狠狠干一区二区三区| 97久久久久久久精| 5252色欧美在线| 99啪啪| 亚洲天堂东京热| 日本丝袜美腿人妻九九| 婷婷久草| 嗯嗯嗯啊啊在线观看| 亚洲系列欧美| 久久97超碰| 欧美姓爱综合网| 中文字幕三四五区| 人妻少妇久久中文字幕一区二区 麻豆 | 欧美18禁91| 黄色成品网站| 一区二区三区麻豆| 91小视频| 亚洲欧美精品91| 国产超碰国产97| av操操不卡| 久久天天躁日日躁狠狠躁| 禁十八久久| 蜜臀一二三区| 天堂俺去俺来也www久久婷婷| 收看日本人日bb| 东京热男人的天堂精品| 欧美视频在线视频免费va| 色99色| 密臀在线免费观看| 午夜久久久| 久九色| 成人免费看吃奶视频网站| 欧美另类综合久久| 婷婷久草一区二区三区| 一区二区三区成人| 9精品久久久久| 中文字幕一区二区视频在线观看| 激情视屏国产乱伦强奸| 九久9热| 亚洲的天堂网| 日产操逼| 天天爽天天干| 91超碰在线播放| 91麻豆天美传媒在线| AA级电影三区| 激情色播| 国产精品一区在线播放| 9久在线视频只有精品| 人人摸人人添人人操| 东京热男人的天堂网| 欧美少妇高潮久久91| 欧美日韩亚洲少妇寂寞影院正在播放 | 天天综合,91入口| 亚洲欧美另类图片| 国产精品久久久久久 百度| 久久免费精彩视频| 精彩久久中文| 无码最新| 天天综合网入口~91| 午夜精品久久久久久久第一页按摩| 亚洲日韩精品久久久久一区壹牛| 97色五月天完| 久久人妻少妇| 一级黄色视频网| 97香焦色区| 在线色资源| 一级AV性爱| 四月丁香婷婷| 欧美se综合| 精品国产一区二区三区香蕉欧美| 亚洲欧洲日韩中文字幕一区| 最新日韩黄片| 人妻蜜桃臀| 91伊人久| 97在线欧洲| 女性91网站| 国产AV超爽| 长久操视频| a片 xxxx受爽视频| 中文字幕永久在线| 欧美性性性| 国产伦乱91| 黄呦呦在线| 日本成人在线不卡一区二区三区| 99久热| 久操视频在线| 免費黃色視頻觀看一| 好爽免费视频,| 国语av最新自产拍在线观看| 超碰一区二区| 成人av动漫在线观看| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 综合亚洲情色| 亚洲国产精品成人综合| 国产美脚女优尤物在线观看| 欧美激情久操网| 一色网男人的天堂| 天天日天天搞天天干| 求求你操操我| 99热18| 欧美成人性活片| 麻豆久久久久久久久丝袜| 91色拍| 夜夜高潮夜夜爽| 国产一区二区免费福利片| 丝袜狠狠草尤物人妻av91| 中文字幕高清精品一区| 亚洲欧洲激情| 久热九九| 国产毛片久久久久久久| 欧美桃色网| 六月色色| 在线岛| 亚洲亚洲亚洲天堂天堂| 欧美婷婷| 涩综合导航| 天天综合站| 蜜臀少妇一区二区| 国产精品嫩草影院免费| 91热| 91n免费处女| 亚洲成人网站在线观看| 88xx成人精品视频| 美女诱惑久久| 日日夜夜草草草| 在线视频日韩欧美国产| 激情天天视频| 欧美碰碰综合色| 国产美女激情| 91N欧美| 亚洲一区中文精品| 国产精品网站www| 高清成年美女黄网站免费大全| 中文字幕无码不卡啪啪| 亚洲永久AV无码精品秋霞| 亚洲免费成人精品电影| 国产日韩精品suv| 欧美日韩精品青青| 天堂国产AV| 久久婷婷五月| 激情视屏国产乱伦强奸| 精品人妻一区二区三区四区石在线| 日本中文字幕熟妇| 超碰天天操你比| 日本91白丝| 啪啪资源网| 天天综合97| 竹菊一区二区三区AV线| 日韩欧美偷拍美女视频| 色呦呦、国产精品| 亚洲无套久久嗯嗯| 欧美很很操视频| 国产中文大片资源中文字幕| 97国产人人| 久久激情视频| 欧美中文字幕日韩在线| 亚洲97成人在线观看| 亚洲色宗合| 亚洲黄色电影| 日韩99999| 变态另类专区| 一区二区视频在看| 四虎av在线| 91欧美综合在线| 国产高清不卡视频| 天美国产精品| 69AV女优男人的天堂| 国产精品成人在线| 久久久免费一级黄片| 色色网91| 最新三级网址| 欧美99热| 国产女人与拘做受视频免费| 操逼不卡中文字幕| 黄在线| www.91理论| 国内精品久久人妻性色av| 天天综合97| 婷婷五月天激情四射| 蜜臀99久久精品久久久久久| 欧美淫乱视频| 黑人精品欧美一区二区蜜桃| 高清孕妇孕交 交孕妇| 青草园大香蕉| 人妻少妇无码| 天天干嫩逼网| 欧美牲| 亚洲无码视频免费在线观看网址!| 夜草网站| sss视频华人在线| 91大学精品激情戏| 亚洲不卡不卡中文字幕不卡 | 五月丁香激情综合| 99国内精品| 欧美丝袜激情| 久久99精品九九久久久婷婷| 舔人妻中文免费视频| 综合自拍| 日韩精品资源专区二区| 亚洲精品人妻在线| 蜜臀av一区二区三区免费观看| 九九av| 91暧暧| 九九九综合精品| 亚洲欧洲色情高清| 97视频一区| 免费观看日本操逼视频| 日韩一级特黄av毛片| 中文字幕在线免费观看视频| 无码人妻丰满熟妇奶水区毛片| 亚av顶级裸体一区二区三区四区五区| 一摸二插三插| 亚洲天天综合| 欧美视频中文字幕区| 最新AVzaixian| 97色涩| 97在线青| 亚洲综合第一页| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 天天操天天射天天日| 97国产高清视频在线观看| 91粉芽高清在线一区二区| 韩日男人的天堂| 91亚.色| 日韩欧洲操屄视频| 欧美日综合| 精品小视频在线| 狠狠入| 密臀在线免费观看| 亚州性色| 日韩不卡在线一区二区| 密臀在线免费观看| 五十路三区在线| www黄片免费看com| 中文字幕久久亚州无码| 国产精品麻豆免费视频| 97免费在线视频在线观看| 天天综合网~91入口| 精品人妻免费观看| 久久久av爱| 久久久一区二区三区麻豆| 极品综合| 亚州再线| 天天看夜夜看日日干| 中文字幕在线观看视频www| 一区二区国产视频在线观看| 日韩熟女三十乱伦| 6080yy午夜理论三级一区二区三区无码| 97自拍一区| 777超碰| 欧美成人A天堂片在线观看| 99爱久久视频频| 91人人| 操碰97| 国产自偷| 曰韩av中文字幕专区| 骚人妻少妇视频| 韩三级a视频在线观看| 91爱综合| a一区二区三区乱码在线| 夜夜狼人妻| 私人尤物在线精品不卡| 中文字幕制服欧美久久一区| 天堂69亚洲精品中文字| 香港成人一级视频在线青青草| 一起草视频在线| 日本 欧美 亚中文字幕| 91久久青青草原精品| 成人免费福利在线观看| 91美女国产在线| 日本护士高潮| 97视频播放| 日韩AV电影网站 | 啊啊啊啊啊啊啊啊啊在线观看| 日韩久久.一级黄色片| 91老熟女91老女人| 天天透伊人| 国产精品盗摄 偷窥盗摄| 青青草日本无码| 婷婷色色五月天福利| 日本一片一区| 无码精品一区二区三区潘金莲| 日韩中文字幕精品一二三事国产精品| 人妻丝袜无 码视频专区| 97精品| 98超碰日本| 中文字幕人妻丝袜| 伊人女女资源在线观看| 久久69| 激情啪啪视频| 鸥美极品| 香一区二区三区| 欧美网站免费| 久久久久亚洲av综合波多野制衣| 伦理第一页| 色九九九综合| 亚洲aw毛茸茸在线 | 中文字幕综合人妻| 蜜臀久久99精品久久久久免费观| 久99| 亚洲精品影视老司机| 久久97精品久久久久久久不卡| 伊人久久大香蕉线AV五月天| 天天爽天天操| 亚洲少妇综合在线播放| A级毛片在线看免费| 亚洲天堂久久| 熟妇激情| 日韩美女高潮喷水视频| 磁力99AV| 78久久久| 九一亚洲国产免费| 日韩素人无码一区二区三区三州| 久久婷婷热| 欧美日韩亚洲高清不卡一区二区三区| 九九碰九九爱97| 婷婷视频在线免费观看| 欧亚性爱在线视频| 免费无码国产精品v片在线观看| 91亚洲综合| 欧美色图欧美| 一区二区三区麻豆| 91无码精品| 日韩欧美中文字亚洲慕| 天天天堂影视日韩亚洲91| 色五月第四色| 国产精品网站免费| 91丝袜激情在线| 精品人妻一区二区免费蜜桃| 精品人妻1237| 婷婷另类小说| 60秒免费小视频| 日本五十路在线| 夜草欧美| 蜜臀久久99精品久久久久久成人小说| aV中文麻| 欧美亚洲激情| 国产精品高清2021在线| 一级日本牲交大片好爽在线看| 啪啪啪精品| 成人一级性爱| 十八禁啪啦拍视频无遮挡| 亚欧国产无码精品在线| 91久久久久久| 99国产精品人妻人伦| 五月久久HDAV| 久久久九九九九| av草草在线电影| 毛片99-全集电影手机免费观看完整-B029AV| 国产外初女出血视频| 欧美成人贴图| 国产偷人伦激情在线观看| 88xx成人精品视频| 欧美强奸乱能| 蜜桃视频精品一区二区| 91麻豆天美国产| 加勒比综合a∨| 人人干人人操人人..com| 乱伦3P视频| 开心五月婷婷| 日韩丝袜高跟制服在线观看| 欧美日日人人天天| 三上悠亚在线毛片91| 国产Av超碰| 夜夜草网站| ss久久| 色五月AV在线| 2019精品国产无码成人| 国产精品久久久久久久久AV大片| 天天日老熟妇| 我想要啊 啊 啊| 亚洲伊人成综合成人网| 亚洲熟女av日韩熟女| 久久久久久久少妇| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | AV 少妇 人妻 偷拍| 久久超碰免费的| 极品出轨视频网站| 国产精品网址| 国产原创精品| 5252色欧美在线男人的天堂| 欧美巨大性舒爽顶到了| 2024人人操人人摸| 国产日韩人人| 国产午夜精品在线观看| 精品国产精品一区二区| 色眯眯av| 国产日韩精品人妻久久久久色欲网站| 麻豆久久视频在线地址| 2020天天色综合| 久久欲| 91人人爽人人爽| 97在线日韩中文字幕| 精品人妻1区| 亚洲AV无码天美传媒一区| 日韩成人人妻网站| 欧洲成人性爱视频| 久久国产对白激情浪潮| 亚洲精品国语在线播放| 亚洲天堂男人在线| 人人操人人肉久久精品| 欧美日韩操逼嗦吊| 天天综合网合集91| 91高潮喷水美女| 亚洲黄片免费在线播放| 亚洲欧洲小说图片视频 | 国产h小视频在线观看免费| 性做久久久久久免费观看软件| 97超碰久久色| 熟女这里只有精品6| 少妇国产不卡| 色呦呦国产精品免费看| 久久精品免费| 大肥女高潮bbwbbwhd视频| 人人扣人人操| 日韩无码人妻中字久久三区四区| 黑人精品成人一区二区三区 | 国产精品白领在线观看| 白丝1区2区3区| 精品一级毛片在线观看| 大香蕉手机在线视频| 欧美日韩中文字幕人妻| 欧美激情综合色综合啪啪五月| 国产一区二区精品久久久不卡蜜臀 | 中文字幕二区日韩天堂| 亚洲高清视频在线免费观看| 色哟哟-国产专区| 思思热一热婷婷热一热| 少妇高潮一区二区三区在线| 丁香九月激情| 思思热一热婷婷热一热| 欧美一级色| 亚洲图片欧美偷拍| 欧美大香蕉在线观看| 中文字幕一区二区视频在线观看| 成人日韩中文字幕| 国产传媒操逼视频| 上床啊啊啊| 啪啪啪亚欧美视频| 密臀在线免费观看| 亚洲中文日韩欧美大香蕉视频| 国产精品动态一区二区三区四四| 日韩一区二区精品视频| 日本高清免费一本视频在线观看| 亚洲性猛| 一区二区偷拍拍视频| 欧美精品久久96人妻无码| 女人的天堂大香蕉网| 熟女色综合久久| 91网站18禁| 中文字幕-区二区三区四区视频中国| 日本操逼二区| 蜜桃久久一区二区| 欧美激情久久久久| 欧美性天天影视| 午夜国产乱伦视频| 91n欧美| 国产1727欧美| 日韩丝袜人妻AV| 久久亚洲AV无码专区首页| 国产精品一区二区麻豆| 国产成人精品必看| 91色欧美| 精品一区二区三区四区女| 性爱av在线免费观看| 亚洲天天操| 中文久久96| 亚洲色图超碰在线| 国模少妇一区二区三区| 色色毛片| 日韩精品 欧美激情| 亚洲欧洲无码97久久精品| 强奸xx国产| 99re公开精品免费视频| 视频国产欧美在线播放| 台湾佬大香蕉| 97国产精选| 日韩资源网| 欧美 中文字幕 一区| 无码自拍SM| 手机在线播放国产福利| 亚洲男人综合| 日日夜夜精品视频| 欧美日韩久久精品爱爱| 日本天天干天天日一区| 欧美激情久| 天天干天天日天天射黄色大片| 国产 码在线成人网站| 国产区91柔拿会所技师| 亚洲黄色网址视频| 岛国黄色短视频| 熟女激情综合网| 天天综合~91| 亚洲?V高清一区二区三区尤物| 天堂亚洲精品| 综合色久欲| 天天激色| 校园春色亚洲无码| 精品九九淫乱男| 亚洲www91| 日韩三级在线观看mp4| 怡红院怡春院| 男人天堂久久日韩| 狠狠图片青青草| 国产久久一区二区三区野外在线| 骚乳在线| 国模不卡一本二本三电影| 亚洲精品97在线| 丝袜制服字幕在线| 中文字幕版| 啊啊好多水| 美女诱惑在线一区| 亚洲欧美日韩电影网站一区| 97在线无精品| 人人澡人人澡人人| 熟妇人妻精品一区二区| 91春色| 欧美日韩国产成人高清| 操逼逼一区视频| 夜夜天天噜狠狠爱2021| 日韩精品在线观看网站| 2024人人操人人摸| 丝袜夫妻自拍| 四季AV一区二区凹凸精品小说| 婷婷五月天无码| 中文欧丝袜诱惑| 亚洲午夜精品久久久中文影院| 98超碰欧美| 97综合| 久久精品欧美一区二区三区不卡| 青娱乐国产精品| www.色操逼| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 91neishe| 都市激情人妻一区二区青青操视频| 91久久久久久久| 理论久久婷婷网8| 国产91影院| 91在线视频观看国产| 制服乱伦| 97精品久久久久久久| 亚洲AV色图一区| 搡老女人老91妇女老熟女| 成人无码在线视频网站| 啪啪一区| 丁香婷婷激情五月天无毒不卡| 中出20p| 色呦呦国产精品免费看| 精品中文字幕一区二区l - 百度| 内射白嫩美女| 久久后入制服| 无码不卡八戒| 首页亚洲国产高跟丝袜诱惑视频| 精品久久大胆人体| 色悠久| 国产小u女在线观看| 极品粉嫩一区二区| 啊啊啊啊好疼| 国产AV毛片| 中文一区二区婷婷视频| 久久久涩| 欧美激情中文字幕另类小说| 99国产精品在线观看| 91亚洲黄色网| 亚洲日韩美女中文字幕乱| 久久亚洲骚逼综合| 日本不卡一二区| 日本一本道A级黄色毛片试看60分钟| 嗯啊啊啊轻点视频 | 无码久久国产| 97久久精品亚洲| 97亚洲自在精品在线观看| 久久人人爽爽人人爽人人片αV| 蜜桃久久综合视频| 久久三区四区| 日韩精品一区二区三区色欲| 粉嫩久久久久| 天天摸夜夜添无码小视频| 淫淫总合网| 色九久| 狠狠干狠狠色| 国产精品伦理| 91久久久久久| 91蜜桃传媒精品久久久一区二区| 2019久久久久久久久福利| 在线天堂999| 加勒比伊人| 国产精品91一样| 欧美天天弄| 精品久久久久,69国产成人精| 大香蕉日韩| 99在线精品观看99| 9久久精品| 98一区二区精品| 野狼福利社区| 好湿好紧好爽 视频| 九九九九热| 97干com| 91一区二区三区蜜桃| 超碰性爱97| 无遮挡一级毛片视频免费的| 熟妇人妻一区二区三在线| 熟女这里只有精品6| 欧美成人综合| 日本一区二区做爱的视频| 久久久久人| 精品少妇一区二区三区在线视频| 色约约一区=区三区| 操91| 翔田千里AV无码秘 三区| 国产精品久久发布| 色色网91| 亚州,欧美在线| 久久女人一区二区三区| 啪啪视频免费在线观看| 东北女人| 欧美极度丰满熟妇hd| 东京太热男人的天堂久久久| 看看小穴| 午夜男人av| 青青草色AV| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产精品一区午夜福利| 国产高清在线自在拍69| 色婷五月天| 综合久久久久久久久91| 中国熟女91| 激情综合网激情五月天| 日本中文字幕不卡视频| 国产风韵犹存熟妇三区| 久久黄黄| 黑人无码一区二区| 青青草中文字幕| 麻豆 亚洲 97| 男人夜色天堂ss| 久久无码成人| 久久久久久久性爱| 久久久国产精品亚洲精品| 久久综合婷婷| 国产日韩欧美亚洲精品95| 青青草在线视频播放器| 亚洲国产综合久久天堂| 亚洲第一成人影院色播| 午夜啪| 97操97干| 91欧美另类| 天天影视网综合少妇| 亚乱色| 九九九久久久| 蜜臀网址在线| 夜夜爽爽夜夜精品视频| 久操99| 强奸乱亚洲| 天天操人人操狠狠插| 亚洲精品91| 欧美大干日韩| 日韩一区二区熟女| 亚洲五月丁香花狠狠干一区二区三区 | 久久伊人东京热| 操B久久| 少妇 综合| 欧美精品自慰系列寂寞少妇| 国产精品视频自拍在线| 97在线免费观看视频| 风间由美日韩欧美久久| 欧美色图人妻| 都市激情人妻一区二区青青操视频| 欧美熟爽综合| 超碰人人妻| 久99| 伊人久久艹| 人人操人人大香蕉| 两性色网| 美女尤物人人操| 国产亚洲精品无码三区| 欧美传媒| 成人av性爱电影在线观看| 久操视频在线观看| 99re这里只有精品9| 青青青在线高清视频在线一二三四区 | 色九九久九九| 青草伊人网| 国产精品禁久久久精品| 不卡六六在线91| 日韩精品影视| 操老熟女AV| 97伦乱| 大干人妻| 九久久九九久视频| 啪啪啪综合| 超碰九区| 人妻少妇久久中文字幕一区二区 麻豆 | 成人羞羞视频国产| 天天日天天操天天射河南省| 欧美天天综合| 国产二区三区免费视频| 综合伊人激情| 国产黄片精品在线| 日韩精品 视频一区二区| 青娱乐亚洲自拍| 亚洲av无线观看| 久久人人爽人人爽人人片Ⅴ| 国产99 中文字幕日韩小视频| 色婷婷香蕉| 亚洲一区深夜| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 色色99| 亚洲日本天堂| 欧美姓爱综合网| 在线免费观看高清无码视频| ,成人免费啪啪视频| 亚洲欧美自拍偷拍| 91操人视频| 久9久| 大香蕉综合在线| 成人情色综合网| 91另类| 欧美亚洲天堂| 人妻 丝袜美腿 中文字幕| 熟女人妻一区二区三区| 99热思思| 日本精品免费一区二区三区四区| 少妇久久久免费| 91高潮| 嗯啊视频免费在线观看| 秋霞视频一区二区| 成人日韩中文字幕| 国产蜜臀在线| 亚欧高清| 久久久夜夜嗨免费视频| 天天操女人| 美女91av| 欧美日韩在线视频网站| 成人免费福利网站国产| 久操视频免费在线观看| 99久久9| 偷拍精品一区二区三区| 久久久亚洲欧美综合| 2011国产精品| 伊人四虎综合| 夜夜草天天| 能看的AV| 美女丝袜激情小说| 亚洲国产成人精品久久久国产成人一区二区| 国产性爱在线视频一区二区| 色婷婷亚洲婷婷| 久久久久78| 亚洲综合另类| 狠狠色婷婷7777久| 国产精品久久久久久久免牛肉蒲团 | 国产亚洲色停停久久99精品91| 亚洲无码AV九九九| 精品十三区| 神马久久久久久久| 十八禁视频网站| 足交视频老司机| 日本操逼视频在线| 欧洲色色| 成人草草视频| 333kkkk·亚洲com久久| 久久国产对白激情浪潮 | 亚洲 一区二区 自拍| 天堂国产AV| 蜜臀久久99精品久久久久久无删减| 色久桃花影院在线观看| 亚洲一区二区三区麻豆传媒| 老女人综合| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 大乔未久88一区| 98人妻精品一区二区色欲| 亚洲高潮少妇| 色约约一区=区三区| 综合欧美日韩在线观看| 精品一二三区女同| 中国一级操逼视频| 免费网色网站| 亚洲图片色图欧美另类| 东北女人的毛片| av网站免费线看| 九九九久千久久激情蜜桃在线看 | 蜜乳AV一区二区三区四| 色在线69堂| 国产性久久久| 日韩视频小说在线观看 | 1204金沙人妻懂旧版免费| 蜜乳AV免费观看| 国产高清不卡视频| 被男人添B超爽视频| 亚洲激情色片| 免费簧片在线观看| 亚洲日韩97| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 日韩91网| 九九热最新| 九九久久久| 久久国产精品91| 亚洲影院无码在线| 久久大线蕉一区| 五月丁香拍拍激情综合三级| AV色图| 丁香婷婷久久 | 国产强奸乱伦xd| www.男人天堂| 亚洲偷拍自拍在线视频| 久久丝袜| 97精品一二区| 91人妻精华帖| 久久精品无码熟妇一区二区三区视频导航 | 肥臀熟女福利视频一区二区| 人人干黄色| 粉嫩av一区二区三区四季| 五月丁香六月婷综合成人综合 | 大香蕉免费中文| 亚欧无码线免费观看视频| 国产乱弄免费在线视频。 | 欧美丝袜美女电影一二三四区| 国产亚洲精品自在线亚洲情侣| 亚洲风情在线观看| 神马久久久久久久久久久久| 久久AV无码网址| 国产精品视屏| 少妇一级婬片免费放一级a性色.| 日本熟妇精品九九| 综合色图区| 国产啊v在线免费播放| 性生活性生大爱77AV国产| 旡码电影特区| 性色av网站| 国产精品美女视频诱惑| 囯产精品强| 久久久久久大| 国产又粗又长又爽又色| 亚洲精品久久久久毛片A片拉屎 | 精品久久久久久久| 天天色怡春院| 91狠| 欧美自拍偷拍免费观看| 精品性爱| 一本色道熟妇| 日本孕妇孕交| 国产精品久久发布| 成人在线视频网| 国产大陆天天艹| 天天操夜夜操| 精品国产a∨一区天美传媒| 97硬碰| 五月激情小说| 人妻99p| 中文字幕国产| av网站在线看| 欧美日韩中文字幕不卡| 国产在线精品电影观看| 999久久久久久久精| ?亚洲伊人伊成久久人综合网| 97超碰人人操人人操| 欧美色图99| 欧美中字不卡| 国产精品熟女九九九| 久久国产精品一级二级三级| 久久精品色欧美aⅴ一区二区| 岛国黄片网站| 少妇被c 黄 免费观看| 天天摸天天操视频| 老司机午夜精品福利视频一区二区| 人妻插插人妻人| 久久黄色网址| 色香色香欲天天天影视综合网| 久久久久国产精品喷潮免费观看臀| av毛片aaaaa免费看| 超碰97亚洲| 九九热av| 国产97色在线 | 亚洲| 狠狠爱夜夜干| 精品人妻伦一区二区三区久久| 欧洲精品一区二区三区| 成人精品视频一区二区| 成人AV素股で擦久久| 日韩在线视频1234| 丰满人妻一区二区三区四| 五月丁香六月| 日日狠狠久久偷偷色综合免费| 中文字幕jul-617人妻熟女| 精品一啪| 色牛牛AV| 大香蕉久久| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 夜夜爽33333| 精品 码产区一区二-1080P高清在线www-B029AV | 女一区二区| 久久av网| yy少妇精品久久| 爽极品影院| 人人看黄色视频| 国产探花日韩援交| 人妻丰满熟妇一区二区三| 亚洲图片色图欧美另类| 天天躁日日躁AAAAXXXX国产| 国产91会所女技师在线观看| 日韩中文字幕精品一区在线| 无码最新| 国产乱伦性爱AV| 丁香五月婷婷五月| 1区2区3区在线视频| 久久视网78| 人妻五十路在线| 精品无av| 亚洲?V高清一区二区三区尤物| 亚洲国产美女久久久久| 欧美1区二区三区公司| 色噜噜精品一区二区三| 国产精品熟女丝袜一区二区| 婷婷色色五月天| 大香蕉综合| 超碰97导航| 欧美日韩97| 中国一级特黄大片护士| 国模精品娜娜一二三区| 男人亚洲91首页在线| 国产超碰在线一区| 人妻天天爽夜夜爽2| 超碰97综合| 无码精品久久| 日本123区操B视频| 国产suv精品一区二区四| 久啪| 91人妻人人澡人人爽人人精品| 永久免费观看的毛片的网站| 欧美日韩国产三级黄色| 在线只有精品| 欧美视频第二页| 91N综合网| 中文字幕高清精品一区| 91精品黄在线观看| 97日视频| 九久9精品| 亚洲免费成人精品电影| 麻豆天美电影一区二区| 超碰69| 中文?日韩?免费?精品| 欧美日韩精品一区二区三区高清| 超碰三级秋霞| 国产AV线| 亚洲AV无码乱码| 色婷婷五月天| 亚洲色图综合网| 啪啪视频免费在线观看| 色综合网1| 日日橹狠狠爱欧美超碰| 青草一区二区| 国产粉嫩出水在线播放| 99热免费精品| 久久久蜜桃臀无码视频| 蜜臀AV网站| 天堂伊人久久| 日本成a人v网站在线观看| 欧美刺激色黄片免费看| 色九九九综合| 中文?日韩?免费?精品| 国产激情久久| 久久是精品| 欧美国产欧美在线观看| 欧美综合97www| 加勒比综合88| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 久久这里精品国产99丫e6| 久久亚洲一区女同性恋中文字幕| 欧美成人四级在线播放| 中文字幕片| 欧美第一页| 国产成人亚洲精品自产在线 | 午夜福利免费精品视频| 黄呦呦在线| 人妻9117c| 九九精品美女高溯喷水| 国产精品久久久久久久久久久久久久| 婷婷激情五月天小说网| 色老牛| 污污汅18禁网站在线永久免费观看| 久久国产视频专区一二三| 看全色黄大色大片免费视频| 国产玖玖| 懂色av一区二区三区天美传媒| 五月婷婷综合在线| 亚洲成人ab| 久久久久久亚洲精品不卡人乳| 国产91美女视频| 91丨九色丨东北熟女| 欧美黑人与女人91| 中文字幕在线观看丝袜| 久久久人妻| 大香蕉伊人一区在线观看| 青娱乐国产剧情av一区| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 影音先锋国产精品| 人妻91少妇| 中文字暮97| 国产福利电影| 欧美性生活内射| 一区二区三区免费岛国片| 久久精品91| 性爱综合网| 99人妻| 黄色十八禁网站| 日韩亚洲中文字幕在线| 欧美线天码中字| 男人的天堂不卡一区二区| 97国产人人| 天天舔九色婷婷| 亚洲成熟国产精品美女| 色狠狠一区二区三区香蕉| 亚洲天堂电影精品一区| 日本成a人v网站在线观看| 96免费视频在线| 全球成人中文在线| 日躁天天爽爽| av麻豆啪啪| 免费观看啪视频| 日本操逼无码| 国外91| 99成人| 性暴力欧美猛交在线直播| 久九9精品| 天天爱天天韩国日本牛牛牛牛| 日韩一级欧美一级国产一级台湾 | 久久美女国产| 一级AAA片一区二区三区| 精品无码一区二区| 欧美日本国产日韩激情视频| 无码二级三级| 大吊色| 操人无码| 韩国一级婬片A片无码天美| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 99国产精品免费| 99热伊人| 国产成人午夜视频网址| 久久精品国产亚洲av水密被窝| 色综合加勒比四四季| 亚洲欧美日韩夜夜| 三级日本一区二区三区| 亚洲人妻久久久| 久久鲁夜| 亚洲欧美校园另类春色| 日本好吊色视频| 啊啊啊啊,啊啊好多水| 天天91~综合入口| japan日本高清乱xxxx| 在线观看中文字幕| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 牛牛久久国产精品视频一二三| 久热9| 国产av强奸美女| 九九九免费视频| 欧美激情亚洲| 日本精品久久久久久久| 精品大久久| 狠狠狠狠狠| 欧美成人一区二区三区在线播放| 欧美在线永久天堂| 伊人网高清| 成人AV在线网站| 九九九九一级| 97超级欧美| 亚洲丝袜色图| 神马精品视频| 五月丁香色婷婷| 91精品久久综合熟女| 精品人体无圣光凹凸| 国语对白露脸XXXXXX| 综合97| 人妻丝袜日本| 精品丰满熟妇人妻一区| 精国久久一区二区三区98| 大香蕉天天看妹子| 九九九网页| 少妇高潮99p| 一二三区在线| 91综合在线| 99色色网| 久热婷婷| 色色五月丁香| 五月天色色网站| 麻豆这里只有精品| www.色婷婷色综合| 熟女六十路| 无码抄逼网| 国产高清成人传媒影视| 操逼视频免费日韩无码| 无码av永久免费专区网站| 久草精品一区| 夜夜欧美 | 亚洲天天综合| 久久婷婷综合国际产色怕| 91激情| 久久男女激情视频网站| 91老熟女91老女人| 777奇米影视777四色| 日日97| 在线日韩视频| 淫荡网址| 亚洲男人的天堂一区二区| 久久精品人妻一区| 殴美日韩m| 加勒比在线视频一区二区三区| 欧美伦乱爱| 综合色色网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 |