日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
欧美激情久| 男人的天堂不卡一区二区| 日本高清一本二本免费不卡| 亚洲色香| 美腿色图| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 97久久超碰日韩精品| 超碰人妻中文在线| 夜夜久久| 后X久久| 亚洲综合成人网| 性久久| 99热在线播放| 一区二区视频在看| 亚洲精品一区二区日本| 成人区人妻精品一| 天天综合欧美| 夫妻天天操岛国视频| 91欧洲入口| 欧亚第一综合网| 在线观看十八禁| 日韩成人网址| 国产又粗又长又大的视频| 久久久国产精品亚洲精品| 日韩人妻网站| 91人妻视频| 欧美制服另类丝袜| 男人 天堂 日 亚洲| 久久99精品国产| 大香蕉男人的天堂| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 日韩欧美水蜜桃人妻| 日韩女模中文造逼| 神马久久久久久久久久久久| 久久伊人网视频一区二区三区| 国产欧美精品日韩区二区麻豆天美| av凤凰久久久| 97舔舔| 丰满人妻一区二区三区四| 伊人AAA| 亚 欧 美 综合| 九九精品热| 六月婷婷综合| 69超碰综合| 九九热九九热| 99re这里只有| 强奸乱伦大香蕉| 亚欧免费| 国产精品香蕉热久久新品| 欧美丰满熟妇XXXX性ppX人交| 竹菊影视国产一区二区| 久草大| 超碰日本97美女人妻人人玩人人爱| 国产欧美一区激情交| 性爱久久| av操操不卡| 96免费视频在线| 性欧美精| 91黄站| 爱妃国产亚洲视频中文字幕| 久久久久久日韩| 欧洲熟妇xxXx欧美老妇裸体| 日日夜夜干| 欧美九九99久久精品| 无码视频一区二区| 久久精品无码不卡| 少妇一级无码精品| 韩国三级理论在线| 黄总AV色图| 久久国产精品视频| 亚洲精美粉嫩嫩泬在线观看| 99999久久久久9国产精品| 中文字幕88av在线| 日韩大香蕉AV影片| 在线观看黄色电话| 啊啊啊啊二区好大| 少妇天堂| a在线视频免费观看| 免费观看有码高清视频| 99re这里| 免费自拍三级综合| 国产乱码久久| 五月情色天| 久久久精品电影| 久久久com| 国产白丝在线| 欧美v日韩v亚洲v最新在线| 亚洲精品乱码线路中文字幕| 国产免费一区二区在线A片视频| 亚洲日本男人天堂网| 色悠久久久av| 人人做,人人操,人人摸| 少妇二级| 久久有码视频| 色情综合| 日韩欧美蜜桃精品久久中文字幕久久| 精品日韩人妻视频| 亚洲夜色在线| 欧美九九九九九| 3d成人精品一区二区| 加勒比无码一区二区三区| 欧美综合综合| 五月激情天| 在线洲亚线| 东北丰满熟女国产一区| 久久久久久裸体| 黑人白女精品一区| 久久久久久久久久久久久久久久9| 激情文学88| 婷婷综合在线| 探花精品 一区二区| 婷婷亚洲色| 色色青青久久| 国产一区二区欧美日本| 精品国产久久乱码| 国产成年免费大片黄在线观看| 五月天色电影| 欧美强奸乱能| 亭亭在线资源| 日韩黄色一区二区三区| 久久久性少妇| 伊人成人中文字幕久久网| 人人澡人人干| 男人的天堂2010| 91情色在线| 午夜大香蕉| 亚洲图片欧美偷拍| 在线女人91| 中文字幕丰满人妻日本| 欧美情色男人的天堂| 免费久久一级毛片大黄| 精品人妻一区二区三区视频| 亚洲人妻中文高清| 97神马久久| 337p大胆噜噜噜噜噜91Av| 超碰天天去日穴| 亚洲激情综合| WWW.操逼.COM| 91天美传媒在线| 精品亚洲国产成人精品| 97亚洲欧美| 亚洲有薄码区日本系列中文字幕| 国产高清自拍视频| 97在线视频免费看| 男人的天堂在线2| 欧美性生活免费网| 久久αⅴ| 亚洲吊色| 一区二区偷拍拍视频| 热99这里有精品综合久久| 爱爱动态120秒| 在线视频亚洲无码| 亚州九九九精品视频| 97人人操人人干| 乱操乱伦AV| 国产精品一区二区后入| 久热伊人99re| 国产综合永久精品日韩鬼片| 日韩免费av片高清无码| 乱操9999| 97干色天堂| 国产福利在线视频网站| 色97干| 97视频在线观看高清资源| 久久久久久AV无码免费网站| 日韩亚洲欧美中文字幕| 色网综合网| 女优视频第10页| 强奸乱伦免费网站| 亚洲欧美另类激情小说| 啪啪啪男女亚洲中文字幕99| 久久偷拍人| 九色婷婷| 玖玖爱免费观看视频| 青青草福利视频| 加勒比久久av| 久久綜合很很很| 精品四五区| 人人摸人人干人人拍97| 日本一区二区三区午夜观看| 99久久亚洲精品无码毛片潘甜甜| 国产夫妻性生活视频| 九热大香蕉| 午夜精品久久久久久久男人的天堂| 日本成人A片免费看| 欧美天天综合在线| 97视频免费在线| 久啪| 青青草字幕AV| 日韩成人午夜精品久久高潮| 国产按摩一区二区三区| 色色五月丁香| 天堂8在线新版官网| 免费1级a做爰片观看| 色婷婷国产精品一区在线观看| 亚洲精品97久久中文字幕| oumeizonghese,www| 91狠婷| 在线99热| 国产激情久久久| 色yeye成人免费视频| 日小BB小视频| 强奸国产精品视频| 色欲av一区二区三区蜜芽| 亚洲综合999| 中文字幕乱亚洲美女精品一区| 国产中文字幕在线观看| 亚洲91射| 欧美性爱一区二区三区| 淫荡网址| 私人尤物在线精品不卡| a片自拍直播视频| 大JI巴好深好爽又大又粗视频| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲色图激情小说| 国产精品熟女AV中文字幕在线播放| 能看的av| 伊人久久亚洲中文字幕| 中文字幕国产| 日本一线产区和二线产区伦理片| 午夜欧美女人操逼| 激情综合 婷婷五月 红杏| 熟妇一区,二区,三区。| 精品人妻一区二区三区四区| 上床啊啊啊| 亚洲国产97| 国产高清自拍视频| 性暴力欧美猛交在线直播| 黄色AAAAA欧美| 国产精品999zyz| 婷婷五月天色色| 91neishe| 67914在线兔费成人视频| 91丝袜美女视频| 成人AV超碰免费在线| 欧美精品日韩久久久九| 久久婷婷亚洲| 久久超碰亚洲人| 无毛精品| 9999久久久| 国产精品嫩草久久久久| 欧美熟爽综合| 激情四射五月天| 欧美色综合网| 特级丰满少妇一级AAAA爱毛片| 亚洲国产无码精品首页久久久| 校园春色 男人天堂 | 嗯嗯啊好大| 色区97| 欧美性爱日韩高清| 999久久久精品国产| 97超碰逼| 久久夜夜| 久久9 9 9精品| 尤物视频新赏网鲜网色诱网| 国产一级高跟丝袜| 人妻激情另类| 日韩欧美三级| 久久精品高清AV| 久久久久骚| 91人妻久久久久久久久久久久久| 97亚洲综合| 亚洲高清无码免费观看视频| 五月开心久久AV官网| 日日爱99| 丁香五月色情| 激情视频图片| 亚洲免费成人在线高清无码视频| 七久久久| 久久婷婷苹果| 凹凸视频特色日本特黄| 日韩精品大香蕉伊人在线| 日韩综合色图| 99无码视频| 人妻无码一区二区三区久久99| 日韩操p| 嗯嗯嗯啊啊啊在线免费观看| 日本三级精品| 成人五月香网在线| 麻豆视频一区二区| 一区二区三区机械有限公司| 久操视频免费观看| 亚洲女毛多水多21P| 樱花草社区www中国| 中文字幕老熟妇黄色视频| 欧美日本不卡| 国产树林里野战在线看| 大香蕉淫人| 日韩中文字幕二区| 欧美性爱一区二区三区| 中亚精品极乱| 久久久久久久强迫| 亚洲人在线| 午夜小电影在线插入淫高潮| 亚洲不卡不卡中文字幕不卡| 国产福利电影| 精品九九淫乱男| 亚洲成人日韩小说| 蜜区区视频79| 精品国产一区二区三区av在线资源| 91激情国产| 欧美,日韩,亚洲视频| 99re6在线视频精品免费完整版安卓版| 中日韩久久久| 干妹子| 久久激情视频| 欧美超碰97| 国产AV天美| 91香蕉视频在线观看免费| 北京美女一区二区| 强奸乱伦中文字幕AV| 狠狠爱夜夜干| 男人的天堂亚洲| 欧美男人天堂| 亚洲综合射| 久9视频| 丁香婷婷五月| 2020中文字幕在线| 麻豆久久久一区二区| 视频一区二区免费在线| 9ⅰ久久久天天| 婷婷综合在线| 亚洲成a人片在线观看中文!!!| 啊啊啊啊啊舒服| 天天做天天爱| 欧美日韩国产黄色片| 嗯嗯嗯啊啊在线观看| 久久人妻视频| 18禁免费视频| 97天堂| 亚欧洲一区二区视频| 色色色综合网| 午夜亚洲国产理论秋霞| 超碰色综合| 精品无码一区二区人妻久久蜜桃| 淮穴色AV| 日韩黄色一区二区三区| 久久精品一区二区一8| 热的中文 热的有码 热的国产| 色性综合| 国产精品自拍欧美在线| 国产日逼视频| 岛国黄片网站| 夜夜爽夜夜爽| 91美女片在线| 怡红院亚洲怡春院av| 日本曲间由美性生活片| 国产精品老师| 日韩人妻一二三区视频| 精品人成视频在线观看| 精品九九| 久久久久白虎| 久久中文字幕女同性恋一区| 男人天堂日日夜夜| 91色碰| 日本久久网| 夜夜天天噜狠狠爱2021| 日韩欧美亚欧在线视频| 久 久无码人妻AV| 四虎精品一区| 久久久久国产| 亚洲日产专区婷婷| 好看的久久不射无码影视影院| 啊啊啊啊嗯嗯嗯用力好爽 | 人妻精品综合中文字幕在线| AV电影在线播放| Blackedraw视频一区二区| 性爱网站一区二区| 日本成人免费一区二区三区| 亚洲天堂精品日韩电影| 国产午夜精品理论片a大结局| 综合少妇网| 欧美亚洲韩国视频十五区 | 岛国毛片在线观看免费| 国产乱伦性爱区| 日本东京热久久久电影| 翔田千里A片一区二区| 蜜臀久久99精品久久久| 欧美激情激情xxxx欧美专区| 17c嫩草51久久91嫩草| 97免费视频在线| 少妇高潮九九九九| 中文一区二区三区影院| 精品国产一区探花在线观看| 中文字幕欧美日韩三级| 欧美人人曰人人操人人射射| 日韩黄色片子| 26UUU欧美激情一区二区| 国产多人在线观看视频| 欧美操逼熟女| 九九精品热| 日本有码久久| 97资源欧美| 人人澡人人弄| 羞答答AV中文字| 久久久三区二区一区| 久久久久国色αv免费观看| 无码78| 黄色视频高清无码网站| 涩涩涩综合| 色婷婷九月天天综合| 大屁股xxxxx| 日韩精品区二区三区不卡| 嫩草 人人网精品| 欧美色图在线视频少妇| 91欧美在线| 特级特黄一级毛片免费| 任你艹| 国产性刺激| 98福利在线视频| 亚洲综合在线91| 中文字幕国产在线天堂| 999岛国大片| 日韩紧密久久| 国内毛片四区| AV和黑人在线播放| 综合五月天| 97超碰免费人人性爱| 97se亚洲| 色色香蕉| 欧美中文字幕男人天堂久久精品| 99re这里| 婷婷久久五月综合激情| 亚洲砖码砖专无区2023| 青青青国产| 夜夜操夜夜高潮夜夜爽国产精品区| 欧美激情专区| 91人妻素女| 亚洲欧美爆| 中文字幕熟女人妻丝袜丝| 手机看片91人妻| 高清在线偷拍自拍视频| 女人的天堂大香蕉网| 啊啊啊啊操死我| 国产AV久久野战精品| 九九热免费国产视频婷婷伊人| 色女免费在线观看视频网址| 丰满人妻被猛烈进入中| 国产这里只有精品| 92大香蕉| 一级特级aaaa毛片免费观看 | 欧美,亚洲,日韩,v,天堂,手机在线观看| 欧在线一二区| 婷婷综合网站| 久久9久久| 亚洲无码一二三区| 国产精品视频| 啪啪啪精品| 一本一道人妻久久一区二区三区| 亚洲图片视频小说| 人妻-91porn| 91爱做| 日韩中文字幕视频| 国产女上位好爽在线| 久久午夜神马| 思思热在线| 国产后入式在线观看| 国产色精品午夜大片| 九九拍拍精品视频在线播放| 高清无码一区二区三区| 青久操| 中文字幕美女91| www四虎| 美女91网站| 九九九九久久久| 青青久久艹| 午夜丁香婷婷| 久9精品| caorenqi shipin| 999999精品| 亚洲色偷偷色噜噜狠狠99网| 97操| 欧美少妇内射| 奇米狠999| 好爽要喷了| 日韩中文字幕二区| 99热伊人| 少妇毛片久久| 岛国视频一二三区| 精品久操| 伊人网av| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 熟女日韩| 国产精品探花色| 天天综合网1| 日本操嫩b网| 青青久日| 天操天操夜操夜月操月年年操| 国产一级高清免费观看| 啊啊啊啊二区好大| 在线观看黄色电话| 欧美天天射| 欧美色图中文字幕| 激情啪啪拍91| 20cm女自慰在线日韩欧美| 久草婷婷| 午夜一区| 亚洲成人在线高清| 亚欧美色图| 亚洲av夫妻操穴网| 国产精品久久久久亚洲av| 久久人妻一区二区三区高清| 婷婷五月天福利| 性夜影院爽黄A爽免费动漫| 试看福利| 亚洲老熟妇xxx| 岛国片在线播放| 午夜福利合集| 91嫩草欧美| 国产激情久久久| 国产无码高清操逼视频| 91中文字幕制服丝袜免费视频| 97视频观看| 五月天丁香婷婷综合网站| 97chaopengongkai| 九九国产| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲国产综合久久久性感熟妇| 亚洲国产精品无码AV在线| 欧美AB在线| 欧美国产操逼| 精品十三区| 爱射综合| 久草国产在线视频| 一级性爱视频免费观看| 超碰97久| 国产久9| 中文字幕十五区| 超91综合网| 久久精品亚洲成a人天堂| 97无码视频在线播放| 亚洲交换| 久久人妻少妇| 美日韩在线不卡人妻| 性色一线| 裸体美女免费看网站青草| 欧美另类综合久久| 一级@啪啪视频| 探花精品 一区二区| 中文字幕人妻丝袜乱一区三区| 久久久久78| 91在线限制级| 嗯~啊~快点 死我视频| 亚洲综合婷婷| 91精品黄在线观看| 熟女被操视频网址| 成人免费福利网站国产| 久久人人舔人人爽舔人人av片| 国产亚洲99久久精品熟| 久久久新亚洲AV| 久久天堂| 一级毛片电影免费看| 国内外内射高清视频| 外国免费性情大片| 色与欲影视| 欧美97超碰| 综合色欧美| 国产传媒一区二区三区| BBBBB97COM| 男人天堂2030| 精品视频一区二区| 一级AV性爱| 成人精品久久久午夜福利| 肏逼视频日本| 综合av社区| 日本黄色大片一级视频免费麻豆| 少妇无码av专区线| 秋霞免费AV| 午夜黄色免费在线观看| 97操操| www.婷婷六月天| 欧美日韩99精品麻豆传媒| 伊人久久国产免费观看视频| 91久久久视| 丝袜狠狠草尤物 91| 久久大香蕉97| 久久久久少妇| 俄罗斯一区二区视频在线观看| 大香蕉www.超碰| 久久三| 色五月婷婷五月天| 久久蜜桃综合网| 91国产在线精品| 人妻夜爽夜夜爽| 久久久久少妇| 亚洲乱码国产乱码精网站| 丁香激情网| 色哟哟-国产专区| 91爱欧美| 麻豆天美91| 亚洲无码免费看| 六月丁丁香| 麻豆天美制片厂网站视频| 加勒比综合a∨| 青草精品视频-日本久久久久网站| 久久大黄片| 精品一区二区综合熟妇| 青青国产精品在线| 插入粉嫩少妇视频| 亚洲色图综合| 国产精品久久久久无码AV会牛| 啊啊啊不要好疼视频| 91成人社区| 啊啊啊好舒服视频| α√在线| 色盈盈影院| 亚洲黄色电影| 久久人人爽爽人人爽人人片αV| 日韩不卡av一二三| 一区二区三区四区久久视1| 日韩无码人妻中字久久三区四区| 高清在线不卡一区二区 视频| www.av在线观看| 九九热五区| 香蕉视频精品亚洲一区二区三区在线播| 岛国在线国产| 口爆综合网| 国产日韩中文字幕欧美| 久热在线精品免费观看| 欧美有码激情视频一区二区三区| 物业黑人 AV一区| 肏逼视频日本| 殴美牲| 狠久久| 激情视屏国产乱伦强奸| 男插女青青影院| 91综合在线| 久久综合婷婷| 伊人欧美大香蕉视频| 中文字幕交换人妻| 欧美韩国你懂得在线 | 日日操免费视频| 91亚洲黑人| 天天综合青苹果| 国产成人精品亚洲日本| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 99久热| 理论久久婷婷网8| 国产精品久久久久久片| 超碰无码五月97| 欧美激情性爱视频网站| 大吊色| 91色人妻| 亚洲大色堂| 国产亚洲日韩欧| 91天天综合网,天天综合网| 91操人| av日韩中文字幕| 亚卅熟女乱色| 日夜精品| 亚洲有码 欧美精品| 国产久久久| 天堂日本亚洲欧美| 人人看黄色视频| 91麻豆天美传媒HD| 狠狠色狠狠色狠狠五月| 台湾佬中文娱乐网久久久久久久久久com | 狠狠婷婷亚洲中文综合久久| 91天天日| 翔田千里AⅤHD无码| 黄呦呦在线| 亚洲国产高清福利视频| 小电影欧美91| 久久黄黄| 日日日日做夜夜夜夜无码| 欧美一区二区成人一卡| 國產尤物AV尤物在線觀看| 极品出轨视频网站| 成人贴图日韩欧美| 18啪啪手机免费性爱| 欧美国产视频| 97频视在线| 精品久9| 久久久久久久一级黄色打同平台| 夜夜爽夜夜爽| 青青草国产盗摄一二三区| 粉嫩粉嫩一区性色AV片| 97综合激情| 青青草视频在线观看一区二区| 亚洲第一免费视频| 免费男人的天堂| 大香蕉在线视频15| 夜间福利片1000无码| 国产免费内射视频| 午夜精品久久久久久久99热影院| av凤凰久久久| 中文字幕在线免费观看2| AV中文字幕剧情1区2区3| 99热亚洲| 在线A日本| juliaann欧美丝袜办公室| 久久久性爱视频| 精品久热| 免费看黄视频亚洲网站| 亚洲欧美不卡线| 欧美亚洲高清不卡| 亚洲天堂综合AV| 国产AV精久久| 大象AV在线| 欧美精品亚洲精品日韩传电影| 高潮内射在线| 日韩一级片在线看| 国产又黄又爽| 99精品无码| 黄色不卡视频| 亚洲色图久久成人| 亚欧国产无码精品在线| 中国操逼无码| 亚洲日韩天堂| 午夜福利 成人 91| 亚洲天堂日本| 久久久久久久9999| 视频二区熟女人妻| 75大香蕉| 天堂日本亚洲欧美| 欧美午夜精品久久久久久3D| 亚洲成熟国产精品美女| 国产成年女人免费视频播放a| 天天干18禁| 人人澡人人澡人人| 欧美超碰人妻97| 91精品人妻一区二区三区蜜桃臀| 婷婷综合久久| 性一交一乱一交A片久久四色| 亚洲色系另类精品国产| 日韩av性爱在线播放| 97爱综合| 久久久夜夜夜| 东北熟女91| 久久内射| 亚洲资源站| 九久久九九久视频| 久热伊人| 久久9精品| 久久久久久久久久久久97| 亚洲脚交| 亚洲中字慕不卡| 欧美丰满少妇交换91欧美精品| 蜜乳av一区二区三区四区不卡| 美女AV一区二区| 五十路熟女工口 | 亚洲熟妇AV日韩熟妇在线| 色九九九综合| 超碰欧美在线欧美| 美女网站黄页| 精品人妻一区二区蜜桃视频 | 入口操逼网站| 国产精品久久久鸭无码的功能| 日本高清有码网址视频| 天天操天天舔| 可以看的av| 最新加勒比丝袜在线| 蜜色网色哟哟| 亚洲大色堂| 加勒比伊人综合| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 手机午夜电影神马久久| 五十路六十路素人熟女| 亚洲高清无码在线桃色| 成年女人18级毛片毛片免费观看| 五月婷婷基地| 国内精品不卡无毒99999| 天操天操夜操夜月操月年年操| 久久九九一区二区三区成人| 最新av在线| 天天搞欧美| 91视频在线观看18| 九九综合久久中文字幕| 秋霞一级视频在线观看免费| 六六久久日韩不卡| 麻豆性爱视频在线播放| 美女网站黄页| 亚洲久久久久| 超碰在线观看av不卡| 国产免费久久久久| 亚洲限制级在线| 亚洲欧美91√| 中国一级αV| 亚洲国产一级精品毛一级精品看免费视频 | av一区二区三区 中文| 欧美|91色综合| 熟女网站最新| 极品尤物在线观看| 久久这里精品国产99丫e6| 久久99深爱久久99精品| 97欧美综合| 天堂无码精品国产久| 六月婷婷激情| 亚洲的天堂网| www国产无码| 91动漫操逼视频| 午夜久久一区二区无码中出| 九九国产| 国产女大学生AV| 国产成人精品日本视频| 图色综合网| 99少妇| 亚洲最新中文字幕免费| 国产丝袜美女诱惑| 久久黄黄黄| 色天使亚洲综合在线观看| 四虎AV在线观看| 91网站在线播放| 亚洲国产精品成人综合| 婷婷色婷婷| 尤物AV免费网站| 在线欧美69V免费观看视频| 麻豆蜜桃视频在线观看 | 婷婷五月天成人| 少妇第一页| 国产亚洲深夜激情| 亚洲另类久操网| 東南亚性呦成人伦理资源在线视频| 人人操人人插人www| 亚洲国产剧情少妇激情| 野狼福利社区| 久久一二三四五六七八九区区区| 欧美激色| 黄色AAAAA欧美| 日逼五月天| 欧美黄色手机在线观看| 蜜桃久久综合视频| 麻豆天美在线| 国产成人精品亚洲日本| 亚洲天堂情色| 欧美中文字幕精品人妻| 人人操人人狠狠操| 日韩综合第八区国产精品| 99久久婷婷丁香| 久偷拍欧美日韩三区| 青草草免费网站av| 日本最新免费韩国1区2区视频播放| 青娱乐休闲视频在线观看| 屌色在线97视频| 天天综合中文字幕 91| 九九成人| 91视频综合网| 亚州成人a∨| 人妻精品免费一二三区| 久久做97| 亚洲欧美自拍偷拍| 99精品人人爽| 欧美三级中文字幕hd| 国产高清在线自在拍69| www.色婷婷色综合| 96超碰网| 少妇免费视频| 欧美成人A√在线一区二区| 97 国产一区| 日韩精品免费高清视频在线| 校园春色综合香蕉| 亚洲高清无码AAA久久久精品| 欧美日日人人天天| 激情久久久| 激情色图| 最新精品久久蜜桃 | 日韩欧美麻豆| 欧美综合自拍成人自拍第二十页| 99999精品| 久久成年精品| a v网站在线播放| 熟妇人妻精品一区二区| 久久久亚洲精品电影免费看| 人人贴人人摸| 女人18精品一区二区三区| 六月婷婷激情| 人妻二区| 天天综合,91入口| 亚洲欧洲小说图片视频 | 欧美色偷拍 | 美女诱惑爱爱| 91香蕉视频在线观看免费| 91精品免费| 亚洲国产精品久久久久久久久久| 日本熟女不卡视频| 日日玩天天干| 骚乳在线| 黄片直播三级黄片两女一男| 丝袜足交视频| 97国产色图 | 中文久久久| 在线情色电影 91大 | 涩涩久久精品| 美女黄色一级A视频| 很黄很色的视频在线观看| 乱人乱色一区二区三区免费| 欧美日韩淫加| 成人国产精品三级A片| 精品视频一区二区| 大香交| 蜜臀AV成人精品蜜臀AV久久| 亚洲夜夜欢无码一区二区| 欧美性爱第一页久久| 久久久久96| 嫩草伊人久久精品| 密桃99999| 中日韩欧美精品无码AⅤ一区二区| 清纯唯美亚洲综合| www久久精品| 插老姨肥穴| 校园春色之综合网| 色综合网1| 国产成人无码啪| 国产无码成人无码| 国产农村妇女毛片精品久久| 精品无码久久久久| 操我啊啊啊啊啊| 亚洲丝袜综合| 伊人午夜福利视频| 男人的天堂.com| 91色久| 性爱Av免费| 人妻另类 专区 欧美 制服| 久草成人影片| 超碰在97| 亚洲AV不卡在线观看尤物| 国产精品色色| 综合久久中文字幕综合日韩精品| 人人干人人操人人爱| 蜜臀AV一区二区三区| 91欧美综合在线| 综合色拍| 青娱乐大香蕉| 精品九九九九九九九| 91在线美女| 蜜桃臀av在线观看| 日本污ww视频网站| 九九黄色视频在线观看| x97av| 大香网伊人久久综合网eew| 有码免费观看| 在线观看十八禁| 色av中文字| 欧美嗯啊……在线观看视频免费| 人妻久久久久久久久久久久久久久 | 91色艳| 懂色AV一区二区三区| 人人色97| 啊啊啊啊视频免费| 强上我不卡卡| 97色97好| 综合91网| 欧美丝袜美女电影一二三四区| 国产AV人人夜夜澡人人爽麻豆| 亚热日本熟女| 午夜九九| 九七超碰人人乐| 国产在线激情| 国产91美女视频| 91高清欧美| 色婷婷一区二区三区久久| 超碰97欧美| 国产多人在线观看视频| 18禁中文字幕| 偷窥自拍A片| 久久香蕉网| 久久久亚洲精品电影免费看| 欧美se亚洲| 国产一区二区精品在线视频| 国产中文字幕在线观看| 天天肏视频| 100啪啪视频大全| 狠狠色狠狠色狠狠五月| 极品极品色影院| 日韩另类色图| 99热导航| 国产后入式在线观看| 1769成人国产精品视频| 欧美日韩大黄片| 欧美一级做a爰片免费视频| 五月天婷婷综合网| 天堂精品小草| 91亚洲狠狠色| 亚洲中文字幕熟女| 一类无码操逼视频| 狠狠穞A片一區二區三區| 宅男91视频在线播放| 激情五月天校园春色网| 亚洲Av诱惑| 丁香六月激情| 久久久婷婷婷| 日韩78m视频| 国产精品久久泡妞网站| 日本高清视频xxxx| 亚洲天堂 视频你懂的| 色婷婷aV一区二区三区麻豆综合| 色综合99999| 屁股久久久久久久| 性开放中文AV高清无码免费看| 91N欧美| 蜜臀无码一区二区| av网站在线看| www.99在线| 欧美成人综合| 夜色91| 亚卅熟女乱色| 国精综合一二三区影视| 久久久久久久9| 国产精品无码论坛| 美日韩男女操屄视频| 亚洲av无线观看| 99精品热| 狠狠干91| 久久99网站| 狠狠爱AV| 久久中文字幕一区不卡| 日韩欧美女优电影| 日日爽熟女| www.大香| 国产精品网站www| 欧美色院| 99无码精品| 欧美日日人人天天| 艹精品| 久久只有精品一区二区三区| 夜色综合| 久久久久人妻| 97资源站国产精品| 美女国产一区二区久久| 成人十八禁日韩欧美一二三| 日韩亚洲欧美中文字幕| 五月丁香啪啪| 欧洲亚洲人妻无码久久三区四区| 精品亚洲国产成人av网站| 一区 欧美 日韩 麻豆| 天天激清| 又黑又大又粗| 最近二区三区视频大全| 99精品网| 亚洲天堂另类| 久久激情五月| 正宗无毛一线天嫩逼| 黄aaaaaaaaaaaaaaaaaa色网站| 人人操人人射人人干| 无码最新| 日韩无码AB| 成人a大片在线观看| 婷婷美人网| 欧美色性爱| 亚州欧美综合| 大屁股xxxxx| 99AV| 女优免费一区二区永久| 日少妇视频| 亚洲中文字幕有码视频一区二区三区| 91老熟女| 97人人中文网| 日韩乱伦AⅤ| 吉川爱美亚洲二区在线| 青椒国产97在线熟女| 欧美第一页| 99人人干| 久久久96| 亚洲一本色码中文字幕| 上海一级黄片| 国产后入式在线观看| 天天干美少妇一区| 一级性爱视频免费观看| 97精品视频网站| 国产精品久久久久久 百度| 婷婷丁香人妻| 老鸭窝亚洲毛片| 少妇厨房愉情理伦片bd在线观看| 超碰97最新人妻| 人人看人人摸人人色| 欧美亚洲手机在线| 女同性恋一区二区三区精品视频| 美国日韩黄片| 很狠操| 五月天婷婷欧美三区| 立川理惠被中出无码| 4虎在线视频| 丁香五月久久| 亚洲欧洲日本精品中文a∨| 欧美亚洲厕所精品偷拍91 | 美女啊啊啊啊啊啊| 欧美综合色站| 黄色一级视| 97超碰中文在线| 青青草玖玖爱| 久久小视频| 狠狠操官网| 亚州欧美在线| 激情亚洲天堂| 翔田千里av一区二区三区| 国产精品白领在线观看| 国产风韵犹存熟妇三区| 久操九九九九| 操逼逼福利视频| 97在线免费视频| 国产午夜福利合集| 亚洲男人天堂2012| 国产情侣自拍在线播放| AⅤ片水多多| 性生活性生大爱77AV国产| 亚州色图狠狠干| 伊人久久婷婷| 久久国产性爱| 色婷婷国产精品一区在线观看| 欧洲精品一二三在线| 国内精品不卡无毒99999| 一级啊性爱在线视频| 性爱网站一区二区| 欧美日韩一二三| 97频视在线| 九九九综合精品| 99操| 乱伦系列一区二区| 中字幕人妻一区二区三区| 精品欧美乱码久| 91美女视频电影| 高潮综合网| 夜夜高潮夜夜爽高清视频一| 久久xx| 亚洲欧美精品福利在线| 欧美 日韩 亚洲 春色| 国产精品视频内谢女人| 热G综合热G中文| 骚逼自拍99| 神马久久69| 亚洲91网。| 人妻激情另类| 丁香五月电影| 欧亚在线视频| 午夜寂寞欧美| 操逼不卡中文字幕| 亚洲图片激情综合另类| 人人爱人人乐人人操| 麻豆成人影音在线| 精品国产乱码久久久A| 五月综合婷婷久久网站| 日韩人妻一二三区视频| 在线播放成人高清免费视频 | 精品97久久综合| 狠肏骚人妻| 一区二区 日韩 欧美 国产 传媒| 欧美黑人XXXⅩ高潮交| 日日日日日| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 神马久久午夜| 熟女人妻一区二区三区| 99av| dy888午夜老子影视达达兔| 四虎免费在线观看| 97精| 无码久久国产 | 伊人久久国产免费观看视频| 精品大久久| 综合网~91综合网| 超碰人妻中文在线| 欧美成人色| 精品妇操一区二区三区| 天天在线91| 国内毛片四区| 亚洲日韩电影| 91啦人妻| 精品人妻av在线播放| 久精品无码av一区二免费国产在线观看| 亚洲一卡2卡3卡4卡乱码网站 |