基於 Python 和 Pandas 的數據分析(4) --- 建立數據集


這一節我想對使用 Python 和 Pandas 的數據分析做一些擴展. 假設我們是億萬富翁, 我們會想要多元化地進行投資, 比如股票, 分紅, 金融市場等, 那么現在我們要聚焦房地產市場, 做一些這方面的調研. 首先, 決定房價的因素有哪些呢? 經濟, 利率和人口特征.這些是影響放假的主要因素. 當然還有很多細節, 比如房子的排水系統, 屋頂, 地板等等. 但是, 首先我們還是從宏觀的角度來做個大體的分析.

第一步, 就是要收集數據. Quandl 仍然是一個很好的起點, 但是這次我們要自己手動獲取數據. 我們想要拉取 50 個州的房價. 首先, 你需要創建一個賬號, 然后去我的賬號頁面, 找到自己的 API Key.

第二步, 下載 Quandl 模塊. 事實上, 我們根本不需要使用這個模塊來請求數據, 但是這個模塊實在太小了, 所以, 下載一下也無妨吧. 打開終端, 通過 pip 下載即可.

接下來, 就要開始正式拉取數據了, 新建一個文件, 並執行以下代碼:

import Quandl df = quandl.get("FMAC/HPI_TX", authtoken="HK1FqyWqrmUwLCYnWcHa") print(df.tail()) 

輸出:

             NSA Value    SA Value
Date
2018-08-31  201.663812  199.167443
2018-09-30  201.583316  199.689743
2018-10-31  200.614876  199.715965
2018-11-30  199.709925  199.856508
2018-12-31  198.954672  199.939942

通過以上代碼, 我們就得到了德克薩斯州房價清單. 大家可能看到, 我這里是用的 tail()函數, 其實我開始是用 head(), 但是發現打印出來的是 1975 年的數據. 其中: 
NSA: Not Seasonally Adjusted 非季節性調整
SA: Seasonally Adjusted 季節性調整

那我們的目標是獲取美國50個州的房價, 我們需要每個都這樣手動獲取嗎? 不, 現在我們來分析一下 "FMAC/HPI_TX", 我們可以很容易地將其分解:
FMAC = Freddie Mac
HPI = House Price Index
TX 是 Texas 的簡寫
那現在我們大膽假設一下, 所有的接口都是可以通過這種形式請求的. 所以我們現在只需要一份美國所有州的簡寫清單.
https://simple.wikipedia.org/wiki/List_of_U.S._states

事實上, 我們有很多種方式來獲取數據, 但是因為這是一個 Pandas 教程, 所以能用 Pandas 的, 我們都盡量用 Pandas. 這里因為是要讀取 html 文件, 所以我們應該需要用到 Pandas 的 read_html()函數.

fiddy_states = pd.read_html('https://simple.wikipedia.org/wiki/List_of_U.S._states') print(fiddy_states) 

這里會輸出很多信息, 遠遠多余我們在這里需要用到的, 但是, 大家可以有個大概的概念. 而且我們知道其中哪些信息是我們需要的, 具體在那一列. 再來試一下這樣輸出的結果:

print(fiddy_states[0]) 

輸出:

                            0           1               2                             3              4             5              6               7         8          9        10        11    12
0   Name &postal abbreviation[1]      Cities     Established  Population[upper-alpha 1][2]  Total area[3]  Land area[3]  Water area[3]  Numberof Reps.       NaN        NaN      NaN       NaN   NaN
1                        Capital  Largest[4]             mi2                           km2            mi2           km2            mi2             km2       NaN        NaN      NaN       NaN   NaN
2                        Alabama          AL      Montgomery                    Birmingham   Dec 14, 1819       4874747          52420          135767   50645.0   131171.0   1775.0    4597.0   7.0
3                         Alaska          AK          Juneau                     Anchorage    Jan 3, 1959        739795         665384         1723337  570641.0  1477953.0  94743.0  245384.0   1.0
4                        Arizona          AZ         Phoenix                  Feb 14, 1912        7016270        113990         295234          113594  294207.0      396.0   1026.0       9.0   NaN
5                       Arkansas          AR     Little Rock                  Jun 15, 1836        3004279         53179         137732           52035  134771.0     1143.0   2961.0       4.0   NaN
6                     California          CA      Sacramento                   Los Angeles    Sep 9, 1850      39536653         163695          423967  155779.0   403466.0   7916.0   20501.0  53.0
7                       Colorado          CO          Denver                   Aug 1, 1876        5607154        104094         269601          103642  268431.0      452.0   1170.0       7.0   NaN
8                    Connecticut          CT        Hartford                    Bridgeport    Jan 9, 1788       3588184           5543           14357    4842.0    12542.0    701.0    1816.0   5.0
9                       Delaware          DE           Dover                    Wilmington    Dec 7, 1787        961939           2489            6446    1949.0     5047.0    540.0    1399.0   1.0
10                       Florida          FL     Tallahassee                  Jacksonville    Mar 3, 1845      20984400          65758          170312   53625.0   138887.0  12133.0   31424.0  27.0
11                       Georgia          GA         Atlanta                   Jan 2, 1788       10429379         59425         153910           57513  148959.0     1912.0   4951.0      14.0   NaN
12                        Hawaii          HI        Honolulu                  Aug 21, 1959        1427538         10932          28313            6423   16635.0     4509.0  11678.0       2.0   NaN
13                         Idaho          ID           Boise                   Jul 3, 1890        1716943         83569         216443           82643  214045.0      926.0   2398.0       2.0   NaN
14                      Illinois          IL     Springfield                       Chicago    Dec 3, 1818      12802023          57914          149995   55519.0   143793.0   2395.0    6202.0  18.0
15                       Indiana          IN    Indianapolis                  Dec 11, 1816        6666818         36420          94326           35826   92789.0      593.0   1537.0       9.0   NaN
16                          Iowa          IA      Des Moines                  Dec 28, 1846        3145711         56273         145746           55857  144669.0      416.0   1077.0       4.0   NaN
17                        Kansas          KS          Topeka                       Wichita   Jan 29, 1861       2913123          82278          213100   81759.0   211754.0    520.0    1346.0   4.0
18       Kentucky[upper-alpha 2]          KY       Frankfort                    Louisville    Jun 1, 1792       4454189          40408          104656   39486.0   102269.0    921.0    2387.0   6.0
19                     Louisiana          LA     Baton Rouge                   New Orleans   Apr 30, 1812       4684333          52378          135659   43204.0   111898.0   9174.0   23761.0   6.0
20                         Maine          ME         Augusta                      Portland   Mar 15, 1820       1335907          35380           91633   30843.0    79883.0   4537.0   11750.0   2.0
21                      Maryland          MD       Annapolis                     Baltimore   Apr 28, 1788       6052177          12406           32131    9707.0    25142.0   2699.0    6990.0   8.0
22  Massachusetts[upper-alpha 2]          MA          Boston                   Feb 6, 1788        6859819         10554          27336            7800   20202.0     2754.0   7134.0       9.0   NaN
23                      Michigan          MI         Lansing                       Detroit   Jan 26, 1837       9962311          96714          250487   56539.0   146435.0  40175.0  104052.0  14.0
24                     Minnesota          MN        St. Paul                   Minneapolis   May 11, 1858       5576606          86936          225163   79627.0   206232.0   7309.0   18930.0   8.0
25                   Mississippi          MS         Jackson                  Dec 10, 1817        2984100         48432         125438           46923  121531.0     1508.0   3907.0       4.0   NaN
26                      Missouri          MO  Jefferson City                   Kansas City   Aug 10, 1821       6113532          69707          180540   68742.0   178040.0    965.0    2501.0   8.0
27                       Montana          MT          Helena                      Billings    Nov 8, 1889       1050493         147040          380831  145546.0   376962.0   1494.0    3869.0   1.0
28                      Nebraska          NE         Lincoln                         Omaha    Mar 1, 1867       1920076          77348          200330   76824.0   198974.0    524.0    1356.0   3.0
29                        Nevada          NV     Carson City                     Las Vegas   Oct 31, 1864       2998039         110572          286380  109781.0   284332.0    791.0    2048.0   4.0
30                 New Hampshire          NH         Concord                    Manchester   Jun 21, 1788       1342795           9349           24214    8953.0    23187.0    397.0    1027.0   2.0
31                    New Jersey          NJ         Trenton                        Newark   Dec 18, 1787       9005644           8723           22591    7354.0    19047.0   1368.0    3544.0  12.0
32                    New Mexico          NM        Santa Fe                   Albuquerque    Jan 6, 1912       2088070         121590          314917  121298.0   314161.0    292.0     757.0   3.0
33                      New York          NY          Albany                      New York   Jul 26, 1788      19849399          54555          141297   47126.0   122057.0   7429.0   19240.0  27.0
34                North Carolina          NC         Raleigh                     Charlotte   Nov 21, 1789      10273419          53819          139391   48618.0   125920.0   5201.0   13471.0  13.0
35                  North Dakota          ND        Bismarck                         Fargo    Nov 2, 1889        755393          70698          183108   69001.0   178711.0   1698.0    4397.0   1.0
36                          Ohio          OH        Columbus                   Mar 1, 1803       11658609         44826         116098           40861  105829.0     3965.0  10269.0      16.0   NaN
37                      Oklahoma          OK   Oklahoma City                  Nov 16, 1907        3930864         69899         181037           68595  177660.0     1304.0   3377.0       5.0   NaN
38                        Oregon          OR           Salem                      Portland   Feb 14, 1859       4142776          98379          254799   95988.0   248608.0   2391.0    6191.0   5.0
39   Pennsylvania[upper-alpha 2]          PA      Harrisburg                  Philadelphia   Dec 12, 1787      12805537          46054          119280   44743.0   115883.0   1312.0    3397.0  18.0
40   Rhode Island[upper-alpha 3]          RI      Providence                  May 29, 1790        1059639          1545           4001            1034    2678.0      511.0   1324.0       2.0   NaN
41                South Carolina          SC        Columbia                    Charleston   May 23, 1788       5024369          32020           82933   30061.0    77857.0   1960.0    5076.0   7.0
42                  South Dakota          SD          Pierre                   Sioux Falls    Nov 2, 1889        869666          77116          199729   75811.0   196350.0   1305.0    3379.0   1.0
43                     Tennessee          TN       Nashville                   Jun 1, 1796        6715984         42144         109153           41235  106798.0      909.0   2355.0       9.0   NaN
44                         Texas          TX          Austin                       Houston   Dec 29, 1845      28304596         268596          695662  261232.0   676587.0   7365.0   19075.0  36.0
45                          Utah          UT  Salt Lake City                   Jan 4, 1896        3101833         84897         219882           82170  212818.0     2727.0   7064.0       4.0   NaN
46                       Vermont          VT      Montpelier                    Burlington    Mar 4, 1791        623657           9616           24906    9217.0    23871.0    400.0    1035.0   1.0
47       Virginia[upper-alpha 2]          VA        Richmond                Virginia Beach   Jun 25, 1788       8470020          42775          110787   39490.0   102279.0   3285.0    8508.0  11.0
48                    Washington          WA         Olympia                       Seattle   Nov 11, 1889       7405743          71298          184661   66456.0   172119.0   4842.0   12542.0  10.0
49                 West Virginia          WV      Charleston                  Jun 20, 1863        1815857         24230          62756           24038   62259.0      192.0    497.0       3.0   NaN
50                     Wisconsin          WI         Madison                     Milwaukee   May 29, 1848       5795483          65496          169635   54158.0   140268.0  11339.0   29367.0   8.0
51                       Wyoming          WY        Cheyenne                  Jul 10, 1890         579315         97813         253335           97093  251470.0      720.0   1864.0       1.0   NaN

從上面的輸出, 可以看到, 我們想要的是列 1 的值. 我們的目標是遍歷 fiddy_states[0] 的列 1. 記住, 現在 fiddy_states 是一個包含了很多個 dataframe 的 list(目前理解的就是一維數組), 而 fiddy_states[0] 就是第一個 dataframe. 那我們想要的數據應該可以通過 fiddy_states[0][1] 來獲取. 0 是一維數組的索引, 返回一個 dataframe, 1 是 dataframe 的列名. 

接下來, 我們發現列1的第0行和第1行都不是我們想要的值, 所以我們需要在遍歷的時候將它們屏蔽掉, 也就是說我們可以從第2行開始遍歷:

for abbv in fiddy_states[0][1][2:]: print(abbv) 

輸出:

AL
AK
AZ
AR
CA
CO
CT
DE
FL
GA
HI
ID
IL
IN
IA
KS
KY
LA
ME
MD
MA
MI
MN
MS
MO
MT
NE
NV
NH
NJ
NM
NY
NC
ND
OH
OK
OR
PA
RI
SC
SD
TN
TX
UT
VT
VA
WA
WV
WI
WY

很好, 現在我們已經循環輸出了所有的州的簡稱. 希望大家到這里還記得我們為什么要獲取所有州的簡稱, 因為我們想要通過統一的形式來獲取所有州的房價:

for abbv in fiddy_states[0][1][2:]: #print(abbv) print("FMAC/HPI_"+str(abbv)) 

輸出:

FMAC/HPI_AL
FMAC/HPI_AK
FMAC/HPI_AZ
FMAC/HPI_AR
FMAC/HPI_CA
FMAC/HPI_CO
FMAC/HPI_CT
FMAC/HPI_DE
FMAC/HPI_FL
FMAC/HPI_GA
FMAC/HPI_HI
FMAC/HPI_ID
FMAC/HPI_IL
FMAC/HPI_IN
FMAC/HPI_IA
FMAC/HPI_KS
FMAC/HPI_KY
FMAC/HPI_LA
FMAC/HPI_ME
FMAC/HPI_MD
FMAC/HPI_MA
FMAC/HPI_MI
FMAC/HPI_MN
FMAC/HPI_MS
FMAC/HPI_MO
FMAC/HPI_MT
FMAC/HPI_NE
FMAC/HPI_NV
FMAC/HPI_NH
FMAC/HPI_NJ
FMAC/HPI_NM
FMAC/HPI_NY
FMAC/HPI_NC
FMAC/HPI_ND
FMAC/HPI_OH
FMAC/HPI_OK
FMAC/HPI_OR
FMAC/HPI_PA
FMAC/HPI_RI
FMAC/HPI_SC
FMAC/HPI_SD
FMAC/HPI_TN
FMAC/HPI_TX
FMAC/HPI_UT
FMAC/HPI_VT
FMAC/HPI_VA
FMAC/HPI_WA
FMAC/HPI_WV
FMAC/HPI_WI
FMAC/HPI_WY

非常好, 我們現在已經生成了每個州的單獨的取數標簽, 我們可以開始去拉取數據了. 但是當我們拿到數據之后, 要怎么處理它們呢? 難道要分別處理這51份數據嗎? 聽起來就是一件非常繁瑣的工作, 因此我們需要想辦法把它們合並. Pandas 就提供了很多合並數據的方法, 我們將在下一節詳細講解.

后面會持續更新, 有任何問題或者錯誤, 歡迎留言, 希望和大家交流學習.




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM