国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

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

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