怎么做一個(gè)手機(jī)網(wǎng)站app拉新項(xiàng)目一手渠道商
在數(shù)據(jù)分析中,不管是市場(chǎng)研究還是科學(xué)分析,經(jīng)常需要使用Python進(jìn)行數(shù)據(jù)分析并生成圖表報(bào)告。一般使用Python生成和展示圖表時(shí)都是使用matplotlib 庫(kù)生成靜態(tài)圖片文件,這種方式不便之處是不方便跟動(dòng)態(tài)文字段落結(jié)合在一起,也不方便分享。特別是我們需要使用Python定時(shí)自動(dòng)生成數(shù)據(jù)分析報(bào)告并通過網(wǎng)絡(luò)發(fā)布時(shí),如果使用Flask等網(wǎng)絡(luò)框架,技術(shù)門檻比較高,實(shí)現(xiàn)復(fù)雜。本文探討使用一種非常直接簡(jiǎn)單的方法來(lái)使用Python不依賴其他網(wǎng)絡(luò)庫(kù)直接生成圖文并茂的網(wǎng)頁(yè)文件,這種方法可以廣泛應(yīng)用到數(shù)據(jù)分析里。
思路和實(shí)現(xiàn)步驟
先利用 matplotlib 庫(kù)繪制精美的數(shù)據(jù)圖表,對(duì)數(shù)據(jù)進(jìn)行直觀呈現(xiàn),接著將生成的圖表保存為圖片,再使用html代碼模版以文本形式調(diào)用圖片路徑,然后將生成的HTML代碼通過Python的文件讀寫功能以文本的形式保存為文件,文件格式設(shè)置為html。最后自動(dòng)打開默認(rèn)瀏覽器打開這個(gè)剛生成的html文件,這樣Python程序運(yùn)行完就馬上看到了生成的圖文并茂的html數(shù)據(jù)分析報(bào)告了。。
這個(gè)Python程序的主要功能是生成一個(gè)包含數(shù)據(jù)可視化圖表和特定HTML內(nèi)容的網(wǎng)頁(yè),并自動(dòng)在默認(rèn)瀏覽器中打開該網(wǎng)頁(yè)。以下是對(duì)程序的詳細(xì)總結(jié):
1. 數(shù)據(jù)可視化部分
- 導(dǎo)入必要的庫(kù):導(dǎo)入了
pylab
、webbrowser
、matplotlib.pyplot
,其中matplotlib.pyplot
用于繪制圖表,webbrowser
用于在瀏覽器中打開網(wǎng)頁(yè)。 - 設(shè)置圖表參數(shù):
- 設(shè)置圖片的像素、分辨率和圖表的尺寸。
- 解決中文顯示問題,指定默認(rèn)字體為
SimHei
,并解決負(fù)號(hào)顯示為方塊的問題。
- 定義數(shù)據(jù):定義了兩個(gè)數(shù)據(jù)列表
y
和y2
,以及對(duì)應(yīng)的x
軸標(biāo)簽列表。 - 繪制圖表:
- 設(shè)置圖表的標(biāo)題、
x
軸和y
軸的標(biāo)簽。 - 使用
plt.plot()
函數(shù)繪制兩條折線圖,分別標(biāo)記為Y
和Y2
,并設(shè)置了線條的顏色、標(biāo)記樣式等。 - 使用
legend()
函數(shù)顯示圖例。 - 將
x
軸標(biāo)簽傾斜45度。 - 在每個(gè)數(shù)據(jù)點(diǎn)上添加數(shù)字標(biāo)簽。
- 在指定位置添加文本說明。
- 反轉(zhuǎn)
y
軸。 - 將生成的圖表保存為
1.jpg
文件,并顯示圖表,最后關(guān)閉圖表窗口。
- 設(shè)置圖表的標(biāo)題、
2. HTML文件生成部分
- 創(chuàng)建HTML文件:創(chuàng)建兩個(gè)HTML文件
test.html
和test2.html
(這是為了測(cè)試對(duì)比,實(shí)際只需要生成1個(gè)文件)。 - 寫入HTML內(nèi)容:
- 在
test2.html
中寫入包含標(biāo)題的HTML內(nèi)容。 - 在
test.html
中寫入包含圖片鏈接和自定義HTML內(nèi)容的消息,其中圖片鏈接指向之前生成的1.jpg
文件。
- 在
- 關(guān)閉文件:關(guān)閉兩個(gè)HTML文件。
3. 瀏覽器打開部分
- 使用
webbrowser.open()
函數(shù)在默認(rèn)瀏覽器中打開test.html
文件。
綜上所述,該程序的主要目的是將數(shù)據(jù)可視化圖表和特定的HTML內(nèi)容整合到一個(gè)網(wǎng)頁(yè)中,并自動(dòng)在瀏覽器中展示。
最后上完整代碼:
# coding:utf-8
"""
此 Python 代碼具備強(qiáng)大的功能,能將數(shù)據(jù)可視化與網(wǎng)頁(yè)生成巧妙結(jié)合。它先利用 matplotlib 庫(kù)繪制精美的折線圖,對(duì)數(shù)據(jù)進(jìn)行直觀呈現(xiàn),解決了中文顯示、負(fù)號(hào)顯示等細(xì)節(jié)問題。接著將生成的圖表保存為圖片,再自動(dòng)創(chuàng)建 HTML 文件,把圖表和預(yù)設(shè)的 HTML 內(nèi)容整合到網(wǎng)頁(yè)中,最后自動(dòng)在默認(rèn)瀏覽器中打開網(wǎng)頁(yè),實(shí)現(xiàn)數(shù)據(jù)的可視化展示與傳播。
適用人群
適合數(shù)據(jù)分析師、營(yíng)銷人員、學(xué)生等人群。數(shù)據(jù)分析師可用其直觀展示數(shù)據(jù)分析結(jié)果;營(yíng)銷人員能借此展示銷售數(shù)據(jù)、市場(chǎng)趨勢(shì)等;學(xué)生則可用于課程作業(yè)、項(xiàng)目展示等。
yl,2024年
"""
from pylab import *
import webbrowser #瀏覽器控制庫(kù),如果僅僅是生成html文件可以不用
import matplotlib.pyplot as pltstr='查看=[21-1-10 - 21-1-16]'#figsize(12.5, 4) # 設(shè)置 figsize
plt.rcParams['savefig.dpi'] = 300 #圖片像素
plt.rcParams['figure.dpi'] = 200 #分辨率
# 默認(rèn)的像素:[6.0,4.0],分辨率為100,圖片尺寸為 600&400
# 指定dpi=200,圖片尺寸為 1200*800
# 指定dpi=300,圖片尺寸為 1800*1200
# 設(shè)置figsize可以在不改變分辨率情況下改變比例
#解決中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認(rèn)字體
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題
plt.rcParams['figure.figsize'] = (10.0, 6.0) # 設(shè)置figure_size尺寸
font_label = {'family':'SimHei',
'weight' : 'normal',
'size' : 20,
}
y=[1,23,19,2300,3,5,12,2300,19,23,3,500,12]
y2=[2,24,23,3,9,110,13,23,1300,26,3,9,10000]
x=['2021-02-22','2021-03-22','2021-04-22','c','d','e','f','O','j','feb','jan','mar','oct']
plt.title('Keyword Ranking銷售排名',fontdict={'size':20},loc='center')
plt.xlabel('X軸',fontdict=font_label)
plt.ylabel('Y軸',fontdict=font_label)
plt.plot(x,y,linewidth=3,color='r',marker='D',markerfacecolor='yellow', markersize=5,linestyle='-',label='Y') #標(biāo)記線為紅色r,標(biāo)點(diǎn)為大菱形D,風(fēng)格為虛線
plt.plot(x,y2,color='b',marker='p',linestyle='-',label='Y2')
legend(loc='best',title='Name') #在plot()函數(shù)中增加一個(gè)參數(shù)label,再通過legend()函數(shù)顯示圖例
plt.xticks(rotation=45) #X橫坐標(biāo)傾斜60度
#plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) #將說明圖表放置在圖表外# 設(shè)置數(shù)字標(biāo)簽
for a, b in zip(x, y):plt.text(a, b, b, ha='center', va='top', fontsize=10) #fontsize,style,ha,va參數(shù)分別是字號(hào),字體,垂直對(duì)齊方式,水平對(duì)齊方式
for a, b in zip(x, y2):plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
plt.text(5,500,'相關(guān)系數(shù):\n增長(zhǎng)幅度:',ha='center', va='top', fontsize=10,color='b') #前面2個(gè)參數(shù)為x,y對(duì)應(yīng)坐標(biāo)值ax = plt.gca()
ax.invert_yaxis() #y軸反向
plt.savefig('1.jpg',dpi=100)
#plt.show()
plt.close()# 命名生成的html
GEN_HTML = "test.html"
htmlfile2="test2.html"
# 打開文件,準(zhǔn)備寫入
f = open(GEN_HTML, 'w',encoding='UTF-8')
f2=open(htmlfile2,'w',encoding='UTF-8')
title="這是產(chǎn)品標(biāo)題"
body="<p><h1>標(biāo)題</h1></p>"
html="""
<html><head><title>%s</title></head><body>%s</body
</html>
"""%(title,body)
f2.write(html)
f2.close()
print(f"成功了")
# 準(zhǔn)備相關(guān)變量
str1 = """
<h1>這是標(biāo)題</h1>
<a class="a-link-normal s-no-outline" href="/gp/slredirect/picassoRedirect.html/ref=pa_sp_atf_aps_sr_pg1_1?ie=UTF8&adId=A07267723HYUM7A1IS3F4&url=%2FNew-Star-Foodservice-Commercial-Suction%2Fdp%2FB00DVXLML4%2Fref%3Dsr_1_1_sspa%3Fcrid%3D3D71DEYXHO6JB%26dchild%3D1%26keywords%3Dfrench%2Bfry%2Bcutter%26qid%3D1614913550%26sprefix%3Dfrench%2B%252Caps%252C470%26sr%3D8-1-spons%26psc%3D1&qualifier=1614913550&id=5497147329523695&widgetName=sp_atf">
<div class="a-section aok-relative s-image-square-aspect">
<img src="https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL320_.jpg" class="s-image" alt="Sponsored Ad - New Star Food Service 42313 Commercial Restaurant French Fry Cutter with Suction Feet, 1/2-Inch" srcset="https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL320_.jpg 1x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL480_FMwebp_QL65_.jpg 1.5x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL640_FMwebp_QL65_.jpg 2x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL800_FMwebp_QL65_.jpg 2.5x, https://m.media-amazon.com/images/I/81OLbMS+cHL._AC_UL960_FMwebp_QL65_.jpg 3x" data-image-index="2" data-image-load="" data-image-latency="s-product-image" data-image-source-density="1">
</div>
</a>"""str2 = r'''
<img <img alt="測(cè)試圖" src="1.jpg"><b>加粗</b>
<div><div><ul><li font="50"> <h1>評(píng)論與銷售分析</h1></li><li> 評(píng)分?jǐn)?shù)相關(guān)分析</li></ul><div><table><tr><td> table </td><td bgcolor="#0fff90"> table2 </td></tr></table></div></div
</div>
'''# 寫入HTML界面中
message = """
<html>
<head></head>
<body>
<p>%s</p>
<p>%s</p>
</body>
</html>
""" % (str1, str2)# 寫入文件
f.write(message)
# 關(guān)閉文件
f.close()# 自動(dòng)調(diào)用網(wǎng)絡(luò)瀏覽器打開剛才生成的網(wǎng)頁(yè)文件
webbrowser.open(GEN_HTML, new=0)