站數(shù)據(jù)分析與可視化:從數(shù)據(jù)清洗到答辯高分指南)
簡(jiǎn)介一份基于Python的旅游網(wǎng)站數(shù)據(jù)分析及可視化完整項(xiàng)目以2020年五一旅游數(shù)據(jù)為案例面向需要完成數(shù)據(jù)采集、清洗、分析與可視化大作業(yè)的高校學(xué)生。項(xiàng)目源碼評(píng)審分超過95分經(jīng)過嚴(yán)格調(diào)試可運(yùn)行適合數(shù)據(jù)分析初學(xué)者參考。壓縮包共74個(gè)文件、大小13.62MB包含3個(gè)Python腳本、3個(gè)ipynb分析筆記、36個(gè)html可視化頁面、1個(gè)csv旅游數(shù)據(jù)集并附docx說明文檔及js/css靜態(tài)資源覆蓋數(shù)據(jù)處理、圖表生成到頁面展示的完整流程已有616人學(xué)習(xí)下載。通過該項(xiàng)目可掌握從數(shù)據(jù)清洗到可視化展示的完整分析流程項(xiàng)目目錄按數(shù)據(jù)、腳本、模板、靜態(tài)資源分層便于逐模塊學(xué)習(xí)與二次開發(fā)內(nèi)置詞云圖、水球圖、漏斗圖、地圖等多種可視化圖表其中景點(diǎn)評(píng)價(jià)率水球圖、熱門景點(diǎn)詞云圖、門票銷售漏斗圖等案例均可遷移至其他城市或領(lǐng)域快速搭建同類旅游數(shù)據(jù)分析系統(tǒng)無論用于課程設(shè)計(jì)、期末答辯還是個(gè)人作品集都能獲得直接可用的源碼與參考。1. 期末大作業(yè)選題旅游網(wǎng)站數(shù)據(jù)分析與可視化到底在考什么“基于Python的旅游網(wǎng)站數(shù)據(jù)分析及可視化”這類期末大作業(yè)聽起來像是個(gè)標(biāo)準(zhǔn)模板——數(shù)據(jù)好找、工具成熟、可視化庫一抓一大把可實(shí)際交上去能拿95分的很少。原因在于這門課考核的不是你會(huì)不會(huì)調(diào)plot而是你有沒有把一個(gè)數(shù)據(jù)分析項(xiàng)目完整走通從數(shù)據(jù)獲取、清洗、分析到圖表呈現(xiàn)最后落成一份能說服人的業(yè)務(wù)結(jié)論。我見過太多人卡在數(shù)據(jù)階段就花了三天或者畫出一堆圖卻完全答不上“為什么用折線不用柱狀”。這門題適合剛學(xué)完 Python 基礎(chǔ)、想找一份數(shù)據(jù)分析項(xiàng)目實(shí)踐練手、并且期末想沖高分的人。接下來我把完整套路拆給你照著做至少能避開八成翻車點(diǎn)。另外拿到的.zip先別急著解壓跑代碼看一遍 README 和目錄結(jié)構(gòu)能省不少時(shí)間。2. 數(shù)據(jù)準(zhǔn)備階段從抓包到清洗三條路徑與一套 Pandas 模板2.1 先看包里有什么README、數(shù)據(jù)集與代碼的目錄結(jié)構(gòu)拿到一個(gè).zip第一件事不是雙擊解壓然后試圖直接運(yùn)行而是先看壓縮包里的文件清單。期末大作業(yè)的壓縮包通常會(huì)有這幾類東西README 說明、數(shù)據(jù)文件CSV 或 JSON、腳本或 Notebook、報(bào)告目錄。README 里一般會(huì)寫清楚數(shù)據(jù)來源、字段含義、Python 版本要求如果作者沒寫你就得自己做“考古”——用 Excel 打開數(shù)據(jù)文件先看列名再找有沒有requirements.txt。這一步的意義在于確定后續(xù)所有分析都圍繞同一套字段展開避免代碼寫到一半發(fā)現(xiàn)列名對(duì)不上。我一般會(huì)在項(xiàng)目根目錄建一個(gè)數(shù)據(jù)說明.txt把字段名、類型、時(shí)間格式、哪些列有空值記下來后面寫清洗和分析代碼時(shí)直接對(duì)照能減少接近三分之一的無意義返工。如果你發(fā)現(xiàn)壓縮包里只有代碼沒有數(shù)據(jù)別慌看下一節(jié)數(shù)據(jù)來源不只一條路。2.2 數(shù)據(jù)獲取的三條路徑公開接口、開源數(shù)據(jù)集與“結(jié)構(gòu)化模擬”如果 ZIP 里沒給現(xiàn)成數(shù)據(jù)你需要自己解決數(shù)據(jù)來源。期末大作業(yè)場(chǎng)景下三條路我都走過經(jīng)驗(yàn)如下第一是抓包找公開接口。主流旅游網(wǎng)站的景點(diǎn)頁面、點(diǎn)評(píng)列表前端幾乎都是異步加載 JSON打開瀏覽器開發(fā)者工具切到 Network 面板刷新頁面就能看到一批 XHR 請(qǐng)求里面往往直接返回結(jié)構(gòu)化的 JSON 數(shù)據(jù)。用requests拉下來再用pandas解析就行。但爬蟲要考慮請(qǐng)求頻率、登錄態(tài)、反爬策略時(shí)間成本高適合數(shù)據(jù)量小、結(jié)構(gòu)清晰的場(chǎng)景。第二是去 GitHub 找公開旅游數(shù)據(jù)集。很多開源項(xiàng)目整理了景點(diǎn)評(píng)分、游客量、門票價(jià)格這類結(jié)構(gòu)化數(shù)據(jù)字段質(zhì)量和真實(shí)業(yè)務(wù)幾乎一致優(yōu)勢(shì)是省時(shí)間缺點(diǎn)是需要花一點(diǎn)時(shí)間篩選字段口徑。第三是老師只給了題目、沒給數(shù)據(jù)的情況。常見做法是按真實(shí)業(yè)務(wù)字段結(jié)構(gòu)生成一份仿真樣本數(shù)據(jù)例如城市、景點(diǎn)、評(píng)分、評(píng)論數(shù)、門票價(jià)格、月份、游客量。答辯時(shí)明確說明這是按公開統(tǒng)計(jì)口徑構(gòu)造的演示數(shù)據(jù)用于驗(yàn)證分析流程合理性。這不算造假只要誠實(shí)標(biāo)注老師通常能接受。# 路徑一請(qǐng)求公開 JSON 接口注意遵守目標(biāo)站點(diǎn)協(xié)議僅限學(xué)習(xí)使用 import requests import pandas as pd # headers {User-Agent: Mozilla/5.0} # 基本瀏覽器標(biāo)識(shí) # resp requests.get(https://api.example.com/scenic/list, headersheaders, timeout10) # data resp.json() # df pd.json_normalize(data[data][list]) # 更穩(wěn)的路徑二直接讀本地 CSV df pd.read_csv(tourism_data.csv, encodingutf-8) print(df.head()) print(df.dtypes) # 檢查字段類型是清洗的第一步這段代碼里requests.get的timeout10很關(guān)鍵沒有超時(shí)控制遇到慢接口會(huì)一直掛住pd.json_normalize能把嵌套 JSON 展平成表格比手動(dòng)循環(huán)json.loads省事得多。實(shí)際大作業(yè)里我建議優(yōu)先走 CSV 或 Excel 數(shù)據(jù)因?yàn)樵u(píng)分和游客量字段可以直接用 Pandas 處理不用處理嵌套結(jié)構(gòu)。2.3 數(shù)據(jù)清洗去重、補(bǔ)缺失、時(shí)間格式化與異常值過濾無論數(shù)據(jù)從哪來清洗都是最耗時(shí)、也最能體現(xiàn)基本功的環(huán)節(jié)。四個(gè)動(dòng)作是必須做的按業(yè)務(wù)唯一鍵去重、用中位數(shù)或眾數(shù)填充缺失值、把時(shí)間字段統(tǒng)一成datetime類型、過濾明顯不合理的異常值。很多人跳過去重直接畫圖結(jié)果趨勢(shì)線出現(xiàn)雙倍峰值答辯時(shí)被問住非常尷尬。clean df.copy() # 1. 去重三個(gè)字段同時(shí)相同才算重復(fù)行 clean.drop_duplicates(subset[city, attraction, month], inplaceTrue) # 2. 缺失值評(píng)分用中位數(shù)填充價(jià)格缺省按 0 處理 clean[rating] clean[rating].fillna(clean[rating].median()) clean[price] clean[price].fillna(0) # 3. 時(shí)間統(tǒng)一字符串 2024-01 轉(zhuǎn)成月度時(shí)間對(duì)象 clean[month] pd.to_datetime(clean[month], format%Y-%m) # 4. 異常值過濾游客量為負(fù)或單月超千萬的刪掉 clean clean[(clean[visitors] 0) (clean[visitors] 1000)] # 清洗結(jié)果單獨(dú)存一份后續(xù)所有腳本都從這份讀入 clean.to_csv(clean_tourism.csv, indexFalse, encodingutf-8-sig) print(clean.info())drop_duplicates里的subset參數(shù)指定了“哪幾列一致才算重復(fù)”不用它的話只要有一列相同就會(huì)被刪。fillna用中位數(shù)而不是均值是因?yàn)樵u(píng)分字段往往有偏態(tài)分布均值容易被極端值拉偏。to_datetime的format%Y-%m指定了解析格式不寫它也能猜但遇到 “2024/01” 這類變體會(huì)解析失敗。最后utf-8-sig是為了讓 Excel 打開 CSV 時(shí)不亂碼具體原因在避坑章節(jié)細(xì)說。3. 分析維度拆解游客量、評(píng)分與價(jià)格的四個(gè)核心口徑3.1 月度游客量趨勢(shì)先聚合再畫圖別拿明細(xì)直接上折線拿到clean_tourism.csv之后最容易犯的錯(cuò)是直接拿明細(xì)數(shù)據(jù)去畫折線。每一行是一個(gè)景點(diǎn)的月度記錄幾百條線疊在一起畫出來的圖跟毛線團(tuán)一樣答辯老師一眼就看出你沒思路。正確做法是按月度匯總游客量再做趨勢(shì)分析。trend clean.groupby(clean[month].dt.to_period(M))[visitors].sum().reset_index() trend[month] trend[month].astype(str) # Period 對(duì)象轉(zhuǎn)字符串方便畫圖 print(trend.head())dt.to_period(M)把datetime截?cái)嗟皆路輌roupby后sum()得到每月總游客量。注意reset_index()不能省否則month會(huì)留在索引里后面畫圖時(shí)x軸取不到。這里先不急著畫聚合結(jié)果還可以繼續(xù)做環(huán)比計(jì)算trend[visitors].pct_change()能直接算月度環(huán)比增速寫報(bào)告時(shí)一句“暑期環(huán)比增長 42%”比放十張圖都有說服力。3.2 熱門目的地排名評(píng)論數(shù)、游客量與評(píng)分的交叉解讀排名是大作業(yè)里的必做項(xiàng)但只排一個(gè)指標(biāo)太單薄。常見做法是同時(shí)算三份排名按游客量、按評(píng)論數(shù)、按平均評(píng)分然后把它們放在一起交叉解讀。你會(huì)發(fā)現(xiàn)有意思的業(yè)務(wù)結(jié)論游客量最高的城市評(píng)分不一定最高評(píng)論數(shù)很多但評(píng)分偏低的景點(diǎn)很可能是服務(wù)沒跟上人流。top_visitors clean.groupby(city)[visitors].sum().sort_values(ascendingFalse).head(10) top_reviews clean.groupby(city)[reviews].sum().sort_values(ascendingFalse).head(10) top_rating clean.groupby(city)[rating].mean().sort_values(ascendingFalse).head(10) print(top_visitors) print(top_reviews) print(top_rating)這三個(gè)groupby的差異點(diǎn)在于聚合函數(shù)游客量和評(píng)論數(shù)用sum評(píng)分用mean。評(píng)分聚合后要留意樣本量某個(gè)城市只有一條評(píng)論且打了 5 分它就會(huì)排到第一這不代表真實(shí)水平。穩(wěn)妥做法是加一個(gè)過濾條件只保留評(píng)論數(shù)超過一定閾值的城市再算均分代碼里加一句clean clean[clean[reviews] 50]就行。3.3 門票價(jià)格與滿意度箱線圖與分組均值價(jià)格和滿意度之間的關(guān)系是最容易出彩的分析點(diǎn)。常見做法是把價(jià)格切成幾個(gè)區(qū)間對(duì)比各區(qū)間內(nèi)的平均評(píng)分。這里有一個(gè) Pandas 2.x 用戶容易踩的坑pd.cut分箱后groupby默認(rèn)會(huì)忽略空箱需要加observedTrue。bins [0, 50, 100, 200, 500] labels [0-50, 50-100, 100-200, 200以上] clean[price_band] pd.cut(clean[price], binsbins, labelslabels) band_stats clean.groupby(price_band, observedTrue)[rating].mean().reset_index() print(band_stats)pd.cut的bins定義了價(jià)格邊界labels是每個(gè)區(qū)間顯示的名字。observedTrue在 Pandas 2.0 之后是必須的否則會(huì)出現(xiàn)一排 NaN 的警告。分析結(jié)論通常是中低價(jià)位景區(qū)的滿意度反而高于高價(jià)景區(qū)這背后的業(yè)務(wù)解釋可以是“高價(jià)景區(qū)承載量過大體驗(yàn)下降”。寫報(bào)告時(shí)把這個(gè)結(jié)論放在圖旁邊比單純放一張箱線圖更顯思考深度。3.4 評(píng)論數(shù)與游客量的相關(guān)性先做正態(tài)檢驗(yàn)再選相關(guān)系數(shù)很多大作業(yè)喜歡算相關(guān)性但直接df.corr()就算完忽略了一個(gè)前提條件Pearson 相關(guān)系數(shù)要求變量近似正態(tài)分布。評(píng)論數(shù)和游客量這類業(yè)務(wù)數(shù)據(jù)幾乎都是右偏分布用 Pearson 會(huì)低估相關(guān)強(qiáng)度正確做法是先做正態(tài)性檢驗(yàn)再?zèng)Q定用什么系數(shù)。from scipy import stats # 先檢驗(yàn)評(píng)分字段是否正態(tài) shapiro stats.shapiro(clean[rating].dropna()) if shapiro.pvalue 0.05: corr clean[[rating, reviews]].corr(methodpearson) else: corr clean[[rating, reviews]].corr(methodspearman) print(corr)stats.shapiro返回(統(tǒng)計(jì)量, p值)p 值大于 0.05 認(rèn)為數(shù)據(jù)是正態(tài)的。業(yè)務(wù)數(shù)據(jù)大多落在 else 分支所以methodspearman是更常見的組合。另外注意corr()只對(duì)數(shù)值列生效如果city列混了進(jìn)來會(huì)報(bào)錯(cuò)所以要先取[rating, reviews]兩列。報(bào)告中寫清楚“評(píng)分與評(píng)論數(shù)呈弱正相關(guān)Spearman r0.32”其中方法名、系數(shù)、樣本量三要素齊備評(píng)分自然不會(huì)低。4. 可視化落地Matplotlib 靜態(tài)圖與 Pyecharts 大屏的搭配方案4.1 Matplotlib 出論文級(jí)靜態(tài)圖字體、配色與分辨率期末大作業(yè)的推薦策略是靜態(tài)圖放在報(bào)告正文里交互圖放在附錄或演示 HTML 里。Matplotlib 負(fù)責(zé)前者三個(gè)參數(shù)是隱形扣分點(diǎn)中文字體、負(fù)號(hào)顯示、保存分辨率。沒有配置中文字體所有標(biāo)簽都會(huì)變成方塊這在后面避坑章節(jié)會(huì)細(xì)講。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 中文字體 plt.rcParams[axes.unicode_minus] False # 負(fù)號(hào)正常顯示 fig, ax plt.subplots(figsize(10, 5)) ax.plot(trend[month], trend[visitors], markero, linewidth2) ax.set_title(月度游客量趨勢(shì)2024) ax.set_xlabel(月份) ax.set_ylabel(游客量萬人次) ax.tick_params(axisx, rotation45) # 月份過多時(shí)旋轉(zhuǎn)標(biāo)簽防重疊 fig.tight_layout() fig.savefig(trend.png, dpi300, bbox_inchestight)dpi300是期刊配圖的標(biāo)準(zhǔn)期末報(bào)告用 150 也夠但 300 會(huì)讓老師覺得你認(rèn)真。bbox_inchestight能自動(dòng)裁掉空白邊避免保存出來的圖四周一大片白。tick_params(rotation45)解決標(biāo)簽重疊問題別靠plt.xticks(rotation45)那種老寫法前者更清晰。如果SimHei在你的機(jī)器上不存在換成Microsoft YaHei或Noto Sans CJK SC都行關(guān)鍵是先確認(rèn)系統(tǒng)里有這個(gè)字體文件。4.2 Pyecharts 拼接可視化大屏Page 布局與交互效果Pyecharts 是當(dāng)前數(shù)據(jù)分析大作業(yè)里做“可視化大屏”的主流選擇因?yàn)樗?HTML可以動(dòng)態(tài)交互不用像 Flask 那樣自己搭前端。期末場(chǎng)景用Page組件把多張圖拼成一個(gè)縱向可滾動(dòng)的頁面即可不需要炫技。from pyecharts.charts import Bar, Line, Page from pyecharts import options as opts bar (Bar() .add_xaxis(top_visitors.index.tolist()) .add_yaxis(游客量, top_visitors.values.tolist()) .set_global_opts(title_optsopts.TitleOpts(title熱門目的地 TOP10))) line (Line() .add_xaxis(trend[month].tolist()) .add_yaxis(游客量, trend[visitors].tolist(), is_smoothTrue) .set_global_opts(title_optsopts.TitleOpts(title月度趨勢(shì)))) page Page(layoutPage.SimplePageLayout) page.add(bar, line) page.render(analysis_report.html)Page.SimplePageLayout會(huì)讓圖表縱向排列適合報(bào)告展示。add_xaxis需要 Python 列表所以前面分析結(jié)果里的index和values都要.tolist()這是最常見的類型報(bào)錯(cuò)來源。中間章節(jié)里的圖表關(guān)鍵還在于Pyecharts 版本不同 API 相差很大0.5.x 和 1.x 的寫法完全不同裝的時(shí)候直接指定pyecharts1.3.1能省下一堆報(bào)錯(cuò)。4.3 圖表選型表折線、柱狀、地圖、玫瑰圖各用在哪大作業(yè)最怕圖表“為用而用”。下面這張選型表是我做項(xiàng)目時(shí)的標(biāo)準(zhǔn)參考你可以直接抄進(jìn)報(bào)告附錄分析目標(biāo)推薦圖表Pyecharts 類型注意點(diǎn)月度趨勢(shì)折線圖Linex 軸必須是排序后的時(shí)間序列城市排名柱狀圖Bar先排序再取前 N地理分布地圖Map需要額外地圖資源離線易空白價(jià)格區(qū)間滿意度箱線圖Boxplot先做異常值過濾評(píng)分分布玫瑰圖Pierosetyperadius適合展示占比而非精確值評(píng)論數(shù)與游客量關(guān)系散點(diǎn)圖Scatter日志換算后再畫避免長尾擠壓這里重點(diǎn)說MapPyecharts 自帶的 1.x 版本地圖數(shù)據(jù)需要在聯(lián)網(wǎng)環(huán)境下載離線跑大概率白屏。期末答辯現(xiàn)場(chǎng)如果網(wǎng)絡(luò)不穩(wěn)定地圖組件會(huì)直接變成空白塊。穩(wěn)妥方案是放棄地圖改用柱狀圖按城市排布或者提前把地圖 JS 文件下載到本地在init_opts{js_host: ./js/}中指定本地路徑。5. 旅游網(wǎng)站數(shù)據(jù)分析避坑指南環(huán)境、字體與數(shù)據(jù)不一致的 5 個(gè)現(xiàn)場(chǎng)5.1 現(xiàn)象cmd 里輸 python 沒反應(yīng)雙擊腳本直接閃退這是最基礎(chǔ)也最影響心態(tài)的坑。原因九成是安裝時(shí)沒勾選 “Add Python to PATH”系統(tǒng)根本找不到python.exe。解決方法是重裝并勾選或者手動(dòng)把C:\Python3x\和C:\Python3x\Scripts\加進(jìn)系統(tǒng)環(huán)境變量。裝了 Anaconda 的用戶優(yōu)先用 “Anaconda Prompt” 運(yùn)行腳本里面的環(huán)境變量是配好的。血淚經(jīng)驗(yàn)不要在 Windows 自帶 cmd 里試python失敗后就放棄去查一下環(huán)境變量配置這屬于 python 安裝教程里反復(fù)強(qiáng)調(diào)但總有人忽略的一步。5.2 現(xiàn)象圖表標(biāo)題和坐標(biāo)軸中文全是方塊Matplotlib 默認(rèn)字體不含中文字形。如果你只設(shè)了font.sans-serif [SimHei]但系統(tǒng)沒有這個(gè)字體還是方塊。先執(zhí)行fc-list :langzhLinux/macOS或檢查C:\Windows\Fonts確認(rèn)字體是否存在沒有就去下載Noto Sans CJK SC安裝。裝完還沒用則是 Matplotlib 字體緩存的問題刪除~/.cache/matplotlib重啟 Python 即可。這個(gè)坑在 Linux 服務(wù)器上跑代碼時(shí)尤其頻繁本地 Windows 一般不缺 SimHei。5.3 現(xiàn)象Pyecharts 渲染出來是空白 HTML控制臺(tái)報(bào) 404兩種原因。第一種是 Pyecharts 版本錯(cuò)位用了 0.5.x 的舊代碼跑在 1.x 的環(huán)境里圖表對(duì)象直接不是預(yù)期結(jié)構(gòu)HTML 里什么都不會(huì)顯示。解決方法是統(tǒng)一釘版本pip install pyecharts1.3.1。第二種是資源加載問題1.x 默認(rèn)從 CDN 拉取 echarts 依賴網(wǎng)絡(luò)受限或離線環(huán)境下圖表區(qū)域空白。解決方法是把echarts.min.js下載到項(xiàng)目js/目錄然后生成圖表時(shí)傳入init_opts{js_host: ./js/, theme: white}。5.4 現(xiàn)象CSV 用 Excel 打開中文全亂Notepad 打開正常原因很明確Pandas 默認(rèn)用utf-8寫入 CSV而 Excel 對(duì)無 BOM 的 UTF-8 識(shí)別不穩(wěn)定。解決方法是寫文件時(shí)指定encodingutf-8-sig這是 UTF-8 帶 BOM 的別名。前面第 2 章的清洗代碼里我已經(jīng)用了這個(gè)參數(shù)但如果你使用to_excel則不存在這個(gè)問題Excel 原生支持 xlsx 格式的中文。注意盡量不要在清洗階段用latin1或gbk編碼后續(xù)重新讀入時(shí)會(huì)遇到一堆編碼報(bào)錯(cuò)。5.5 現(xiàn)象答辯 PPT 里的數(shù)字和數(shù)據(jù)腳本跑出來的對(duì)不上這個(gè)問題非常隱蔽。原因通常是數(shù)據(jù)源不止一個(gè)或者腳本每次運(yùn)行都重新生成了模擬數(shù)據(jù)。比如你報(bào)告里寫“全年游客量 3200 萬”但答辯前重新運(yùn)行腳本因?yàn)槟M數(shù)據(jù)的隨機(jī)種子沒固定數(shù)字變成了 3100 萬當(dāng)場(chǎng)翻車。解決方法是清洗完成后立刻存一份clean_tourism.csv快照后續(xù)分析和畫圖全部從快照讀入如果數(shù)據(jù)是隨機(jī)生成的在頂部加一行np.random.seed(42)。另外統(tǒng)計(jì)口徑也要寫清楚比如“游客量”是包含所有月份還是只含旺季避免口徑不一致。6. 答辯加分技巧把“能跑”變成“有說服力”的三個(gè)習(xí)慣6.1 把項(xiàng)目拆成三個(gè)腳本答辯時(shí)能一鍵復(fù)現(xiàn)不要把所有代碼寫在一個(gè)大 Notebook 里。按階段拆成data_clean.py、analysis.py、visual.py三個(gè)文件每個(gè)文件末尾留一個(gè)if __name__ __main__:入口。答辯時(shí)老師如果問“這個(gè)圖怎么來的”你可以當(dāng)場(chǎng)運(yùn)行python visual.py幾秒鐘重現(xiàn)全部圖表。這個(gè)習(xí)慣在期末大作業(yè)和后續(xù)工作中都受用。6.2 用 Page 生成一個(gè)總 HTML所有圖表放一頁與其讓老師在多個(gè) Notebook 輸出之間來回跳不如用 Pyecharts 的Page把所有圖表拼成一個(gè)analysis_report.html。打開就是完整可視化報(bào)告滾動(dòng)即可查看全部圖表。如果你想更進(jìn)一步也可以使用Tab組件把圖表按“趨勢(shì) / 排名 / 價(jià)格”分組放在不同標(biāo)簽頁交互感更強(qiáng)。6.3 每張圖標(biāo)題直接寫業(yè)務(wù)結(jié)論不寫“游客量趨勢(shì)圖”圖表標(biāo)題是老師的閱讀路徑。把“游客量趨勢(shì)圖”改成“暑期游客量為全年峰值、較春季增長 42%”把“熱門目的地排名”改成“TOP10 城市游客量占全網(wǎng) 73%頭部效應(yīng)明顯”。這一改動(dòng)不需要額外代碼只是把你的分析結(jié)論前置效果立竿見影。數(shù)據(jù)會(huì)自己說話是假的需要你替它說。我做這類項(xiàng)目養(yǎng)成的習(xí)慣是每次跑完分析先在記事本上寫三行“最核心的發(fā)現(xiàn)”再回頭決定畫哪些圖。圖表永遠(yuǎn)為結(jié)論服務(wù)而不是為了湊頁數(shù)。希望這份思路能幫你把那份.zip變成一份真正能打的大作業(yè)也希望你答辯順利。本文還有配套的精品資源點(diǎn)擊獲取