這里寫自定義目錄標題
- 花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析
- 需求
花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析
Power Query M 語言,簡稱 M 語言,全名叫 Power Query Formula Language。
需求
有人說這次考試太難了,難度堪比國考,那我們就來做一個數據分析看看到底怎么個事:
-
我們將根據所說這次難的人考試內容和分數進行分析,考的是筆試科目是“公共基礎知識+職業能力傾向測驗” ;
-
那么我就在崗位計劃表里篩選出這個筆試科目的
-
找到崗位代碼 例如B1,B2等;
-
再到筆試成績表里找到“報考崗位”這一列,是在文字中
夾著有崗位代碼的。這2個表我已經上傳到附件zip里了。 -
到這里,不難想到,到成績表里去篩選,在報考崗位這列找到對應崗位代碼B1,B2等就知道考筆試科目是“公共基礎知識+職業能力傾向測驗”的人數有多少了;
-
但是,到這里我發現我不會了
這里的包含只能選2個啊,我除了B1,B2還有別的沒選上呢?這咋搞?
真把我難住了。
一下子查資料也沒查到,還是寫代碼吧。一開始想用Python寫的。后面寫出來了:
import pandas as pdplan_file = r'D:\Temp\崗位計劃表.xlsx'
score_file = r'D:\Temp\成績表.xlsx'# 讀取Excel文件
df = pd.read_excel(plan_file, header=2)# 假設“筆試科目”這一列的列名為“筆試科目”,如果實際列名不同請修改
filtered_df = df[df['筆試科目'] == '''公共基礎知識+
職業能力傾向測驗''']# 輸出篩選結果
print(filtered_df)
# 取B列(第2列)所有非空數據作為查詢條件
col_b_name = filtered_df.columns[1] # 第2列列名
query_list = filtered_df[col_b_name].dropna().astype(str).tolist()# 讀取成績表,從第2行開始(header=1表示第2行為表頭)
score_df = pd.read_excel(score_file, header=1)# 假設報考崗位那一列叫“報考崗位”,如實際不是請替換
apply_col = '報考崗位'# 用循環和條件判斷篩選
result_rows = []
for idx, row in score_df.iterrows():post = str(row[apply_col])for q in query_list:if q in post:result_rows.append(row)break # 匹配到一個就可以了# 構建新的DataFrame
filtered_score_df = pd.DataFrame(result_rows)
print(filtered_score_df)# 如果需要保存結果
filtered_score_df.to_excel(r'D:\Temp\成績表_篩選結果.xlsx', index=False)
# 如需保存篩選后的數據到新文件,可取消注釋下一行
# filtered_df.to_excel(r"D:\Temp\崗位計劃表_篩選結果.xlsx", index=False)
但這不是今天的重點,我要說的事Excel的M語言
入口在這里。
代碼如下:
letGwjh_Source = Excel.Workbook(File.Contents("D:\Temp\崗位計劃表.xlsx"), null, true),Cj_Source = Excel.Workbook(File.Contents("D:\Temp\成績表.xlsx"), null, true),Gwjh_SelectedSheet = Gwjh_Source{[Item="崗位計劃表",Kind="Sheet"]}[Data],Cj_SelectedSheet = Cj_Source{[Item="成績表",Kind="Sheet"]}[Data],// 崗位計劃表處理SkippedRows = Table.Skip(Gwjh_SelectedSheet, 2),PromotedHeaders = Table.PromoteHeaders(SkippedRows, [PromoteAllScalars=true]),FilteredRows = Table.SelectRows(PromotedHeaders, each [筆試科目] = "公共基礎知識+#(lf)職業能力傾向測驗"),GWDM_Name = Table.ColumnNames(FilteredRows){1},GWDM_List = Table.Column(FilteredRows, GWDM_Name),// 成績表也要跳過前1行說明(假設字段在第2行,實際以你的Excel為準)Cj_SkippedRows = Table.Skip(Cj_SelectedSheet, 1),Cj_PromotedHeaders = Table.PromoteHeaders(Cj_SkippedRows, [PromoteAllScalars=true]),// 篩選報考崗位在GWDM_List中的行Cj_FilteredRows = Table.SelectRows(Cj_PromotedHeaders,each List.AnyTrue(List.Transform(GWDM_List, (x) => Text.Contains(Text.From([報考崗位]), Text.From(x)))))
inCj_FilteredRows
寫完選擇這個關閉并上載就可以多出來一個Sheet1,就是結果了,還可以在有側邊欄看到。
數據分析結果:
這次花垣事業單位,筆試考公基+職測的有2336人,60分以上的有647人,65分以上的有285人,70分以上的有79人。
三、招聘計劃
(一)人才引進計劃
本次計劃公開引進高層次急需緊缺專業人才20名,其中高層次人才崗位12名(A類崗位),急需緊缺專業人才崗位8名(B類崗位)(詳見附件1)
(二)事業單位公開招聘計劃
本次計劃公開招聘事業單位工作人員105名(C類崗位)(詳見附件1)
http://www.huayuan.gov.cn/zwgk_23240/xzfxxgkml_23243/rsxx_23252/zkxx_23254/202505/t20250522_2257743.html
好像也不是很難。
Excel用得不太溜,不知道還有沒有更好的方式,可以交流一下。