緊接着上一篇使用python動態抓取JSON數據獲取到的CSV文件,將獲取到的數據進行可視化處理。
上篇博客地址:https://www.cnblogs.com/xyxuan/p/14886892.html
1. 分析 CSV 文件
CSV 文件內容如圖所示(部分截圖):

直接在python中調用CSV模塊,打印csv文件的表頭:
import csv
# csv文件存儲地址
filename = r'所要查詢的CSV文件存儲路徑(若已將文件復制在當前項目下,可直接寫文件名稱)'
with open(filename) as f:
# 創建閱讀器,調用csv.reader()將前面存儲的文件對象作為實參傳給他
reader = csv.reader(f)
# 調用next()一次,只將文件的第一行存儲在header_now中
header_now = next(reader)
# 打印表頭
print('表頭信息如下:')
for index,column_header in enumerate(header_now):
print(index,column_header)
測試結果如下:

2.提取並讀取所需要的數據
知道數據所在的索引位置之后,根據索引提取公司名稱和薪資范圍,為后續繪制圖形做准備。
# 根據索引提取公司名稱及薪資范圍,並存儲在列表中
company,money = [],[] #創建了一個空列表,遍歷我們需要的數據那一列,得到的數據附加到末尾。
for row in reader:
money.append(row[2])
company.append(row[1])
print("***** 公司名稱 *****")
print(company)
print("**** 薪資范圍 *****")
print(money)
輸出結果如下(部分截圖):

上面獲取到了薪資范圍的值,但是繪制圖表我們需要分別取出最高薪資和最低薪資,並且上面提取到的值為字符串格式,需要轉化格式才能使用。
"""
從獲取的薪資范圍列表中分別提取出每個公司給出的最低薪資和最高薪資,
並將提取到的字符串轉化為float格式存儲
"""
listlow, listhigh = [],[]
for m in money:
num = m.split('-') # 通過‘-’分割
low = num[0] # 提取最低薪資
high = num[1].split('萬/月')[0] # 提取最高薪資,並將后綴單位去除
# 轉化數據格式為float
lows = float(low)
highs = float(high)
listlow.append(lows)
listhigh.append(highs)
print("***** 最低薪資 *****")
print(listlow)
print("***** 最高薪資 *****")
print(listhigh)
輸出結果如下(數據太多,只截取了一部分):

3. 繪制薪資折現圖標
對數據進行可視化處理,用matplotlib創建一個簡單的圖形
"""
根據上面獲取的公司名稱,最高薪資,最低薪資繪制折線圖,將數據進行可視化處理
橫坐標:公司名稱
縱坐標:薪資
"""
# 設置圖標樣式,figsize=(橫坐標長度,縱坐標長度)
fig = plt.figure(dpi=128, figsize=(55,25))
# 用來正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
# 最高薪資
plt.plot(company,listhigh, c='red')
# 最低薪資
plt.plot(company,listlow,c='blue')
# 設置X,Y軸刻度間距,及橫坐標傾斜角度
plt.xticks(np.arange(0,51,1), rotation=45)
plt.yticks(np.arange(0,6,0.5), rotation=45)
"""
設置圖形格式
"""
# 圖表標題文字
plt.title('Software Test Engineer', fontsize=24)
# 橫坐標名稱
plt.xlabel('company', fontsize=10)
# 縱坐標名稱
plt.ylabel('Salary(萬/月)', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=26)
"""
將最高最低薪資圖標區域着色
# alpha值在0-1范圍內(0便是完全透明,1表示完全不透明),facecolor指定了填充區驗收
"""
plt.fill_between(company,listhigh,listlow,facecolor = 'blue',alpha=0.2)
# 顯示圖表
plt.show()
顯示效果如圖(數據比較多,后續可根據需要優化顯示效果):

附完整代碼:
# coding:utf-8
# 加載數據分析常用庫
import csv
import numpy as np
import matplotlib.pyplot as plt
filename = r'D:\learn\project\reptile\job.csv'
with open(filename) as f:
# 創建閱讀器,調用csv.reader()將前面存儲的文件對象作為實參傳給他
reader = csv.reader(f)
# 調用next()一次,將文件的第一行存儲在header_now中
header_now = next(reader)
# 打印表頭
print('***** 表頭信息如下 ****:')
for index,column_header in enumerate(header_now):
print(index,column_header)
# 根據索引提取公司名稱及薪資范圍,並存儲在列表中
company,money = [],[] #創建了一個空列表,遍歷我們需要的數據那一列,得到的數據附加到末尾。
for row in reader:
money.append(row[2])
company.append(row[1])
print("***** 公司名稱 *****")
print(company)
print("**** 薪資范圍 *****")
print(money)
"""
從獲取的薪資范圍列表中分別提取出每個公司給出的最低薪資和最高薪資,
並將提取到的字符串轉化為float格式存儲
"""
listlow, listhigh = [],[]
for m in money:
num = m.split('-') # 通過‘-’分割
low = num[0] # 提取最低薪資
high = num[1].split('萬/月')[0] # 提取最高薪資,並將后綴單位去除
# 轉化數據格式為float
lows = float(low)
highs = float(high)
listlow.append(lows)
listhigh.append(highs)
print("***** 最低薪資 *****")
print(listlow)
print("***** 最高薪資 *****")
print(listhigh)
"""
根據上面獲取的公司名稱,最高薪資,最低薪資繪制折線圖,將數據進行可視化處理
橫坐標:公司名稱
縱坐標:薪資
"""
# 設置圖標樣式,figsize=(橫坐標長度,縱坐標長度)
fig = plt.figure(dpi=128, figsize=(55,25))
# 用來正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
# 最高薪資
plt.plot(company,listhigh, c='red')
# 最低薪資
plt.plot(company,listlow,c='blue')
# 設置X,Y軸刻度間距,及橫坐標傾斜角度
plt.xticks(np.arange(0,51,1), rotation=45)
plt.yticks(np.arange(0,6,0.5), rotation=45)
"""
設置圖形格式
"""
# 圖表標題文字
plt.title('Software Test Engineer', fontsize=24)
# 橫坐標名稱
plt.xlabel('company', fontsize=10)
# 縱坐標名稱
plt.ylabel('Salary(萬/月)', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=26)
"""
將最高最低薪資圖標區域着色
# alpha值在0-1范圍內(0便是完全透明,1表示完全不透明),facecolor指定了填充區驗收
"""
plt.fill_between(company,listhigh,listlow,facecolor = 'blue',alpha=0.2)
# 顯示圖表
plt.show()
