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