整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          盤點數據處理工具,手把手教你做數據清洗和轉換

          盤點數據處理工具,手把手教你做數據清洗和轉換

          讀:原始數據本身沒有用。為了使它實際有用,你需要準備它。

          作者:Mars Geldard, Jonathon Manning, Paris Buttfield-Addison, Tim Nugent

          來源:華章科技

          01 了解數據集

          數據準備的關鍵和重復階段是數據探索。一組因為太大而無法由人工手動讀取、檢查和編輯每個值的數據,仍需要驗證其質量和適用性,然后才可以將其委托給一個值得花費時間和計算的模型。

          與將大型數據集的樣本轉儲到電子表格程序中的方法一樣簡單,只需查看每列中出現的值的類型或范圍,即可識別諸如不負責任的默認值之類的錯誤(例如,在沒有測量值的情況下,使用零而不是NULL)或不可能的范圍或不兼容的合并(數據似乎來自多個來源,每個來源中使用了不同的單位。例如,華氏度與攝氏度)。

          數據分析工具非常豐富。當數據集太大而無法在電子表格程序中打開時,Python腳本或像RStudio這樣的應用程序具有可視化、匯總或報告數據的強大功能。使用你熟悉的任何方法,至少要確定不同屬性值的格式和一般分布。

          02 數據處理工具

          在能夠使用數據集之前,有許多工具可以用于清洗、處理和了解數據集。Python是這方面的事實標準,它有很多工具來理解和處理數據。

          Matplotlib之類的包,通常可以非常容易地生成用于可視化檢查的數據圖表。

          Pillow提供各種處理、轉換和操作圖像的功能。

          Python有一個用于執行統計的內置程序包,如果需要更多功能的話,NumPy也有。

          Python還具有廣泛的內置和第三方支持內容,可處理你將要遇到的幾乎所有文件格式,包括CSV、JSON、YAML、XML和HTML,以及更深奧的格式(如TOML或INI文件)。

          如果這些都不起作用,則有一個值得搜索的軟件包索引器,可以查看是否有解決你的問題的方法。或者,只需搜索“我想用Python做事情”,大多數情況下,你會發現某人遇到了相同的問題,并為此提供了解決方案,或者至少提供了一些可以查看的指引。

          如果你不喜歡Python,那么幾乎所有選擇的編程語言都具有類似的工具和功能。我們之所以喜歡Python,是因為這些工作已經為你完成了,而且有很多例子可以作為起點。Python在這方面沒有什么神奇之處,但它是最受歡迎的選擇,所以我們提倡堅持使用主流工具。

          另一個不錯的選擇是電子表格程序,例如Excel、Numbers或Google Sheets。它們經常受到指責,因為在這些程序中進行數據準備可能很麻煩,但在需要使用Python(或你選擇的其他工具)之前,你可以使用它們非常快速地獲得大量有用的洞見和準備。作為系統附贈的工具,你基本上肯定已經安裝了其中一個,并且可以在你的機器上運行。

          最后,不要害怕跳出框架思考——一些像壓縮數據集這樣簡單的東西,甚至不需要看數據集內部就能大致了解數據集的熵大小。如果一個數據集壓縮得非常好,而來自相同來源的另一個數據集壓縮得不那么好,那么第二個數據集的數據的熵可能比第一個數據集的大。

          圖像數據集不是那么容易觀察到的,但絕對值得花時間瀏覽一下圖像的總體質量,以及圖像使用了哪些裁剪方法。像Turi Create這樣的可視化功能對于了解數據非常有用。圖3-1顯示了一個例子。

          ▲圖3-1 通過Turi Create了解你的數據

          03 清洗數據

          在了解數據集的過程中,你可能會遇到一些錯誤。記錄數據可能會產生錯誤。需要檢查的錯誤有以下幾類:

          • 一致值錯誤
          • 單值錯誤
          • 缺失值

          一致值錯誤包括可能導致整列或一組值不準確的情況,例如,使用儀器記錄某個被統一量校準錯誤的數據,從產生額外熱量的物體旁邊測量溫度,使用未提前歸零的天平稱重,等等。這還包括來自不同來源的數據未經轉換就被不當合并的情況:簡單壓縮一組來自美國和一組來自英國的數據,現在系統認為100攝氏度完全合理。

          單值錯誤用于描述離群值或不一致的錯誤校準,僅在少數情況下導致不準確或完全不合邏輯的值。可能出現的情況,如傳感器超載一天,產生的值比理論可能的高1000%(應該是相當明顯的)。

          當用于記錄數據的方法出現問題,或者數據集在其生命周期的某個時刻經歷了某種畸形的轉換時,可能會出現缺失值。這些可能是簡單的nil或NULL值,或者一些不太有用的值,例如字符串"NONE"或默認值0。有些甚至可能只是無意義的字符,什么都有可能出現。

          如果可以識別出一致誤差,那么這通常可以通過按一致誤差值縮放或轉換整個值集來糾正。單值錯誤和缺失值要求你要么猜測需要使用某種可行方法替換的值,要么完全刪除行或者觀察值以防止出現誤差。

          你可以通過以下方法來猜測該值:獲取該列中所有其他值的平均值;使用該列中與缺失值最接近的觀察值;使用一些使用其他屬性知識的特定于應用程序的方法。

          04 轉換數據

          在使用數據之前進行轉換有兩個主要原因:為了滿足要使用的算法的格式要求;使用新的推斷屬性改進或擴展當前數據。對于這兩種目的,通常有三種數據轉換:

          1. 歸一化(normalization)

          一種用于數值數據的方法,它將上界和下界綁定到一個數值范圍上,使它們更容易處理。

          這方面的一個例子是對數值數據的觀察值需要與不同的度量進行比較。如果你試圖根據魚的長度、體重、年齡和失去眼睛的數量來評估不同魚的健康狀況,大概每個人都會同意用不同的標準來比較兩條魚(例如,一只眼睛與一年的魚,或者一厘米長度的相比較)。如果用同樣的標準來比較,則會得出不同的結果。

          歸一為正數值很簡單:

          2. 泛化(generalization)

          一種將特定值替換為更高級別的概念,以更好地進行群體觀察的方法。

          當記錄某些屬性的方法比需要的更精確時,通常會發生這種情況。例如,如果你具有某人運動的GPS統計信息,則可以將緯度和經度歸納為一個地址,從而防止系統將每一個小運動都視為位置變化。或者,將數值測量值轉換為人類群體,這意味著相關因素可能不是將個人的身高測量值以毫米為單位,而是將其分為低于、接近或高于平均的身高。

          3. 聚合(aggregation)

          對某些復雜屬性進行總結以使分析更有效的一種方法。

          例如,可以從文本中提取關鍵字(甚至是單詞頻率),而不是分析文本的段落(Attribute: Text,Classification: Class),只顯示與所給出的分類最相關或最獨特的方面。

          在這些步驟之前、之間或之后,可能會出現不同類型的數據轉換,數據可能被更改、擴展或縮減:

          • 特征構建(feature construction)

          一種創建新屬性的方法,通常通過推理或組合已有的其他值來實現。

          這方面的一個例子是泛化或聚合,其中原始值也被保留,或者更常見的是,當存在兩個或多個值時(或允許發現第三個值)。例如,如果你有一家公司的名稱和經營所在國,可以查一下它的商業登記號;如果你有某人的身高和體重,可以構建他們的BMI。

          • 數據規約(data reduction)

          一種刪除某些屬性的方法,這些屬性可能與另一個屬性相關,也可能與你試圖解決的問題無關。

          例如,如果你有某人的地址、郵編和區號,這些信息中至少有一條是多余的。也許—就像在特征構建的例子中那樣—你由于一些算法的原因想要同時分析兩者,但這是不可能的。兩個或多個屬性之間的高度相關性表明,它們可能在分析中導致錯誤,并可能被刪除。

          05 驗證數據集的適應性

          到了這一步,你應該花更多的時間仔細地看看你試圖解決的問題和打算用于任務的數據集。在AI應用程序之前的數據分析世界中,可能沒有你想要的那么嚴格的規則,但你通常會知道一個解決方案是否可行,一個數據集是否能講述你想要的故事。

          相信這個小小的聲音,因為如果你回頭看,會發現浪費的工作是有價值的。

          再次探索你的數據。瀏覽并可視化它,用少量的數據子集測試你的解決方案—做你需要做的任何事情。如果感覺還是正確的,那就繼續前進。

          關于作者:Mars Geldard,來自澳大利亞塔斯馬尼亞州的研究者和計算機科學家。

          Jonathon Manning,Secret 實驗室的聯合創始人兼技術主管,該實驗室位于澳大利亞塔斯馬尼亞州,已成立十幾年了。

          Paris Buttfield-Addison,計算機科學家和歷史學家,也是Secret 實驗室的聯合創始人和產品研發負責人。

          Tim Nugent,移動應用程序開發者、游戲設計師和計算機研究者。

          本文摘編自《Swift人工智能實戰:從基礎理論到AI驅動的應用程序開發》,經出版方授權發布。

          延伸閱讀《Swift人工智能實戰》

          推薦語:本書從實戰角度出發,為所有程序員和開發人員提供了使用Swift進行AI和機器學習開發的一站式服務。全書分為三部分:第一部分介紹機器學習和人工智能背后的基礎知識;第二部分討論許多有趣的主題,包括計算機視覺、音頻、運動和語言;第三部分詳細研究為第二部分的應用程序提供支持的技術。

          聯網上有極其豐富的數據資源可以使用。使用Excel可以自動讀取部分網頁中的表格數據,使用Python編寫爬蟲程序可以讀取網頁的內容。

          本節通過Python編寫測試用Web應用程序,然后使用Excel和Python從編寫的Web網站上獲取數據。

          1,構建測試用網站數據

          通過Python Flask Web框架分別構建一個Web網站和一個Web API服務。

          1.構建Web網站

          新建一個名為“5-5-WebTable.py”的Python腳本,創建一個包含表格的簡單網頁。如果讀者對構建方法不感興趣,可跳過以下代碼,直接執行腳本“5-5-WebTable.py”打開網站。

          (1)安裝flask包。

          pip install flask

          (2)構建包含表格的網頁。

          from flask import Flask
          
          app=Flask(__name__)  # 創建Falsk Web應用實例
          
          # 將路由“/”映射到table_info函數,函數返回HTML代碼
          @app.route('/')
          def table_info():
              
              return """<h2>HTML表格實例,用于提供給Excel和Python讀取</h2>
              <table border="1">
                <caption>用戶信息表</caption>
                  <tbody><tr>
                      <th>姓名</th>
                      <th>性別</th>
                      <th>年齡</th>
                  </tr>
                  <tr>
                      <td>小米</td>
                      <td>女</td>
                      <td>22</td>
                  </tr>
                  ……….
              </tbody></table>"""
          
          if __name__=='__main__':
              app.debug=True  # 啟用調試模式
              app.run()  # 運行,網站端口默認為5000

          通過命令“python ./5-5-WebTable.py”啟動網站,然后在瀏覽器中輸入http://127.0.0.1:5000/,出現如圖1所示的網頁內容。

          圖1 使用Flask構建的測試網站

          2.構建Web API服務

          新建一個名為“5-5-WebAPI.py”的Python腳本,使用flask_restplus包構建Web API服務。如果讀者對構建方法不感興趣,可跳過以下代碼,直接執行腳本“5-5-WebAPI.py”打開Web API服務。

          (1)安裝flask_restplus包。

          pip install flask-restplus

          (2)導入必要的庫與初始化應用對象。

          from flask import Flask
          # Api類是Web API應用的入口,需要用Flask應用程序初始化
          from flask_restplus import Api
          
          # Resource類是HTTP請求的資源的基類
          from flask_restplus import Resource
          
          # fields類用于定義數據的類型和格式
          from flask_restplus import fields
          
          app=Flask(__name__)  # 創建Falsk Web應用實例
          
          # 在flask應用的基礎上構建flask_restplus  Api對象
          api=Api(app, version='1.0',
                    title='Excel集成Python數據分析-測試用WebAPI',
                    description='測試用WebAPI', )
          
          # 使用namespace函數生成命名空間,用于為資源分組
          ns=api.namespace('ExcelPythonTest', description='Excel與Python Web API測試')
          # 使用api.model函數生成模型對象
          todo=api.model('task_model', {
              'id': fields.Integer(readonly=True,
                                   description='ETL任務唯一標識'),
              'task': fields.String(required=True,
                                    description='ETL任務詳情')
          })

          (3)Web API數據操作類,包含增、刪、改、查等方法。

          class TodoDAO(object):
          
              def __init__(self):
                  self.counter=0
                  self.todos=[]
          
              def get(self, id):
                  for todo in self.todos:
                      if todo['id']==id:
                          return todo
                  api.abort(404, "ETL任務 {} 不存在".format(id))
          
              def create(self, data):
                  todo=data
                  todo['id']=self.counter=self.counter + 1
                  self.todos.append(todo)
                  return todo
          
          # 實例化數據操作,創建3條測試數據
          DAO=TodoDAO()
          DAO.create({'task': 'ETL-抽取數據操作'})
          DAO.create({'task': 'ETL-數據清洗轉換'})
          DAO.create({'task': 'ETL-數據加載操作'})

          (4)構建Web API的路由映射。

          HTTP資源請求類從Resource類繼承,然后映射到不同的路由,同時指定可使用HTTP方法。

          @ns.route('/')  # 路由“/”對應的資源類為TodoList,可使用get方法和post方法進行請求
          class TodoList(Resource):
              @ns.doc('list_todos')  # @doc裝飾器對應API文檔的信息
              @ns.marshal_list_with(todo)  # @marshal_xxx裝飾器對模型數據進行格式轉換與輸出
              def get(self):  # 定義get方法獲取所有的任務信息
                  return DAO.todos
          
              @ns.doc('create_todo')
              @ns.expect(todo)
              @ns.marshal_with(todo, code=201)
              def post(self):  # 定義post方法獲取所有的任務信息
                  return DAO.create(api.payload), 201
          
          # 路由/<int:id>對應的資源類為Todo,可使用get、delete、put方法進行請求
          @ns.route('/<int:id>')
          @ns.response(404, '未發現相關ETL任務')
          @ns.param('id', 'ETL任務ID號')
          class Todo(Resource):
              @ns.doc('get_todo')
              @ns.marshal_with(todo)
              def get(self, id):
                  return DAO.get(id)
          
              @ns.doc('delete_todo')
              @ns.response(204, 'ETL任務已經刪除')
              def delete(self, id):
                  DAO.delete(id)
                  return '', 204
          
              @ns.expect(todo)
              @ns.marshal_with(todo)
              def put(self, id):
                  return DAO.update(id, api.payload)
          
          if __name__=='__main__':
              app.run(debug=True, port=8000)  # 啟動Web API服務,端口為8000

          (4)開啟Web API服務。

          通過命令“python ./5-5-WebAPI.py”啟動Web API服務,在瀏覽器中輸入“http://127.0.0.1:8000/”

          將出現如圖5-23所示的Web API服務請求方法列表。

          圖2 WebAPI服務請求方法列表

          2,抓取用網頁數據

          Excel可以通過“數據”選項卡下的“自網站”功能抓取網頁數據。Python可以使用 requests 庫、Beautiful Soup包、Scrapy框架抓取網頁數據。

          1.通過Excel抓取

          單擊“數據”→“自其他源”→“自網站”功能。Excel可讀取的網頁數據有局限:動態網頁數據無法自動識別,非表格數據無法自動識別。

          (1)單擊“數據”→“自其他源”→“自網站”功能。

          (2)確保在5.5.1節中編寫的Web網站已經開啟。

          (3)輸入網站URL地址“http://127.0.0.1:5000/”

          單擊“高級”按鈕可配置更詳細的HTTP請求信息,然后單擊“確定”按鈕,如圖3所示。

          圖3 配置要讀取網站的URL

          (4)在“導航器”窗口中選擇導入數據。

          如圖4所示,Excel自動識別網頁中的表格數據,選擇表名后單擊“加載”按鈕即可。

          圖4 Excel自動識別網頁中的表格數據

          2.使用Python抓取

          下面演示使用requests庫抓取整個網頁中的數據,然后使用Beautiful Soup解析網頁。讀者可參考本書代碼素材文件“5-5-web.ipynb”進行學習。

          (1)通過requests讀取網頁數據。

          import requests #導入requests包
          url='http://127.0.0.1:5000/'
          
          strhtml=requests.get(url) #使用get方法請求網頁數據

          (2)通過Beautiful Soup解析網頁。

          from bs4 import BeautifulSoup
          
          soup=BeautifulSoup(strhtml.text)  # 將網頁內容作為參數,創建soup對象
          table=soup.find('table')  # 查找網頁中的table元素
          table_body=table.find('tbody')  # 查找table元素中的tbody元素
          data=[]
          rows=table_body.find_all('tr')  # 查找表中的所有tr元素
          
          for row in rows:  # 遍歷數據
              cols=row.find_all('td')
              cols=[ele.text.strip() for ele in cols]
          data.append([ele for ele in cols if ele])
          # 結果輸出:[[],
          ['小米', '女', '22'],['小明','男','23'],……

          3,調用Web API服務

          Excel可以通過“數據”選項卡下的“自網站”功能調用Web API服務。Python可以使用 requests 庫、Beautiful Soup包、Scrapy框架調用Web API獲取數據。

          1.使用Excel調用

          (1)確保5.5.1節中編寫的Web API服務已經開啟。

          (2)輸入Web API方法對應的URL:

          http://127.0.0.1:8000/ExcelPythonTest/

          (3)處理返回的數據。

          調用Web API服務后數據以JSON格式返回,按照5.4.3小節中介紹的方法處理JSON數據。

          2.使用Python調用

          使用requests庫調用Web API方法,然后對返回的JSON數據進行處理,讀者可參考本書代碼素材文件“5-5-api.ipynb”進行學習。

          import requests                             #導入requests包
          url='http://127.0.0.1:8000/ExcelPythonTest/'
          
          strhtml=requests.get(url)            #使用get方法獲取網頁數據
          
          import pandas as pd
          
          frame=pd.read_json(strhtml.text)  #使用Pandas包中的read_json函數
          print(frame)
          #結果輸出:
          id       task
          0 1 ETL-抽取數據操作
          1 2 ETL-數據清洗轉換
          2 3 ETL-數據加載操作

          3,Excel和Python抓取互聯網數據方法對比

          表1所示為Excel和Python抓取互聯網數據方法的對比。需要注意Excel從互聯網抓取數據的功能并不完善。

          表1 Excel和Python抓取互聯網數據方法對比

          聲明:本文選自北京大學出版社的《從零開始利用Excel與Python進行數據分析》一書,略有修改,經出版社授權刊登于此。

          ython爬蟲是一種使用Python語言編寫的網絡爬蟲程序,用于從互聯網上抓取數據并進行分析和處理。Python具有豐富的網絡庫和強大的數據處理能力,使得它成為爬蟲開發的理想選擇。

          以下是一個簡單的Python爬蟲示例,用于抓取指定網頁上的標題并打印出來

          import requests

          from bs4 import BeautifulSoup


          # 目標網頁的URL

          url='http://example.com'


          # 發送HTTP請求獲取網頁內容

          response=requests.get(url)


          # 使用BeautifulSoup解析網頁內容

          soup=BeautifulSoup(response.text, 'html.parser')


          # 查找所有的標題標簽

          titles=soup.find_all('title')


          # 打印每個標題的內容

          for title in titles:

          print(title.text)

          在這個示例中,我們首先使用requests庫發送HTTP請求獲取目標網頁的內容。然后,我們使用BeautifulSoup庫對網頁內容進行解析,并查找所有的標題標簽。最后,我們遍歷每個標題標簽并打印出它們的內容。

          當然,實際的爬蟲程序可能會更加復雜,需要處理各種異常情況、反爬蟲機制、數據清洗和存儲等問題。但是,通過掌握Python的基礎語法和網絡庫的使用方法,你可以逐步構建出功能強大的爬蟲程序,從互聯網上獲取你需要的數據。

          需要注意的是,爬蟲程序必須遵守網站的robots協議和相關法律法規,不得對網站造成過大的負擔或侵犯網站的權益。在進行爬蟲開發時,請務必注意合法性和道德性。


          主站蜘蛛池模板: 日韩社区一区二区三区| 婷婷国产成人精品一区二| 波多野结衣在线观看一区| 精品无码人妻一区二区三区不卡| 乱子伦一区二区三区| 国产精品一区二区av| jazzjazz国产精品一区二区| 精品日韩亚洲AV无码一区二区三区| 亚洲一区二区视频在线观看| 亚洲国产一区二区三区| 男人的天堂精品国产一区| 人妻夜夜爽天天爽一区| 国产成人久久一区二区不卡三区| 无码人妻久久一区二区三区免费丨| 无码毛片视频一区二区本码| 亚洲综合无码一区二区三区| 亚洲国产一区二区三区在线观看| 亚洲AV日韩AV一区二区三曲| 日本无码一区二区三区白峰美| 精品人妻无码一区二区色欲产成人| 在线欧美精品一区二区三区| 国产成人精品一区二区三在线观看| 精品人妻无码一区二区色欲产成人| 国产精品伦子一区二区三区| 国产丝袜无码一区二区视频| 狠狠做深爱婷婷综合一区 | 福利片免费一区二区三区| 一区二区在线播放视频| 无码国产精品一区二区免费16| 国产电影一区二区| 国产午夜精品一区二区三区小说| 久久久久人妻精品一区蜜桃| 日韩精品一区二区三区老鸦窝| 三上悠亚精品一区二区久久| 亚洲日本va一区二区三区 | 无码AV动漫精品一区二区免费| 日韩精品人妻一区二区中文八零 | 中日韩一区二区三区| 亚洲av日韩综合一区二区三区| 久久青草国产精品一区| 国产激情一区二区三区在线观看|