🧑 博主簡介:曾任某智慧城市類企業
算法總監
,目前在美國市場的物流公司從事高級算法工程師
一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個性化解決方案等服務,如有需要請站內私信或者聯系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉絲群介紹:① 群內初中生、高中生、本科生、研究生、博士生遍布,可互相學習,交流困惑。② 熱榜top10的常客也在群里,也有數不清的萬粉大佬,可以交流寫作技巧,上榜經驗,漲粉秘籍。③ 群內也有職場精英,大廠大佬,可交流技術、面試、找工作的經驗。④ 進群免費贈送寫作秘籍一份,助你由寫作小白晉升為創作大佬。⑤ 進群贈送CSDN評論防封腳本,送真活躍粉絲,助你提升文章熱度。有興趣的加文末聯系方式,備注自己的CSDN昵稱,拉你進群,互相學習共同進步。
【數據可視化-21】水質安全數據可視化:探索化學物質與水質安全的關聯
- 一、項目背景與目標
- 二、數據集介紹
- 三、完整代碼實現
- 1. 環境準備與數據加載
- 2. 數據預處理
- 3. 探索性分析(EDA)
- 3.1 化學物質含量與水質安全性的關聯
- 3.2 安全與不安全水樣的特性
- 3.3 識別潛在的危險化學物質
- 4. 分析結論與洞見
- 關鍵發現
- 業務建議
- 五、優化方向與思考
- 數據深化
- 模型構建
- 六、完整代碼
一、項目背景與目標
??水質安全是一個全球性問題,影響著數十億人的健康。通過分析水質數據中的化學物質含量,我們可以識別潛在的危險因素,為水質管理和政策制定提供科學依據。
二、數據集介紹
??本數據集包含7999條模擬水質記錄,涵蓋多種化學物質的濃度測量值,以及一個指示水樣是否安全的分類變量。化學物質包括鋁、氨、砷、鋇、鎘等,每種物質都有對應的安全閾值。
三、完整代碼實現
1. 環境準備與數據加載
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 配置可視化樣式
plt.style.use('ggplot')
%matplotlib inline# 加載數據
df = pd.read_csv('/path/to/water_quality.csv')
2. 數據預處理
# 查看數據基本信息
print(df.info())
print(df.describe())# 檢查缺失值
print(df.isnull().sum())# 數據重命名,方便后續處理
df = df.rename(columns={'aluminium': 'Al','ammonia': 'NH3','arsenic': 'As','barium': 'Ba','cadmium': 'Cd','chloramine': 'ClNH2','chromium': 'Cr','copper': 'Cu','flouride': 'F','bacteria': 'Bacteria','viruses': 'Viruses','lead': 'Pb','nitrates': 'NO3','nitrites': 'NO2','mercury': 'Hg','perchlorate': 'ClO4','radium': 'Ra','selenium': 'Se','silver': 'Ag','uranium': 'U'
})
3. 探索性分析(EDA)
3.1 化學物質含量與水質安全性的關聯
# 計算相關系數矩陣(皮爾遜相關系數)
corr_matrix = df.corr()# 繪制熱力圖
plt.figure(figsize=(15, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('化學物質含量與水質安全性的相關性熱力圖')
plt.show()
# 繪制關鍵化學物質與安全性的散點圖
key_substances = ['Al', 'NH3', 'As', 'Ba', 'Cd', 'ClNH2', 'Cr', 'Cu', 'F', 'Bacteria', 'Viruses', 'Pb', 'NO3', 'NO2', 'Hg', 'ClO4', 'Ra', 'Se', 'Ag', 'U']for substance in key_substances:plt.figure(figsize=(10, 6))sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis')plt.title(f'{substance} 含量與水質安全性關系')plt.xlabel(f'{substance} 濃度')plt.ylabel('是否安全')plt.grid(True)plt.show()
3.2 安全與不安全水樣的特性
# 繪制關鍵化學物質在安全與不安全水樣中的分布
fig, axes = plt.subplots(4, 5, figsize=(30, 18)) # 創建一個5行4列的畫布
axes = axes.flatten() # 將2D的axes數組轉換為1Dfor idx, substance in enumerate(key_substances):# 在指定的子圖上繪制散點圖sns.boxplot(x='is_safe', y=substance, data=df, ax=axes[idx])#sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis', ax=axes[idx])axes[idx].set_title(f'{substance} 在安全與不安全水樣中的分布')axes[idx].set_xlabel(f'{substance} 濃度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout() # 自動調整子圖參數,防止重疊
plt.show()
3.3 識別潛在的危險化學物質
# 繪制箱線圖識別各化學物質中的異常值
fig, axes = plt.subplots(4, 5, figsize=(30, 18)) # 創建一個5行4列的畫布
axes = axes.flatten() # 將2D的axes數組轉換為1D# 繪制箱線圖識別各化學物質中的異常值
for idx, substance in enumerate(key_substances):# plt.figure(figsize=(10, 6))sns.boxplot(x=df[substance],ax=axes[idx])axes[idx].set_title(f'{substance} 含量的異常值分析')axes[idx].set_xlabel(f'{substance} 濃度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout() # 自動調整子圖參數,防止重疊
plt.show()
4. 分析結論與洞見
關鍵發現
- 砷 (As)、鉛 (Pb) 和 鎘 (Cd) 與水質安全性呈現顯著負相關,濃度越高,水質越可能不安全。
- 細菌 (Bacteria) 和 病毒 (Viruses) 的存在顯著降低了水質安全性。
- 硝酸鹽 (NO3) 和 亞硝酸鹽 (NO2) 的濃度升高與水質不安全存在關聯。
業務建議
- 加強砷、鉛和鎘的監測:重點關注這些化學物質的排放源和處理過程。
- 改善微生物污染控制:加強對水體中細菌和病毒的處理,確保微生物指標達標。
- 綜合水質管理:結合多種化學和生物指標,制定全面的水質安全標準。
五、優化方向與思考
數據深化
- 整合時空數據:結合水質數據的時空信息,分析污染源的擴散路徑。
- 引入外部數據:如氣象數據、工業活動數據等,探索更廣泛的水質影響因素。
模型構建
- 構建預測模型:使用機器學習算法預測水質安全趨勢。
- 開發預警系統:實時監控關鍵指標,及時發出水質安全預警。
??通過數據可視化,我們能夠清晰地看到化學物質含量與水質安全性的關系,為水質管理和政策制定提供有力支持。希望本文能為相關領域的研究和實踐提供有價值的參考。
六、完整代碼
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 配置可視化樣式
plt.style.use('ggplot')
%matplotlib inline# 加載數據
df = pd.read_csv('/path/to/water_quality.csv')# 查看數據基本信息
print(df.info())
print(df.describe())# 檢查缺失值
print(df.isnull().sum())# 數據重命名,方便后續處理
df = df.rename(columns={'aluminium': 'Al','ammonia': 'NH3','arsenic': 'As','barium': 'Ba','cadmium': 'Cd','chloramine': 'ClNH2','chromium': 'Cr','copper': 'Cu','flouride': 'F','bacteria': 'Bacteria','viruses': 'Viruses','lead': 'Pb','nitrates': 'NO3','nitrites': 'NO2','mercury': 'Hg','perchlorate': 'ClO4','radium': 'Ra','selenium': 'Se','silver': 'Ag','uranium': 'U'
})# 計算相關系數矩陣(皮爾遜相關系數)
corr_matrix = df.corr()# 繪制熱力圖
plt.figure(figsize=(15, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('化學物質含量與水質安全性的相關性熱力圖')
plt.show()# 繪制關鍵化學物質與安全性的散點圖
key_substances = ['Al', 'NH3', 'As', 'Ba', 'Cd', 'ClNH2', 'Cr', 'Cu', 'F', 'Bacteria', 'Viruses', 'Pb', 'NO3', 'NO2', 'Hg', 'ClO4', 'Ra', 'Se', 'Ag', 'U']for substance in key_substances:plt.figure(figsize=(10, 6))sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis')plt.title(f'{substance} 含量與水質安全性關系')plt.xlabel(f'{substance} 濃度')plt.ylabel('是否安全')plt.grid(True)plt.show()# 繪制關鍵化學物質在安全與不安全水樣中的分布
fig, axes = plt.subplots(4, 5, figsize=(30, 18)) # 創建一個5行4列的畫布
axes = axes.flatten() # 將2D的axes數組轉換為1Dfor idx, substance in enumerate(key_substances):# 在指定的子圖上繪制散點圖sns.boxplot(x='is_safe', y=substance, data=df, ax=axes[idx])#sns.scatterplot(x=substance, y='is_safe', data=df, hue='is_safe', palette='viridis', ax=axes[idx])axes[idx].set_title(f'{substance} 在安全與不安全水樣中的分布')axes[idx].set_xlabel(f'{substance} 濃度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout() # 自動調整子圖參數,防止重疊
plt.show()# 繪制箱線圖識別各化學物質中的異常值
fig, axes = plt.subplots(4, 5, figsize=(30, 18)) # 創建一個5行4列的畫布
axes = axes.flatten() # 將2D的axes數組轉換為1D# 繪制箱線圖識別各化學物質中的異常值
for idx, substance in enumerate(key_substances):# plt.figure(figsize=(10, 6))sns.boxplot(x=df[substance],ax=axes[idx])axes[idx].set_title(f'{substance} 含量的異常值分析')axes[idx].set_xlabel(f'{substance} 濃度')axes[idx].set_ylabel('是否安全')axes[idx].grid(True)plt.tight_layout() # 自動調整子圖參數,防止重疊
plt.show()