源碼挖掘項目
1. python大數據挖掘系列之基礎知識入門 知識整理(入門教程含源碼)
Python在大數據行業非常火爆近兩年,as a pythonic,所以也得涉足下大數據分析,下面就聊聊它們。
Python數據分析與挖掘技術概述
所謂數據分析,即對已知的數據進行分析,然後提取出一些有價值的信息,比如統計平均數,標准差等信息,數據分析的數據量可能不會太大,而數據挖掘,是指對大量的數據進行分析與挖倔,得到一些未知的,有價值的信息等,比如從網站的用戶和用戶行為中挖掘出用戶的潛在需求信息,從而對網站進行改善等。
數據分析與數據挖掘密不可分,數據挖掘是對數據分析的提升。數據挖掘技術可以幫助我們更好的發現事物之間的規律。所以我們可以利用數據挖掘技術可以幫助我們更好的發現事物之間的規律。比如發掘用戶潛在需求,實現信息的個性化推送,發現疾病與病狀甚至病與葯物之間的規律等。
預先善其事必先利其器
我們首先聊聊數據分析的模塊有哪些:
下面就說說這些模塊的基礎使用。
numpy模塊安裝與使用
安裝:
下載地址是:http://www.lfd.uci.e/~gohlke/pythonlibs/
我這里下載的包是1.11.3版本,地址是:http://www.lfd.uci.e/~gohlke/pythonlibs/f9r7rmd8/numpy-1.11.3+mkl-cp35-cp35m-win_amd64.whl
下載好後,使用pip install "numpy-1.11.3+mkl-cp35-cp35m-win_amd64.whl"
安裝的numpy版本一定要是帶mkl版本的,這樣能夠更好支持numpy
numpy簡單使用
生成隨機數
主要使用numpy下的random方法。
pandas
使用 pip install pandas 即可
直接上代碼:
下面看看pandas輸出的結果, 這一行的數字第幾列,第一列的數字是行數,定位一個通過第一行,第幾列來定位:
常用方法如下:
下面看看pandas對數據的統計,下面就說說每一行的信息
轉置功能:把行數轉換為列數,把列數轉換為行數,如下所示:
通過pandas導入數據
pandas支持多種輸入格式,我這里就簡單羅列日常生活最常用的幾種,對於更多的輸入方式可以查看源碼後者官網。
CSV文件
csv文件導入後顯示輸出的話,是按照csv文件默認的行輸出的,有多少列就輸出多少列,比如我有五列數據,那麼它就在prinit輸出結果的時候,就顯示五列
excel表格
依賴於xlrd模塊,請安裝它。
老樣子,原滋原味的輸出顯示excel本來的結果,只不過在每一行的開頭加上了一個行數
讀取sql
依賴於PyMySQL,所以需要安裝它。pandas把sql作為輸入的時候,需要制定兩個參數,第一個是sql語句,第二個是sql連接實例。
讀取HTML
依賴於lxml模塊,請安裝它。
對於HTTPS的網頁,依賴於BeautifulSoup4,html5lib模塊。
讀取HTML只會讀取HTML里的表格,也就是只讀取
顯示的是時候是通過python的列表展示,同時添加了行與列的標識
讀取txt文件
輸出顯示的時候同時添加了行與列的標識
scipy
安裝方法是先下載whl格式文件,然後通過pip install 「包名」 安裝。whl包下載地址是:http://www.lfd.uci.e/~gohlke/pythonlibs/f9r7rmd8/scipy-0.18.1-cp35-cp35m-win_amd64.whl
matplotlib 數據可視化分析
我們安裝這個模塊直接使用pip install即可。不需要提前下載whl後通過 pip install安裝。
下面請看代碼:
下面說說修改圖的樣式
關於圖形類型,有下面幾種:
關於顏色,有下面幾種:
關於形狀,有下面幾種:
我們還可以對圖稍作修改,添加一些樣式,下面修改圓點圖為紅色的點,代碼如下:
我們還可以畫虛線圖,代碼如下所示:
還可以給圖添加上標題,x,y軸的標簽,代碼如下所示
直方圖
利用直方圖能夠很好的顯示每一段的數據。下面使用隨機數做一個直方圖。
Y軸為出現的次數,X軸為這個數的值(或者是范圍)
還可以指定直方圖類型通過histtype參數:
圖形區別語言無法描述很詳細,大家可以自信嘗試。
舉個例子:
子圖功能
什麼是子圖功能呢?子圖就是在一個大的畫板裡面能夠顯示多張小圖,每個一小圖為大畫板的子圖。
我們知道生成一個圖是使用plot功能,子圖就是subplog。代碼操作如下:
我們現在可以通過一堆數據來繪圖,根據圖能夠很容易的發現異常。下面我們就通過一個csv文件來實踐下,這個csv文件是某個網站的文章閱讀數與評論數。
先說說這個csv的文件結構,第一列是序號,第二列是每篇文章的URL,第三列每篇文章的閱讀數,第四列是每篇評論數。
我們的需求就是把評論數作為Y軸,閱讀數作為X軸,所以我們需要獲取第三列和第四列的數據。我們知道獲取數據的方法是通過pandas的values方法來獲取某一行的值,在對這一行的值做切片處理,獲取下標為3(閱讀數)和4(評論數)的值,但是,這里只是一行的值,我們需要是這個csv文件下的所有評論數和閱讀數,那怎麼辦?聰明的你會說,我自定義2個列表,我遍歷下這個csv文件,把閱讀數和評論數分別添加到對應的列表裡,這不就行了嘛。呵呵,其實有一個更快捷的方法,那麼就是使用T轉置方法,這樣再通過values方法,就能直接獲取這一評論數和閱讀數了,此時在交給你matplotlib里的pylab方法來作圖,那麼就OK了。了解思路後,那麼就寫吧。
下面看看代碼:
2. java,eclipse中如何將源碼裝載到項目中,在使用某個方法時可以通過點擊查看該源碼
下載源碼文件,然後import進去就好。
或者下載相應的jar包,然後右鍵你的project,選擇properties,在Java Build Path裡面把相關jar包配置進去,也能關聯到jar裡面的源碼
3. 請問我手中有一個不錯的項目的源代碼,應該從哪裡著手把這個項目給弄懂。
首先是要明白這個項目的業務邏輯,簡單的說就是干什麼用的?
然後看看都用到了哪些技術,struts的結果是幾層?(一般都是3層)
最好可以把項目跑起來,這樣可以按照業務邏輯一步步的繼續,然後結合源代碼看看是如果處理數據的,最核心的業務代碼在哪,數據室如何存入資料庫的,表的結構師什麼樣的,哪些表之間有關聯等等
大概都弄明白之後再細細的看代碼中的技巧,比如在取到很多數據時是如何分類及處理的,都用了哪些對象(hashtable,hashmap等等)
最後最重要的是你要學著去寫,無論是UI還是BL,自由自己親自動手才能更好的理解和發現問題
以上都是個人經驗
4. 數據挖掘源代碼
基本Kmeans演算法實現 C++代碼
#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<math.h>
#include<stdlib.h>
#definek3//簇的數目
usingnamespacestd;
//存放元組的屬性信息
typedefvector<double>Tuple;//存儲每條數據記錄
intdataNum;//數據集中數據記錄數目
intdimNum;//每條記錄的維數
//計算兩個元組間的歐幾里距離
doublegetDistXY(constTuple&t1,constTuple&t2)
{
doublesum=0;
for(inti=1;i<=dimNum;++i)
{
sum+=(t1[i]-t2[i])*(t1[i]-t2[i]);
}
returnsqrt(sum);
}
//根據質心,決定當前元組屬於哪個簇
intclusterOfTuple(Tuplemeans[],constTuple&tuple){
doubledist=getDistXY(means[0],tuple);
doubletmp;
intlabel=0;//標示屬於哪一個簇
for(inti=1;i<k;i++){
tmp=getDistXY(means[i],tuple);
if(tmp<dist){dist=tmp;label=i;}
}
returnlabel;
}
//獲得給定簇集的平方誤差
doublegetVar(vector<Tuple>clusters[],Tuplemeans[]){
doublevar=0;
for(inti=0;i<k;i++)
{
vector<Tuple>t=clusters[i];
for(intj=0;j<t.size();j++)
{
var+=getDistXY(t[j],means[i]);
}
}
//cout<<"sum:"<<sum<<endl;
returnvar;
}
//獲得當前簇的均值(質心)
TuplegetMeans(constvector<Tuple>&cluster){
intnum=cluster.size();
Tuplet(dimNum+1,0);
for(inti=0;i<num;i++)
{
for(intj=1;j<=dimNum;++j)
{
t[j]+=cluster[i][j];
}
}
for(intj=1;j<=dimNum;++j)
t[j]/=num;
returnt;
//cout<<"sum:"<<sum<<endl;
}
voidprint(constvector<Tuple>clusters[])
{
for(intlable=0;lable<k;lable++)
{
cout<<"第"<<lable+1<<"個簇:"<<endl;
vector<Tuple>t=clusters[lable];
for(inti=0;i<t.size();i++)
{
cout<<i+1<<".(";
for(intj=0;j<=dimNum;++j)
{
cout<<t[i][j]<<",";
}
cout<<") ";
}
}
}
voidKMeans(vector<Tuple>&tuples){
vector<Tuple>clusters[k];//k個簇
Tuplemeans[k];//k個中心點
inti=0;
//一開始隨機選取k條記錄的值作為k個簇的質心(均值)
srand((unsignedint)time(NULL));
for(i=0;i<k;){
intiToSelect=rand()%tuples.size();
if(means[iToSelect].size()==0)
{
for(intj=0;j<=dimNum;++j)
{
means[i].push_back(tuples[iToSelect][j]);
}
++i;
}
}
intlable=0;
//根據默認的質心給簇賦值
for(i=0;i!=tuples.size();++i){
lable=clusterOfTuple(means,tuples[i]);
clusters[lable].push_back(tuples[i]);
}
doubleoldVar=-1;
doublenewVar=getVar(clusters,means);
cout<<"初始的的整體誤差平方和為:"<<newVar<<endl;
intt=0;
while(abs(newVar-oldVar)>=1)//當新舊函數值相差不到1即准則函數值不發生明顯變化時,演算法終止
{
cout<<"第"<<++t<<"次迭代開始:"<<endl;
for(i=0;i<k;i++)//更新每個簇的中心點
{
means[i]=getMeans(clusters[i]);
}
oldVar=newVar;
newVar=getVar(clusters,means);//計算新的准則函數值
for(i=0;i<k;i++)//清空每個簇
{
clusters[i].clear();
}
//根據新的質心獲得新的簇
for(i=0;i!=tuples.size();++i){
lable=clusterOfTuple(means,tuples[i]);
clusters[lable].push_back(tuples[i]);
}
cout<<"此次迭代之後的整體誤差平方和為:"<<newVar<<endl;
}
cout<<"Theresultis: ";
print(clusters);
}
intmain(){
charfname[256];
cout<<"請輸入存放數據的文件名:";
cin>>fname;
cout<<endl<<"請依次輸入:維數樣本數目"<<endl;
cout<<endl<<"維數dimNum:";
cin>>dimNum;
cout<<endl<<"樣本數目dataNum:";
cin>>dataNum;
ifstreaminfile(fname);
if(!infile){
cout<<"不能打開輸入的文件"<<fname<<endl;
return0;
}
vector<Tuple>tuples;
//從文件流中讀入數據
for(inti=0;i<dataNum&&!infile.eof();++i)
{
stringstr;
getline(infile,str);
istringstreamistr(str);
Tupletuple(dimNum+1,0);//第一個位置存放記錄編號,第2到dimNum+1個位置存放實際元素
tuple[0]=i+1;
for(intj=1;j<=dimNum;++j)
{
istr>>tuple[j];
}
tuples.push_back(tuple);
}
cout<<endl<<"開始聚類"<<endl;
KMeans(tuples);
return0;
}
5. 如何查看大型工程的源代碼
程序員在工作過程中,會遇到很多需要閱讀源碼的場景,比如技術預研、選擇技術框架、接手以前的項目、review他人的代碼、維護老產品等等。可以說,閱讀源代碼是程序員的基本功,這項基本功是否扎實,會在很大程度上影響一個程序員在技術上的成長速度。2014年寫《Qt on Android核心編程》和《Qt Quick核心編程》時,很多內容都是通過分析Qt源碼搞明白的。這陣子研究CEF和PPAPI,也主要靠研究源代碼來搞明白用法。最近工作上要修改已有項目的一個子系統,也是得硬著頭皮先讀懂代碼。總之在開發工作這十來年中,讀過太多源碼了,從源代碼中學習到太多東西了,如果不閱讀源代碼,真不知道自己能否成長起來。寫代碼是從模仿開始的,提高也是從觀摩別人的優秀設計和代碼開始的。所以閱讀源碼至關重要,接下來咱從下列方面聊聊閱讀源碼的事兒。不同的目的會有不同的心情,會影響到工作的進展,像修復他人的Bug這種事情,類似於沒被掰彎的男猿捏著鼻子給另外一個男人擦屁股,是很惡心的,很容易讓人拒絕的。所以因這種目標而閱讀源碼,往往是欲拒還迎、欲說還休,效率較低。然而修復實際工作中幫別人修復Bug這種情形,十有八九你要遇到,無可逃避。所以,心理調試很重要。為了學習去讀源碼,這是最愉快的最放鬆的。不過提醒一點,設定可檢驗的目標才會有收獲,否則就會像走到大街上看見一美女擦肩而過那樣,驚艷一下下,過後嘛關系嘛收獲也沒了。其他的目的,重構舊代碼、添加新功能,比幫別人擦溝子(陝西話,屁股)略強,因為他帶有創造性,創造性的活動能給人帶來強烈的愉悅,所以雖然這兩種目的也有很多讓人不爽的部分,不過想到我可以讓一棵老樹煥發青春,不爽也就慢慢弱下去了。
6. 什麼叫做挖漏洞
漏洞挖掘,顧名思義就是尋找漏洞,主要是通過綜合應用各種技術和工具,盡可能地找出軟體中的潛在漏洞,然而這並非一件很容易的事情,在很大程度上依賴於個人經驗。根據分析對象的不同,漏洞挖掘技術可以分為基於源碼的漏洞挖掘技術和基於目標代碼的漏洞挖掘技術。
基於源碼的漏洞挖掘的前提是必須能獲取源代碼,對於一些開源項目,通過分析其公布的源代碼,就可能找到存在的漏洞,例如對Linux系統的漏洞挖掘就可採用這種方法。使用源碼審核技術,對軟體的源代碼進行掃描,針對不安全的庫存函數使用以及內存操作進行語義上的檢查,從而發現安全漏洞,其中的典型有靜態分析技術。
7. 誰有數據挖掘演算法源代碼啊
你也研究演算法啊,我也剛開始,交個朋友唄,2674457337,你可以去程序員網站下載,我那也下載了點MATLAB的,如果是這個,我那也有。基本的。
8. 求助高手,數據挖掘相關的程序源代碼,跪求啊!!!
.........\Ada_Boost.m
function D = ada_boost(train_features, train_targets, params, region);
% Classify using the AdaBoost algorithm
% Inputs:
% features - Train features
% targets - Train targets
% Params - [NumberOfIterations, Weak Learner Type, Learner's parameters]
% region - Decision region vector: [-x x -y y number_of_points]
%
% Outputs
% D - Decision sufrace
%
% NOTE: This algorithm is very tuned to the 2D nature of the toolbox!
[k_max, weak_learner, alg_param] = process_params(params);
[Ni,M] = size(train_features);
D = zeros(region(5));
W = ones(1,M)/M;
IterDisp = 10;
%Find where the training features fall on the decision grid
N = region(5);
mx = ones(N,1) * linspace (region(1),region(2),N);
my = linspace (region(3),region(4),N)' * ones(1,N);
flatxy = [mx(:), my(:)]';
train_loc = zeros(1,M);
for i = 1:M,
dist = sqrt(sum((flatxy - train_features(:,i)*ones(1,N^2)).^2));
[m, train_loc(i)] = min(dist);
end
%Do the AdaBoosting
for k = 1:k_max,
%Train weak learner Ck using the data sampled according to W:
%...so sample the data according to W
randnum = rand(1,M);
cW = cumsum(W);
indices = zeros(1,M);
for i = 1:M,
%Find which bin the random number falls into
loc = max(find(randnum(i) > cW))+1;
if isempty(loc)
indices(i) = 1;
else
indices(i) = loc;
end
end
%...and now train the classifier
Ck = feval(weak_learner, train_features(:, indices), train_targets(indices), alg_param, region);
Ckl = Ck(:);
%Ek <- Training error of Ck
Ek = sum(W.*(Ckl(train_loc)' ~= train_targets));
if (Ek == 0),
break
end
%alpha_k <- 1/2*ln(1-Ek)/Ek)
alpha_k = 0.5*log((1-Ek)/Ek);
%W_k+1 = W_k/Z*exp(+/-alpha)
W = W.*exp(alpha_k*(xor(Ckl(train_loc)',train_targets)*2-1));
W = W./sum(W);
%Update the decision region
D = D + alpha_k*(2*Ck-1);
if (k/IterDisp == floor(k/IterDisp)),
disp(['Completed ' num2str(k) ' boosting iterations'])
end
end
D = D>
9. 跪求:關聯規則挖掘演算法Java源碼
用weka吧,裡面多的是api,以前用過