基于 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 就提供了很多合并数据的方法, 我们将在下一节详细讲解.

后面会持续更新, 有任何问题或者错误, 欢迎留言, 希望和大家交流学习.



上一篇:Javaweb学习笔记——(十五)—————— sql复习


下一篇:php – 将响应式菜单拆分为两个颜色