激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python數據可視化自制職位分析生成崗位分析數據報表

python數據可視化自制職位分析生成崗位分析數據報表

2022-01-12 00:25Dragon少年 Python

之前網上也有不少關于行業的分析數據,今天我們就根據不同崗位,公司類型規模,學歷要求,薪資分布等來進行分析,把職位分析功能集合封裝起來,做成一個小工具分享給大家吧

前言

為什么要進行職位分析?職位分析是人力資源開發和管理的基礎與核心,是企業人力資源規劃、招聘、培訓、薪酬制定、績效評估、考核激勵等各項人力資源管理工作的依據。其次我們可以根據不同崗位的職位分析,可視化展示各崗位的數據分析報告。

首先我們來看看分析展示的效果:

python數據可視化自制職位分析生成崗位分析數據報表

下面,我們開始介紹這個小工具的制作過程。

 

1. 核心功能設計

總體來說,我們的這款職位分析器可以通過輸入崗位關鍵字和崗位條數,自動爬取相關崗位的數據,并對爬蟲的崗位可視化表格展示。然后分析這些崗位數據的公司類型規模,對學歷要求,薪資分布等。

拆解需求,大致可以整理出核心功能如下:

可視化展示崗位表格數據

通過輸入的崗位關鍵字和獲取條數,自動爬取職位數據對爬蟲的職位原始數據進行清洗讀取展示清洗后的職位數據

分析崗位薪資情況

根據工作年限及對應平均薪資,繪制工作經驗年限和薪資折線圖統計匯總薪資分布區間,了解該崗位薪資情況,展示薪資分布直方圖

分析崗位公司情況

展示崗位中公司類型分布情況,包含民營企業、合資、上市、外企等等展示公司規模人數分布情況,包含少于50人,50-150,150-500等等統計崗位對于學歷的要求

數據分析導出

對于可視化數據進行彈窗預覽,并將數據導出保存

基本的核心功能確定,下面我們我們首先開始GUI設計。

 

2. GUI設計與實現

基于功能點,我們可以先考慮進行簡單的UE布局設計,然后再通過GUI開發庫進行設計,這里采用的是tkinker,主要是簡單方便。

基于UI設計,我們gui設計編碼如下:

# 創建主窗口
root = Tk()
root.title('職位查詢分析數據平臺 -- Dragon少年')
# 設置窗口大小
root.minsize(1380, 730)
root.resizable(False, False)
#得到屏幕寬度
sw = root.winfo_screenwidth()
#得到屏幕高度
sh = root.winfo_screenheight()
ww = 1380
wh = 730
x = (sw-ww) / 2
y = (sh-wh) / 2
root.geometry("%dx%d+%d+%d" %(ww,wh,x,y))
frame_left_top = Frame(width=1050, height=400)
frame_right_top = Frame(width=320, height=400)
# 定義列表區域
tree = ttk.Treeview(frame_left_top, show="headings", height=18,
                  columns=("n", "a", "b", "c", "d", "e", "f", "g", "h"))
vbar = ttk.Scrollbar(frame_left_top, orient=VERTICAL, command=tree.yview)
# 定義樹形結構與滾動條
tree.configure(yscrollcommand=vbar.set)
# 表格的標題
tree.column("n", width=60, anchor="center")
tree.column("a", width=180, anchor="center")
tree.column("b", width=200, anchor="center")
tree.column("c", width=100, anchor="center")
tree.column("d", width=100, anchor="center")
tree.column("e", width=80, anchor="center")
tree.column("f", width=100, anchor="center")
tree.column("g", width=90, anchor="center")
tree.column("h", width=90, anchor="center")
tree.heading("n", text="序號")
tree.heading("a", text="崗位名稱")
tree.heading("b", text="公司名稱")
tree.heading("c", text="公司類型")
tree.heading("d", text="公司規模")
tree.heading("e", text="學歷")
tree.heading("f", text="工作經驗")
tree.heading("g", text="最低工資(k)")
tree.heading("h", text="最高工資(k)")
tree.grid(row=0, column=0, sticky=NSEW)
vbar.grid(row=0, column=1, sticky=NS)
# 整體區域定位
frame_left_top.grid(row=0, column=0, padx=4, pady=5)
frame_right_top.grid(row=0, column=1, padx=2, pady=2)
frame_left_top.grid_propagate(0)
frame_right_top.grid_propagate(0)
type_str=StringVar()
#設置滾動窗口文本
habits = tk.LabelFrame(root, text="公司類型", padx=10, pady=4 )  # 水平,垂直方向上的邊距均為 10
habits.place(x=1035, y=170)
habits_Window = Label(habits, textvariable=type_str, width=30, height=10,  font=('楷體', 12))
habits_Window.grid()
size_str=StringVar()
#設置滾動窗口文本
company_size = tk.LabelFrame(root, text="公司規模", padx=10, pady=4 )  # 水平,垂直方向上的邊距均為 10
company_size.place(x=1035, y=370)
company_size_Window = Label(company_size, textvariable=size_str, width=30, height=8,  font=('楷體', 12))
company_size_Window.grid()
edu_str=StringVar()
#設置滾動窗口文本
company_edu = tk.LabelFrame(root, text="學歷要求", padx=10, pady=4 )  # 水平,垂直方向上的邊距均為 10
company_edu.place(x=1035, y=540)
company_edu_Window = Label(company_edu, textvariable=edu_str, width=30, height=8,  font=('楷體', 12))
company_edu_Window.grid()
# 打開文件
# right_top_button = Button(frame_right_top, text="打開文件", command=lambda :openFile(), font=('楷體', 12))
input_name = Label(frame_right_top, text='崗位關鍵字:', font=('楷體', 12)).place(x=0, y=10)
label = StringVar()
entry = Entry(frame_right_top, bg='#ffffff', width=20, textvariable=label, font=('楷體', 12)).place(x=120, y=10)
input_num = Label(frame_right_top, text='數據條數:', font=('楷體', 12)).place(x=0, y=50)
label_num = StringVar()
entry_num = Entry(frame_right_top, bg='#ffffff', width=15, textvariable=label_num, font=('楷體', 12)).place(x=80, y=50)
btn_search = Button(frame_right_top, text="查詢輸出", command=lambda :openFile(label, label_num), font=('楷體', 12)).place(x=210, y=50)
right_pic_button = Button(frame_right_top, text="工作經驗對應薪資圖", command=lambda: show_plot(), font=('楷體', 12)).place(x=0, y=90)
right_hist_button = Button(frame_right_top, text="工資分布圖", command=lambda: show_hist(), font=('楷體', 12)).place(x=180, y=90)
right_data_button = Button(frame_right_top, text="數據分析", command=lambda: show_data(), font=('楷體', 12)).place(x=0, y=130)

主界面中各個控件創建,主要包含label-文本,Entry-文本輸入框,Treeview-表格樹,LabelFrame-控件容器等等。

效果如下:

python數據可視化自制職位分析生成崗位分析數據報表

 

3. 功能實現

我們明確功能點以及有了GUI布局后,可以正式開始實現功能邏輯。

3.1 職位數據爬蟲

關于職位數據爬取,我們爬取的是51job的數據,編寫一個函數。按照核心功能要求,這個函數通過參數職位關鍵字及數據條數,自動爬取并將數據保存。

首先我可以通過對51job職位搜索頁面進行分析,獲取一個列表頁,代碼如下:

# 獲取一個列表頁
def geturl(url):
  headers = {
      'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                    '(KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  }
  # 使用通用爬蟲對url進行一頁進行爬取
  page_text = requests.get(url=url, headers=headers).text       # 每一頁源碼用text
  # print(page_text)
  return page_text

其次通過對具體職位頁面數據分析,獲取列表頁的所有崗位信息。主要包含崗位名稱、公司名稱、薪資水平、公司類型、招聘條件、福利待遇等等。代碼如下:

# 獲取列表頁的所有崗位信息
def get_data(page_text):
  # 正則表達式提取崗位信息
  job_href = '"job_href":"(.*?)"'              # 崗位鏈接
  job_name = '"job_name":"(.*?)"'              # 崗位名稱
  com_href = '"company_href":"(.*?)"'          # 公司鏈接
  com_name = '"company_name":"(.*?)"'          # 公司名稱
  salary = '"providesalary_text":"(.*?)"'     # 薪資水平
  company_type = '"companytype_text":"(.*?)"'  # 公司類型
  attribute = '"attribute_text":\[(.*?)\]'     # 招聘條件
  work_area = '"workarea_text":"(.*?)"'        # 工作地點
  company_size = '"companysize_text":"(.*?)"'  # 公司規模
  company_ind = '"companyind_text":"(.*?)"'    # 主要業務
  job_welf = '"jobwelf":"(.*?)"'               # 福利待遇
  # 第一個參數是規則,第二個參數是被檢索內容,第三個參數re.S是單行匹配
  jobName_list = re.findall(job_name, page_text, re.S)
  comName_list = re.findall(com_name, page_text, re.S)
  salary_list = re.findall(salary, page_text, re.S)
  companytype_list = re.findall(company_type, page_text, re.S)
  attribute_list = re.findall(attribute, page_text, re.S)
  workarea_list = re.findall(work_area, page_text, re.S)
  companysize_list = re.findall(company_size, page_text, re.S)
  companyind_list = re.findall(company_ind, page_text, re.S)
  jobwelf_list = re.findall(job_welf, page_text, re.S)
  all_list = [jobName_list, comName_list, salary_list,
              companytype_list, attribute_list, workarea_list, companysize_list,
              companyind_list, jobwelf_list]
  return all_list

最后將獲取崗位數據保存至csv文件中,方便后面對這些數據進行清洗。主要代碼如下:

# 主函數
def main(kw, num):
  # 關鍵字二次轉譯
  # kw = input("請輸入你要搜索的崗位關鍵字:")
  keyword = parse.quote(parse.quote(kw))
  page_num = 0
  col = ["崗位名稱", "公司名稱", "薪資水平", "公司類型", "招聘條件", "工作地點", '公司規模', '主要業務', '福利待遇']
  csv_file = open("51job.csv", "w+", encoding='utf-8', newline='')
  try:
      writer = csv.writer(csv_file)
      writer.writerow(col)
      for i1 in range(0, num):  # 爬取前3頁數據
          page_num += 1
          url = "https://search.51job.com/list/080000,000000,0000,00,9,99," + keyword + ",2," + str(
              page_num) + ".html"
          page_text = geturl(url)
          all_list = get_data(page_text)
          if len(all_list[0]) == 0:
              print('沒有搜索到職位信息')
              break
          else:
              print('正在爬取第%d頁' % page_num)
              save_data(all_list, writer, search_num=len(all_list[0]))
  finally:
      csv_file.close()

3.2 數據預處理

我們通過爬蟲已經拿到了原始數據,接下來我們需要將這些數據清洗,去除異常值、缺失值,轉換我們要的數據格式。

首先我們可以對工作地點進行整理,我們爬取的數據,默認都是浙江省,我們按照浙江省各個地級市進行工作地點轉換,代碼如下:

job = pd.read_csv("51job.csv", encoding='utf-8')
df = pd.DataFrame(job)
dict_city = {'杭州': 0, '湖州': 0, '紹興': 0, '寧波': 0, '嘉興': 0, '麗水': 0, '臺州': 0, '溫州': 0, '金華': 0, '衢州': 0, '舟山': 0}
city = df.loc[:, "工作地點"]
print(city.shape[0])
for i in range(city.shape[0]):
  # print(city[i])
  for k, v in dict_city.items():
      # print(k, v)
      if k in city[i]:
          dict_city[k] = dict_city[k] + 1
          df.loc[i, "城市"] = k
          break
# print(list(dict_city.keys()))
# print(list(dict_city.values()))
city_df = df["城市"]
if np.any(pd.notnull(df["城市"])):
  df["城市"].fillna("其他", inplace=True)
# print(df["城市"].value_counts())

python數據可視化自制職位分析生成崗位分析數據報表

接著我們需要將原始數據得到的工資進行格式轉換,轉換成 k/月固定格式,并將整理的薪資數據單獨存儲保存下來。主要代碼如下:

def get_salary(salary):
  if '-' in salary:  # 針對1-2萬/月或者10-20萬/年的情況,包含-
      low_salary = re.findall(re.compile('(\d*\.?\d+)'), salary)[0]
      high_salary = re.findall(re.compile('(\d?\.?\d+)'), salary)[1]
      if u'萬' in salary and u'年' in salary:  # 單位統一成千/月的形式
          low_salary = round(float(low_salary) / 12 * 10, 1)
          high_salary = round(float(high_salary) / 12 * 10, 1)
      elif u'萬' in salary and u'月' in salary:
          low_salary = float(low_salary) * 10
          high_salary = float(high_salary) * 10
  else:  # 針對20萬以上/年和100元/天這種情況,不包含-,取最低工資,沒有最高工資
      low_salary = re.findall(re.compile('(\d*\.?\d+)'), salary)[0]
      if u'萬' in salary and u'年' in salary:  # 單位統一成千/月的形式
          low_salary = round(float(low_salary) / 12 * 10, 1)
      elif u'萬' in salary and u'月' in salary:
          low_salary = float(low_salary) * 10
      elif u'元' in salary and u'天' in salary:
          low_salary = round(float(low_salary) / 1000 * 21, 1)   # 每月工作日21天
      elif u'元' in salary and u'小時' in salary:
          low_salary = round(float(low_salary) / 1000 * 8 * 21, 1)   # 每天8小時,每月工作日21天
      high_salary = low_salary
  return low_salary, high_salary
job = pd.read_csv("51job_pre.csv", encoding='utf-8')
job_df = job.drop("福利待遇", axis=1)
job_df = job_df.dropna(axis=0, how="any")
for index, row in job_df.iterrows():
  salary = row["薪資水平"]
  if salary:  # 如果待遇這欄不為空,計算最低最高待遇
      getsalary = get_salary(salary)
      low_salary = getsalary[0]
      high_salary = getsalary[1]
  else:
      low_salary = high_salary = "0"
  job_df.loc[index, "最低工資(k)"] = low_salary
  job_df.loc[index, "最高工資(k)"] = high_salary
  job_df.loc[index, "平均工資(k)"] = round((float(low_salary) + float(high_salary)) / 2, 1)
job_df.to_csv("./51job_pre2.csv", index=False)

python數據可視化自制職位分析生成崗位分析數據報表

薪資整理結束之后,我們通過觀察可以看到招聘條件列中有我們需要的學歷和工作經驗等數據,我們需要提取出單獨的學歷,工作經驗等數據。代碼如下:

job_df.to_csv("./51job_pre2.csv", index=False)
job_df = pd.read_csv("51job_pre2.csv", encoding='utf-8')
job_df["學歷"] = job_df["招聘條件"].apply(lambda x: re.findall("本科|大專|高中|中專|碩士|博士|初中及以下", x))
job_df["工作經驗"] = job_df["招聘條件"].apply(lambda x: re.findall(r',".*經驗"|,"在校生/應屆生"', x))
job_df["學歷"] = job_df["學歷"].apply(func)
job_df["工作經驗"] = job_df["工作經驗"].apply(func2)
# 薪資水平,公司類型,招聘條件,工作地點,公司規模,主要業務,城市,最低工資(k),最高工資(k),平均工資(k)
job_df = job_df.drop(["薪資水平", "招聘條件", "工作地點", "主要業務", "城市"], axis=1)
job_df = job_df.dropna(axis=0, how="any")
job_df.to_csv("./51job_analysis.csv", index=False)

原始數據清洗整理完畢,我們就可以繼續編寫GUI的數據展示了。

3.3 崗位數據展示

上面我們已經拿到了需要的數據,首先我們可以通過讀取保存的數據表格,可視化展示崗位數據表格。代碼主要如下:

def read_csv_define(csv_path):
  x = tree.get_children()
  for item in x:
      tree.delete(item)
  global job_df
  job_df = pd.read_csv(csv_path, encoding='utf-8')
  # print(job_df.shape[0])
  for i in range(job_df.shape[0]):
      tree.insert("", "end",
                  values=(i+1, job_df.loc[job_df.index[i], "崗位名稱"], job_df.loc[job_df.index[i], "公司名稱"],\
                          job_df.loc[job_df.index[i], "公司類型"], job_df.loc[job_df.index[i], "公司規模"], \
                           job_df.loc[job_df.index[i], "學歷"],job_df.loc[job_df.index[i], "工作經驗"], \
                          job_df.loc[job_df.index[i], "最低工資(k)"], job_df.loc[job_df.index[i], "最高工資(k)"]))

def openFile(label, label_num):
  sname = label.get()
  num_str = label_num.get()
  num = int(num_str)
  rep.main(sname, int(num/50))
  pre.main()
  Filepath = "./51job_analysis.csv"
  # 打開文件選擇對話框
  # Filepath = filedialog.askopenfilename(filetypes=[('表格', '*.xls;*.csv')]) #過濾文件后綴類型
  # print(os.path.split(Filepath))
  (filepath, tempfilename) = os.path.split(Filepath)  # 右側的值是元組類型
  try:
      # Filepath 當路徑存在的時候繼續
      if Filepath:
          # 傳輸excel表格的路徑
          # 調用讀取數據的函數,趁著用戶正在查看查詢條件的時候 將數據注入到全局變量中 減少查詢等待
          # 由于兩種表格文件的讀取模塊不同,需要做處理判斷屬于哪種文件類型,故采用下邊的方式進行判斷
          # 從文件名中分離出后綴
          (filename, extension) = os.path.splitext(tempfilename)
          if extension == '.xls' or extension == '.XLS':
              read_xls(Filepath)
          elif extension == '.csv':
              read_csv_define(Filepath)
      else:
          print('未選擇任何文件!')
          # exit_program()
  except Exception as e:
      global job_df
      job_df = pd.DataFrame()
      tkinter.messagebox.showwarning('警告', '文件讀取異常,請檢查!')
      print("ex:", e)
  finally:
      size_str.set("")
      type_str.set("")
      edu_str.set("")
      canvas_spice.get_tk_widget().destroy()
      canvas_spice_hist.get_tk_widget().destroy()

效果如下:

python數據可視化自制職位分析生成崗位分析數據報表

3.4 薪資圖表可視化

接下來我們可以對不同工作經驗年限對應的薪資統計,繪制縮略折線圖。代碼如下:

def show_plot():
  global canvas_spice
  canvas_spice.get_tk_widget().destroy()
  # 圖像及畫布
  fig, ax = plt.subplots(figsize=(5, 3.2), dpi=100)  # 圖像比例
  canvas_spice = FigureCanvasTkAgg(fig, root)
  canvas_spice.get_tk_widget().place(x=5, y=400)  # 放置位置
  work_experience = round(job_df.groupby(by='工作經驗')['平均工資(k)'].mean(), 2)
  experience_list = ["無需經驗", "1年經驗", "2年經驗", "3-4年經驗", "5-7年經驗"]
  experience_val = [work_experience[i] for i in experience_list]
  x = range(len(experience_list))
  y = experience_val
  plt.plot(x, y)
  plt.xticks(x, experience_list, fontsize=6)
  plt.grid(True, linestyle="--", alpha=0.5)
  plt.xlabel("工作經驗", fontsize=8)
  plt.ylabel("平均工資(k)", fontsize=8)
  plt.title("工作經驗對應薪資折線圖", fontsize=8)
  canvas_spice.draw()
  canvas_spice.get_tk_widget().bind("<Double-Button-1>", xFunc1)

通過統計崗位數據中平均薪資數據,繪制出薪資分布直方圖,展示該職位的平均薪資分布情況。代碼如下:

def show_hist():
  global canvas_spice_hist
  canvas_spice_hist.get_tk_widget().destroy()
  # 圖像及畫布
  fig_hist, ax_hist = plt.subplots(figsize=(5, 3.2), dpi=100)  # 圖像比例
  canvas_spice_hist = FigureCanvasTkAgg(fig_hist, root)
  canvas_spice_hist.get_tk_widget().place(x=520, y=400)  # 放置位置
  plt.hist(job_df["平均工資(k)"].values, bins=10)
  # 求出最小值
  max_ = job_df["平均工資(k)"].max()
  min_ = job_df["平均工資(k)"].min()
  # 修改刻度
  plt.xticks(np.linspace(min_, max_, num=11),fontsize=7)
  # 添加網格
  plt.grid()
  plt.xlabel("平均工資(k)", fontsize=8)
  plt.ylabel("崗位數量", fontsize=8)
  plt.title("工資分布直方圖", fontsize=8)
  canvas_spice_hist.draw()
  canvas_spice_hist.get_tk_widget().bind("<Double-Button-1>", xFunc2)

效果如下:

python數據可視化自制職位分析生成崗位分析數據報表

除了主界面之外,我們在繪制完圖表之后希望能直接彈窗預覽展示,因此也需要一個用于瀏覽圖片的界面與功能,這部分整體會放在后續預覽保存模塊講解。

3.5 崗位公司情況統計

我們還可以對不同的公司規模、類型、對崗位學歷要求等進行數據分析展示:

def show_data():
  company = job_df.loc[:, "公司類型"].value_counts()
  type_name = list(company.index)
  x = range(len(type_name))
  content = ""
  for item in x:
      content += type_name[item] + '----' + str(company[item]) + '\n'
  type_str.set(content)
  company = job_df.loc[:, "公司規模"].value_counts()
  company_scale = company.index.to_list()
  z = range(len(company_scale))
  size_content = ""
  for item in z:
      size_content += company_scale[item] + '----' + str(company[item]) + '\n'
  size_str.set(size_content)
  education = job_df.loc[:, "學歷"].value_counts()
  education_scale = education.index.to_list()
  y = range(len(education_scale))
  edu_content = ""
  for item in y:
      edu_content += education_scale[item] + '----' + str(education[item]) + '\n'
  edu_str.set(edu_content)

效果如下:

python數據可視化自制職位分析生成崗位分析數據報表

3.6 預覽保存

我們在前面有提到,對于繪制好的圖表,希望可以彈出預覽保存,這里實現這個功能,采用的是畫布綁定左鍵雙擊事件,彈出的子窗體同樣可以綁定右鍵事件, 通過事件適配器傳遞圖片參數。

def handlerAdaptor(fun, **kwds):
  return lambda event, fun= fun, kwds= kwds:fun(event, **kwds)

def xFunc2(event):
  top = Toplevel()
  top.title('圖像導出')
  top.minsize(700, 450)
  top.resizable(False, False)
  # 得到屏幕寬度
  sw = root.winfo_screenwidth()
  # 得到屏幕高度
  sh = root.winfo_screenheight()
  ww = 700
  wh = 450
  x = (sw - ww) / 2
  y = (sh - wh) / 2
  top.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
  top.transient(root)
  top.grab_set()
  # 圖像及畫布
  fig, ax = plt.subplots(figsize=(7, 4.5), dpi=100)  # 圖像比例
  canvas_spice = FigureCanvasTkAgg(fig, top)
  canvas_spice.get_tk_widget().place(x=1, y=1)  # 放置位置
  plt.hist(job_df["平均工資(k)"].values, bins=10)
  # 求出最小值
  max_ = job_df["平均工資(k)"].max()
  min_ = job_df["平均工資(k)"].min()
  # 修改刻度
  plt.xticks(np.linspace(min_, max_, num=11), fontsize=10)
  # 添加網格
  plt.grid()
  plt.xlabel("平均工資(k)", fontsize=12)
  plt.ylabel("崗位數量", fontsize=12)
  plt.title("工資分布直方圖", fontsize=15)
  plt.savefig("hist.png")
  canvas_spice.draw()
  canvas_spice.get_tk_widget().pack()
  img_pl = Image.open("hist.png").copy()
  os.remove("hist.png")
  canvas_spice.get_tk_widget().bind("<Button-3>", handlerAdaptor(saveimg, img=img_pl))

效果如下:

python數據可視化自制職位分析生成崗位分析數據報表

然后我們可以對預覽的圖片進行保存:

def saveimg(event, img):
  Filepath = filedialog.asksaveasfilename(filetypes=[('圖像', '*.png;')])
  if Filepath:
      if not Filepath.endswith(('.png')):
          Filepath += '.png'
      # 保存獲得的圖像
      img.save(Filepath, 'png')
      tkinter.messagebox.showinfo("提示", "保存成功!")
      HWND = win32gui.GetFocus()  # 獲取當前窗口句柄
      win32gui.PostMessage(HWND, win32con.WM_CLOSE, 0, 0)

至此,自制的職位分析器小工具就編碼完成啦~

下面,我一鍵獲取生成設計師職位的分析報告:

python數據可視化自制職位分析生成崗位分析數據報表

從上面的分析報告中,不難看出:

  • 設計師職業的薪資水平在工作經驗5年以上,薪資會有較大的漲幅。
  • 行業的平均薪資分布主要在6k-14k左右。
  • 設計行業的公司大部分是民營,公司人數在500人以下。
  • 對于設計的學歷要求大部分是大專及以上。

好了,今天就到這里,明天我們繼續努力!

創作不易,白嫖不好,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

Dragon少年 | 文

如果本篇博客有任何錯誤,請批評指教,不勝感激 !

以上就是python數據可視化自制職位分析生成崗位分析數據報表的詳細內容,更多關于python數據可視化生成職位分析數據報表的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/hhladminhhl/article/details/118282100

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久综合给合久久狠狠狠97色69 | 男女无套免费视频 | 香蕉视频1024 | 高清成人在线 | av在线免费不卡 | 91精品国产91久久久久久不卞 | 久章草在线视频 | 成人午夜免费在线观看 | 91九色网 | 欧美日韩精品一区二区三区蜜桃 | 视频一区二区精品 | 成人爽a毛片免费啪啪红桃视频 | 久久99在线 | 国产免费一区二区三区最新不卡 | 国产一区二区三区在线免费 | 美国一级黄色毛片 | 色婷婷综合久久久久中文 | 999久久国精品免费观看网站 | 久久99国产伦子精品免费 | 国产高潮失禁喷水爽到抽搐视频 | 中文字幕精品一区久久久久 | 欧美三级毛片 | 女人久久久www免费人成看片 | 一本色道久久综合亚洲精品图片 | 香蕉黄色网 | 蜜桃精品视频在线观看 | 麻豆传传媒久久久爱 | 成人毛片免费播放 | 午夜视频亚洲 | 亚洲成人高清在线观看 | 国内久久久久 | 最近高清无吗免费看 | 欧美aaaaaaaa | 成人毛片视频在线播放 | 久久精品美乳 | 激情小说激情电影 | 性生活视频软件 | 色淫湿视频 | 久久国产综合精品 | 99久久精品日本一区二区免费 | 91高清视频在线观看 |