日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)據(jù)科學(xué)入門筆記:Python數(shù)據(jù)處理

 flyk0tcfb46p9f 2018-04-03

獲取數(shù)據(jù)

在線的大量數(shù)據(jù)存儲在文本文件中,尤其是在政府網(wǎng)站上,而且通常只是從網(wǎng)站下載文件。例如,讓我們獲取我們可以在這里找到的所有主要聯(lián)盟棒球統(tǒng)計數(shù)據(jù)庫。在頁面上,我們可以看到數(shù)據(jù)有多種格式。三種最常見的格式是csv,xml和json。

我下載了名為“ 2016 - 逗號分隔版 ?- 2017年2月26日更新”的csv數(shù)據(jù)。在查看文件AllstarFull.csv時,前兩行是:

playerID,yearID,gameNum,gameID,teamID,lgID,GP,startingPos

gomezle01,1933,0,ALS193307060,NYA,AL ,, 1

在csv格式中,我們通常有一系列的行,每行對應(yīng)一個條目。條目以逗號分隔。文件頂部的標(biāo)題行對應(yīng)于標(biāo)識符,例如玩家ID,yearID ......如果我們查看第一個玩家的條目,我們可以按照相同的順序查看相應(yīng)的數(shù)據(jù)。如果數(shù)據(jù)丟失,我們只會看到兩個逗號,因為沒有空格。

在xml文檔的情況下,我們最終得到了與html非常相似的東西。我們可以打開一個文檔元素,并打開一系列表格。該表具有與上述值相對應(yīng)的許多孩子。如果數(shù)據(jù)丟失,該字段在末尾以斜線打開(例如:

  • 使用復(fù)雜查詢提取數(shù)據(jù)很簡單。

  • 它的規(guī)模很好

  • 它確保所有數(shù)據(jù)的格式一致

  • 事實上,為年齡大于50歲,體重<>

    擁有數(shù)十萬或數(shù)百萬條目的數(shù)據(jù)庫并不罕見。由于所有信息都理想地存儲在一個位置,因此可以通過可擴展的方式更新,刪除和向數(shù)據(jù)庫添加新數(shù)據(jù)。

    最后,關(guān)系數(shù)據(jù)庫總是有一個模式。模式是一個藍(lán)圖,告訴數(shù)據(jù)庫我們計劃如何存儲數(shù)據(jù)。例如,人的年齡不能是一個弦,而其他人的年齡是一個整數(shù)。此外,架構(gòu)表示,對于給定的表,每個單獨的行或條目將具有與相同值相對應(yīng)的完全相同數(shù)量的列,并且每個列的值將以相同方式格式化。

    查詢

    我們?nèi)绾螐年P(guān)系數(shù)據(jù)庫獲取數(shù)據(jù)?通常使用結(jié)構(gòu)查詢語言(SQL)從關(guān)系數(shù)據(jù)庫中檢索數(shù)據(jù)。如果我們想要選擇所有(*)的數(shù)據(jù),查詢將是:

    SELECT * FROM database_name;

    我們可以通過在SQL命令結(jié)尾添加限制20來限制行數(shù)。

    SELECT * FROM database_name LIMIT 20;

    我們也可以要求提供具體的專欄,如姓名和年齡。

    SELECT name,age FROM database_name LIMIT 20;

    讓我們將這個查詢寫入一個python文件,并將數(shù)據(jù)存儲在“database_solution”中。

    import pandas as pd

    import pandasql

    database_name = pd.read_csv(filename)

    q = '''

    SELECT name, age FROM database_name LIMIT 20;

    #Execute your SQL command against the pandas frame

    database_solution = pandasql.sqldf(q, locals())

    我們也可以執(zhí)行更復(fù)雜的查詢。以下查詢選擇與冰島國家相對應(yīng)的所有數(shù)據(jù)。

    SELECT * FROM database_name WHERE country =“Iceland”;

    SQL中存在一些諸如group和aggregate之類的函數(shù)。一個集合函數(shù)需要一些值,通常是數(shù)字,并對它們進(jìn)行數(shù)學(xué)運算。例如sum()是一個聚合函數(shù)。

    每個地區(qū)數(shù)據(jù)庫中登記的年齡超過50歲的人總數(shù)是多少?以下查詢首先選擇每個區(qū)域登記了多少名男性和女性。由于我們使用的是聚合函數(shù),因此我們需要包含一個GROUP BY,以及我們的非聚合字段,在這種情況下是區(qū)域和性別。最后,我們希望限制50歲以上的男性和女性。因此,我們在表名之后加入where子句,WHERE age> 50。

    SELECT gender, district, sum(database_generated)

    FROM database_name

    WHERE age > 50

    GROUP BY gender, district

    API(應(yīng)用程序編程接口)

    我們現(xiàn)在知道如何從文件或數(shù)據(jù)庫中獲取數(shù)據(jù),但是有些網(wǎng)站中的網(wǎng)站如Twitter的數(shù)據(jù)呢?通過搜索或爬行網(wǎng)站獲取所有數(shù)據(jù)可能會變得復(fù)雜。幸運的是,許多公司允許用戶和開發(fā)人員通過API以簡單的機器可讀格式直接訪問數(shù)據(jù)。有幾種不同類型的API,但最常見的類型之一,以及Twitter使用的類型是代表性狀態(tài)轉(zhuǎn)移或REST API。

    現(xiàn)在讓我們在一個使用json和request庫的簡單python程序中實現(xiàn)它。

    import json

    import requests

    url = 'http://ws./2.0/?method=album.getinfo&api_key=YOUR_API_KEY&=Cher&album=Believe&format=json'

    data = json.loads(requests.get(url).text)

    首先我們指定一個URL,就像我們之前看到的 函數(shù)requests.get()將從.txt中的url中獲取數(shù)據(jù)。查看json對象,我們會發(fā)現(xiàn)字符串格式很難處理,但是json庫允許與json數(shù)據(jù)進(jìn)行非常簡單的交互,這要歸功于json.load()函數(shù)。現(xiàn)在json數(shù)據(jù)被轉(zhuǎn)換成Python字典。

    完整性檢查數(shù)據(jù)

    現(xiàn)在我們已經(jīng)獲得了我們的數(shù)據(jù),無論是非正式平面文件續(xù)集如關(guān)系數(shù)據(jù)庫還是API,我們都需要在進(jìn)行任何分析之前進(jìn)行健全性檢查數(shù)據(jù)。完整性檢查使我們能夠確定數(shù)據(jù)是否有意義。Pandas DataFrames確實有一個有用的方法,叫做describe(),我們不會過分注意細(xì)節(jié),只是做一些簡單的理智檢查。

    import pandas as pd

    baseball_data = pd.read_csv('Master.csv')

    print (baseball_data.describe())

    >>>birthYear birthMonth birthDay deathYear deathMonth

    count 18973 18803 18656 9441 9440

    mean 1931 6 15 1964 6

    std 41 3 8 31 3

    min 1820 1 1 1872 1

    25% 1895 4 8 1942 3

    50% 1937 7 16 1967 6

    75% 1969 10 23 1990 10

    max 1996 12 31 2017 12

    deathDay weight height

    count 9439 18251 18320

    mean 15 186 72

    std 8 21 2

    min 1 65 43

    25% 8 170 71

    50% 15 185 72

    75% 23 200 74

    max 31 320 83

    函數(shù)describe()返回一個數(shù)據(jù)框。對于每個數(shù)字列,我們都可以看到計數(shù),平均值,標(biāo)準(zhǔn)偏差,平均值。我們可以做一些快速檢查,以確保有數(shù)據(jù)通常有意義,如月份在1到12之間,天數(shù)在1到3之間。有沒有異常值?查看最小值和最大值是否大于與第25或第75百分點相對應(yīng)的值...

    你可能會注意到的一件事是,每列的計數(shù)是不同的。這表明我們可能有一堆缺失的值。值可能會丟失的原因很多,例如收集數(shù)據(jù)失敗,數(shù)據(jù)丟失,無響應(yīng)值。缺失值可能會使您的發(fā)現(xiàn)無效,因此設(shè)計數(shù)據(jù)收集方法非常重要??梢允褂貌煌姆椒▉頊p輕這些缺失值對我們分析的影響。

    存在兩種方法,部分刪除和插補。部分刪除正是它聽起來的樣子,將我們用于分析的數(shù)據(jù)集限制為我們可用的數(shù)據(jù)。我們可以使用的一種方法稱為Listwise Deletion。在我們執(zhí)行Listwise Deletion的情況下,即使存在一些有用的值,我們也會從所有分析中排除特定的數(shù)據(jù)點。

    當(dāng)我們沒有太多的數(shù)據(jù)時,我們使用插補,或者刪除我們?nèi)笔У闹禃绊懳覀儤颖镜拇硇?。僅僅因為缺少值而拋出一堆條目會嚴(yán)重影響我們試圖執(zhí)行的任何分析的統(tǒng)計效力。在這種情況下,對我們的數(shù)據(jù)中的缺失值進(jìn)行智能猜測(如逼近)可能是有意義的。例如,我們可以用所有其他值的平均值替代所有缺失值,或使用線性回歸來估計缺失值。但是,插補會在數(shù)據(jù)集中引入偏見和不準(zhǔn)確性。這是一個非常棘手的問題,新技術(shù)不斷發(fā)展。存在更復(fù)雜和可靠的方法。

    在下面的代碼中,我們計算“權(quán)重”數(shù)組的平均值,并通過將它們設(shè)置為平均權(quán)重來計算“權(quán)重”列中的任何缺失值。

    import pandas

    import numpy

    baseball = pandas.read_csv(filename)

    baseball['weight'] = baseball['weight'].fillna(numpy.mean(baseball['weight']))

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多