久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|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
返回資訊列表
色97| 欧美天天拍| 91性高| 国产精品国产自产高清AV| 国产一级久久久| 影视综合无码少妇| 日韩无码第3页| 激情文学网伊人| 日韩中文字幕2020| 人妻天天爽夜夜爽爽| 婷婷伊人五月| 夜夜性| 欧美狠狠操| 美女被艹尤物视频| 最新av中文字幕高清| 久久精品女同亚洲女同13| 五月婷在线| 国产97在线 | 亚洲| 欧美熟女操屄| 蜜乳视频网站| 日本熟妇一区二区三区| 高清在线不卡一区二区 视频| 高清肉丝中文无码| 欧美欲色| 97精彩视频网站| 欧美顶级黄片AAAAA在线免费看| 日日骚AV| 啊啊啊啊好多水| 日韩欧亚中文在线| 中文久久96| 六月婷婷综合| 亚洲乱码精品一区二区| 亚熟hd视频在线| 色婷五月| 日韩无码成人电影| 精品国产精品一区二区| 欧美大香蕉专区网| 人妻精品一区二区在线| 97人妻免费中文字幕| 女人综合网| 欧美激情高清性猛交| 91爰爱欧美| 动漫av中文| 日本A级视频| 久久久久久久78| 四虎影库国产精品免费| 天天夜夜久久| 啊嗯嗯啊好大好爽| 狠狠2050在线观看| 青草伊人网| 色呦呦呦在线观看视频| 啊啊啊轻点在线观看| 色丁香五月婷婷| 国产日韩欧美中文在线播放 | 色999;丁香五月| 日韩乱码Av| 五月婷色| 亚欧成人综合影院| AA级电影三区| 妇女性内射冈站HDWWWCOM| 欧美欧美啪啪视频| 久久精品视频久久久| 欧美韩日精品99综合| 旡码电影特区| 久操大香蕉手机视频在线看| 加勒比在线视频一区二区三区| 热热色91| 伊人久久亚洲色欲综合网站| 日日橹狠狠爱欧美超碰| 中文字幕一区 二区三四五 区日 日骚| 一本精品日本在线视频精品 | 中文字暮97| 青青操在线视频| 欧美日综合| ji熟女.com| 蜜乳AV免费观看| 国产97视频| 久久久久久性爱免费视频| 97在线欧| 亚洲情色欧美| 超碰色综合| 热热色综合网| 亚洲中文字幕av | 日韩特一级久久| 狠狠干2020| 97超碰精品成| 天久久久噜噜噜久久国产精品爽爽| 男人的天堂com| 老熟女91视频| 内射老妇BBWX0C0CK| 羞涩视频| 成·人免费午夜在线观看| 看全色黄大色大片免费视频| 人人摸.人人色| 国产中文精品一区二区在线观看| a在线视频免费观看| 麻豆国产精品午夜视频| 妺妺跟我一起洗澡没忍住| 玖玖综合.com| 久久这里只| 先锋激情∨在线视频播放| 69一区二区三区 | 最新av中文字幕高清| 嗯啊视频免费在线观看| 女性91网站| 一级一性爱免费视频| 26uuu久久| 超碰综合97在线| 99ri视频| 中文字幕天天天天天| 91精品电影18| 欧美亚洲厕所精品偷拍91 | 9久综合网| 久偷拍欧美日韩三区| 91综合中文字幕| 韩国黄片aaaa| 91久久久老司机| 超碰天天去日穴| A 天堂在线观看视频| 少妇500双飞99| AⅤ片水多多| 欧美后进式| 校园春色亚洲无码| av一区二区三区不卡| 2020中文字幕在线观看| 91老熟妇| WWW4虎| 风月影院男女十八禁| 91在线精品一区二区三区| 青青草密桃在线播放| ji熟女.com| 亚洲性爱电影| 色九九九综合| 国产 无码 一区二区| 久久天天性久久伊人| 天天拍夜夜| 德国一二三不卡| 国产熟女乱论| 国产精品播放| 亚洲视频一二区| 乱伦日本中文自拍| 亚洲精品 欧美精品| 操逼操网| 国产高清在线观看欧美| 国产九九九九九九| 麻豆天美国美国产| 天天看片青娱乐| 操逼网站地址| 无码人妻一区二区三区色欲aⅴ| 校园春色中文字幕AV| 六月丁香久久| 黄在线| 啊啊啊 在线| 2020国产精品| 国产欧美后入| www.av在线观看| 久久久96| 91天射| 日韩色欲久久一二三四区| 欧美高清色| 超碰97首页| 日本大香蕉| 九热大香蕉| 欧美草草高清日韩视频| 激情第四色| 亚洲成人免费中文字幕| 国产精品一区二区久久精品| 亚洲色91| 视频国产欧美在线播放| 人人妻碰人人免费| 免费精品人妻一区二区三| 俄罗斯及免费在线看| 综合少妇网| 无码粉嫩白虎一线天b区| 国产suv精品一区二六| 五月开心久久AV官网| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 97高清啪啪| 91xingse| 97伦乱| 玖玖综合网| 日本精品网站在线中文| 色色色天美视频| 亚洲日韩精品在线播放| 亚洲色图a| 久久久久久久久久久999| 欧美72网页| 18精品一二区| 7777奇米影视久久| 91九色精品熟女内射| 日韩av乱伦| 亚洲色五月| 日韩女优在线| 久久αⅴ| 国产成人无码久久精品| 传媒免费一区二区三区| 少妇天堂| 亚洲天堂7777| 国产精品熟女九九九| 99最新日韩偷拍视频| 大肥女高潮bbwbbwhd视频| 日本黄色大片一级视频免费麻豆| 99亚洲精品| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美精品四区| 无码九九九九| 欧美91视频| 大香蕉免费中文| 97超碰中文| 欧美最婬乱婬爆婬性视频| 狠狠操狠狠操操| 全球成人中文在线| 精品97精品97| 国产精品ww久久| 久久老子无码午夜伦不卡| 青青草大香蕉在线视频| 大香蕉www.超碰| 天堂国产AV| 国产1024在线播放| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 国产AV超爽| 成熟熟女国产精品一区二区| 伊人久久综合影院| 蜜桃臀一区二区三区久久| 久久国产性爱| 青青草原伊人网| 自拍鲍鱼一区在线高清观看免费| 青青草无码视频| 亚洲精品无码久久AV| 啊嗯嗯啊好大好爽| 怡红院视频在线| 激情抓乳插进去啪啪啪日韩 | 97中文字幕一区| 亚洲综合五月天婷婷丁香| 极品销魂美女一区二区| 91在线国产后入风骚翘臀美女素人| 性爱精品一区| 欧美人与动性人交a| 久久这里都是精品| 天堂无码精品国产久| 蜜桃狠狠色伊人亚洲综合 | 青青久操| 亚洲天堂女优在线| 91精品丝袜在线观看| 久久9久| 97精品久久久久久久| 强奸乱伦AV网站| 少妇激情AV| 91 丝袜在线| 亚洲免费人妻在| 欧美姓爱综合网| 日韩三四五区| 精品人妻av在线播放| 色欲久久99国产精品久久久久久| 91激情综合| 夜夜狼人妻| 欧美日韩999| 麻豆视频国产一区二区| 亚洲色棕合| 日本999精品视频| 五月天开心网| 日本 欧美 国产一区| 亚洲av青草久久一区二区| 人人妻天天做天天爽| 91爰爱欧美| 欧美少妇一区二区三区| 热天堂一区二区| 久久曰曰| 97色色色| 精品丰满人妻一区二区三区免费观| 蜜乳Av成人片网站| 国产区91柔拿会所技师| 三级片网站在线播放| 免费一级精品啪啪视频| 无码高清操逼网址| 亚欧美综合网| 日本操逼视频在线| 日本国产亚洲一区在线观看| 久久成人国产精品| 超碰99在线观看| 无套内射性感少妇视频| 五月天婷婷色| 亚州操操穴网| 91国产美女丝袜足交精品视频| 色九九九综合| 国产农村妇女毛片精品久久| 欧美中文综合| 操逼网站网站| 小视频玖玖| 在线人人人人人人精品超| 思思热免费视频观看| 91久久久久久| 宗合情欲网| 96国产污污污丝袜| 蜜臀99久| 国产探花精品在线| 成人在线日韩| av72网| 国产一线二线三线av| 女人香蕉久久毛毛片精品| 国语少妇精| www.91理论| 久久麻豆一区二区| 亚洲自拍青操视频| 欧美亚洲素人制服精品| 亚洲中文字幕97久久精品少妇| 亚洲日韩av一区二区三区百合| 亚洲 欧美 小说| Julia Annxxxxx| 中出欧美| 欧美色图天堂在线| 91色人| 黄片视频观看| 久久综合99| 超碰69| 成全动漫视频观看免费下载| AV 少妇 人妻 偷拍| 夜夜夜夜爽| 可免费观看的av毛片中日美韩| 久久精品国产亚洲AV无码电影| 黄页18禁| 在线日韩日本亚洲国产| 五月婷婷色| 中文 人妻 制服| 高清无码 国产精品| 色综合中文字幕不卡| 色网在线| 久久↗↗| 日韩一二三区| 久久久亚洲Av| 四季AV综合网址| 好爽视频在线观看视频 | 香一区二区三区| 动漫片子网站3黄| 九久精品| 无码视频黄色网战| 蜜臀无码一区二区| 亚洲国产一区二区三区在线 | 日本人妻中文字幕| 又黄又粗又硬又长又大| 精品中文字幕一区二区l - 百度| 日日骚av| 日本久操视频| 一区操逼日比视频| 国产深夜福利| 国产欧美日韩在线不卡第一页| 好爽视频在线观看视频 | 国产成年女人免费视频播放a| 久污| 欧美九9 9 9| 欧美不卡五十路| 久久有码| 久久婷婷国产一区二区色| 亚洲 欧美 制服 另类 自拍| 亚洲色图第四色| 狠狠狠狠狠| 伊人影院综合是一个与深夜成人在线| 97免费在线观看| 欧美天堂亚洲电影院一区在线播放 | 青青草自拍视频在线播放| 国产精品无码久久久久2028| 92一区二区| 奇米狠999| 超碰无码五月97| 国产性刺激| 亚洲第一无码播放立川理惠| 久久精品人人做人人看| 97精品久久| 97久久久久久久久久| 伊人影院在线理论播放| 天天影视综合色| 东京热激情视频一二三区| JIZZJIZZ国产精品喷水| 国产小黄片在线免费观看 | aaaa黄片| 福利色色| 日本综合色图| 亚洲人妻av| 激情五月综合网| 欧美性爱在线无码| 99九九精品| 午夜天堂啪啪| 日本一区二区电影网站| JULIA人妻风俗店中出电影| 丁香五月婷婷啪啪| 五月丁香影院| 在线视频一区二区传媒| 国产二区三区粉嫩在线| 大香蕉综合在线| 久久伊人网视频一区二区三区| 猛交交| 欧美大香蕉在线观看| 人妻在线臀日韩| 麻豆一区二区三区精品| 久操免费视频| yw尤物av无码点击进入麻豆| 国产成人99久久亚洲综合| 久操com| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 67914亚洲精品| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲自拍一区夜夜操| 狠狠色一区二区中文字幕| 亚洲色图伊人网| 国内伊人久久久久久网站视频| 操逼日批| 久久精品亚洲婷婷| 亚州国产成人精品女人久久| 欧州91高潮| 啪啪免费| 国产精品色哟哟| 青青草日韩免费观看高清在线| 国产尤物在线三区| 欧美日韩另类在线播放| 久久国产精品91| 日韩综合色网| 亚洲囯产精品女人久久久| 欧美一级A片在线看视频性色| 老鸭窝亚洲毛片| 欧美色图小说综合| 免费一级特黄特色大片在线观看看| 97干在线视频| 天天碰久久入| 国产黄色av大片网站| 国产不卡中文字幕免费avi| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚洲文学偷乱拍啪啪啪啪| 亚洲一区二区久久久久| 97久久精品国产| 天天综合91| 十八禁电影伊人网| 激情啪啪拍91| 一二区在线观看视频| 奇米狠999| 物业黑人 AV一区| 18禁免费视频| 综合网亚洲1| 亚欧Av| 青青草女人天天干| 欧美亚洲中文字幕| 精品免费囯产一区二区三区| 国产在线不卡导航| 国产精品第一区第一页| 色香阁在线| 日本久久女同性恋视频| 欧美日韩中国x| www.色操逼| 欧美第二页| 一区二区三区日韩欧美 | 亚洲 se图 欧美电影| www.大香| 亚洲动态色图| 97bbn| 97色碰| 日本一区二区三区午夜观看| 精品大全99999| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美人妻二区三区| 国内毛片国产专区二| 欧美黑人与女人91| 嗯嗯啊啊好大好爽| 国产成人资源| 免费a在线播放v| av中亚| 天天干1区2区在线| 99色婷婷中文字幕乱色| 99久久久99久久91熟女| 100啪啪视频大全| 97欧美资源| 激情婷婷丁香| 亚洲熟女乱综合一区二区三区| 天天操女人| 日本123区操B视频| 操逼片中文| 精品久久久av无码免费| 少妇淫妇久久久久久久| 亚洲第一男人天堂| 乱操9999| 96久久久精品| 精品人妻视频一区二区在线播放| 欧洲亚洲人人爽爽视频| 91激情综合| 中文字幕丝袜人妻| 嗯嗯嗯嗯啊啊啊好紧好大| 九九热超碰| 天天综合精品| 999狠狠综合| 色小视频蜜乳| 探花激情视频| 性色av网站| 亚洲人综合19| 亚洲天天操| 日本成人免费一区二区三区| 99精品久久久久久久婷婷| 国产精品农村妇女| 久久宗合97| 99久久免费看精品国产一区| 久久风骚城市人| 一区二区不卡免费| 天躁夜夜躁2021| 男人天堂2030| 国产高清自拍| 国产精品日韩在线一区| 久久伊人亚洲AV无码网站| JIZZJIZZ亚洲女人被躁| 丰满美女一级毛片在线播放| 久久精品国产亚洲妲己影视| 亚洲一级性爱视频免费看| 亚洲天堂人妻熟妇视频| 91精品丝袜久久久久久| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 亚洲、日韩、综合、另类| 久久久久中出| 国产成人主播| 丝袜加勒比| 啪啪啪亚欧美视频| 久久亚洲影院一区二区| 99综合自拍| 欧美亚洲宗合色性图| 色眯眯av| 最新一二三区视频| 久久一二三四不卡| 天堂精品| 久久夜夜| 国产AV久久野战精品| 亚洲国产一区二区三区四区国产| 女优视频第10页| 人人澡综合涩| 激情婷婷五月天| 综合久久婷婷| 香港成人一级视频在线青青草| 免费看污网址| 日本Suv精品一区二区| 肉动漫无遮挡h在线观看| 偷拍三区| 五月天伊人| 江都AV在线| 人妻激情在线视频| 天天日天天看| 偷拍亚洲熟女视频播放| 五月天色色色| 香港成人一级视频在线青青草| 亚洲精品蜜桃久久久| 亚洲色宗合| 二男一女成人A片| 私色综合网| 蜜屁Av| 东北女人高潮视频| 91艹B视频| 亚洲,欧美,春色,另类| 97精品久久久久中文字幕| 美女好片色日本| 人人做天天爱| 97天天搞在线| 九九热午夜欧亚国产视频| 国产日韩中文字幕欧美| 无码人妻一区二区三区色欲aⅴ| 天天躁日日躁XXXXYY| 久久最新视频免费观看| 熟妇人妻丰满久久久久久久无码| 日韩免费大片一级播放| 亚洲成人一二三区| 国产精品久久泡妞网站| 99久久精品国产高潮| 美女久久久久久久| 天天干18禁| 精品毛片久久久精品毛片| 殴美日韩m| 大香久久| 丁香激情五月| 中文字幕第7页| 凹凸视频在线观看伊人| 一区二区三区四区姦女| 亚洲情色 欧美| 国产乱伦性爱AV| 一区二区三区色综合| 亚洲人久久久久日| 自偷自拍的亚洲视频| www被窝色com| 日韩人妻中文视频| 亚洲日韩青青草色月| 综合色好色| 99热综合| 九九九九AV| 欧美性爱精品一区二区| 蜜臀av网址| 搞中出久久| 亚洲美女30b| 伊人网青青| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 家庭乱伦性爱av| 亚洲熟久久| 熟女五十路一区二区三| 天天综合网1| 91模特在线观看| 亚洲国成人情色好看电影| 偷拍综合网| 破苞ⅩXXX性无码动漫无码| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 午夜激情成人在线观看| 亚洲黄日韩无码专区| 欧美激情性爱视频网站| 亚洲AV不卡在线观看尤物| 蜜乳成人AV| AV在线资源| 午夜男人av| 国产乱子伦一区二区三区免看| 密乳无码| 国产人妻久久精品一区二区三区| 午夜免费视频1000| 蜜臀Av一区二区三区| 67914亚洲精品| 一区二区乱码福利| 欧美大片一区二区三区| 3D污黄视频在线观看| 啊啊啊97视频| 日韩乱伦视频| 校园春色五月天| 亚州色站 日韩电影| 密乳无码| 人人妻人人澡人人爽久久av| 色月天AV导航| 一区二区三区黄片免费观看| 少妇激情一区二区三区视频| 欧美大码在线视频| 精品国产91av一区二区三区 | 加勒比大香蕉视频在线| 免费日韩黄片| 日韩欧美~中文字| 东京热亚洲一区二区| 99e久久国产精品| 中字一区| 艳美熟妇先锋一二三区| 欧美黑人精品在线播放| 五月天伊人网| 97精品97久久| 青青草视频久久| 国产宅男宅女在线观看| 东京热综合久久一区二区| 色天使大香蕉| 综合色啪| 人人操人人插人人摸人人干| 欧美天堂在线| 91日产欧美| 熟女在线视频| 欧美日综合| 可以在线观看的黄色网址| 78精品| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 97日视频| 天天爱天天韩国日本牛牛牛牛 | 97日韩欧美亚洲| 在线 亚洲 网爆 自拍| 人人摸人人叼| 中国少妇XXXX做受| 精品人妻一区二区三区四区不卡在| 亚洲熟女一区| 91新在线欧美| 91精品电影18| 色九九综合| 色呦呦呦在线观看视频| 免费久久一级毛片大黄| 欧美性91| 我爱操| 伊人久久亚洲中文字幕不卡| 91狠狠综合久久久久久| 激情网五月天| 日韩去日本高清在| 久草视频观看视频在线| 亚洲影院无码在线| 亚洲国产精品成人久久蜜臀| 玖色av| 丝袜天堂网| 熟妇高潮精品一区二区三区下载| 高树玛利亚无码流出| 中文字暮97| 天天日天天爽| 欧美很很操视频| 五月天婷精品激情| 夜嗨影院| 欧美 日韩 亚洲 春色| 欧美高清无码免费视频高清版| 久久久久久九九九| 亚洲 日本 不卡| 久肏视频字幕| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 伊人久久亚洲色欲综合网站 | 伊人国产av| 丝袜综合| 欧洲乱码视频| 蜜桃久久久久久久久久久久| 无码视频一区二区| 伦在线97| 欧洲乱码一区二区| 欧美色66| 久久一二三四五六七八九区区| caopeng97人妻| 熟女天天干| 动漫av中文| 久久超碰av在线| 久久久久久久久女黄| 四虎影视国产精品| 欧美在线大香蕉| 久久日本熟女精品一区| 大屁股国产在线视频| 久久久性少妇| 大香蕉淫人| 伊人影院日本| 日本成人A片网站| 两性色网| 婷婷九月色| 三级片大波波| 日日干夜夜操视频h| 色大香蕉97N| 快播久久人人aV| 91九色丨风韵犹存| 1769一区| 操高情无码| 99欧美| 日韩中文字幕熟妇人妻| 狠狠躁日日躁夜夜躁A| 91在线一起| 国产精品伦理| 亚洲天天综合| 国产人妖视频一区在线观看| 99天堂网| 国产传媒日本欧美专区| 91熟女视频网| 超碰97欧美| 欧美一级久久久久久久大片动画| 久操不卡视频| 亚洲精品欧洲精品| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 青青草日本中文字幕| 免费草草草草草视频| 亚洲精品一卡二卡三卡福利视频网站| 俺去啦自拍| 少妇一区二区三区| 国产日韩在线播放| 色av中文字| 国产欧美成人精品| 神马麻豆福利院| 亚洲成人日韩小说| 麻豆60秒| 久久影视二区三区行押| www男人天堂| 欧美激情久操网| 91精品无码人妻系列| 欧美日韩国产中文精品字幕自在自线, | 91 亚洲 欧美 日韩 国产 综合| 色色激情| 国产亚洲日本| 亚洲加勒比久久日本道| 亚洲无码com| 操逼网免费无码视频| 黑人天8A∨高清网站| 人妻第一页| 日日操丁香五月天| 天天干2区3区| 校园激情狠狠四射| 深夜激情无码| 亚洲AV不卡在线观看尤物| 综合久久9| 四虎视频在线观看| 99最新日韩偷拍视频| 男女啪啪网站免费视频| 国产 日韩 另类 视频一区爱| 久婷婷一区| 男人天堂网站| 亚洲五月丁香花狠狠干一区二区三区 | 在线观看午夜婷婷久久久久清性观看| 欧美岛国精品在线观看| 激情小说五月天| 中文一区在线日| 超清福利精品视频在线| 久久久久久久一级黄色打同平台| 久久久久久久久国产| 美女操逼A A| 好淫网一二三视区| 国产精品久久久久久久久久久久久久吹| 国产操逼逼网| 午夜毛片高清免费不卡| 狠狠色伊人亚洲综合网站色| 免费农村成人少妇人妻Aa一区二区视频 | 久久综合久色欧美综合狠狠| 日韩免费中文字幕视频| 精品国产乱码久久久久久蜜臀| 欧美v亚洲v日韩v最新在线二区| 蜜臀久久99精品久久久久免费观| 日韩小电影| 成人五月香网在线| 天天射日日干| 亚洲日韩肥臀视频在线观看| 欧美色图20P| 激情丁香五月| 亚洲性天堂| 91久久国产综合久久| 久久91| 超碰97资源中文字幕| 日本久久女同性恋视频| 色婷婷综合久久中文字幕雪峰| 成年人网站在线免费观看| 国产怡红院| 久久久久久99AV无码免费网站| 另类亚洲图色| 中文人妻av高清一区| 性性久久| 大香网站| 午夜在线播放| 青青草视频爽一爽| 国产又黄又爽又刺激久久久久久| 人妻无码久久一区二区三区免费| 国产1769在线| 亚洲情色 自拍| 狠狠躁AV| 日逼逼免费看| 97久操| www.狠狠干.coom | 久久久久久久国产| 在线综合色| 欧美人妻色| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 91插B网站| 99精品无码| 国产精品不卡av免费在线观看| 啪啪视频mP4| 亚洲无码免费看| 美女黄色91| 内射中出日韩在线观看视频| 国内偷自视频区视频综合| 天天在线91| 亚洲青青青视频在线| 一级黄色性爱A级片| 男人天堂毛片| 久久有码| www超碰| 偷拍亚洲熟女视频播放| 国产三级中文有码在线视频| 亚洲 一区二区 自拍| 精品一区二区2| 熟妇人妻一区二区三区| 亚洲欧美在线观看免费| 好吊色综合| 久久综合超碰| 久久久久免费少妇| 久久久久免费看少妇A片特黄| 久久久久成人网| 家庭乱伦性爱av| 亚洲AV在线资源| julia高潮后不停追击中出| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 色哟哟-国产专区| 精品久久97| 久久久久九九九| 天天爽天天爽| 久久中文字幕在线观看| 嗯嗯啊啊视频一区二区三区| 亚洲se91| 成片免费观看视频大全| 青草影院内射高潮| 精品三级在线专区| 天天日天天色| 大香蕉中文网| 免费久久精品麻豆一区二区av| 亚洲天堂久| 性天堂| 婷婷五月天av| 青青国产精品在线| 色爱综合网欧美| 九九九久| 天天92av| 99久久婷婷| 国产黄色影片在线观看| 日本不卡二区| 麻豆一区二区三区在线看| 熟妇国产免费一区| 91色碰| 国产又爽又黄| 少妇干B| 久久黄色性爱视频| 超碰久超碰久| 国产精品久久久午夜夜伦鲁鲁| 亚洲 欧美 另类 日韩 人妻一区| 超碰在线974| 亚洲有码 欧美精品| 秋霞视频一区二区| 亚洲超碰AV| 狠狠中文字幕| 亚洲精品国产无码高清| 日韩成人精品| 26uuu最新| 啊啊啊啊啊啊好多水| 亚洲丝袜少妇在线| 欧美BT 亚洲色图| 青青草综合在线| 美女上床网站| 一本大道青青| 麻豆一区二区三区在线看| 99热线麻豆 | 91动漫操逼视频| 黄色AAAAA欧美| 中日韩久久久| 国产三级中文有码在线视频| 午夜欧美女人操逼| 日本三级R| 97人人模人人爽人人| 午夜男女爽爽爽在线视频| 337p大胆噜噜噜噜噜91Av| 国产亲戚伦亲在线| 秋霞一级视频在线观看免费| 欧美日韩性爱无码| 中文字幕精品资源在线| 亚洲欧美经典一区二区 | 欧美综合网| 性色AV网站| 福利操逼| 入口操逼网站| 激情五月激情综合网| 爱爱60秒免费视频| 午夜精品久久久99| 97欧美色资源| 91精品久久久久久| 欧美天天搞| 免费观看网黄| 91三级理论片播放器| 日韩中文字幕在线视频观看| 色5月婷婷| 日韩在线女优天天干| 亚州 综合 色图| 黄久久| 国产一级内射高清视频| 92性色国产午夜福利在线661 | 青草综合| 国产综合在线视频网站| 丰满人妻无码一区二区三区| 五月天色五月| 久久久噜噜噜久久久| 婷婷久草一区二区三区| 亚洲欧美另类少妇精品| 色妇91| 久久9精品| 色哟哟综合| 粉嫩在线一区二区懂色| 亚洲精品一区中文字幕乱码| 人妻少妇精品一区二区三区| 亚洲日本加勒比在线| 青青草十区九区爱夜| 国产乱青青草久久| 久久东京热久久| 国产视频一区二区三区在线免费观看| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 色综合大香蕉| 日韩精品在线观看观看| www.色99| 夜夜操中文字幕| 天天影视综合色| 日本成人A片免费看| 男人的天堂2019AV| 亚洲精品 欧美精品| 久草成人影片| 国产精品免费久久久久久久久久| 一级久久性爱视频| 在线女人91| 九九九九精品视频| 天天操夜夜操狠很操| 九九色色| 中文字幕av一区二区三区人妻少妇 | 中文字幕精品丝袜| 熟妇无码视频三区| 天天做日日做| 日本不卡码黄色| 99少妇| 屁屁影院一区二区三区国产| 欧美最婬乱婬爆婬性视频 | 久久久国产精品亚洲精品| 色欧美综合| 色狠狠综合| 天天日美女的B| 在线中文字幕| 日韩三级久久久| 東南亚性呦成人伦理资源在线视频| 91精品女厕偷拍视频| 亚洲欧洲小说图片视频 | 人妻在线大香蕉| 亚洲无992tv| 天天色综合图片| 欧美精品三区| 精品午夜福利国产一区二区在线观看| 一区二区三区男女操逼黄色小电影| 91国产丝袜白虎| 亚洲砖码砖专无区2023| 大香蕉啪啪啪啪在线| 伊人一级免费黄片| 五月综合视频| 大香蕉日韩| 色婷五月天| 玖玖爱视频网站| 色播综合| 欧美日韩亚洲少妇寂寞影院正在播放 | 搡老女人老91二区| 亚洲日本成人动漫| 欧美97免费| 婷婷色色网| 啊啊啊 在线| 毛片电影一区二区三区| 91丝袜激情在线 | 98久久超碰| 精品久热| 99热销国产这里有精品| 免费看日产一区二区三区| 超碰97综合网| 久久99网站| 亚洲精品电影| 香蕉在线一区二区三区| 97狠狠| 色九九九| 精品国产91av一区二区三区| 久久精品国产99国产精品亚洲| av无线看| 风月影院男女十八禁| 99热在线观看| 国产精品久久久亚洲第一牛牛_在线观看 | 日韩欧美福利视频看看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 乱理日韩中文| 一线黄色免费性爱片| 国产精品午夜精品| 91日本在线观看| 夜夜精品视频| 99啪啪视频| 亚洲成a人片在线观看中文!!!| 视频在线观看青青99国产| 日本午夜精品理论片A级APP发布| 久久久涩| 亚洲熟女乱色| 亚洲高清无码在线桃色| 999国产精品999久久久久久| 天天欧美欧美亚洲网| 成人无遮挡毛片免费看| 韩国轻伦国内自拍一区| 2018天天干在线视频| 国产97在线播放| 91neishe| 家庭乱伦性爱av| 东京热,男人的天堂| 欧亚乱色熟一区二区三四区| 免费一级a毛片久久久久久鸭绿欲| 亚洲图片在线| 久久久工口| 国产一区二区a毛片| 蜜桃香蕉久草精品在线| 色狠狠综合噜一二三区| 婷婷午夜成人色中色| 久久久久久九| 99天天超碰| 性色av婷婷久久一区二区点复制| 2024年最新色情网站在线观看| 在线观看午夜婷婷久久久久清性观看| 国产精品久久久久av| а√天堂资源官网在线资源| 东北操逼| 色综合潮| 久久婷婷五月天| 嫩呦国产一区二区三区AV| 青娱乐黄色录像| 一区黄二区黄| 国产一区二区三区精品观看啪| 看日韩黄片| 夜夜国自区| 成人天天看站长推荐 | 十八禁啪啪视频| 久久亚洲一区女同性恋中文字幕| 99精品伊人| 日本有码久久| 丁香五月天激情网站| 久久超碰97| 欧美激情亚洲| 欧美第二页午夜| 香蕉一区二区三区在线视频| av资源在线观看少妇| 久久九色| 综合色久欲| 亚洲精品蜜桃久久久一区二区三区| 综合久久欧美| 国产精品 久久久精品一牛| 啊啊啊啊啊啊啊啊视频| 色网1| 91久久国产综合精品| 亚洲AV资源| 五月婷婷激情综合| 蜜乳AV网址| 最新岛国大片| 综合亚洲欧美精品日韩?v| 大香蕉中文在线| 久射吧| 久久久久国产| 久草男人天堂| 天天看,天天做| 国产无码久久高清| 伊人网高清| 亚洲蜜臀精品视频久久| 人妻少妇精品久久久| 后入人妻一区| 亚洲熟女国产综合另类| 91狠| 色婷婷六月| 婷婷综合久久| 丁香六月啪| 国产吞精a级片激情电影| 亚洲日韩美国人妻| 十八禁的黄污污免费网站| 亚洲欧洲综合成人av一区| 色欲Av人妻精品一区二| 成全动漫视频观看免费下载| 天天操人人操骚逼网站| 插穴性爱视频在线观看| 26uuu性| 国产农村妇女精品| 久 久无码人妻AV| 亚洲美腿丝袜香蕉影视欧美成人| 欧美少妇色综合| 嗯嗯,好大,好爽,好骚| 亚洲中文字幕乱码无码一区二区| baisiav| 婷婷综合| 久久黄黄| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 国产欧美日韩一区二区三区| 人人操 欧美| 成人日韩3| 欧美高清18A片| 日本506070| 日韩97| 亚洲乱色熟女一区| a v网站在线播放| 伊人久久婷婷| 亚洲av强奸乱伦| 天天天天操| 日韩欧亚太美不卡| 日本不卡二三区| 久热久操| 久久成人网站| 亚洲风情在线观看| 亚洲男人天堂手机版| 97视频在线免费观看| 欧美高清18A片| 中日亚韩免费视频| 久久老子无码午夜伦不卡| 久超碰在| 国产男女无套97| 九九夜精品九九在线| 欧美一二三区四五区| 91天美传媒精品| 亚洲高清在线se| 欧美激情在线观看视频| 欧美人体性爱互联网第一页婷婷日本| 欧美 精品国产制服第一页| 欧美精品宗合| 亚洲成a人v欧美综合天堂下载| 欧美自拍偷拍综合图片|