如何查找202萬個數據中重複次數為n的數據?
在Word文檔中放了約202萬個數據(文檔大小約14M),現在需要找出這些數據中重複次數為16—18次的數據,請問大神我該如何完成?
我是計算機小白,sql,ACCESS 之類的的都不懂,麻煩告訴我應該安裝什麼工具?然後怎麼操作,最好有詳細的步驟,越簡單越好
1、把Word的表格變成Excel的 How to Convert a Word Table to Excel
2、把Excel的表格變成Excel的「真正的表格」 Excel: Convert Data Into an Excel Table - Help Pages - Information Technology - Cedarville University
3、使用透視表功能,你可以做出一個新的列,裡面包含了重複的次數,對他排序,馬上就找到16。How to count data by group in Excel?
這個問題基本可以結貼了。以下是最符合樓主需要的最簡單方法,圖文並茂。
樓主既然說自己是計算機小白,那就是說樓下目前的9個回答基本都不符合樓主的要求,要麼需要編程,要麼需要搭建新的操作系統環境,要麼要使用專業資料庫。尤其是VCZH,竟然搞不清楚EXCEL2016到底支持多少行數據,囧。
我下面給樓主提供一個真正小白都會的解決方案,不需要寫代碼,完全windows普通工作環境下實現:
0、因為樓主沒有提供源數據,這裡我自己用以前寫的一個小工具生成了200萬行的數據。
生成的文件格式是文本文件,擴展名是.txt,大小30m。我電腦是很老舊的G640,8G內存,處理速度基本比較流程,excel2016版真的很嚇人。樓主的數據存放在word中,可以通過另存為的方式保存為純文本格式。這裡就不細說這一過程了。
我生成的數據是下圖這樣的,樓主的問題在我的數據中可以設定為,查找200萬行中,由項目名+項目內容組成的新內容中,重複16-18次的有哪些?
所以在下面的解答過程中我還會順便演示一點點pp的欄位處理技術。
1、前提是必須安裝excel2016的專業版以上版本,也就是說必須要有power pivot模塊。
2、啟動一個新的excel文檔,然後點擊power pivot菜單,再點擊「管理」
3、在新出現的「power pivot for excel」窗口中點擊「獲取外部數據」中的「從其他源」。
4、在出現的「表導入嚮導」界面中,選擇最下面的「文本文件」
5、設置好文件路徑,勾選「使用第一行作為列標題」,點擊完成。
6、導入成功,點擊關閉
7、在新出現的窗口中,點擊「計算列1」中的第一個空白單元格,像在普通excel單元各種那樣輸入「=」,然後分別滑鼠點擊「項目名」列第一個單元格,按下「」,再點擊「項目內容」列第一個單元格,回車,會看到pp自動將「項目名」和「項目內容」兩列的內容作了合併。
8、點擊「數據透視表」菜單中的「數據透視表選項」,此時會在剛才打開的excel文檔中生成一個新的透視表,等待用戶選擇透視條件
9、點擊空白數據透視表右側的「test」←因為我的文件名就叫「test.txt",展開可以進行透視的欄位。
10、在透視表右側,將」計算列1「欄位分別拖入「行」和「值」,並在左側透視表的「以下項目的計數:計算列 1」欄位中選擇按升序或者降序排列。
11、即可得到我們想要的結論了。
看,完全沒有代碼,也不需要使用linux系統環境,還不用專業資料庫,也沒python什麼事,解決了。
select 列名,count(列名) from 表名 group by列名 having count(列名)=n
如果是一次性工作並且數據隱私不重要,淘寶幾塊錢找人解決。如果是一次性工作並且數據隱私有些重要,淘寶找人十幾元遠程解決。如果不是一次性工作並且數據隱私很重要,淘寶找人幾十元教你解決。以上是最快捷最省錢的解決方式。
Python可以這麼玩,先把word轉為txt
file = open("file.txt")
lines = file.readlines()
collection_dict = {}for line in lines:
collection_dict.setdefault(line,0) += 1result = []
for k, v in collection_dict.item():
if 16 &<= v &<= 18: result.append(k)#result 內的元素就是你要的結果#有一天知乎死了,編輯器絕對是居功至偉!!!文件內容貼到記事本存成文本文件命名為file,傳到linux環境內。
cat file | sort | uniq -c | awk "{if($1&>= 16 $1 &<=18)print $N}"
python的collections里有個結構叫counter 可以秒殺
假定你的數據是一行一條的:打開 word 把文件另存為 txt,然後按下 Windows徽標鍵 + R ,輸入 PowerShell,根據實際情況輸入以下代碼:
Get-Content "你的數據文件完整路徑.txt" | Group-Object | where { $_.Count -ge 16 -and $_.Count -le 18 } | Select-Object Count, Name
PowerShell 在 Win7 及以上都是自帶的,所以你不需要安裝任何環境,當然,最好的解決方案還是 @danger ace 用 Power Pivot,可定製性要高很多而且使用起來也簡便,還要快很多。
假設只有一列,
select data,count(data) from table group by count(data) order by count(data) desc;
好,現在數據都已經按出現次數倒序排好了。。
想找18次的?
select * from
(select data,count(data) from table group by count(data))
where count(data)=18;
首先你得有個sql環境
EXO ME?word存放數據?厲害了。。個人解決方案如下
-------------------------------------------------------
工具?
安裝mysql甚至access就行,更傻瓜的操作是安裝R語言,載入sqllite包,這樣就省去了你配置資料庫的步驟。。
install.packages("sqllite");
library(sqllite)
方法?
首先假定你的數據名為data,其次只有一列,欄位名dt,包含a~z 24個英文字母的隨意組合,那麼,
SELECT dt,count(dt)
FROM data
Group by dt
Having count(dt) between 15 and 18;
#之所以是15不是16,是因為between從後一個開始取值
Done.
來,我給大家搞一下。vczh他單位有個轉換器叫power bi。下下來,裝好了。裡面有個導入數據。
word文檔保存成csv這個操作教給你不如自己去搜索。
打開power bi,點擊中間偏左的獲取數據
好了,看一下最終效果。
熟練了不超過1分鐘搞定。200w行數據的話也不多,也就是多花幾秒鐘的事兒。
500萬數據,運算多幾倍,也不過兩分鐘。這裡,就一個分組而已。
r語言table函數或者dplyr包count函數
我為啥想到了map&
然而~
具體是啥數據你也沒說啊,是202萬的詞還是一張表還是啥的
python pandas真是個寶
一次性工作的話,就excel透視表。常規性工作的話就sql,先計數後過濾
數據私我
以編程的角度來說下,利用二叉樹或哈希表數據結構如果是二叉樹,將數據全部輸入到二叉樹中,建立的過程遇重複數據則+1,篩選出大於16次的數據即可,時間複雜度約為 O(n*logn)更簡單的哈希表,key存數據,value存次數,時間複雜度為O(n)
把數據從word粘貼到txt中,比如說命名為file.txt
Linux:awk "{x[$0]++}END{for(i in x){if(x[i]&>=16 x[i]&<=18)print(i" "x[i])}}}" file.txt歪個樓
python pandas
df=df.groupby("col").size().reset_index().sort_values()
然後。df[df[0]==n]#先將word文檔存為1.txt,然後打開Python
a=open("1.txt")
b=a.split()
for c in b:
if 16&<=b.count(c)&<=18:
print(c)
推薦閱讀:
※ACCESS資料庫的學習方法及資源?
※請問這個需求該怎麼用SQL實現?
TAG:資料庫 | SQL | 數據分析 | 數據統計 | MicrosoftAccess |