目錄
前言
一,TDSQL-C Serverless產(chǎn)品介紹
二,學(xué)到什么
三,準(zhǔn)備階段
?1.申請TDSQL-C數(shù)據(jù)庫(第一種方式)
1.1 進(jìn)行注冊登錄
1.2點(diǎn)擊紅圈進(jìn)行選購
1.3選購頁面的配置
1.4基礎(chǔ)信息填寫
2.申請TDSQL-C數(shù)據(jù)庫(第二種方式成為測試者)
2.1如何成為測試者
2.2成為測試者的福利
福利1:
福利2:?
2.3測評方向
四,進(jìn)行數(shù)據(jù)準(zhǔn)備
五,使用PyCharm創(chuàng)建項(xiàng)目工程
六,連接TDSQL-C數(shù)據(jù)庫
七,創(chuàng)建數(shù)據(jù)庫
1.如圖點(diǎn)擊登錄?編輯
2.點(diǎn)擊?新建,然后點(diǎn)擊新建庫?編輯
3.點(diǎn)擊新建數(shù)據(jù)庫?編輯
4.定義自己的數(shù)據(jù)庫名?編輯
5.出現(xiàn)自己定義的數(shù)據(jù)庫名后?編輯
八,對制作詞云圖相關(guān)代碼的講解
(1).先導(dǎo)入庫
(2).MySql數(shù)據(jù)庫連接配置
(3)創(chuàng)建讀取excel文件
(4)根據(jù)excel文件名創(chuàng)建數(shù)據(jù)庫表名
(5)將讀取的excel數(shù)據(jù)保存到數(shù)據(jù)庫對應(yīng)的表中
(6)讀取數(shù)據(jù)庫中存入的數(shù)據(jù)
(7)執(zhí)行主函數(shù),并生成詞云圖
(8)完整代碼
九,詞云效果顯示
1.運(yùn)行代碼后的效果展示?編輯
?2.數(shù)據(jù)庫的表展示?編輯
十,銷毀數(shù)據(jù)庫
十一,總結(jié)
前言
???自己是一位準(zhǔn)大二學(xué)生,最近在學(xué)習(xí)數(shù)據(jù)庫的相關(guān)知識,偶然間看到這個(gè)活動(dòng),決心參加并提高自己,文章如果有什么不好之處,忘各位勿噴??梢栽?strong>評論區(qū)留言,給我一些建議,我會虛心接受,并改進(jìn)文章。
? ?今天我給大家分享一下我對騰訊云TDSQL-C Serverless產(chǎn)品的體驗(yàn)流程以及體驗(yàn)過程的感受。騰訊云的TDSQL-C Serverless產(chǎn)品簡直是互聯(lián)網(wǎng)開發(fā)者的福音!
一,TDSQL-C Serverless產(chǎn)品介紹
? ? ?讓我們來談?wù)勈裁词荰DSQL-C Serverless。這是一個(gè)基于云的關(guān)系型數(shù)據(jù)庫,它“Serverless”為特點(diǎn),意味著我無需擔(dān)心硬件資源的配置和管理。它可以根據(jù)實(shí)際需求自動(dòng)調(diào)整容量,并根據(jù)數(shù)據(jù)庫的負(fù)載情況按需分配資源。對于我們來說,現(xiàn)在可以專注于開發(fā)應(yīng)用,而不用擔(dān)心數(shù)據(jù)庫的管理。
TDSQL-C是騰訊云自研的新一代云原生關(guān)系型數(shù)據(jù)庫,它整合了傳統(tǒng)數(shù)據(jù)庫、云計(jì)算和新硬件技術(shù)的優(yōu)勢。主要特點(diǎn)包括:
兼容性:TDSQL-C完全兼容MySQL,用戶可以無縫遷移已有的MySQL應(yīng)用到TDSQL-C上,無需修改代碼。
彈性和高性能:TDSQL-C具備極致的彈性和高性能,能夠支持超過百萬的QPS(每秒查詢率)。
高可用和高可靠:TDSQL-C通過分布式架構(gòu)和自動(dòng)數(shù)據(jù)備份機(jī)制,實(shí)現(xiàn)了高可用性和高可靠性,確保數(shù)據(jù)的安全和可靠性。
安全性:TDSQL-C提供了多種安全措施,包括連接加密、訪問控制、安全審計(jì)等,保障數(shù)據(jù)的安全性。
不僅如此,TDSQL-C還實(shí)現(xiàn)了PB級的海量分布式智能存儲和Serverless秒級伸縮功能,為企業(yè)加速完成數(shù)字化轉(zhuǎn)型提供了強(qiáng)大的支持。
? ? ?針對Serverless服務(wù),它是TDSQL-C MySQL版的無服務(wù)器架構(gòu)版本,完全基于Serverless架構(gòu),提供按實(shí)際計(jì)算和存儲資源使用量計(jì)費(fèi)的方式,通俗來說就是和水電費(fèi)一樣,用多少花多少錢,這意味著我們只需按實(shí)際使用的資源付費(fèi),避免了閑置資源的浪費(fèi),同時(shí)也使更多人受益。
二,學(xué)到什么
1.如何申請TDSQL-C數(shù)據(jù)庫:注冊騰訊云賬號及準(zhǔn)備工作,進(jìn)入騰訊云控制臺。
2.如何進(jìn)行配置TDSQL-C數(shù)據(jù)庫:選購與頁面管理等相關(guān)內(nèi)容,以及如何參加這個(gè)測評,獲取測評資格。
3.進(jìn)行項(xiàng)目配置:鏈接并配置TDSQL-C數(shù)據(jù)庫。
4.對制作詞云圖相關(guān)代碼的講解:創(chuàng)建讀取excel文件,根據(jù)excel文件名創(chuàng)建數(shù)據(jù)庫表名,將讀取的excel 數(shù)據(jù)保存到數(shù)據(jù)庫對應(yīng)的表中,讀取數(shù)據(jù)庫中存入的數(shù)據(jù),執(zhí)行主函數(shù),并生成詞云圖等python代碼的講解。
5.對數(shù)據(jù)庫的應(yīng)用以及我自己的個(gè)人心得
三,準(zhǔn)備階段
?1.申請TDSQL-C數(shù)據(jù)庫(第一種方式)
? ?1.1 進(jìn)行注冊登錄
第一步點(diǎn)擊進(jìn)入
TDSQL-C MySQL 版_云原生關(guān)系型數(shù)據(jù)庫_企業(yè)級云原生數(shù)據(jù)庫-騰訊云 (tencent.com)https://cloud.tencent.com/product/cynosdb
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 接下來
? ? ? ? ? ? ? ? ? ? ? ? ?點(diǎn)擊注冊后自行選擇自己的方式進(jìn)行注冊并登錄?
1.2點(diǎn)擊紅圈進(jìn)行選購
?1.3選購頁面的配置
我的配置如下:
?
?按照圖片中的信息選擇即可
1.4基礎(chǔ)信息填寫
這里我們需要的操作有三個(gè),一個(gè)是輸入自己的密碼,第二個(gè)是選擇表名大小寫不敏感,最后一個(gè)就是勾選同意協(xié)議。
配置完后我們點(diǎn)擊右下角的立即購買,會彈出一個(gè)窗口,我們繼續(xù)點(diǎn)擊紅圈
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?購買完后會出現(xiàn)彈出,我們點(diǎn)擊前往管理界面
進(jìn)入管理頁面后,往下劃,找到讀寫實(shí)例點(diǎn)擊開啟外部
創(chuàng)建并授權(quán)
ok,配置到這里就全部結(jié)束了
2.申請TDSQL-C數(shù)據(jù)庫(第二種方式成為測試者)
2.1如何成為測試者
??????成為測試者,說是白嫖,可以直接進(jìn)行測試,也不用進(jìn)行上述的操作,就可以開始使用了,不如說是一種互利共贏把,相信在產(chǎn)品測評階段,公司需要我們測試者對其產(chǎn)品的測試并給出寶貴意見,很感謝有這次活動(dòng)能給我一個(gè)學(xué)習(xí)機(jī)會。
下面是參加本次活動(dòng)的鏈接:
CSDNhttps://marketing.csdn.net/p/0b7f2a95bede3da9f4f9c20813988e69
?點(diǎn)擊立即報(bào)名后,會進(jìn)行填寫表單,這里學(xué)生也可以報(bào)名,公司那欄填個(gè)無。
? ? ? ? ?填寫完成后會出現(xiàn)一個(gè)二維碼,因?yàn)槠脚_不讓顯示二維碼,我就不放出來了。?
進(jìn)入群里后,發(fā)這句話? ? ? @Lear ?測試TDSQL-C的數(shù)據(jù)庫配置? ?
她回復(fù)后,然后添加Lear,私聊就會發(fā)給你配置好的測試數(shù)據(jù)庫信息
這個(gè)我就不放出來了,我還要用。具體怎么使用在后面會提到?
2.2成為測試者的福利
福利1:
福利2:?
? ? ? ? ? ? ? ? ? ? ?可以進(jìn)行配套進(jìn)行系統(tǒng)學(xué)習(xí)和對數(shù)據(jù)庫進(jìn)行使用,也可以提高自己。?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這里把鏈接給大家
騰訊云開發(fā)者社區(qū)-騰訊云騰訊云開發(fā)者社區(qū)是騰訊云官方開發(fā)者社區(qū),致力于打造開發(fā)者的技術(shù)分享型社區(qū)。提供專欄,問答,沙龍等產(chǎn)品和服務(wù),匯聚海量精品云計(jì)算使用和開發(fā)經(jīng)驗(yàn),致力于幫助開發(fā)者快速成長與發(fā)展,營造開放的云計(jì)算技術(shù)生態(tài)圈。https://cloud.tencent.com/developer/learning/camp/6
? ? ? ? ? ? ? ? ? ? ? 其實(shí)福利什么的并不重要,重要的是給了小白一個(gè)學(xué)習(xí)的機(jī)會。
2.3測評方向
這里不是我不放出來,是我不清楚會不會違規(guī),這個(gè)在進(jìn)入群后,群公告會有。
四,進(jìn)行數(shù)據(jù)準(zhǔn)備
實(shí)現(xiàn)詞云圖所需數(shù)據(jù)如下:
1.詞頻
2.要展示詞云形狀的背景圖
3.詞云所使用的字體文件
下載地址:
詞頻
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/%E8%AF%8D%E9%A2%91.ziphttps://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/%E8%AF%8D%E9%A2%91.zip背景圖
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/background.PNG.ziphttps://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/background.PNG.zip字體
https://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/PingFangBold.ttfhttps://tdsql-c-1253910586.cos.ap-nanjing.myqcloud.com/PingFangBold.ttf
五,使用PyCharm創(chuàng)建項(xiàng)目工程
這里按照圖中創(chuàng)建好項(xiàng)目和文件夾,將下載的內(nèi)容放入對應(yīng)的文件夾
對文件夾的作用進(jìn)行解讀:
- 詞云圖文件夾可以用來做為生成圖片的存儲路徑
- 詞頻是數(shù)據(jù)詞云圖數(shù)據(jù)的來源
- 字體文件則是詞云圖的中以什么字體展現(xiàn)
background.png
?作為詞云圖背景圖sever.py
?為代碼部分
六,連接TDSQL-C數(shù)據(jù)庫
找到讀寫實(shí)例
?對應(yīng)將信息填入即可,成為測試者的人員,可以直接將發(fā)給你的配置信息填寫進(jìn)去就ok了。
當(dāng)然數(shù)據(jù)庫只填寫發(fā)給你的其中一個(gè)就行。
七,創(chuàng)建數(shù)據(jù)庫
1.如圖點(diǎn)擊登錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.點(diǎn)擊?新建,然后點(diǎn)擊新建庫
?3.點(diǎn)擊新建數(shù)據(jù)庫
?4.定義自己的數(shù)據(jù)庫名
?5.出現(xiàn)自己定義的數(shù)據(jù)庫名后
ok,到這里,創(chuàng)建數(shù)據(jù)庫就結(jié)束了 ,將創(chuàng)建的數(shù)據(jù)庫名填寫到連接配置的datebase部分
八,對制作詞云圖相關(guān)代碼的講解
接下來我將解的代碼是按順序進(jìn)行的,最后只需要將其組合,即可成為完整的代碼。
如果只是進(jìn)行測試的話,只需要改動(dòng)一小部分代碼即可,我會用藍(lán)色字在代碼解讀中標(biāo)出來
(1).先導(dǎo)入庫
?庫的版本其中wordcloud庫如果無法安裝可以是使用最新版本
(2).MySql數(shù)據(jù)庫連接配置
這里大家自行填入,代碼如下:
# MySql數(shù)據(jù)庫連接配置
db_config = {
'host': "", # 主機(jī)名
'port': , # 端口
'user': "", # 賬戶
'password': "", # 密碼
'database': '', # 這里需要?jiǎng)?chuàng)建自己的數(shù)據(jù)庫創(chuàng)建的數(shù)據(jù)庫名
(3)創(chuàng)建讀取excel文件
代碼如下:
# 創(chuàng)建讀取excel文件的函數(shù)
def excelTomysql():
path = '詞頻/詞頻' # 文件所在文件夾
files = [path + "/" + i for i in os.listdir(path)] # 獲取文件夾下的文件名,并拼接完整路徑
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作為表名,去除文件擴(kuò)展名
# 使用pandas庫讀取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假設(shè)第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 動(dòng)態(tài)生成列名和數(shù)據(jù)類型
create_table(table_name, columns) # 創(chuàng)建表
save_to_mysql(data, table_name) # 將數(shù)據(jù)保存到MySQL數(shù)據(jù)庫中,并使用文件名作為表名
print(filename + ' uploaded and saved to MySQL successfully')
重要代碼部分解讀:
path = '詞頻/詞頻'
:設(shè)置文件夾路徑,假設(shè) Excel 文件都存儲在名為"詞頻"的文件夾中。(注意這段代碼只需要將這部分改為你的存放詞頻的文件夾路徑)
files = [path + "/" + i for i in os.listdir(path)]
:使用os.listdir()
獲取文件夾中的所有文件名,并通過列表推導(dǎo)式構(gòu)建完整的文件路徑列表。
for file_path in files:
:對每個(gè)文件進(jìn)行迭代。
print(file_path)
:打印當(dāng)前文件的完整路徑。
filename = os.path.basename(file_path)
:使用os.path.basename()
獲取文件名(包括擴(kuò)展名)。
table_name = os.path.splitext(filename)[0]
:使用os.path.splitext()
獲取文件的擴(kuò)展名,并通過索引取得文件名,去除文件擴(kuò)展名,作為表名。
data = pd.read_excel(file_path, engine="openpyxl", header=0)
:使用 pandas 庫的read_excel()
方法讀取 Excel 文件,指定引擎為"openpyxl",header參數(shù)指定第一行為列名。
columns = {col: "VARCHAR(255)" for col in data.columns}
:根據(jù)數(shù)據(jù)的列名動(dòng)態(tài)生成一個(gè)字典columns
,其中鍵為列名,值為"VARCHAR(255)",表示列的數(shù)據(jù)類型為字符串。
create_table(table_name, columns)
:調(diào)用一個(gè)名為create_table()
的函數(shù),用于創(chuàng)建一個(gè)表,傳遞表名和列名數(shù)據(jù)作為參數(shù)。
save_to_mysql(data, table_name)
:調(diào)用一個(gè)名為save_to_mysql()
的函數(shù),用于將數(shù)據(jù)保存到 MySQL 數(shù)據(jù)庫中,傳遞數(shù)據(jù)和表名作為參數(shù)。
print(filename + ' uploaded and saved to MySQL successfully')
:打印上傳并成功保存到 MySQL 數(shù)據(jù)庫的文件名。
(4)根據(jù)excel文件名創(chuàng)建數(shù)據(jù)庫表名
代碼入下:
# 根據(jù)excel文件名創(chuàng)建數(shù)據(jù)庫表名
def create_table(table_name, columns):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 組裝創(chuàng)建表的 SQL 查詢語句
query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
for col_name, col_type in columns.items():
query += f"{col_name} {col_type}, "
query = query.rstrip(", ") # 去除最后一個(gè)逗號和空格
query += ")"
# 執(zhí)行創(chuàng)建表的操作
cursor.execute(query)
# 提交事務(wù)并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
重要代碼部分解讀:
建立MySQL數(shù)據(jù)庫連接,通過pymysql庫的
connect()
方法和**db_config
參數(shù)來連接數(shù)據(jù)庫。創(chuàng)建一個(gè)游標(biāo)對象
cursor
,用于執(zhí)行 SQL 語句。組裝創(chuàng)建表的 SQL 查詢語句。使用
f-string
將表名和列名與數(shù)據(jù)類型拼接成一個(gè)字符串。表名由參數(shù)table_name
提供,列名和數(shù)據(jù)類型由columns
字典提供。循環(huán)遍歷
columns
字典的鍵值對,將列名和數(shù)據(jù)類型拼接到查詢語句中。使用
rstrip(", ")
方法去除查詢語句中最后一個(gè)逗號和空格。將拼接完成的查詢語句賦值給變量
query
。執(zhí)行創(chuàng)建表的操作,使用
cursor.execute(query)
方法執(zhí)行查詢語句。提交事務(wù),使用
conn.commit()
方法確保查詢的結(jié)果被提交到數(shù)據(jù)庫。關(guān)閉游標(biāo)和數(shù)據(jù)庫連接,使用
cursor.close()
和conn.close()
方法。
(5)將讀取的excel數(shù)據(jù)保存到數(shù)據(jù)庫對應(yīng)的表中
代碼入下:
# 將讀取的excel 數(shù)據(jù)保存到數(shù)據(jù)庫對應(yīng)的表中
def save_to_mysql(data, table_name):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 將數(shù)據(jù)寫入MySQL表中(假設(shè)數(shù)據(jù)只有一個(gè)Sheet)
for index, row in data.iterrows():
query = f"INSERT INTO {table_name} ("
for col_name in data.columns:
query += f"{col_name}, "
query = query.rstrip(", ") # 去除最后一個(gè)逗號和空格
query += ") VALUES ("
values = tuple(row)
query += ("%s, " * len(values)).rstrip(", ") # 動(dòng)態(tài)生成值的占位符
query += ")"
cursor.execute(query, values)
# 提交事務(wù)并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
重要代碼部分解讀:
建立 MySQL 數(shù)據(jù)庫連接,通過 pymysql 庫的?
connect()
?方法和?**db_config
?參數(shù)來連接數(shù)據(jù)庫。創(chuàng)建一個(gè)游標(biāo)對象?
cursor
,用于執(zhí)行 SQL 語句。使用?
iterrows()
?方法循環(huán)遍歷數(shù)據(jù)框架?data
?中的每一行數(shù)據(jù)。組裝插入數(shù)據(jù)的 SQL 查詢語句。使用?
f-string
?將表名和列名拼接到查詢語句中。循環(huán)遍歷數(shù)據(jù)框架的列名,將列名拼接到查詢語句中。
使用?
rstrip(", ")
?方法去除查詢語句中最后一個(gè)逗號和空格。將拼接完成的查詢語句賦值給變量?
query
。使用?
tuple(row)
?將當(dāng)前行的數(shù)據(jù)轉(zhuǎn)換為元組?values
。使用?
("%s, " * len(values)).rstrip(", ")
?動(dòng)態(tài)生成值的占位符,并將占位符拼接到查詢語句中。使用?
cursor.execute(query, values)
?方法執(zhí)行查詢語句,并傳遞元組?values
?作為參數(shù)。提交事務(wù),使用?
conn.commit()
?方法確保查詢的結(jié)果被提交到數(shù)據(jù)庫。關(guān)閉游標(biāo)和數(shù)據(jù)庫連接,使用?
cursor.close()
?和?conn.close()
?方法。
(6)讀取數(shù)據(jù)庫中存入的數(shù)據(jù)
代碼入下:
# 讀取數(shù)據(jù)庫中存入的數(shù)據(jù)
def query_data():
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查詢所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
data = []
dic_list = []
table_name_list = []
for table in tables:
# for table in [tables[-1]]:
table_name = table[0]
table_name_list.append(table_name)
query = f"SELECT * FROM {table_name}"
# # 執(zhí)行查詢并獲取結(jié)果
cursor.execute(query)
result = cursor.fetchall()
if len(result) > 0:
columns = [desc[0] for desc in cursor.description]
table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
data.extend(table_data)
dic = {}
for i in data:
dic[i['word']] = float(i['count'])
dic_list.append(dic)
conn.commit()
cursor.close()
conn.close()
return dic_list, table_name_list
重要代碼部分解讀:
建立 MySQL 數(shù)據(jù)庫連接,通過 pymysql 庫的?
connect()
?方法和?**db_config
?參數(shù)來連接數(shù)據(jù)庫。創(chuàng)建一個(gè)游標(biāo)對象?
cursor
,用于執(zhí)行 SQL 語句。執(zhí)行查詢所有表名的 SQL 語句,使用?
cursor.execute("SHOW TABLES")
。使用?
cursor.fetchall()
?獲取所有表名的結(jié)果,并將其賦值給?tables
?變量。定義空列表?
data
,用于存儲查詢結(jié)果。定義空列表?
dic_list
?和?table_name_list
,用于存儲每個(gè)表的數(shù)據(jù)字典和表名。使用循環(huán)遍歷?
tables
?列表的每個(gè)元素,獲取表名。構(gòu)建查詢表中所有數(shù)據(jù)的 SQL 語句,使用?
f-string
?將表名拼接到查詢語句中。使用?
cursor.execute(query)
?執(zhí)行查詢語句。使用?
cursor.fetchall()
?獲取查詢結(jié)果。判斷結(jié)果是否為空,如果不為空,則獲取查詢結(jié)果的列名,將結(jié)果轉(zhuǎn)換為字典的形式,并將結(jié)果添加到?
data
?列表中。構(gòu)建一個(gè)字典?
dic
,將?data
?列表中的數(shù)據(jù)以字典形式存儲,鍵為 ‘word’ 列的值,值為 ‘count’ 列的值。將該字典添加到?dic_list
?列表中。將表名添加到?
table_name_list
?列表中。提交事務(wù),使用?
conn.commit()
?方法確保查詢的結(jié)果被提交到數(shù)據(jù)庫。關(guān)閉游標(biāo)和數(shù)據(jù)庫連接,使用?
cursor.close()
?和?conn.close()
?方法。返回?
dic_list
?和?table_name_list
?列表作為函數(shù)的輸出。
(7)執(zhí)行主函數(shù),并生成詞云圖
代碼如下:
# 執(zhí)行主函數(shù),并生成詞云圖
if __name__ == '__main__':
# excelTomysql()方法將excel寫入到mysql
excelTomysql()
print("excel寫入到mysql成功!")
# query_data()方法將mysql中的數(shù)據(jù)查詢出來,每張表是一個(gè)dic,然后繪制詞云
result_list, table_name_list = query_data()
print("從mysql獲取數(shù)據(jù)成功!")
for i in range(len(result_list)):
maskImage = np.array(Image.open('background.PNG')) # 定義詞頻背景圖
# 定義詞云樣式
wc = wordcloud.WordCloud(
font_path='PingFangBold.ttf', # 設(shè)置字體
mask=maskImage, # 設(shè)置背景圖
max_words=500, # 最多顯示詞數(shù)
max_font_size=100) # 字號最大值
# 生成詞云圖
wc.generate_from_frequencies(result_list[i]) # 從字典生成詞云
# 保存圖片到指定文件夾
wc.to_file("詞云圖/{}.png".format(table_name_list[i]))
print("生成的詞云圖【{}】已經(jīng)保存成功!".format(table_name_list[i] + '.png'))
# 在notebook中顯示詞云圖
plt.imshow(wc) # 顯示詞云
plt.axis('off') # 關(guān)閉坐標(biāo)軸
plt.show() # 顯示圖像
重要代碼部分解讀:
檢查當(dāng)前代碼是否在主函數(shù)中運(yùn)行,使用?
if __name__ == '__main__':
。調(diào)用函數(shù)?
excelTomysql()
,將 Excel 數(shù)據(jù)寫入到 MySQL 數(shù)據(jù)庫中。打印成功提示信息:“excel寫入到mysql成功!”
調(diào)用函數(shù)?
query_data()
,從 MySQL 數(shù)據(jù)庫中查詢數(shù)據(jù),并將結(jié)果存儲在?result_list
?和?table_name_list
?變量中。打印成功提示信息:“從mysql獲取數(shù)據(jù)成功!”
使用循環(huán)遍歷每個(gè)表的數(shù)據(jù)。
使用?
np.array(Image.open('background.PNG'))
?打開并讀取詞頻背景圖,將其轉(zhuǎn)換為?maskImage
?數(shù)組。創(chuàng)建一個(gè)?
wordcloud.WordCloud()
?對象?wc
,設(shè)置字體、背景圖、最大詞數(shù)和最大字號等參數(shù)。使用?
wc.generate_from_frequencies(result_list[i])
?從字典生成詞云圖。使用?
wc.to_file()
?將生成的詞云圖保存到指定文件夾,文件名為表名加上 “.png” 后綴。打印成功提示信息:“生成的詞云圖【表名.png】已經(jīng)保存成功!”
使用?
plt.imshow()
?顯示詞云圖。使用?
plt.axis('off')
?關(guān)閉坐標(biāo)軸的顯示。使用?
plt.show()
?顯示圖像。
(8)完整代碼
代碼如下:
import pymysql
import pandas as pd
import os
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# MySql數(shù)據(jù)庫連接配置
db_config = {
'host': "", # 主機(jī)名
'port': , # 端口
'user': "root", # 賬戶
'password': "", # 密碼
'database': '', # 這里需要?jiǎng)?chuàng)建自己的數(shù)據(jù)庫創(chuàng)建的數(shù)據(jù)庫名
}
# 創(chuàng)建讀取excel文件的函數(shù)
def excelTomysql():
path = 'xxxx' # 文件所在文件夾
files = [path + "/" + i for i in os.listdir(path)] # 獲取文件夾下的文件名,并拼接完整路徑
for file_path in files:
print(file_path)
filename = os.path.basename(file_path)
table_name = os.path.splitext(filename)[0] # 使用文件名作為表名,去除文件擴(kuò)展名
# 使用pandas庫讀取Excel文件
data = pd.read_excel(file_path, engine="openpyxl", header=0) # 假設(shè)第一行是列名
columns = {col: "VARCHAR(255)" for col in data.columns} # 動(dòng)態(tài)生成列名和數(shù)據(jù)類型
create_table(table_name, columns) # 創(chuàng)建表
save_to_mysql(data, table_name) # 將數(shù)據(jù)保存到MySQL數(shù)據(jù)庫中,并使用文件名作為表名
print(filename + ' uploaded and saved to MySQL successfully')
# 根據(jù)excel文件名創(chuàng)建數(shù)據(jù)庫表名
def create_table(table_name, columns):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 組裝創(chuàng)建表的 SQL 查詢語句
query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
for col_name, col_type in columns.items():
query += f"{col_name} {col_type}, "
query = query.rstrip(", ") # 去除最后一個(gè)逗號和空格
query += ")"
# 執(zhí)行創(chuàng)建表的操作
cursor.execute(query)
# 提交事務(wù)并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
# 將讀取的excel 數(shù)據(jù)保存到數(shù)據(jù)庫對應(yīng)的表中
def save_to_mysql(data, table_name):
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 將數(shù)據(jù)寫入MySQL表中(假設(shè)數(shù)據(jù)只有一個(gè)Sheet)
for index, row in data.iterrows():
query = f"INSERT INTO {table_name} ("
for col_name in data.columns:
query += f"{col_name}, "
query = query.rstrip(", ") # 去除最后一個(gè)逗號和空格
query += ") VALUES ("
values = tuple(row)
query += ("%s, " * len(values)).rstrip(", ") # 動(dòng)態(tài)生成值的占位符
query += ")"
cursor.execute(query, values)
# 提交事務(wù)并關(guān)閉連接
conn.commit()
cursor.close()
conn.close()
# 讀取數(shù)據(jù)庫中存入的數(shù)據(jù)
def query_data():
# 建立MySQL數(shù)據(jù)庫連接
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查詢所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
data = []
dic_list = []
table_name_list = []
for table in tables:
# for table in [tables[-1]]:
table_name = table[0]
table_name_list.append(table_name)
query = f"SELECT * FROM {table_name}"
# # 執(zhí)行查詢并獲取結(jié)果
cursor.execute(query)
result = cursor.fetchall()
if len(result) > 0:
columns = [desc[0] for desc in cursor.description]
table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
data.extend(table_data)
dic = {}
for i in data:
dic[i['word']] = float(i['count'])
dic_list.append(dic)
conn.commit()
cursor.close()
conn.close()
return dic_list, table_name_list
# 執(zhí)行主函數(shù),并生成詞云圖
if __name__ == '__main__':
# excelTomysql()方法將excel寫入到mysql
excelTomysql()
print("excel寫入到mysql成功!")
# query_data()方法將mysql中的數(shù)據(jù)查詢出來,每張表是一個(gè)dic,然后繪制詞云
result_list, table_name_list = query_data()
print("從mysql獲取數(shù)據(jù)成功!")
for i in range(len(result_list)):
maskImage = np.array(Image.open('background.PNG')) # 定義詞頻背景圖
# 定義詞云樣式
wc = wordcloud.WordCloud(
font_path='PingFangBold.ttf', # 設(shè)置字體
mask=maskImage, # 設(shè)置背景圖
max_words=500, # 最多顯示詞數(shù)
max_font_size=100) # 字號最大值
# 生成詞云圖
wc.generate_from_frequencies(result_list[i]) # 從字典生成詞云
# 保存圖片到指定文件夾
wc.to_file("詞云圖/{}.png".format(table_name_list[i]))
print("生成的詞云圖【{}】已經(jīng)保存成功!".format(table_name_list[i] + '.png'))
# 在notebook中顯示詞云圖
plt.imshow(wc) # 顯示詞云
plt.axis('off') # 關(guān)閉坐標(biāo)軸
plt.show() # 顯示圖像
九,詞云效果顯示
1.運(yùn)行代碼后的效果展示
?
?2.數(shù)據(jù)庫的表展示
十,銷毀數(shù)據(jù)庫
????????如果僅僅像我一樣僅供測試使用,在使用完后銷毀數(shù)據(jù)庫,避免像我一樣欠費(fèi)了,還被打了電話,雖然不多,不過也提醒了我,要注意使用。
?
?最后記得點(diǎn)擊確定。
十一,總結(jié)
????????總的來說這次產(chǎn)品體驗(yàn)還是不錯(cuò)的,因?yàn)椴粌H解決了我當(dāng)下的學(xué)習(xí)相關(guān)的一些問題,對于我來說就是操作起來沒有很多繁瑣的東西,雖然我是經(jīng)過測試直接使用了給的數(shù)據(jù)庫配置,然后我又通過文檔自行配置和使用了,發(fā)現(xiàn)很容易上手和配置,并且給出的詞語圖示例代碼,對于我一個(gè)小白來說都可以讀懂并使用,是面向大眾使用的一種便于操作和使用的云數(shù)據(jù)庫,當(dāng)然在開啟外網(wǎng)操作時(shí)有點(diǎn)慢,我不清楚是什么原因。
????????當(dāng)然我也從將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫,?數(shù)據(jù)庫中查詢和插入數(shù)據(jù),過Web應(yīng)用程序來展示數(shù)據(jù),和展示數(shù)據(jù)庫中的數(shù)據(jù)這四個(gè)方式對這個(gè)產(chǎn)品進(jìn)行測評,下面是我測評后獲取到的一些信息,因?yàn)槠^長我就不進(jìn)行展示了。
TDSQL-C Serverless的優(yōu)點(diǎn):
- TDSQL-C Serverless采用無服務(wù)器的架構(gòu),可以根據(jù)實(shí)際需求自動(dòng)調(diào)整計(jì)算資源,有效降低了成本和管理復(fù)雜性。這點(diǎn)我覺得最好的對于我來說。
- TDSQL-C Serverless會實(shí)時(shí)自動(dòng)調(diào)整計(jì)算資源,無需手動(dòng)操作,大大簡化了數(shù)據(jù)庫管理的工作。這點(diǎn)對于我這個(gè)不會管理數(shù)據(jù)庫的小白很適合。
TDSQL-C Serverless的缺點(diǎn):
- 我偶爾會遇到一些延遲波動(dòng)的情況,特別是在負(fù)載突增時(shí)。雖然這種情況發(fā)生的不頻繁,但仍希望在后續(xù)版本中能夠得到改進(jìn)。
- TDSQL-C Serverless在一些功能和性能方面有一些限制,最大連接數(shù)、并發(fā)查詢數(shù)等。
我對TDSQL-C Serverless的建議方向如下:文章來源:http://www.zghlxwxcb.cn/news/detail-656584.html
- 提高自動(dòng)伸縮的精確度和響應(yīng)速度,減少延遲波動(dòng)情況的發(fā)生。
- 允許用戶根據(jù)自己的需求進(jìn)行更細(xì)粒度的配置,自定義最大連接數(shù)、緩存大小等。
? ?我對TDSQL-C Serverless的體驗(yàn)感非常好,它在節(jié)約成本、簡化運(yùn)維等方面具有很大的優(yōu)勢。但希望能對于不足之處進(jìn)行改進(jìn),以滿足個(gè)人和小型應(yīng)用的不同需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-656584.html
到了這里,關(guān)于【騰訊云TDSQL-C Serverless產(chǎn)品體驗(yàn)】使用 Python 向 TDSQL-C-添加讀取數(shù)據(jù)-實(shí)現(xiàn)詞云圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!