python数据分析和数据可视化总结
python數(shù)據(jù)分析和數(shù)據(jù)可視化總結(jié)
- 數(shù)據(jù)分析
- 數(shù)據(jù)和信息
- 什么是數(shù)據(jù)分析
- 數(shù)據(jù)分析的目的
- 數(shù)據(jù)分析過程
- Numpy和Pandas
- 如何利用Pandas讀取文件
- 如何利用Pandas寫入數(shù)據(jù)到新文件
- 使用jieba提煉關(guān)鍵字詞
- jieba分詞有三種模式
- textrank算法
- 數(shù)據(jù)可視化
- matplotlib的使用
- 參考文獻
數(shù)據(jù)分析
數(shù)據(jù)和信息
數(shù)據(jù)和信息,兩個詞詞義很接近,但其實并不能等同。
數(shù)據(jù)是信息的載體,是對客觀事物的符號表示,指能輸入到計算機中并能被計算機接受處理的各種符號集合的統(tǒng)稱。數(shù)據(jù)實際上不同于信息,至少在形式上不一樣。
什么是數(shù)據(jù)分析
信息實際上是對數(shù)據(jù)集進行處理,從中提煉出可用于其他場合的結(jié)論,是對數(shù)據(jù)進行處理后的得到的結(jié)果。從原始數(shù)據(jù)中抽取信息的過程叫做數(shù)據(jù)分析。
常見的數(shù)據(jù)存儲格式有:XML, JSON, XLS,CSV
數(shù)據(jù)分析常用到的統(tǒng)計技術(shù)有:貝葉斯方法、回歸、聚類
數(shù)據(jù)分析領(lǐng)域最先進的工具之一是機器學習方法
數(shù)據(jù)分析的目的
抽取不易推斷的信息,而一旦了解這些信息,就能夠?qū)Ξa(chǎn)生數(shù)據(jù)的系統(tǒng)的運行機制進行研究,從而對系統(tǒng)可能的響應(yīng)和演變做出預(yù)測。數(shù)據(jù)分析最初用于數(shù)據(jù)保護,現(xiàn)在已經(jīng)發(fā)展為數(shù)據(jù)建模的方法論。
數(shù)據(jù)分析過程
問題定義、數(shù)據(jù)抽取、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)探索、預(yù)測模型、模型評估/測試、結(jié)果可視化和闡釋、解決方案部署。
更簡練的概括:獲得或收集數(shù)據(jù)、解析和過濾數(shù)據(jù)、分析和提煉數(shù)據(jù)(數(shù)據(jù)清洗)、呈現(xiàn)和交互。
Numpy和Pandas
Numpy是Python進行科學計算,尤其是數(shù)據(jù)分析時,所用到的一個基礎(chǔ)庫。Numpy庫的基礎(chǔ):Ndarray。Numpy數(shù)組的維數(shù)和元素數(shù)量由數(shù)組的型(shape)來決定,數(shù)組的型由N個正整數(shù)組成的元組來指定,元組的每個元素對應(yīng)每一維的大小。數(shù)組的維統(tǒng)稱為軸(axes),軸的數(shù)量被稱作秩(rank)。
Pandas是一個專門用于數(shù)據(jù)分析的開源Python庫 。pandas的核心為兩大數(shù)據(jù)結(jié)構(gòu),分別是Series(一維)和DataFrance(多維)。pandas有各種靈活的函數(shù)可以進行統(tǒng)計、排序相關(guān)性和協(xié)方差的計算、處理NAN數(shù)據(jù)、登機索引和分級。pandas還有一組I/O API工具,可進行數(shù)據(jù)讀寫。
如何利用Pandas讀取文件
下面是我在做過的項目中,具體運用到用panda讀取excel文件的例子:
現(xiàn)已得到這樣的一個excel表,存放的是招聘C語言開發(fā)工程師的崗位信息,表格中的數(shù)據(jù)均已清洗過,現(xiàn)在想讀取表格中的數(shù)據(jù)到python,要怎么實現(xiàn)呢?我們這里以獲取數(shù)據(jù)中出現(xiàn)的所有省份為例,統(tǒng)計出現(xiàn)的各省份名稱及個數(shù),代碼很簡單,如下:
運行結(jié)果如下:
D:\anaconda\python.exe “D:/Python workSpace/readFile.py”
[‘貴陽’, ‘呼和浩特’, ‘蘭州’, ‘沈陽’, ‘包頭’, ‘南京’, ‘成都’, ‘貴州省’, ‘黔東南’, ‘深圳’, ‘南寧’, ‘銀川’, ‘上海’, ‘呼倫貝爾’, ‘北京’, ‘廣州’, ‘甘肅省’, ‘遵義’, ‘珠海’, ‘佛山’, ‘中山’, ‘惠州’, ‘河源’, ‘江門’, ‘廣東省’, ‘汕頭’, ‘無錫’, ‘湛江’, ‘武漢’, ‘長沙’, ‘清遠’, ‘杭州’, ‘肇慶’, ‘東莞’, ‘云浮’, ‘廈門’, ‘海口’, ‘揭陽’, ‘福州’, ‘青島’, ‘濟南’, ‘哈爾濱’, ‘淄博’, ‘漳州’, ‘山東省’, ‘長春’, ‘鄭州’, ‘寧波’, ‘合肥’, ‘天津’, ‘浙江省’, ‘大連’, ‘蕪湖’, ‘泉州’, ‘六安’, ‘南昌’, ‘黑龍江省’, ‘銅陵’, ‘三門峽’, ‘金華’, ‘煙臺’, ‘上饒’, ‘萍鄉(xiāng)’, ‘洛陽’, ‘馬鞍山’, ‘桂林’, ‘寧德’, ‘柳州’, ‘賀州’, ‘景德鎮(zhèn)’, ‘滁州’, ‘貴港’, ‘威海’, ‘鷹潭’, ‘濰坊’, ‘贛州’, ‘濟寧’, ‘廣西’, ‘三亞’, ‘昆明’, ‘棗莊’, ‘蘇州’, ‘西安’, ‘湖州’, ‘南陽’, ‘臺州’, ‘嘉興’, ‘湖南省’, ‘安徽省’, ‘湘潭’, ‘龍巖’, ‘德州’, ‘岳陽’, ‘泰安’, ‘吉安’, ‘東營’, ‘廊坊’, ‘九江’, ‘淮北’, ‘宿州’, ‘臨沂’, ‘萊蕪’, ‘日照’, ‘徐州’, ‘撫州’, ‘常州’, ‘新余’, ‘義烏’, ‘福建省’, ‘株洲’, ‘南平’, ‘懷化’, ‘莆田’, ‘重慶’, ‘南通’, ‘襄陽’, ‘黃石’, ‘昆山’, ‘十堰’, ‘江蘇省’, ‘鄂州’, ‘燕郊開發(fā)區(qū)’, ‘雄安新區(qū)’, ‘咸寧’, ‘邯鄲’, ‘太倉’, ‘常熟’, ‘唐山’, ‘綿陽’, ‘湖北省’, ‘張家港’, ‘荊門’, ‘溫州’, ‘淮安’, ‘石家莊’, ‘茂名’, ‘泰州’, ‘太原’, ‘梅州’, ‘宜昌’, ‘邢臺’, ‘舟山’, ‘鎮(zhèn)江’, ‘海寧’, ‘烏魯木齊’]
145
Process finished with exit code 0
如何利用Pandas寫入數(shù)據(jù)到新文件
那么,如果只是將數(shù)據(jù)整合后的結(jié)果在控制臺輸出,會對后續(xù)可視化操作帶來不便,最好是可以將這新數(shù)據(jù)整合到一個新文件中。那么怎么寫入數(shù)據(jù)到新的excel文件呢?下面我們統(tǒng)計一下各個地區(qū)(市)及出現(xiàn)的頻數(shù),并將其數(shù)據(jù)整合到新的表格文件testClassifyArea.xls中。
# coding:utf-8 import pandas as pd import xlwtcity_list = [] province_list = [] everyCity_num=[] rows = 0class ClassifyArea(object):def __init__(self):passdef deal_file(self, xls_file):global city_listglobal province_listglobal rowsglobal everyCity_numdata = pd.read_excel(xls_file, 'Sheet1')rows = data.shape[0] # 獲取行數(shù),shape[1]獲取列數(shù)for i in range(rows):temp = str(data['省'][i]).strip()# 這里是原先的表格屬性名稱出了點問題,這一列的名稱本來應(yīng)該是“市”if temp is not '' and '省' not in temp and temp not in city_list:city_list.append(str(temp))everyCity_num.append(int(0))print(city_list)print(len(city_list))for j in range(rows):temp = str(data['省'][j]).strip()for k in range(len(city_list)):if str(temp) == str(city_list[k]):everyCity_num[k] = everyCity_num[k] + 1print(everyCity_num)print(len(everyCity_num))def save_file(self):global city_listglobal province_listglobal everyCity_numf = xlwt.Workbook() # 創(chuàng)建工作薄sheet1 = f.add_sheet(u'Sheet1', cell_overwrite_ok=True) # 創(chuàng)建sheet# 在表格的第一行第一列和第二列分別寫上標題“市”和“出現(xiàn)頻數(shù)”sheet1.write(0, 0, '市' )sheet1.write(0, 1, '出現(xiàn)頻數(shù)')# 在表格的第一列寫入各個城市的名稱n = 1for city in city_list:sheet1.write(n, 0, city)n = n + 1# 在表格的第二列統(tǒng)計并寫入各個城市名稱出現(xiàn)的頻數(shù)p = 1for num in everyCity_num:sheet1.write(p, 1, num)p = p + 1f.save('testClassifyArea.xls ') # 保存文件到testClassifyArea.xlsfile = ClassifyArea() file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\java 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\java 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\java 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\C 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\C 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\python 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\python 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\web 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\web 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\web 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\大數(shù)據(jù) 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\大數(shù)據(jù) 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\大數(shù)據(jù) 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\服務(wù)器 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\服務(wù)器 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\算法 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\算法 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\算法 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\算法 4.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\UI.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\軟件測試 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\軟件測試 2.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\軟件測試 3.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\AI.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\iOS.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\Android 1.xlsx") # file.deal_file(r"D:\zh學習\軟賽\清洗后的數(shù)據(jù)\Android 2.xlsx") # 當然是數(shù)據(jù)量越大,結(jié)果越精確,這里為了節(jié)省時間,只讀入了一個數(shù)據(jù)文件 file.save_file()運行結(jié)果如下:
D:\anaconda\python.exe “D:/Python workSpace/classifyArea.py”
[‘福州’, ‘濟南’, ‘長春’, ‘哈爾濱’, ‘青島’, ‘武漢’, ‘煙臺’, ‘南京’, ‘濰坊’, ‘沈陽’, ‘北京’, ‘上海’, ‘泉州’, ‘威海’, ‘贛州’, ‘寧波’, ‘廈門’, ‘日照’, ‘天津’, ‘遼陽’, ‘重慶’, ‘三明’, ‘無錫’, ‘大連’, ‘海口’, ‘廣州’, ‘東莞’, ‘德州’, ‘莆田’, ‘珠海’, ‘龍巖’, ‘鄭州’, ‘合肥’, ‘長沙’, ‘昆明’, ‘蘇州’, ‘菏澤’, ‘義烏’, ‘深圳’, ‘廣西’, ‘南寧’, ‘南昌’, ‘銅陵’, ‘邵陽’, ‘三門峽’, ‘柳州’, ‘淄博’, ‘蕪湖’, ‘佛山’, ‘西安’, ‘漳州’, ‘滁州’, ‘杭州’, ‘池州’, ‘石家莊’, ‘株洲’, ‘臨沂’, ‘上饒’, ‘紹興’, ‘白城’, ‘松原’, ‘六安’, ‘開封’, ‘洛陽’, ‘襄陽’, ‘荊州’, ‘宣城’, ‘南通’, ‘廊坊’, ‘桂林’, ‘撫州’, ‘保定’, ‘潛江’, ‘貴港’, ‘寧德’, ‘宜春’, ‘濱州’, ‘梧州’, ‘北海’, ‘濟寧’, ‘東營’, ‘馬鞍山’, ‘泰安’, ‘唐山’, ‘宜昌’, ‘臺州’, ‘荊門’, ‘黃岡’, ‘九江’, ‘成都’, ‘溫州’, ‘賀州’, ‘海寧’, ‘樂山’, ‘郴州’, ‘南陽’, ‘邯鄲’, ‘秦皇島’, ‘孝感’, ‘安陽’, ‘寶雞’, ‘南充’, ‘靖江’, ‘常德’, ‘鷹潭’, ‘玉林’, ‘邢臺’, ‘常州’, ‘麗水’, ‘商丘’, ‘吉安’, ‘景德鎮(zhèn)’, ‘昆山’, ‘嘉興’, ‘貴陽’, ‘衡陽’, ‘益陽’, ‘十堰’, ‘綿陽’, ‘徐州’, ‘銀川’, ‘丹陽’, ‘許昌’, ‘張家口’, ‘燕郊開發(fā)區(qū)’, ‘舟山’, ‘新鄉(xiāng)’, ‘阜陽’, ‘駐馬店’, ‘黃石’, ‘呼和浩特’, ‘漢中’, ‘泰州’, ‘永州’, ‘蚌埠’, ‘湘潭’, ‘淮南’, ‘聊城’, ‘新余’, ‘安慶’, ‘滄州’, ‘懷化’, ‘信陽’, ‘湘西’, ‘咸寧’, ‘烏魯木齊’, ‘衡水’, ‘淮北’, ‘周口’, ‘鹽城’, ‘亳州’, ‘萍鄉(xiāng)’, ‘棗莊’, ‘瀘州’, ‘湖州’, ‘咸陽’, ‘焦作’, ‘三亞’, ‘濟源’, ‘鄂州’, ‘濮陽’, ‘隨州’, ‘張家港’, ‘鎮(zhèn)江’, ‘鄂爾多斯’, ‘楊凌’, ‘連云港’, ‘拉薩’, ‘雄安新區(qū)’, ‘欽州’, ‘岳陽’, ‘萊蕪’, ‘西寧’, ‘黃山’, ‘廣元’, ‘鞍山’, ‘張家界’, ‘承德’, ‘平頂山’, ‘蘭州’, ‘臨汾’, ‘宿遷’, ‘攀枝花’, ‘眉山’, ‘遵義’, ‘金華’, ‘陽泉’]
187
[3005, 2352, 500, 379, 2064, 3556, 54, 3759, 39, 18, 266, 288, 83, 53, 36, 740, 580, 32, 730, 2, 1275, 11, 22, 53, 29, 95, 11, 12, 22, 4, 17, 1657, 2448, 3617, 57, 39, 7, 5, 110, 12, 307, 499, 9, 7, 97, 76, 25, 96, 7, 3016, 12, 15, 4215, 2, 588, 41, 27, 15, 11, 10, 2, 9, 8, 20, 49, 10, 20, 2, 28, 51, 6, 30, 3, 5, 9, 15, 5, 4, 6, 15, 6, 27, 19, 33, 38, 13, 7, 6, 7, 2763, 11, 3, 3, 1, 26, 11, 21, 12, 1, 3, 3, 1, 2, 9, 3, 6, 11, 18, 2, 4, 4, 1, 4, 16, 26, 8, 8, 4, 7, 1, 4, 2, 13, 12, 1, 2, 5, 6, 3, 16, 2, 2, 2, 4, 5, 13, 1, 6, 6, 3, 2, 14, 3, 1, 4, 7, 2, 1, 1, 2, 1, 1, 2, 14, 8, 17, 2, 2, 1, 5, 1, 1, 2, 8, 1, 1, 1, 2, 6, 2, 5, 2, 1, 1, 5, 1, 3, 2, 1, 3, 2, 1, 1, 1, 2, 1, 3]
187
Process finished with exit code 0
我們來看一下把所有數(shù)據(jù)都加進去最后得到的文件testClassifyArea.xls中的內(nèi)容:
使用jieba提煉關(guān)鍵字詞
jieba是優(yōu)秀的中文分詞第三方庫,可以提供仲文分析技術(shù),屬于一種NLP(自然語言處理技術(shù))。中文分詞技術(shù)分為:規(guī)則分詞、統(tǒng)計分詞和很和分詞。提供三種分詞模式,可以利用一個中文詞庫,確定漢字之間的關(guān)聯(lián)概率。漢字間概率大的組成詞組,形成分詞結(jié)果。除了分詞,用戶還可以添加自定義的詞組。此外,還可以進行詞云的制作。
jieba分詞有三種模式
**精確模式:**把文本精確的切分開,不存在冗余單詞
全模式:把文本中所有可能的詞語都掃描出來,有冗余
**搜索引擎模式:**在精確模式基礎(chǔ)上,對長詞再次切分
textrank算法
textrank算法和pagerank算法思想相似,用TextRank提取來提取關(guān)鍵詞,用PageRank的思想來解釋它:
如果一個單詞出現(xiàn)在很多單詞后面的話,那么說明這個單詞比較重要;一個TextRank值很高的單詞后面跟著的一個單詞,那么這個單詞的TextRank值會相應(yīng)地因此而提高。想深入了解的話可以看下這篇文章,那位博主介紹的很詳細。
textrank算法詳細介紹
除了textrank算法算法,還有很多關(guān)鍵詞提取算法,例如TF/IDF、LSA/LSI/LDA、LSA/LSI、LDA等等。有興趣的小伙伴可以查閱資料了解一下。
這里根據(jù)我做的實際項目介紹一下jieba簡單的使用:
執(zhí)行結(jié)果如下:
D:\anaconda\python.exe “D:/Python workSpace/extractKeys.py”
1
362040
Building prefix dict from the default dictionary …
Dumping model to file cache C:\Users\Administrator\AppData\Local\Temp\jieba.cache
Loading model cost 1.988 seconds.
Prefix dict has been built succesfully.
[‘工程師’, ‘開發(fā)’, ‘軟件’, ‘數(shù)據(jù)’, ‘實習生’, ‘經(jīng)理’, ‘測試’, ‘架構(gòu)師’, ‘項目經(jīng)理’, ‘軟件測試’, ‘技術(shù)’, ‘運維’, ‘系統(tǒng)’, ‘實施’, ‘助理’, ‘算法’, ‘總監(jiān)’, ‘講師’, ‘資深’, ‘程序員’, ‘產(chǎn)品’, ‘項目’, ‘平臺’, ‘技術(shù)支持’, ‘應(yīng)用’, ‘主管’, ‘游戲’, ‘專員’, ‘實習’, ‘后臺’]
{‘工程師’: 30918, ‘開發(fā)’: 23566, ‘軟件’: 6740, ‘數(shù)據(jù)’: 2220, ‘實習生’: 1447, ‘經(jīng)理’: 2178, ‘測試’: 1907, ‘架構(gòu)師’: 1124, ‘項目經(jīng)理’: 1052, ‘軟件測試’: 849, ‘技術(shù)’: 1470, ‘運維’: 781, ‘系統(tǒng)’: 994, ‘實施’: 702, ‘助理’: 632, ‘算法’: 452, ‘總監(jiān)’: 379, ‘講師’: 438, ‘資深’: 422, ‘程序員’: 409, ‘產(chǎn)品’: 491, ‘項目’: 1409, ‘平臺’: 372, ‘技術(shù)支持’: 262, ‘應(yīng)用’: 378, ‘主管’: 293, ‘游戲’: 296, ‘專員’: 156, ‘實習’: 2109, ‘后臺’: 267}
Process finished with exit code 0
我們最終把所有數(shù)據(jù)加進去,可以的得到如下表格:
附:jieba詞性標注規(guī)范表
數(shù)據(jù)可視化
可視化系統(tǒng)是為確保人類在整個參與過程中的積極性而設(shè)計的。
數(shù)據(jù)可視化有多種方式,在我們本次項目中,我接觸到了matplotlib,由于是初次使用,可視化的操作不夠熟練,通過運用Tableau進行了輔助。其實還可以通過詞云將數(shù)據(jù)分析的結(jié)果進行展示。
matplotlib的使用
matplotlib可以做2D、3D的圖表。
matplotlib優(yōu)點:
1、使用簡單
2、漸進、交互的方式實現(xiàn)數(shù)據(jù)可視化
3、對圖像元素控制力強
可輸出PNG、PDF、SVG和EPS等多種方式
matplotlib架構(gòu)分為三層
Scripting(腳本)層、Artisr(表現(xiàn))層、Backend(后端)層
matplotlib是一個圖形庫,但它卻以Numpy為基礎(chǔ)。常見圖表類型:線性圖、直方圖、條形圖、水平條狀圖、多序列條狀圖
這我們做的項目中,用到了統(tǒng)計2019中國最熱門的10大招聘城市,可以直觀地將數(shù)據(jù)以柱狀圖形式展現(xiàn)。代碼如下:
運行后可得到下面的這張圖:
當然,還可以對其他幾個方面進行分析和可視化:
參考文獻
《python數(shù)據(jù)分析實戰(zhàn)》【意大利】 Fabio Nelli 著
《python數(shù)據(jù)可視化》 【印度】Kirthi Raman 著
《python自然語言處理實戰(zhàn)》 涂銘 劉祥 劉樹春 著
感謝瀏覽,歡迎和我交流對于python數(shù)據(jù)分析和可視化的更多見解,不足之處歡迎批評討論。
總結(jié)
以上是生活随笔為你收集整理的python数据分析和数据可视化总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: plsql链接oracle64位报错,P
- 下一篇: python 网格搜索_Python机器