1. python怎麼做數據分析
無論是自學還是怎麼的,記住自己學習Python的目標——從事數據科學,而非Python軟體開發。所以,Python入門的方向,應該是掌握Python所有的相關概念、基礎知識,為後續Python庫的學習打基礎。
需要掌握的數據分析基本庫有
Numpy是Python科學計算的基礎包。
它提供了復雜精細的索引功能,能更加便捷地完成重塑、切片和切塊、聚合以及選取數據子集等操作。因為數據操作、准備、清洗是數據分析最重要的技能,所以Pandas也是學習的重點。
Matplotlib是最流行的用於繪制圖表和其它二維數據可視化的Python庫,它非常適合創建出版物上用的圖表。
Scikit-learn是Python的通用機器學習工具包。它的子模塊包括分類、回歸、聚類、降維、選型、預處理,對於Python成為高效數據科學編程語言起到了關鍵作用。
只需要學習Python入門的知識以及4個數據分析相關的庫,就能上手使用Python進行數據分析了。另外如果需要獲取外部網站數據的話,還需要學習爬蟲。
2. Python怎麼構建文本矩陣並聚類
可能我很快回答不了你的問題。還需要細細回味一下。
但是我覺得你的問題是一個比較明顯的短文本聚類問題,這個問題應該在國際上都是比較難的吧。
如果還涉及到中文,中文的相關處理又不能照抄英文短文本聚類的方法,相關資料更加少了。
我倒是建議你 多看一些短文本聚類相關的文章。
問題一:技術上python矩陣表示的話:你可以使用python包,如下:
from numpy import matrix
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
這樣你需要額外規定化:行i表示文檔編號i的文檔,列j表示詞j出現次數,A[i][j]表示在文檔i中詞j的出現頻率
或者
如同那篇文章所說的採用dict表示法:A = [{'額外':1},{'每天':1,'回帖':1},......]表示整個文檔集合。
問題二:如同這樣的問題本質一樣,短文本聚類是否還適合傳統的分詞,去除副詞...等處理步驟,
如何選擇合適的模型來表示這類問題,我覺得你還是參考一些這方面的文章,最好中文的。
比如現在很火的微博,也會有好多的人嘗試對其中成幹上萬評論進行聚類。很多進行二類或者三類聚類/分類:支持-中立-反對。
論壇的評論應該很早以前就有研究聚類/分類.我覺得去那裡參考會更好.如果不是特別面向指定目的的聚類,我覺得採用一些使用寬泛的方法就行了。感覺結果不會很好。
問題三:EM演算法感覺像純數學的東西,學術功底不夠深,我也不好發表看法。
感覺這個問題的本質已經超出我的知識范疇。最簡單文檔聚類無非:分詞-文本預處理[同義詞之類]-文檔與詞計頻矩陣表示-(TF-IDF預處理)-kmeans跑起來-輸出結果.
3. 如何用python對文本進行聚類
實現原理:
首先從Tourist_spots_5A_BD.txt中讀取景點信息,然後通過調用無界面瀏覽器PhantomJS(Firefox可替代)訪問網路鏈接"http://ke..com/",通過Selenium獲取輸入對話框ID,輸入關鍵詞如"故宮",再訪問該網路頁面。最後通過分析DOM樹結構獲取摘要的ID並獲取其值。核心代碼如下:
driver.find_elements_by_xpath("//div[@class='lemma-summary']/div")
PS:Selenium更多應用於自動化測試,推薦Python爬蟲使用scrapy等開源工具。
# coding=utf-8
"""
Created on 2015-09-04 @author: Eastmount
"""
import time
import re
import os
import sys
import codecs
import shutil
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
#Open PhantomJS
driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
#driver = webdriver.Firefox()
wait = ui.WebDriverWait(driver,10)
#Get the Content of 5A tourist spots
def getInfobox(entityName, fileName):
try:
#create paths and txt files
print u'文件名稱: ', fileName
info = codecs.open(fileName, 'w', 'utf-8')
#locate input notice: 1.visit url by unicode 2.write files
#Error: Message: Element not found in the cache -
# Perhaps the page has changed since it was looked up
#解決方法: 使用Selenium和Phantomjs
print u'實體名稱: ', entityName.rstrip('\n')
driver.get("http://ke..com/")
elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input")
elem_inp.send_keys(entityName)
elem_inp.send_keys(Keys.RETURN)
info.write(entityName.rstrip('\n')+'\r\n') #codecs不支持'\n'換行
time.sleep(2)
#load content 摘要
elem_value = driver.find_elements_by_xpath("//div[@class='lemma-summary']/div")
for value in elem_value:
print value.text
info.writelines(value.text + '\r\n')
time.sleep(2)
except Exception,e: #'utf8' codec can't decode byte
print "Error: ",e
finally:
print '\n'
info.close()
#Main function
def main():
#By function get information
path = "BaiSpider\\"
if os.path.isdir(path):
shutil.rmtree(path, True)
os.makedirs(path)
source = open("Tourist_spots_5A_BD.txt", 'r')
num = 1
for entityName in source:
entityName = unicode(entityName, "utf-8")
if u'故宮' in entityName: #else add a '?'
entityName = u'北京故宮'
name = "%04d" % num
fileName = path + str(name) + ".txt"
getInfobox(entityName, fileName)
num = num + 1
print 'End Read Files!'
source.close()
driver.close()
if __name__ == '__main__':
main()
4. 如何用Python對人員軌跡聚類
把你的 xy 變換成 onehot編碼 ,這樣的話 聚類演算法就都可以兼容了,
KMeans, DBScan, 層次聚類,等等都是可以的
5. python數據分析的一般步驟是什麼
下面是用python進行數據分析的一般步驟:
一:數據抽取
從外部源數據中獲取數據
保存為各種格式的文件、資料庫等
使用Scrapy爬蟲等技術
二:數據載入
從資料庫、文件中提取數據,變成DataFrame對象
pandas庫的文件讀取方法
三:數據處理
數據准備:
對DataFrame對象(多個)進行組裝、合並等操作
pandas庫的操作
數據轉化:
類型轉化、分類(面元等)、異常值檢測、過濾等
pandas庫的操作
數據聚合:
分組(分類)、函數處理、合並成新的對象
pandas庫的操作
四:數據可視化
將pandas的數據結構轉化為圖表的形式
matplotlib庫
五:預測模型的創建和評估
數據挖掘的各種演算法:
關聯規則挖掘、回歸分析、聚類、分類、時序挖掘、序列模式挖掘等
六:部署(得出結果)
從模型和評估中獲得知識
知識的表示形式:規則、決策樹、知識基、網路權值
更多技術請關注python視頻教程。
6. python聚類如何解釋
代碼如下:# -*- coding: utf-8 -*-from sklearn.cluster import KMeansfrom sklearn.externals import joblibimport numpy final = open('c:/test/final.dat' , 'r') data = [line.strip().split('\t') for line in final]feature = [[float(x) for x in row[3:]] for row in data] #調用kmeans類clf = KMeans(n_clusters=9)s = clf.fit(feature)print s #9個中心print clf.cluster_centers_ #每個樣本所屬的簇print clf.labels_ #用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數print clf.inertia_ #進行預測print clf.predict(feature) #保存模型joblib.mp(clf , 'c:/km.pkl') #載入保存的模型clf = joblib.load('c:/km.pkl') '''#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數for i in range(5,30,1): clf = KMeans(n_clusters=i) s = clf.fit(feature) print i , clf.inertia_
7. python對數據進行聚類怎麼顯示數據分類
將其整理成數據集為:
[ [1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"] ]
演算法過程:
1、計算原始的信息熵。
2、依次計算數據集中每個樣本的每個特徵的信息熵。
3、比較不同特徵信息熵的大小,選出信息熵最大的特徵值並輸出。
運行結果:
col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0
col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108
bestInfoGain : 2.37744375108 bestFeature: 0
結果分析:
說明按照第一列,即有無喉結這個特徵來進行分類的效果更好。
思考:
1、能否利用決策樹演算法,將樣本最終的分類結果進行輸出?如樣本1,2,3屬於男性,4屬於女性。
2、示常式序生成的決策樹只有一層,當特徵量增多的時候,如何生成具有多層結構的決策樹?
3、如何評判分類結果的好壞?
在下一篇文章中,我將主要對以上三個問題進行分析和解答。如果您也感興趣,歡迎您訂閱我的文章,也可以在下方進行評論,如果有疑問或認為不對的地方,您也可以留言,我將積極與您進行解答。
完整代碼如下:
from math import log
"""
計算信息熵
"""
def calcEntropy(dataset):
diclabel = {} ## 標簽字典,用於記錄每個分類標簽出現的次數
for record in dataset:
label = record[-1]
if label not in diclabel.keys():
diclabel[label] = 0
diclabel[label] += 1
### 計算熵
entropy = 0.0
cnt = len(dataset)
for label in diclabel.keys():
prob = float(1.0 * diclabel[label]/cnt)
entropy -= prob * log(prob,2)
return entropy
def initDataSet():
dataset = [[1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"]]
label = ["male","female"]
return dataset,label
#### 拆分dataset ,根據指定的過濾選項值,去掉指定的列形成一個新的數據集
def splitDataset(dataset , col, value):
retset = [] ## 拆分後的數據集
for record in dataset:
if record[col] == value :
recedFeatVec = record[:col]
recedFeatVec.extend(record[col+1:]) ### 將指定的列剔除
retset.append(recedFeatVec) ### 將新形成的特徵值列表追加到返回的列表中
return retset
### 找出信息熵增益最大的特徵值
### 參數:
### dataset : 原始的數據集
def findBestFeature(dataset):
numFeatures = len(dataset[0]) - 1 ### 特徵值的個數
baseEntropy = calcEntropy(dataset) ### 計算原始數據集的熵
baseInfoGain = 0.0 ### 初始信息增益
bestFeature = -1 ### 初始的最優分類特徵值索引
### 計算每個特徵值的熵
for col in range(numFeatures):
features = [record[col] for record in dataset] ### 提取每一列的特徵向量 如此處col= 0 ,則features = [1,1,0,0]
uniqueFeat = set(features)
curInfoGain = 0 ### 根據每一列進行拆分,所獲得的信息增益
for featVal in uniqueFeat:
subDataset = splitDataset(dataset,col,featVal) ### 根據col列的featVal特徵值來對數據集進行劃分
prob = 1.0 * len(subDataset)/numFeatures ### 計運算元特徵數據集所佔比例
curInfoGain += prob * calcEntropy(subDataset) ### 計算col列的特徵值featVal所產生的信息增益
# print "col : " ,col , " featVal : " , featVal , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain
print "col : " ,col , " curInfoGain :" ,curInfoGain ," baseInfoGain : " ,baseInfoGain
if curInfoGain > baseInfoGain:
baseInfoGain = curInfoGain
bestFeature = col
return baseInfoGain,bestFeature ### 輸出最大的信息增益,以獲得該增益的列
dataset,label = initDataSet()
infogain , bestFeature = findBestFeature(dataset)
print "bestInfoGain :" , infogain, " bestFeature:",bestFeature
8. python怎麼用sklearn包進行聚類
#-*-coding:utf-8-*-
fromsklearn.clusterimportKMeans
fromsklearn.externalsimportjoblib
importnumpy
final=open('c:/test/final.dat','r')
data=[line.strip().split(' ')forlineinfinal]
feature=[[float(x)forxinrow[3:]]forrowindata]
#調用kmeans類
clf=KMeans(n_clusters=9)
s=clf.fit(feature)
prints
#9個中心
printclf.cluster_centers_
#每個樣本所屬的簇
printclf.labels_
#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數
printclf.inertia_
#進行預測
printclf.predict(feature)
#保存模型
joblib.mp(clf,'c:/km.pkl')
#載入保存的模型
clf=joblib.load('c:/km.pkl')
'''
#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數
foriinrange(5,30,1):
clf=KMeans(n_clusters=i)
s=clf.fit(feature)
printi,clf.inertia_
'''
9. python 數據在進行k-means聚類時遇到np.nan, 還可以進行數據聚類嗎
遇到nan建議在數據預處理階段用fillna進行填充,要不然數據不幹凈容易導致聚類結果不理想
10. 怎麼用python進行聚類分析
、K均值聚類K-Means演算法思想簡單,效果卻很好,是最有名的聚類演算法。聚類演算法的步驟如下:1:初始化K個樣本作為初始聚類中心;2:計算每個樣本點到K個中心的距離,選擇最近的中心作為其分類,直到所有樣本點分類完畢;3:分別計算K個類中所有樣本的質心,作為新的中心點,完成一輪迭代。通常的迭代結束條件為新的質心與之前的質心偏移值小於一