色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
九九九久千久久激情蜜桃在线看| 黄色十八禁| 日本1区2区不卡视频| 蜜臀无码一区二区| 91狠狠综合久久久久久| 国产男人又猛又粗又爽| 人人摸人人入| 91性片| 亚洲男人天堂2013| 国产精品情侣啪啪| 极品尤物在线观看| 亚洲天堂7777| 免费αV在线视频| 国产搭汕a级片| 99操| 麻豆人妻偷人精品无码视频| 日韩二级| 99re在线观看| 老鸭窝亚洲毛片| 亚洲免费成人精品电影| 色婷婷香蕉| 亚洲男人综合| 日韩欧美女求操每天更新| 亚洲欧洲色情高清| 久久欧洲| 夜夜操av亚洲一区二区| 国产久久一区二区| 国偷自 一区二区| 中文字幕版| 狠狠久久四虎| 中文字幕二区日韩天堂| 色噜噜狠狠色综无码久久合欧美| 懂色AV蜜臀无码精品APP| 精品久久久久久AV无码| 欧美日韩午夜精品一区二区三区 | 国产又粗又长又大的视频| 欧美亚洲厕所精品偷拍91 | 一二三区视频在线观看| 女人天堂网| 色娱乐色呦呦夜夜夜夜av| 99re在线观看| 污污污8888| 玖玖爱一区在线| 韩国国产欧美情侣视频在线| 国产一区二区三区,在线观看观看| 亚洲 欧美 另类 综合 偷拍| 中文字幕55555| 午夜精品久久久久| 超碰天天操| 久久久久久无码人妻中文字幕| 欧美人妻另类在线| 欧美劲爆第一页| 91中文字幕制服丝袜免费视频| 久久久亚洲精品中文字幕人妻| 少妇精品| 懂色av一区二区三区天美传媒| 亚洲 欧美 精品专区 极品| 啊啊啊免费| 亚洲中文字幕熟女| 91三级理论片播放器| 另类一区| 亚洲图片 激情小说| 欧美色图99| 97亚洲综合在线| 国产精品乱码久久| 性做久久久久久免费观看软件| 91精品黄在线观看| 国产青青美女玩逼视频| 97天天综合| 中文字幕AV乱伦| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 国产精品视频内谢女人| 97国产高清视频在线观看| 国产九九九九九九九九| 久久精品天美| 亚洲无线观看久久| 岛园激情| 男人 天堂 日 亚洲| 欧亚日本情色| 亚洲春色一区二区三区| JULIA一区二区三区在线播放| 五月综合色| 人人超碰在线观看黄| 欧洲精品一二三在线| 亚洲自拍小说| 亚洲欧美日韩二区视频| 和协无码影院| 久久草草亚洲蜜桃臀| 东北丰满熟女国产一区| 色妹子A V| 日本幼女18+| 久久精品国产亚洲AV清纯| 婷婷影院入口| 美国久久一二三四| 在线有码中文字幕| 欧美精品另类人妖xxxx| 美女上床网站| 午夜丁香| 欧美国产操逼| 天天射天天| 五月丁香六月激情综合| 韩国嫰模上门援交视频| 五月天婷婷在线看| 淫色网综合| 精品一区二区2| 最新岛国大片| 亚洲偷拍欧美激情| 国产AV精久久| 91伊人久久在线| 精品美女久久久久| 丰满熟妇大乳做爰| 少妇超碰在线| 欧美色999| 五月丁香久久| 欧美色图20P| 无码抄逼网| 国产天天看| 亚洲天天在线| 精品人妻一区二区乱码一区二区| 色牛aV| 久久人妻丝袜一区二区三| 2019亚洲男人天堂| 加勒比在线视频一区二区三区 | 精品人妻一区二区三区蜜桃视频| 强奸乱伦日韩AV| 精品国产乱码久久久久久久久久毛片| www色色com| 日韩不卡一二三四| 性做久久久久久免费观看软件| 日本大香蕉| 少妇无码av专区线| 亚洲欧美日韩中文久久自慰| 欧美三级中文字幕hd| 伊人亚洲综合| 亚洲欧洲国产综合av| 曰本道人妻久久久在线不卡色视频| 免费A V在线播放| 日韩BBN| 国产激情片在线观看| 东京男人天堂| 欧美激情 日韩精品| 操B视频日韩无码| 日逼五月天| 欧美大香蕉同搞| 久久精品无码不卡| 狠狠干狠狠干| 亚洲男人久久综合天堂| 偷拍色图| 日韩啪啪啪啪啪| 日本熟女不卡视频| 丝袜美腿操av| 亚洲永久永久永久永久一级一级一级精品 | 首页亚洲国产高跟丝袜诱惑视频| 收看日本人日bb| 欧美成人一区二区| 日本三级黄页| 综合欧美日韩在线观看| 操逼操2| 久久大陆| 少妇一区二区三区在线观看| 性色av网站| 青青草福利视频| 狠色婷婷久久一区二区三区_| 操逼操操操91| 亚洲强奸乱伦影视网| 极品少妇久久久| 91美女在线视频| 丁香成人五月天| 久久天天艹| 国产日产欧产美韩系列麻豆免费| 伊人 俄罗斯 a v| 亚洲色诱惑| 亚洲欧洲自拍图片专区满春格| 天天日美女的B| 日本在线一二| 久久美女国产| 亚洲国产精品无码AV久久| 久久久久密臀视频| 蜜色网色哟哟| 99自拍视频| 另类小色呦| 精品免费视频国产一区| 天天日天天干少妇日| 青女在线| 国产欧美一区二区| 日韩人妻大香蕉| 一本大道不卡一二三区| 欧美精品二区视频在线| 欧洲精品二区| 超碰 欧美| 欧美亚洲日韩16色| 一区 欧美 日韩 麻豆| 99性视频| 超碰人人在线| 成人三级片无码| 日欧操屄| 午夜福利1区2区3区| 天天干18禁| av草草在线电影| 欧美78| 色婷婷蜜臀av| 国产大片精久久久久久| 躁躁日曰躁2020| 怡红院怡春院| 观看免费区二区三区二| 欧美三级一级| 熟女精品一区二区在线观看| 制服少妇欧美| Aa东京男人的天堂| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日本免费亚洲欧美| 日韩黄色成人性爱| 开心五月婷婷| 亚洲 欧美 天天| 搡老女人老91妇女熟女| 久久久日本电影| 91亚洲欧美激情| 亚洲综人| 丰满熟妇大乳做爰| 亚洲黄色AV电影| 男人的天堂一区| 97国产精品一区| 欧美 亚洲 第一页| 日本孕妇一区二区视频操逼免费看 | 中文字幕一区日韩精| 国产麻豆一级精品视频| 天天操综合网| 精产国品一区二三产品| 欧美变态激情网| 99只有精品| 日本97久久| 日本在线999| 亚洲熟女av中文字幕| 黄色大片视频在线免费看| 91久久九九精品国产综合| 亚洲国产精品9999在线观看 | 大香网站| 欧美天天射| 国内一区二区三区| 欧美超碰96| 亚洲色图国产另类| 久区视频| 蜜乳成人AV| 久久AV无码网址| 亚洲高清在线| 夜夜久久| 色97干| 天天舔天天日天天射| 国产精品另类| 亚洲精品人体| 94色色电影网| av强奸乱轮| 国产 日韩 欧美高清| 风流老熟女一区二区三区l| 午夜一区二区三区国产| 99热精品免费| 青青青草伊人精品| 18禁看网站一区| 午夜理论片在线观看免费| 日日干日日| 欧美韩国你懂得在线| 婷色五月| 五月丁香在线| 九七人妻在线| 乱伦色图网址是多少| 青青草十区九区爱夜| 欧美人妻另类在线| 超碰97人妻免费在线| 日韩av在线免费网站| 久久精品一区二区三区不卡| julia国产在线| 国产网红精品| 亚洲熟女性高潮久久久| 日韩97视频!在线| 操99| 国产精品久久久久久久久久久久久久久久| 国产精品第一页国产大屁股视频免费区 | 超碰是碰在线观看| 亚欧视频在线| 精品国产国产AV| 老司机福利青青草| 中文字幕日韩综合| 亚洲小说视频| 色情婷婷| 亚洲天天自拍| 国产成人+综合亚洲+天堂| 黄色十八禁| 麻豆亚洲Av成人无码一区精品| 区自美91| 最新日产中文在线麻豆| 国产欧美日产一区二区三区 - 国产欧美日 | 国产精品久久久久久片| 蜜桃臀久久| 精品人妻一区| 精品人妻伦一区二区三区久久| 人人妻人人爽 97人人看碰人免费公开视频| 久99视频| 骚女天天综合网| 欧美很很操视频| 老鸭窝在线视频播放| 无码日韩人妻av一| 97超级色碰碰| 97色在线| 熟妇xxxxx性春色| 观看视频图片一区二区三区| 一级性爱网| 黄色成品网站| 乱伦av.com| 偷拍亚洲情色| 91久久久久免| 国产肏逼网站| 久久 亚洲 日韩 人妻| 岛国色情视频在线观看| 午夜美女诱惑电源网| www.久久| 久久透逼视频| 五月天人妻综合| 一起草AV| 91丨豆花丨熟女| 亚洲影视第一页| 囯产精品强| 国产精点久久久成人| 国产AV色黄看到爽| 国产成自自拍在线观看| 欧美一区二区一级岛国大片| 欧美日韩亚洲天堂网| 人妻丰满熟妇一区二区三| 欧美亚洲涩涩| 婷婷久热| 九月激情婷婷| 天天综合欧美黑人| 欧美 日韩 亚洲 春色| 5月婷婷6月六月丁香| 6080yy午夜理论三级一区二区三区无码| 国产乱伦性爱AV| 国产高清成人传媒影视| 884t在线| 夜夜狼人妻| 日韩97在线| 日韩紧密久久| 婷婷丁香成人| 九色精品视频导航1| 久久成人东京热人妻| 中文字幕日韩国产传媒欧美精品| 久久精品中文字幕无码l| 97香蕉碰碰人妻国产欧美| 欧美精品第四五页中文字幕在线观看| 欧美色图20p| 久久这里只精品免费福利| 懂色aV一区二区天美传媒| 性做久久久久久免费观看软件 | 太久视频| 人妻少妇精品久久久| 97一本大道亚洲一区| 日韩丝袜高跟制服在线观看| 12一15性XXXX粉嫩国产| 成人情色综合网| 国产极品久久久| 国产亚洲在线观看| 亚洲中文字母在线播放| 99这里只有精品国产| BBBBB97COM| 91九九九吃| 欧美综合色站| 美女97超碰| 亚洲少妇喷视频看| 六月丁香网| 亚洲日韩美女中文字幕乱| 日韩性爱小视频| 欧美性性性| 久久久久久无码人妻中文字幕| 人人妻人人色| 大香蕉欧美伊| 亚洲综合影片| 亚洲欧美国产中文字幕| 黄色成品网站| 99xav| 欧美亚男人的天堂| 福利风月五月天影院| 狠狠色综合网| 91人妻爽爽人人做人人澡| 无码日韩网站| 九九黄色视频在线观看| 99热这里只有精品8| 日本色色的视频| 国产男人又猛又粗又爽| 日本一区二区三区四区免费观看| 国产不卡免费在线视频| 欧美系列在线一区二区| 97人人超| 小少妇| 920日本午夜免费| 日韩成人免费电影| 91neishe| 国产天天看| oumeizonghese,www| 久久最新视频免费观看| 亚洲色图超碰在线| 青青草视频导航官网| 天天日B狠狠操| 高清不卡视频| 精品十三区| 嗯嗯啊啊好疼| 麻豆区久久久久亚| 97天天日| 久久久一区二区三区三州| heyZO天然素人无码AⅤ专区| 国产偷拍自拍在线视频| 99精品在线观看| 欧美一区91大爱| 色哟哟-国产专区| 97 国产一区| 操淫穴亚洲五月丁香 | 久久精品国产亚洲AV高级北京| 亚洲无码一区二区三区三州| 69精品人人人人| 九久9热| 亚洲人91| 78超碰| 成人无码电影在线观看网| 看黄片视频免费| 人妻少妇视频在线播放| a人片中文字幕一区二区| 色狠狠一区二区三区香蕉| 亚洲国产成人综合碰碰三级经典| 国产精品成人久久一区二区三区| 97最新在线播放视频| 欧美精品另类人妖xxxx| 97精品一二区| 深夜激情无码| 97亚洲一区| 伊人在线大香蕉视频久久| 国产三级片在线观看| 少妇一级婬片免费放一级a性色.| 免费看久久久性性| 麻豆天美制片厂网站视频| 精品免费成人久久| 一级性爱啪啪视频| 亚洲日韩AV视色| 中文字幕诱惑制服人妻丝袜美丝袜美 | 久久一二三四五六七八九区| 亚洲综合另类小说色区亚洲成av人片在www | 人人艹亚洲| 亚洲人妻一区二区三区| 色亚洲欧美| 收看日本人日bb| 色欧美天天| 国产又长又大又粗的视频| 翔田千里Av在线| 熟妇在线视频一区二区| 亚洲图片偷拍欧美| 艹精品| 国产福利夜| 精品九九| 狼天天狼天天大香蕉| 亚洲欧美天| 性爱免费视频成人| 欧美 日韩 婷婷 五月| 国产精品免费久久久久久久久久| 天天流夜夜操| 综合网欧美| 久久久久免费少妇| 久久综合97| 天堂精品在线| 97在线看| AND人妻系列| 天天综合91| 97香焦色区| 欧美夜夜| 看黑丝美女操逼青青网站| 九九九九精品九九九九| 无套内射性感少妇视频| 欧美 亚洲| 欧美国产日韩清纯唯美| 国产三级片在线观看| 丁香六月激情综合| 狠狠91| 麻豆av一区二区三区| 夜草网站| 蜜桃一区二区三区| 色爱三区| 麻豆天美在线| 亚洲春色激情小说| 超碰精品日韩欧美国产| 91国产美女丝袜足交精品视频 | 成人A片男人的天堂| 国产高清精品一区二区三区毛片| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 天天影视激情欧美| 岛国黄色短视频| 国内成人圈中文字幕无码视频 | 色逼综合| 一区,二区,三区视频| 色色香蕉| 日日躁夜夜躁狠狠躁超爽| 一区二区三区精品黑丝白丝酒店对鸡 | 暴力av在线| 亚洲18禁| 最新日产中文在线麻豆| 啊啊啊免费视频| 亚洲综合113页| 夜嗨影院| 免费国产视频| 亚洲综合图片在线| 亚洲欧美大| 高清国产性猛交xxxx乱大交| 欧美成人精品一区二区男人蜜臀 | 曰韩中文人妻视频| 99re在线视频| 九久久九精品视频| 欧美成人黄网色网站| 91网站18| 中文字幕精品专区搜索结果91| 91熟女熟妇视频网站| 小日子操bb在线看| 97色亚洲| 本道在线| 91九九九小逼| 五月天色图影视| 99精品视频在线观看免费| 97欧美| 国产中午字一暮区| 日逼五月天| 99热精品在线观看| 久草网站免费在线观看| 色屁屁影院www国产| 欧美最婬乱婬爆婬牲视频| 欧美亚洲影视| 96AV精品| 伊人AAA| 日韩中文字幕视频在线观看| 综合国产影视三级| 日本视频在线中文字幕| 中文字幕一区二区三区四五区| 高清无码91| 嗯啊啊啊轻点视频 | 韩日精品福利视频一区不卡在线免| 日逼国产| 色噜噜精品一区二区三| 一二三四视频中文字幕在线看| 男人天堂导航| 熟女少妇一区二区三区| 人澡逼| 久久夜夜夜夜| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 加勒比AV天堂| 亚洲97P| 欧美少妇熟女| 日韩精品中文字幕一| 青娱乐国产剧情av一区| 亚洲日本大香蕉1| 五月大香蕉| se吧提供91精品国产91久久久久久| 肉丝中文无码高清| 牛牛久久国产精品视频一二三| 99热免费| 国产亲戚伦亲在线| 久久夜黄色无码A级大片| 成人av在线播放| 性久久久| 亚洲AV噜噜狠狠网址蜜桃动漫| 欧美精品精品一区二区| 2021国产成人精品久久| 欧美懂色综合网| 绑缚麻绳人妻寝取完整版| 亚洲欧美在线观看2021| 久久久无码精品人妻二区| 啊嗯嗯啊好大好爽| 亚洲性少妇| 欧美激情亚洲情色| 97操碰| 四季av一区二区凹凸精品小说| 久久久久久无码人妻中文字幕| 91高清无码下载| 日韩中文字幕视频| 久久久久久久亚洲Av无码| 日韩A优精品在线观看| 亚洲乱伦图片视频| 日韩人妻一区二区精品| 日本色婷婷| 青青11操操操操操操操操| 91AV老熟女视频| 人妻人人澡人人爽人人| 99999这里都精品| 人人操超碰在线| 97色亚洲| 精品国产91av一区二区三区| 操逼操逼操| 91肉丝| 天美麻豆一区二区三区| 综合夜夜| 操逼日批| aaa一级黄片| 又黄又爽在线观看视频| 日本不卡二三区| 欧美后入式| 在线午夜成人无码视频| 乱伦一区二区三区‘| 日本黄 R色 成 人网站| 观看视频图片一区二区三区| 操淫穴亚洲五月丁香 | 欧美操逼熟女| 婷婷色导航| 国产精品久久久久av| 去干网最新版| 九九英色视频| 麻豆色约约| 欧美在线大香999| 尤物av网站免费在线播放| 久操网线| 在线综合 亚洲 欧美中文字幕 | 黄片免费日韩| 强奸乱伦大香蕉网| 久久精彩视频9| 亚洲 欧美 日本 国内 首页| 波多野结衣AV无码一区| 国产免费一区二区在线A片视频| 亚洲一二三精品久久网| 日韩天天综合| 亚洲成人一区二区精品| 亚洲人在线| 农村少妇久久久久久久| 免费看黄视频亚洲网站| 蜜桃视频一区二区三区在线观看| 亚洲有薄码区久久在线一区| 无码137片内射在线影院| 六月天婷婷| 欧美淫乱视频| 免费一级黄色录像影片| 白丝jkav| 超碰在线欧美性爱激情| 一级久久久久久久久久久| 夜夜高潮夜夜爽| 另类图片天天影视| 亚洲图片婷婷五月天| 91爰爱欧美| 日韩精品一二三| 欧美亚洲天天| 久久久久久精品免费看A级| 久久精品老司| 黄骗免费网站| 伊人97超碰| 黄页av| 欧美麻豆成人同性GⅤ在线| 9精品久久| 天天综合网日韩7799| 91人精品妻入口| 91精品综合久久久久久五月丁香| 天天影视网综合少妇| 一本色道熟妇| 色色色综合| 97天天弄| 亚洲导航深夜福利| 精品无码少妇| 日韩欧美女优电影| 久一区久久蜜桃| 欧州色图区| 蜜臀无码视频在线观看| 亚洲……91| 精品视频在线观看精品| 亚洲 se图 欧美电影| 亚州熟女乱伦| 99黄页网站| 色青青久久影视| 九九热精彩视频| 精品v日韩欧美国产| 国产精品夜夜夜| 99无码| 婷婷爽人人婷婷爽视频| 99啪啪视频| 久草国产在线视频| 久久是精品| 五月天激情小说| 日韩肏逼视频| 九九热视频这里只有精品| 色官网色综合| 欧美人妻制服| 亚洲成人精品久久久| 啪啪视频亚洲第一| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产精品一区二区手机看片| 欧美日本天堂| 韩日无码在线观看| 综合第一页| 九九九影院| 五月丁香激情啪啪| 天天日天天干天天操| 日韩欧美水蜜桃人妻| 婷婷伊人网| 夜色综合| 亚洲综合 欧美| 中文字幕二区日韩天堂| 色欲av一区二区三区蜜芽| 白嫩91在线亚洲| 亚洲男人天堂网久久| 很很热性爱视频| 欧美色就是色| 欧美特黄视频网站| 九九成人精品| 日本福利二区视频| 74成人在线| 欧美97色| 美女91色黄18| 国产a级精品| 99啪啪| 日本一区二区成人在线| 偷拍盗拍亚洲色图图片 | 日韩国产欧美伦理在线| 亚洲美腿丝袜香蕉影视欧美成人| 精彩国产视频播放1区2区| 欧美日韩性爱精品| 久久国产对白激情浪潮 | 日va操| 精品少妇99| 狠狠色一区二区中文字幕| 伊人影院中文字幕| 中国探花熟女| 五月天久久综合网| 久久产精品一区二区三区电影| 成人久久久精品| 有码人妻系列| http://qxhbdz.com| 色999;丁香五月| 亚洲欧美日韩精品久| 国产在线综合福利网站| 日夜精品| 伊人九九九| 免费草草草草草视频| 麻豆性爱视频在线播放| 亚洲s在线观看| 亚洲 欧美 中文 日韩超碰| 亚洲色图日韩精品| 人人人人插| 性影在线视频| 免费观看性欧美一级| 波多野42部激情无码喷潮| 精品玖九九久| 欧美色九九| 日韩电影免费网站麻豆视频| 九九九九免费视频| 亚洲精品1区| 超碰97欧美在线| 久久久久久久久久久六六| 五月香婷婷| AV天天在线观看| 五月婷久久| 99这里有精品| 99色悠悠| 大鸡巴久久久| 欧美一区二区三区大综合| 青青草视频在线观看一区二区| 人人操天天爽| 亚洲欧美天堂在线| 国产亚洲色婷婷99精品91| 亚洲男人的天堂网| 经典丝袜一区| 大香蕉性欧美| 国产精品扒开腿做爽爽爽视频| 校园春色五月天| 亚洲天堂男人的天堂| 亚洲中文字幕精品一区| 粉嫩av久久一区二区三区| 十八禁啪啪视频| 亚洲人体视频在线观看| 亚洲精品三区在线观看| 啪啪资源网| 亚洲中文字幕av| 国产黄a三级三级三级av在线看| 久久久久久性爱视频| 91老熟女老女人国产老太| AV99热18这里只有精品| 欧美日韩妖精91com| 日本精品五区| 精品日日人妻| 操www| 国产亚洲精品自在线亚洲情侣| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 熟女六十路| 欧日韩不卡视.频| 伊人久久大香蕉线AV五月天| 超碰伊人在线| 夜夜爽夜夜爽| 操B在线观看| 偷窥自拍亚洲色图| 欧美91在线+|+欧美| 极品出轨视频网站| 岛国免费视频在线| 男人天堂婷婷五月天校园春色| 天美麻豆精品视频99| 欧美亚洲宗合色性图| 日本在线伊人啪啪| 乱伦一二三| 中文字幕在线高清男人的天堂| 91在线限制级| 青青草原伊人网| 熟女突然公开看18禁影片| 青青三级视频| 96精品久久| 国产对白刺激视频| 国色天香av| 91精品国产91久久久久久久久久久久| av网站国产主播在线| 亚洲精品aa久久伊人| 欧美日韩人人精品| 美女9118禁| 小视频玖玖| 大香蕉免费中文| 免费的av网| 暴力av在线| 日本视频在线观看污污污| 91亚洲不卡一区| 97伊人超碰| 日韩欧美国产一区二区三区四区| 久热久一区二区三区| 四虎在线视频| aaaa黄片| 新视频sss国产| 中文字幕AV乱伦| 久久久99久9| 黑人性暴力毛片| 色官网在线| 人人摸人人舔一区二区| av无线看| 欧美少妇第一页| 国产午夜精品理论片一二三区区| 综合网欧美在线| 黄色成年| 亚洲aV性爱| 欧美人妻一区二区| 国产精品一区二区 尿失禁| 老女人老91妇女老热女| a亚洲欧美色欲| 蜜桃视频精品一区二区三区| 97免费视频在线观看| 美女黄色一级A视频| 少妇精品久久久八区九区| 一本大道不卡一二三区| 白丝在线一区| 福利在线观看一区二区| 欧美成人色| 久久综合亚洲色1080p| 成人欧美日超碰| 波多野结衣一级视频| 99精品网站| 国产精品999zyz| 97干综合网| www.人人cao| julia ann久久| 大香蕉五月天| 九九九九国产| 青青草伊人久久| 亚洲高清无毛一区二区| 五月天伊人| av网站在线观看了| 被窝影院午夜看片无码| 五月丁香黄色网| 天天色香欲综合网| 98人妻精品一区二区色欲| 日本97久久久精品| 日本久久久精品电影| 欧美97网| 亚洲精品 欧美精品| 逼逼逼逼操操操操操操操操操午夜剧场 | 日本免费一级AAA大片器 | 全国男人天堂网| 亚洲高潮少妇| 天天射夜夜操| 天天天天天天天天综合| 亚洲欧洲日韩国产自在线| 96一区二区三区| 男人的天堂久久狠| 国产AV中文| 嗯嗯嗯啊啊啊在线免费观看| 国产毛片片精品天天看视频| 欧美曰韩国产精品| 99日精品欧美国产| 国内外内射高清视频| 色诱中文字幕| 人妻-91porn| 日本欧美中文字幕| 久久伦理视频久久大香蕉视频| 一区操逼| 床戏久久久av一区二区麻豆| 麻豆蜜桃视频在线观看| 操逼啊啊啊91| 大香蕉欧美| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 亚洲情色91| 91欧美亚洲| 偷拍综合亚洲| 中文字幕日韩国产传媒欧美精品| 男人天堂黄片| 久久一区二区蜜桃| 天天看高清麻豆| 99热在线观看| 久久三| 超碰成人人人爽人人爽| 日韩无码AB| 欧美精品人妻视频| AV综合中文字幕干| 这里只有精品视频在线观看麻豆| 日韩欧美麻豆| 亚洲性少妇| 97干在线看| 99精品久久| 天天插夜夜操| 美女被啪到深处抽搐视频| 久久久久幕乱码| 日本999精品| 国产精品白虎| 久久曰曰| 91人人臊| 欧美日韩性爱无码| 国产乱伦亚洲| 欧美性爱第1 页| 肥臀熟女一区二区三区视频| 丝袜色综合| 天天干人妻| 丁香五月影院| 丁香五月天堂网| 国产福利精品最新在线| 黄色AAAAA欧美| 中文字幕日韩电影人妻| 亚洲欧洲自拍| 激情欧美97| 欧美自拍网| 91精品国| www.av不卡中文字幕| 亚洲情色一区二区三区| 又黄又粗又硬又长又大| 超碰在线974| 中文字幕视频一区视频二区| 国产 码在线成人网站| 日韩性爱播放| 久久综合激情| 欧美日韩91| 92午夜免费福利视频| 欧美人妻精品一区二区| 日韩人妻中文视频| www国产天美久久久| 久久毛卡| 亚洲国产成人福利在线观看| 日韩欧美成人性爱在线| 91在线超高颜值国产| 日本黄色大片一级视频免费麻豆| 91制服丝袜| 大香蕉伊人75| 久久精品久| 欧亚无码视频| 久久透逼视频| 国产日韩区| 成人网站 免费观看| 色噜噜人妻丝袜a∨先锋影| 3p国产欧美99热| www.超碰| 97超碰国产精品| 欧美综合加勒比在线| 亚洲成人精品久久久| 在线亚洲丝袜视频网站| 亚洲综合九| 大香蕉日韩欧美| 日韩十八禁| 久久性爱视频免费看| 久久久久免费看少妇A片特黄| 五月婷婷丁香六月丁香| 天天综合网一91网| 翔田千里Av在线| 天天躁日日躁xxxxx| 亚欧无码在线| 99色视频| 久久綜合很很很| 超碰伊人在线| 91天天日| 在线亚洲丝袜视频网站| 玖色av| 夜夜骑夜夜操| 日本久久精品| 国产h小视频在线观看免费| 日韩精品资源专区二区| 五月丁香拍拍激情综合三级| 丁香五月婷婷啪啪| 熟妇高潮一区二区免费视频| 极品久久久久久久久久久久久久| 91痴汉| 99e久久国产精品| A片三级无码| 亚洲天堂综合AV| 天天日天天屌天天操| 三四中文字幕| 午夜偷拍久久熟女| 91 亚洲 欧洲| 制服少妇欧美| 射综合网| 国产强上视频在线观看| 嗯嗯,啊啊,国产精品| 内射黑丝袜| 久久东京热久久| 无码最新| 青青草原人妻| 狠狠躁久久躁| 蜜乳av一区二区| 综合激情五月天| 精品人体无圣光凹凸| 懂色av中文字幕| 色色九区| 影音先锋视频在线| 亚洲美乱| 色婷婷日韩精品一区二区三区| 蜜乳成人AV| 东京热激情视频一二三区| 欧美 亚洲 另类 综合| 久久久久久久性爱| 在线看免费无码AV天堂的| 亚洲男人天堂2016| 91中文字幕| av国产无码| 九九九草| 欧美日本中字另类在线| 亚洲最大的黄色电影网站。| 青青草公开在线免费不卡视频| 国产日韩手机视频在线| 女人的久久久| 欧美成人精品欧美一级乱黄一区二…| 老熟女乱子伦中文字幕一区二区| 性色高清在线| 色噜噜狠狠色综无码久久合欧美| 日本一区二区不卡精品| 亚洲国产精品久久久久久久久久| 99日免费视频中文字幕| WWW操逼| 久操九九九九| 久久三区四区| 免费av大片| 高清肉丝中文无码| 超碰97人人cao| 国产人妻精品久久久一区二区三区 | 久操视频这里只有精品| 国产尹人在线视频免费| 台湾佬中文娱乐网久久久久久久久久com| 国产乱伦亚洲| 有码人妻系列| 黄色大片免费在线| 九九九久久久久| 秋霞成人一级在线观看| 亚州久久9| 93人人操人人| 欧美熟女丝袜| 国产精品自在自拍视频| 视频在线观看青青99国产| 中文自拍欧美影视| 大逼色网站| 97人人模人人爽人人| 精品少妇一区二区| 啊啊啊好爽快点啊啊啊嗯嗯| 日本精品五区| 亚洲精品天天影视综合网 | 久久久久久亚洲精品中文字幕人妻| 国产v亚洲v日韩v欧美v片另类| 丝袜夫妻自拍| 黑人精品XXX一区一二区| 99热超碰| 亚洲网站一区二区在线| 国产视频人人网| 狠狠中文字幕| 夜夜嗨AV蜜臀av| 性爱视频无打码在线观看| 色哟哟av网址| 婷婷综合网| 毛片一区二区| 国产精品熟女AV中文字幕在线播放| 毛片电影一区二区三区| 伊人国产成人av网站| 综合影院永久入口国产| 亚洲加勒比| 亚洲视频1区| 欧美日韩国产中文精品字幕自在自线| 国产女人操逼视频| 日韩亚洲Av人人夜夜澡人人爽| 日本成a人v网站在线观看| 狼狼色丁香久久婷婷综合五月 | 免费一级视频特黄色大片| 夜夜操夜夜爽夜夜高潮| 中文字幕,人妻,日韩| 97超色| 久久久人体| 日本东京热加勒比久久| 噜噜噜噜天天狠狠| 日本三级黄页| 亚洲 日本 国产 综合| 日夜尻逼网| 欧洲射精91| av一区二区三区 中文| 少妇被c 黄 免费观看| 小骚逼被操的爽不爽| 天天天天干| 国产一区二区精品久久99| 91亚洲综合在线| 91久久国外网| 抽查国产福利主播| 国产成人免费观看在线视频| 精品福利| 公司1区2区3区精产精| 亚洲最大的黄色电影网站。| 一区二区三区精品久久| 性爱视频免费网址| 91熟女视频网| 国产成自自拍在线观看| 九九热超碰| 国产欧美日韩精品中文| 看日韩黄片| 欧美激情在线观看视频| 99国产精品久久久久久久成人热| 五月丁香久久| 91精品啪在线观看国产城中村| 操逼无码操逼| 丝袜美腿av女优在线| 天天综合网亚洲综合网| 丝袜内射| 欧美性猛交美女自慰91| 9999免费精彩视频| 黄色区免费观看中文字幕| 久久在线观看免费视频| 超碰久超碰久| 91N综合网在线| 色五月第四色| 色狠狠综合噜一二三区| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 青青操青娱乐| 日本一区二区不卡精品| 精品人妻中文字幕4399| 日韩日本欧美在线观看| 日韩大香蕉| 久久久久久久91| 91久久婷婷| 97久久超碰亚洲| 97超碰超欧美。| 久久久久久久六六| 日韩图区| 97超碰这里只有精品| 色超碰综合| 精品久久大胆人体| 超硑97精品| 超碰97色色| 中出789在线视频| 91l欧美在线| 在线观看视频91| 骚女高跟AV在线| 午夜精品久久久久久久99| 性色A∨91| 久久久一区二区三区四区五区| 日韩三级av片| 999精品女人| 亚州综合色| 欧美日韩在线小说 | 久久性爱城| 国产精品一区二区黄片| 啪啪91| 男人的天堂亚洲| 欧美九九99久久精品| 96精品久久久久久久久久|