亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
伊人天堂在线| 久久久一区二区三区四区五区| 超碰97COm中文| 色综合久久88色综合久久天天| 伊人丝袜美腿高跟在线观看高清| 日本操逼视频导航| 日韩中文字幕在线视频观看| 久久婷婷成人综合色怡春院| 久久久久久九九九九-美女久久久久久久-成人AV | 美女91av| 人人操人人搞人人草| 亚洲s在线观看| 精品人妻久久久| 免费黄色片子| 怡红院久久老司机| 色香色欲天天综合网天天来吧| 久久色一区二区| 欧美日本成人一区二区| 精品久久久久,69国产成人精| 国产美女高潮视频| 国产成人网址| 中文字幕一区二区视频在线观看| 日本999精品视频| 亚欧高清| 天天躁狠狠躁av| 国产Aα| 性性欧美| 午夜一区| 先锋影音av先锋一区| 久久夜嗨| 日韩不卡a级视频专区| 国产91丝袜 在线播放| 69人妻精品一区二区绯色| 99人妻| 美女黄页| 自拍视频一区在线观看| 91女优在线观看| 亚洲国产精品无码AV在线| 欧美高潮| 99热色精品| jazzjazz国产精品麻豆| 欧美性天天影院| 天天色播亚洲综合网站| 校园春色亚洲色图| 97色涩| 日韩无码a片| 欧美日韩人妻婷婷一区| 六月丁香啪啪| 成人五级久久| 九九热午夜欧亚国产视频| 99精品久久久久久久婷婷蜜桃| 操熟女91| 精品国产乱码久久久兰草影视| 色综合av男人天堂| 校园春色 欧美| 黄色不卡视频| 天天干天天操天天操夜夜操天天操| 色色色日本| 成人性生活高清视频在线播放| 青娱乐久久艹| 久久爽爽精品| 99热免费| 国产精品人妻熟女aⅴ| 夜色97| 婷婷色影院| 99色天堂| 伊人久久综合影院精品久久久| 欧美亚洲首页| 91男女| 久操热| 夜夜黄| 黑人狂躁日本妞一区二区三区| 极品一区二区三区免费| 女人妻一区| 国产亚洲日本精品在线| 神马久久久久久| 1024手机看片欧美日韩| 欧美在线伊人色| 欧美在线观看综合国产| 国产不良强奸视频免费看| 欧美一品道| 日韩一卡二卡三卡| 少妇熟女视频一区二区三区| 亚洲精品蜜桃久久久| 亚洲国产欧美中日韩成人综合视频| 天美精品一区二区三区四区在线观看| 婷婷99| 国产精品露脸在线观看| 国产91精品在线免费| 日韩人妻丝袜美腿中文| 久久精品一区| 亚洲天堂第一页| 综合激情五月丁香| 人人操人人操人人操人人操人人操人人人11.CM | 色综合尤物| 最新日日夜夜天天干干| 黑人娇小av在线播放| 韩国毛片一区二区三区| 97欧美色综合| 日韩精品怡红院| 久极品在线观看| 久久综合九九| 超碰91在线| 免费看黄视频亚洲网站| 永久免费av无码网站国产app| AV中文字幕三四五| 亚洲区小说| 老熟女中文字幕高清| 日本不卡码黄色 | 操九九九九九九| 在线不卡视频| 欧美疯狂做爰xxxx| 伊人久久大香大香线蕉中文| 手机在线人成免费视频| 欧美综合娱乐久久| 亚洲国产欧美一区二区潘金莲| 女人天堂av在线播放| 久久一区无码| 最近2019中文字幕国语免费版| 国产日韩欧美| 九九热精品免费视频| 亚洲性图91| 黄色小说亚洲| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲全色网| 精品97久久| 久操国产在线| 97爱亚洲| AAAA欧美日韩| 国产精品分类在线观看| 情趣丝袜无码操逼视频| 亚洲图片激情综合另类| 一级性爱啪啪视频| 色色福利| 国产又爽又黄| 五月丁香六月激情| 18精品一区| 欧美综合加勒比在线| 美女久久久久久久| 干B| 久久久久久久久久久久欧美日| 熟女网站最新| 中文字幕1区2区| 青青草依人大香蕉| 欧美97爱| 精品亚洲国产成人av网站| 人人妻人人狠人人| 女优免费一区二区永久| 99自拍B亚洲 | 中文字幕五区| 欧洲亚洲人妻无码中字久久三区四区| 动漫av中文| 97在线欧| 日日夜夜摸| 亚洲熟女精品| 久久东京国产精品视频| 亚洲天堂电影精品一区| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 久久色激情一区二区三区| 国产亚卅97| 六月色婷婷| 亚洲成人日韩小说| 久久精品熟妇丰满人妻99| a片在线播放| 偷拍在线观看视频| 色蜜AV| 久九九九九九九热| 日日骚精品视频| 韩国毛片一区二区三区| 男人的天堂va| 精品国产丝袜一区二区三区乱码| 精品久久久久久亚洲| 久久蜜桃综合网| 桑老女人九区| 欧美呦呦性爱| www.婷婷| 91久久久老司机| 亚洲欧美97√| 九月丁香婷婷色| 国产日比| 日韩无码AB| 啊啊啊啊好多水| 人人操人人摸人人看人人插| 久热这里| 亚洲日韩少妇一道本视频| 91 天天综合| 一起草欧美| 91黑丝露脚| 综合久久99亚洲人妻中文在线| 天美麻豆一区二区三区| 欧美黄片视频在线观看免费 | 91精品丝袜在线观看| 啊啊啊啊啊操我视频| 人妻无码一区二区三区久久99| 精品黄色电影| 五月天激情婷婷| 中文字幕AV片| 蜜臀AV秘一区翔田千里| 天天干少妇| 久草线上视频免费看| 天天干天天操天天操夜夜操天天操 | 无码逼| 无码heyzo高清一区| 色网亚洲人| 免费伦费视频在线观看| 午夜福利区| 亚洲日韩电影| 91一起操| 成人夜夜| 国产树林里野战在线看| 97资源站久久| 国产伦精品一区二区三区在线观 | 1024午夜激情男人的天堂| 久久性爱视频免费看| 婷婷99| 激情内射| 丰满人妻-区二区三区免费| 我想要啊 啊 啊| 婷婷丁香五月天综合东京热| 干B| 成人av福利在线观看| 久久久久精| 97在线视频网站| 啪啪91| 色噜噜人妻av中文字幕| 欧亚在线视频| 天美传媒麻豆一区二区三区国产精| 久久久久久久亚洲Av无码| 日韩AV色图| 人妻少妇精品| 超踫中文字幕| 免费视频97| 91麻豆va国产精品| 91bbbbbb| 免费视频无码| 日本影视久久免费| JULIA人妻风俗店中出电影| 啊啊啊啊免费视频| 久久美女福利是上海美女| 啊啊啊好疼| 中文字幕奈奈美被公侵犯| 九九热五区| 秋霞午夜成人福利片片| 欧美在线啊啊啊| 桃花色综合影院| 91偷拍欧美亚洲| 国产免费一区2区3区| 97国产色综合| 欧美Ⅴ性爱| 射丝袜高跟鞋99| 一级一性爱免费视频| 无码欧美有限公司| 国产女人和拘做爰视频 | 日本五区不卡| 女人被添高潮免费视频| 男人的天堂三级| 极品美女福利在线观看| 亚洲 日本 不卡| 九九热精品视频在线观看| 亚洲国产ⅴ高清在线观看| 图色综合网| 久久久一区二区三区三州| 狠插 制服 自拍| 秋霞色色影院| 噜噜噜亚洲精品| 国产亚洲美日韩Aⅴ中文字幕无码成人| 麻豆福利视频导航| 啪啪AV导航| 久久精品电影| 丝袜剧情| 久久 精品| 丁香五月天婷婷姐| 中文字幕乱码人妻二区三区| 欧美青青草视频| 亚洲精品视频在线播放| 天天看天天日天天操| 久久熟妇五十路一区| 高清无码在线播放网站| 天天天做天天天爱天天天爽| 亚洲第一页色| 免费人成在线观看网站品爱网| 久草资源在线视频官方总站日韩丝袜美腿 | 久久久久久99AV无码免费网站| 97精品97| 日韩人妻资源网| 97免费在线视频| 久久99精品国产| 天天色综合天天操| 午夜舔阴达高潮视频免费看| 欧美在线|亚洲| 欧洲色色| 婷婷激情五月天小说网| 操东北女人| 国产第11页| 色五月亚洲| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 欧美高清第一页| 久草婷婷| 无码色| 久久受www免费人成| 99热一区二区三区四区| 日逼五月天| 九热视频| 久草网站免费在线观看| 人妻精品视频一区二区三区| 蜜臀无码一区二区| 91撸色网 玖玖网 欧美| 99热最新| 乱伦图av| 日韩无码视频黄色| 亚洲欧美骚| 一区二区三区四区姦女| 亚洲色图在线视频| www.丁香五月| 国产精品极品美女视频| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 久草线上视频免费看| 91久久久久免| 一区二区三区欧美激情| 男人天堂黄片| A级片日韩欧美国产欧美视频精选观看| 国产丝袜一区二区三区| 人人操人人射人人干| 67194无码不卡| 日本久久天堂| 日韩不卡a级视频专区| 国产精品第一区第一页| 大香蕉78| 大鸡巴久久| 四虎免费在线播放| 日韩人人精品| 成熟熟女国产精品一区二区| 99操| 爱欲AV| 精品久久青青草| 成人AV在线电影| 亚洲中文日韩欧美大香蕉视频| 玖玖爱在线视频免费观看| 久久春色| 99久在线精品99re8蜜桃| 大香蕉色欲AV| 久噜噜| 91九色丨国产丨爆乳| 调教熟妇 久久久久久| 日本道久久综合色色| 午夜福利国产欧美日韩夜夜| www.99色| 摸奶性爱视频网站在线免费播放| 尤物网站91| 色噜噜狠狠色综无码久久合欧美| 国产馆| 精品黄色电影| 人人搞人人插人人操| 久久αⅴ| 亚洲不雅视频1区二区| 狠狠五月天| 欧美黑人熟妇精品91| 日本久久久精品电影| 亚洲素人综合| 超碰天天去日穴| 偷拍新久久| 色哟哟av| 久久久久白虎| 亚洲av性爱电影| 国产午夜精品理论片一二三区区| 肉动漫无遮挡h在线观看| 激情文学88| 五月丁香黄色网| 一区二区三区高清天码| 黑人操一区二区| 国产精品蜜乳AV| 日本护士高潮| 精品国产少妇高潮视频| 91 丝袜在线观看| 婷婷九月丁香| 97综合国产| 精品国产Av无码久久久伦古装| 天天综合网网欲色| AV乱伦国产| av在线播放国产一区| 五月婷网站| 爱av免费| 亚洲春色激情小说| 在线情色电影 91大| 青青草国产一区二区三区| 超碰偷拍| 色欲天天综合久久久无码网中文| 国内精品嫩模A∨私拍小视频| 国产高清自拍视频| 欧美东京热精品A∨| 五月婷婷色色| 色婷婷综合久久久久中文一区二区| 97国产天堂岛| 9精品久久久久| 日韩强奸av| 久久久精品视频免费观看| 91精品久久久久久77777| 超碰久久中文| 久久视频,这里只有精品| 97网色| 狠狠色伊人亚洲综合网站色| 日韩人妻无码专区| 天天天乱色综合全| 欧美精品系列| 变态乱伦伪娘灌肠一区二区| 日韩精品视频在线观看一卡二卡| 超碰爽人妻熟女Av| 欧美在线干| 天美精品原创av片国产| 国产精品自在自拍视频| 久9久| 久久女女| 精品国产91av一区二区三区| 尻女朋友一夜| 9 1超碰九色| 国产强奸乱伦xd| 婷婷综合五月天| 欧美91精彩| 久久久久久久97| 伊人久操| 亚洲精品一区二区免费在线观看| 中文字幕乱码在线| 五月综合婷婷久久网站| 日本伦理一区二区| 大干人妻| 大色综合网| 中文字幕少妇色 | 伊人五月天| 天天天天天超碰| 张柏芝国产一区在线观看| 国产色呦呦| 天天综合网在线| 99re28在线观看| 中文字幕一区电影在线观看| 精品视频专区| 97色伦97色伦国产欧美| 日韩精品一二三四| 91中出在线| 精品欧美А∨无码黑人大荫蒂| 久久久久久久久久久久久久9999| 人妻91少妇| 亚洲AV无码黄色强奸| 天天综合香 ld视频| avav青青草久久夜| 国产男女无套视频免费观看| 美日韩一二三区| 无码国产精品96久久久久孕妇| 色色婷| 无码人妻丰满熟妇区毛片| 密乳无码| 日本久久综合| 亚洲欧洲综合成人av一区| 蜜臀AV一区二区三区激情综合| 欧美第二页| www.久久| 狠狠爱大香蕉| 欧美精品人妻视频| 久久男人天堂| 99热色这里只有精品| 亚洲综合第一页| 久久久一区二区三区四曲免费听| 亚洲熟女诱惑| 精品视频久久久久九九九九9999| 九九九网站| 啊啊啊不要好疼视频| 青青草一区二区高清无码视频| 国产成人手机视频激情| 午夜AV污污污| 欧美精品日韩一区二区| 久久偷偷色综合蜜桃| 欧美极品性爱天天射| 青娱乐手机日韩在线视频| 国产欧美精选激情视频| 91久久久老司机| 久久精品亚洲成a人天堂| 人人九九精| 日韩中文字幕视频在线观看| 日日AAvv| 天天插天天操| 欧美综合网| 91色黑人少妇| 日本天天操| 国产AV天美传媒一区二区三区 | 九九拍拍精品视频在线播放 | 成人热久久精品| 伊人丁香五月婷婷| 日韩欧美中文字| 爱av免费| 色97干| 嗯嗯嗯,草死我| 久久久久久人妻一区精品色欧美| 日本顶级天天操狠狠操夜夜操中文字幕| 伦伦成年午夜免费视频| 亚洲高清欧美总合| 夜夜高潮夜夜爽高清视频一| 日韩性爱视频在线免费观看| 久久久国产护士丝袜美腿一| 爽爽淫人网| 密乳AV免费观看| 国产AV线| 99啪| 亚洲少妇综合在线播放| 亚洲丝袜诱惑| 日韩图区| 男人的天堂不卡一区二区 | 欧美伦乱爱| 亚洲精品国产精品乱码不99| 欧美91精品国产自产| 美骚妇av高清在线| 婷婷激情综合网| 69国产对白刺激| 亚精品无码毛片一区二区三区| 五月综合久久| 手机在线视频国内精品| 精品久| 一区二区三区色综合| 91蜜桃婷婷狠狠久久综合9色| 久久性爱视频99| 午夜操操操| 91色综合激情| 超碰狠狠操| 乱伦av麻豆| 日本精品五区| 天美传媒精品一区二区三区| 青青草黑寡妇男人天堂| 首页亚洲国产高跟丝袜诱惑视频| 精品无码久久久久久国产浪潮| 亚洲区小说| 亚洲吊色| 一区 欧美 日韩 麻豆| 欧美极度丰满熟妇hd| 99无码狠狠久久| 热热色青青草| 粉嫩AV一区夜夜嗨| 欧美性天天影视| 国产精品自在自拍视频| se吧提供国产乱老熟视频胖女人| 色噜噜国产精品视频一区二区| 国产精品视频在线播放 | 国语对白露脸XXXXXX| 成人情色综合网| 久偷拍| 看看小穴| 99热啪啪| 免费毛片在线播放| 熟妇xxxxx性春色| av黄图片在线观看| 久久久日本电影| 呦女网站| 国产青青美女玩逼视频| 99xav| 91丝袜美女| 激情五月天综合网| 四季AV综合网址| 精品欧美日韩在线观看| 亚洲 欧美 中文 日韩超碰 | 99蜜桃臀亚洲成人在线观看| 欧亚综合一卡二卡中文字幕| 久久超碰国产一区二区三区| 日本色日夜干| 亚洲资源一区| 上特色A在线| 日韩欧美久久婷婷网站| 色噜噜婷婷| 成年人一级黄色毛片大全在线观看| 四虎国产精品永久入口| 大香蕉懂9| 免费视频观看60秒| 精品女同一区| 蜜桃臀一区二区三区久久| 亚洲综合骚逼| 97国产综合欧美| 91 综合 色| 日欧毛片久久| 在线观看午夜婷婷久久久久清性观看| 大香蕉综合在线| 色五月第四色| 欧美激情色婷婷花野真衣一区二区 | 亚熟在线| 激情图片亚洲色图| 日韩99神马视频播放| 少妇同性| 欧美一区二区三区黄色影视| 丝袜色综合| 97久久精品不卡| 人伦四五区| 久久99九九九九6666免费观看软件| 大香蕉中文201| 超碰色老头| 亚洲欧美色图| 日韩欧美aⅴ综合网站发布| 18禁精品网站在线看| 18禁网站在线播放| 可能人人看人人摸| 六月激情婷婷| 国产欧美日韩女同性恋ww喷水精品| 99这里有精品| 久久久精品国产亚洲伊人| 草b在线| 无码视频一区二区| 美女91av| 亚洲97在线观看| 国产精品久久久久久久无码AV| 不卡中文字幕aⅴ在线| 26uuu性| 色综合色欲色综合色综合色综合| 久久丁香五月天| 99re6久热只有精品6在线直播| 欧美 青青草| 骚妻少妇精品性色无码四色A V| 南澳成人一级片在线播放| 欧美91在线| 再深点灬舒服灬太大了添视频| 人人看人人摸人人色| 久久久无码国精品无码三区三区| 夜夜操夜夜爽夜夜高潮| 91激情综合| 亚洲情欲| 亚一综合久久久久久久久久| 思思热在线视频精品| 99国产精品免费| 精品丰满熟妇人妻一区| 蜜臀久久99精品久久久| 搡老女人老91妇女老熟女| 人妻熟妇久草在线| 在线看免费无码AV天堂的| 亚洲s色图| 久综合国内精品自在自线| 91熟女丨老女人| 99r九九| 噜噜噜久久亚洲精品色情| 一块操欧美| 亚洲精品国产精品乱码不99| 日本天天吊| 亚洲丝袜99| av激情亚洲五月天| 日本亚洲熟女视频| 91总综合网| 熟妇色99| 欧美国产伊人久久久久| 91丝袜美腿网站| 日韩本不卡视频在线观看| 在线 制服丝袜中出 人妻| 在线观看精品国产免费| 欧美日韩精品青青| 黄色av网站在线播放| 丝袜av一区二区三区| 色综合网1| 国产丰满少妇久久久精品影院| 天天干夜夜操一区二区| 7777奇米影视久久| 骚货人妻偷情自拍在线视频| 亚洲第一页综合在线| 自怕偷自怕亚洲精品| 高潮内射在线| 操一对老熟妇爽上天视频| 逼操网站| 日韩三级久久久| 91综合网在线| 亚洲欧美日韩精品久久久一区二区 | 亚洲av在线免费观看| www.人人摸在线视频| 99在线免费公开视频| 天天综合网国产| 麻豆 美女 丝袜 人妻 中文| 色婷网| 色香91| 国产性久久久| 欧美色自拍| 欧美性爱免费短视频| 综精品久久久aaaa| 国产精品美女| 97免费在线视频在线观看| 蜜臀99久久国产| 日本午夜福利影院| 亚洲性刺激| 国模精品一区二区三区苹果色戒| 久久久久久久久久久久欧美日| 91搞逼视频| 久久婷婷亚洲欧| www.久久制服糖| 久久AV无码1区2区3区| 人妻偷拍一区二区三区| 区一在线观看| 9色国产精品一区粉嫩| 亚洲色堂免费视频| 老熟女乱伦片| 成人精品视频一区二区| 日本乱人伦片中文三区| 日本一二三高清| 亚洲欧洲日本精品中文a∨| 大香蕉免| 国产偷拍网站| 一区中文字幕二区日韩| 黄色片A级一区二区三区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产一区免费午夜视频| 欧美论理片| 久久av成人无码免费| 丝袜色综合| 69精品人人人人| 亚洲欧美91| 一道本久久棕合爱| 一级性爱视频免费在线| 9999九九九久久久| 亚洲国产高清福利视频| 中文字幕1区2区| 天天综合在线4| 四虎国产精品永久在线囯在线| 丝袜喷水在线| 嫩草影院在线观看精品 | 色婷婷在线视频精品导航| 中文字幕人成乱码熟女香港| 中亚黄色三级大片| 午夜男女爽爽爽在线视频 | 91日韩在线| 91视频综合网| 成人一区二区三区四区| 激情四射五月天| 七月婷婷综合| 久草在| 一块操欧美性爱| 91色综合| 新精精品久久精品| 亚洲精品亚洲人成在线麻豆| 精品一区二区三区麻豆| 欧美熟妇人体| 92人人操人人| 操逼内射干逼白丝91| 91网18| 国产97亚洲| 亚州精品丝袜-不卡成人免费| 搡老女人老妇女AAA一VU麻豆| 欧美色图在线视频少妇| 九九AV| 成人26uuu| 欧美第五页| 伊人青青一区成人视频在线观看区| 中文字幕乱在线伦视频中文字幕乱码在线 | jk白丝没脱就开始啪啪| 骚鸭AV| 久草婷婷| 大香蕉五月天| 国产a片操逼| 99久在线精品99re8热视频在线| 青青网三级视频| 一本一道波多野毛片中文在线| 一二三区精品视频| 亚州男人的天堂| 日韩一级二级| 97人人操人人摸人人爱| 性无码专区2020| 国产丝袜一区二区三区| 亚洲影院小综合| 屌逼麻豆| 国产精品久久久久中文字幕| 中文字幕熟女人妻丝袜| 天天在线91| 裸模AV女优| 99久久婷婷国产综合精品草原| 巨爆乳一区二区爆乳区| 啊啊啊啊啊啊啊啊在线观看| 免费超碰97久久| 激情av| 艹少妇网站| 20cm女自慰在线日韩欧美| 97中文字幕一区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲操逼视频网站| 日韩无码操逼片| a'v在线资源| 欧美三四五区| 97在线观视频免费观看| 嗯嗯嗯嗯啊啊啊好紧好大| 国产欧美成人第一页在线观看 | 熟女精品一区二区三区| 乱论91| 免费无码国产精品v片在线观看| 日躁天天爽爽| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 欧美性视频二区三区| Aa东京男人的天堂| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 9999亚洲精品| 欧美熟女操屄| 国产精品不卡高清在线观看| 亚洲天堂第一页| 操逼视频亚洲| 亚洲精品乱码线路中文字幕| 国产人妖的免费的视频| 国产乱色国产精品免费视| 男生通女生屁股| 天天享受天天看| 91新在线欧美| 91在线免费观看处女| 成人欧美一区二区三区黑人一| 中文字幕精品区先锋资源| 97日韩| 99啪啪| 国产精品久久伊人| 午夜寂寞欧美| 九九综合久久| 色爱国产| 国产一级αv免费看片| 日本亚洲熟女视频| 国产呦精品一区二区三区下载| 精品国产人成在线| www网站黄| 国产精品视频白浆免费| 欧美亚洲日本视频久久久| 欧亚性爱视频免费看| 亚洲色图欧美视频| 图片区小说区| 国产亚洲精品自在线亚洲情侣| 午夜福利视频在线一区| 青娱乐久久艹| 人人做人人妻人人夜视频| 人人摸人人干人人拍97| 日韩av一级黄片| 色情综合| 中文字幕一区 二区三四五 区日 日骚| 日韩精品区二区三区不卡| 清清一区二区三区四区不卡视频| 亚洲男人的天堂一区二区| 夜夜狼人妻| 夜夜骑天天燥| 亚洲91综合| 天美传媒精品久久视频| 日本男人天堂| 亚洲不卡三级手机播放| 精品国产乱码| 无码视频黄色网战| 99操逼| 免费久久精品麻豆一区二区av| 久久精品国产精品亚洲艾通辽熟妇 | 999久久久免费精品国产牛牛| 国产精品ⅴ无码大片在线看.| 丰满岳乱妇一区二区三区| 人人摸人人干人人拍97| 天天操天天插| 一区二区三区四区五区高清无码永久视频| 亚洲91网。| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97 九色| 九九九只有精品| 国产白丝精品在线观看| 99老司机精品视频在线观看| 乱伦Av网| 四虎AV在线观看| 日韩钢筋无码高清啾啾啾| 密臀国产在线| 神马九九| 日va操| 美女尤物福利视频| 亚洲欧美一区二区不卡视频播放| 欧美精品亚洲精品日韩传电影| 日本不卡一区二区| 操逼逼中文字幕| 亚洲国产欧美中日韩成人综合视频| 久久熟女人| 久久精品视| 少妇一区二区三区| 精品在线观看视频在线| 日韩乱码av| 久草毛片| 91色人妻| 99操视频| 九九热精彩视频| 啪啪自拍九九综合| 亚洲AV无线| 黄色成品网站| 亚洲男人天堂网站| 性开放中文AV高清无码免费看| 蜜臀国产AV中文字幕| 亚洲揄拍网| 精品黄色电影| 天天看,天天做| 操美女人妻| 欧美色图20p| 精品国产乱码久久久久久口爆网站| 冬京热男人的天堂| 天天欧美97| 亚洲精品国产无码高清| 强奸少妇AV导航网| 色97欧美| 高清无码久操视频| 国产精品一二三区福利| 亚洲涩图欧美| 国产欧美精选自拍一区| 久久久工口| 99999久久精| 亚洲 欧美日韩 另类| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 8050无码八戒| 91电影色诱| 亚洲色图欧美激情| 超碰人人色| 欧美日韩精品久久久久东北老熟妇| 三级AV入口| 婷婷99狠狠| 久久婷婷一区| 亚洲成人福利电影免费| 日韩无码AB| 91被操| 久久超碰久| 精品对白久久不卡| 无码国产精品午夜不卡(| 97视频在线观看网站| 91精品久久久久五月天精品| 亚洲国产综合久久久性感熟妇| 午夜精品久久99蜜桃的功能章节| 丁香色色网| 亚洲交换| 一块操欧美| 欧美亚洲韩国视频十五区| 亚洲黄色网址视频| 青青草成人视频在线观看二区 | 亚洲图片偷拍视频区| 死我十八禁| 五月天婷精品激情| 懂色av中文字幕| 影音先锋中文字幕日本好一区二区| 日韩三级网址| 国产午夜福利电影免费在线观看 | 蜜臀网址在线| 99视频在线| 99热欧美| 色色色欧美| 99久久99九九99九九九| 久久婷婷视频| 国产9区| 99超碰色| 蜜乳成人AV| 性生活久久久久久久久久| 婷婷色色五月天福利| 欧美一二在线| 天天草夜夜草高潮片| 免费亚洲国产精品久久一区| 亚洲成人久久一区二区| 97国产精品久久久久| 欧美性生活综合| 东京热,男人的天堂| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 天天综合色| 午夜小电影在线插入淫高潮| 偷拍亚洲高清图片| 日日插夜夜| 中文字幕午夜精品久久久| 91精品黄在线观看| 91美女视频| 97视频7| 岛国网址国产 | 丁香啪啪| 亚洲?V高清一区二区三区尤物| 日本久操视频| 内射夫妻三片| 亚州欧美总和| 五月天激情小说网| 伊人国产成人av网站| 国产美女口爆吞精| 色噜噜人妻丝袜a∨先锋影| 偷窥自拍亚洲| 一道本东京热加勒比一区二区三区 | 人妻99p| 999综合网| 欧洲精品久久| 激情五月婷| 精品国产无码中文| 中文字幕午夜精品久久久| 六月丁香网| 欧美性爱免费短视频| 怡红院亚洲怡春院av| 高潮内射在线| 亚洲国产尤物yw在线观看| 色综合久久夜色精品国产天堂| 99热99在线| 伊人五月天婷婷| 亚洲综合有码| 国产一区麻豆免费观看| 日本精品一区二区中文字幕| 亚洲欧美另类小说| 欧美91精彩| 欧美拳交在线播放| 大黄片做爱的大的| 亚洲天天操| 欧美91久久久久| 中文字幕日产av人| 亚洲 国产 精品一区| 91丝袜美女视频| 国产自产22区| 色噜噜国产在线| 性爱1区| 强奸乱伦AV一天堂网| AV女资源| 青青草五月天| 五月丁香成人网| 最新中文字幕精品在线| 99国产精品| 婷婷探花久久精品一区| 欧美九九99久久精品| 婷婷99狠狠躁天天躁| AV一区观看| 亚洲精品九九九九九九| 久久免费精品96| 97超碰jingpin| 大香蕉黄色一区| 欧美1区二区三区公司| 人妻少妇精品| 欧美线天码中字| 91爱看| 97精彩视频网站| 亚洲成人久久美女| 变态乱伦伪娘灌肠一区二区| 91丝袜美女视频| 另类老少妇| 日韩9999| 欧美中文字幕男人天堂久久精品| 入口操逼网站| 免费人成在线观看网站品爱网| 欧美激情久操网| 亚洲 欧美 日本 国内 首页| 久久熟女久| 久久久久一本一区二区青青蜜月| 五月天偷拍| 爱av免费| 岛国激情视频软件| 欧美激情激情xxxx欧美专区| 欧美一区二区| 综合欧美日韩在线| 久久超碰、| 日本一区二区电影网站| 五月丁香激情综合网| www.av在线观看| 在线观看AV片| 999亚洲国产视频| 操婢日韩| 新久久AV| 国产一级特黄大片处女| 中文字幕一区二区三区四区在线视频| 夜夜爽夜夜爽| 屁股久久久久久久久久| 欧美瑟综合| 夜夜免费视频| 加勒比久久av| 人妻少妇三级| 青娱乐手机日韩在线视频| 69人妻精品丰满熟女区| 天天享受天天看| 精品视频专区| 天堂麻豆天美| 热久日综合| 最新av在线| 欧美亚洲国产日本在线,久久精品国产| 免费9 1久久| 日韩丝袜高跟制服在线观看| 上床不卡网站| 欧美色图91p| 欧美日韩人妻少妇 一区二区三区| 久久精品中文字幕女同| 精品人妻一区春色| 四虎免费视频| 婷婷五月天色网| 97Ai亚洲| 亚洲天天综合| 国产乱伦亚洲色图高清无码| 伊人一区二区在线播放| 国产 日韩 欧美高清| 亚洲国产尤物yw在线观看| 国产精品婬乱一级毛片彝族| 狠狠色狠狠色狠狠五月| 人人扣人人操| 天天摸,夜夜摸| 欧美色图片91| 60秒免费小视频| 亚洲骚男同com| 加勒比99999| A级片一区| 中日亚韩免费视频| 国产男女无套视频免费观看| 91碰碰碰| 欧美五区| 人妻丝袜肏逼| 强乱老妇中文字幕| 亚洲国产综合图区中文字幕| 欧美一区二区三区互相| 国产女乱淫真高清免费视频| 欧美啪啪女女| 欧美另类色图片| 天操老女人| 抽插一区二区视频| 黄色无码高清黄色无码网站| 国产精品久久久久久久久久梁医生| 国产浮力影院第1页| 激情五月天色色| 少妇人妻精品| 狠狠干2020| 绯色一区二区三区不卡少妇 | 在线洲亚线| 欧美色图20p| 上海一级黄片| 高清无码网址| 性爱AV天堂| 骚货操死你| 操人人| 亚洲精品国产精品乱码不99| 天天操天天射青青草| 欧美78| 91少妇人妻| 日韩黄片视频试看| 99在线免费观看| 97公开久久| 久久久精品网| 国产精品久久久久久亚洲色欲| 亚洲色图 综合| 免费成人在线熟妇网| 久久啊啊| 日韩黄色av中文字幕| 五月丁香啪啪啪| 五月天久久婷婷亚洲| 九九热av| 天天摸夜夜添无码小视频| 3571色综合一区二区二区| 另类 综合 日韩 欧美 亚洲| 麻豆91熟妇人妻中文字幕茄子 | 大香蕉视频一二三区| 欧美黄片视频在线观看免费| 日本日日色视频| 麻豆一区二区AV天美| 亚洲国产成人福利在线观看| 天天日天天爽| 大屁股国产在线视频| 夜夜欧美 | 国模不卡| 中文字幕乱碼在线| 美女啊啊啊啊啊啊| 在线国产福利网址导航| 97一区二区蜜臀| 好湿好紧视频| 欧美一区二区三区蜜桃| 九九久久久九九| 黑人在线91| av日韩在线观看电影| 麻豆伊人网| 国产精品 视频| 亚洲婷婷五月天| 人妻熟女一区二区| www.亚洲成人一区| 97爱免费插| 日曰骚久久精品| 国产97视频免费观看| 欧美老妇女内射网址| 翔田千里AV无码秘 三区| 久久久九九网站| 欧洲性人爱视频| 国产精品999aaa| 亚洲无套久久嗯嗯| 9久久精品| 国产精品午夜高潮呻吟久久av| 亚州欧美一区| 黄色大片免费在线|