如何查找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) += 1

result = []

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&,然後再暴力跑一邊int的值,符合條件的object輸出,反正200萬,最多兩秒鐘的事

然而~

具體是啥數據你也沒說啊,是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 |