【python】使用pandas快速提取騰訊問卷信息,比對未填寫的人員的名單

前言背景

這幾天的疫情,學校要求每個同學都要填寫問卷。 於是我簡單地創建了一個騰訊問卷。 今天輔導員讓我統計下哪幾位同學沒有填寫,並且告知以後每天都要統計。

我們班大約有40人, 每天填寫問卷的人大約30多人, 如果靠肉眼的傳統方法,把填寫問卷的名單和大名單一一比對, 找出未填寫的人,豈不是眼都要看花了。 更何況想起輔導員說接下來每天都要如此, 簡直是費時費力。

我始終信奉一個真理:所有重複性工作都應由程序完成, 哪怕寫程序的時間可能都超過了去完成的時間!

挑出未填寫的人,本質上就是全部人員與填寫人員之間作一個差集的操作,這在python裏只是微秒水平的耗時,現實中卻需要花費很久。 於是,就開始了寫程序解決這個實際問題。

獲取問卷信息

在這裏插入圖片描述
我使用的是騰訊問卷, 在回收數據這裏,可以看到所有的填寫數據。 由於我多天來使用的是同一份問卷,也就是說這裏我的數據是這麼多天來全部的,而我的任務是找出每天沒有填寫的人的名字。

想通過python處理的話,就要把數據拿下來。 這裏可以用爬蟲去做,但是騰訊已經提供了直接導出的接口,可以把數據導出爲.csv(類似於excel)。

python有一個叫pandas的庫, 專門用於處理excel,csv這種格式的文件。 之前在做股票信息的時候用過,這裏就第一時間想到了,做這個任務用pandas再合適不過。

騰訊問卷導出的csv如下:

在這裏插入圖片描述

使用pandas進行處理

import pandas as pd
csv = pd.read_csv('2.csv')

將導出的csv文件改名爲’2.csv’,就可以非常簡單地使用read_csv這個api直接讀取csv的信息了。

在這裏插入圖片描述
這裏由於pycharm自動縮略了中間的內容,但我們可以知道的是pandas將csv讀取成了表格。

接下來首先要完成的任務是,提取出給定日期當天的完成人員名單。

騰訊問卷的時間格式是這樣的:

在這裏插入圖片描述
但其實我們不需要知道具體的時刻,只需要日期就可以了。 因此,先用一個簡單函數進行處理:

a = lambda m:m[:2]
csv['開始答題時間'] = csv['開始答題時間'].apply(a)

先自定義一個lambda函數,效果是截取字符串的前兩位。 然後用apply函數將其使用到“開始答題時間”這一列。
這樣,開始答題時間就會只剩下前兩位,也就是日期, 如2月25日的數據,開始答題時間就是25。 接下來我們再通過這個數據進行篩選。

today = '25'
today_finish = csv['2.姓名'][csv['開始答題時間']==today]

比如我要找今天(2月25日)的完成名單,就將today賦值爲’25’,第二個語句就是提取出csv中“姓名”這一列中, “開始答題時間”爲25的元素。 前一箇中括號指定了要提取的列,後一箇中括號再給出了一個篩選條件,最後得到的就是開始答題時間是今天的名單。

接下來,我問輔導員要了全班人的名冊,也是excel格式。 出於方便,將其命名爲"1.xlsx”.

s = pd.read_excel('1.xlsx')
total = s['姓名'].values
not_finish = set(total).difference(set(today_finish))

同樣,用pandas讀取後, 第二句使用pandas,提取出excel中包含的姓名,也就是全員名單。 最後,使用set(),將全員名單和我們剛剛提取的今天已完成的人員名單都轉換爲集合後, 再用集合的方法difference,得到兩者的差集。 而這差集,也就正是今天未完成的人的名單。

後記

import pandas as pd

csv = pd.read_csv('2.csv')


a = lambda m:m[:2]
csv['開始答題時間'] = csv['開始答題時間'].apply(a)

today = '25'
today_finish = csv['2.姓名'][csv['開始答題時間']==today]

s = pd.read_excel('1.xlsx')
total = s['姓名'].values

not_finish = set(total).difference(set(today_finish))
print(not_finish)

整體代碼如上, 非常簡潔。 運行效率也很高,這樣就代替了人工的勞動,節約了許多時間。 如果說要懶到極致的話,應該再寫一個爬蟲自動導出問卷數據,畢竟現在只能手動導出再手動保存,還不夠全自動化。不過也已經夠省時了。 我認爲代碼不應該追求用多高深的語法,一切代碼的目的都只有一個,那就是在處理重複性工作時更高的效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章