利用python进行数据分析

利用python进行数据分析 麦金尼 代码实测常见问题汇总

第1章 准备工作

IPython安装及使用:

  1. 开始菜单输入cmd进入命令行;
  2. 输入"pip install ipython"进行安装;
  3. 输入ipython进入IPython运行模式。

书中示例数据下载地址:
[ https://github.com/wesm/pydata-book/tree/1st-edition

](https://github.com/wesm/pydata-book/tree/1st-edition)

第2章 引言

本书使用的是python2.7版本,和python3语法有细微差别。
后面几章主要的代码问题都是python版本更新造成的方法淘汰和重新整合。

来自bit.ly的1.usa.gov数据

  • print语法

In [20] :

    print records[0]['tz']

改为

    print(records[0]['tz'])
  • pylab模式绘图

使用plot方法时要以pylab模式打开。
In [301]:

    tz_counts[:10].plot(kind='barh', rot=0)

运行返回

    <matplotlib.axes._subplots.AxesSubplot at 0x1b466aa06d8>

未弹出图像窗口;
在IPython运行下输入 pylab 打开pylab模式,然后重新运行 [301]成功绘图。

movielens 1m数据集

  • pivot_table方法

原代码报错:

    mean_ratings = data.pivot_table('rating', rows='title',cols='gender', aggfunc='mean')

错误信息为:

     TypeError                                 Traceback (most recent call last)
    <ipython-input-87-683a0ab7c44d> in <module>
    ----> 1 mean_ratings = data.pivot_table('rating', rows='title',cols='gender', aggfunc='mean')
    
    TypeError: pivot_table() got an unexpected keyword argument 'rows'

将代码修改为:

    mean_ratings = data.pivot_table('rating', index='title',columns='gender', aggfunc='mean')
  • ix函数警告

In[347]:

     mean_ratings = mean_ratings.ix[active_titles]

出现如下警告:

     DeprecationWarning:
    .ix is deprecated. Please use
    .loc for label based indexing or
    .iloc for positional indexing

可以使用ix函数已经被loc和iloc函数替代,其中loc函数是使用标签进行的索引,而iloc函数是使用位置即行列号进行的索引,所以在此处可以使用loc函数进行查找。

  • Series没有order函数

In [358]:

    rating_std_by_title.order(ascending=False)[:10]

属于报错,错误信息如下:

    AttributeError: 'Series' object has no attribute 'order'

由于Series没有order函数,可以使用sort_valuesh()函数对得分标准差进行排序:

    rating_std_by_title.sort_values(ascending=False)[:10]

1880-2010年间全美婴儿姓名

diversity.plot绘图出错
In [402]:

    diversity.plot(title="Number of popular names in top 50%")

错误类型为:

    TypeError: Empty 'DataFrame': no numeric data to plot

错误原因出现在前面的get_quantile_count函数:

    def get_quantile_count(group, q=0.5):
        group = group.sort_index(by='prop',ascending=False)
        return group.prop.cumsum().searchsorted(q) + 1

该函数最后一句 group.prop.cumsum().searchsorted(q)
返回的是ndarray中的数组而不是浮点数,因此不能正确绘图。
解决方法是使用索引将数组中的数值取出:

    def get_quantile_count(group, q=0.5):
        group=group.sort_values(by='prop',ascending=False)
        return group.prop.cumsum().searchsorted(q)[0] + 1

即可正确绘图。

第4章 numpy基础:数组和矢量计算

随机数生成

随机数生成出错
In [212]:

    %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]

代码报错:

     NameError: name 'xrange' is not defined

错误原因是Python 3中,range()与xrange()合并为range( )。将原始代码改为:

     %timeit samples = [normalvariate(0, 1) for _ in range(N)]

第5章 pandas入门

汇总和计算描述统计

pandas.io.data模块导入出错

    import pandas.io.data as web

代码报错:

    ModuleNotFoundError: No module named 'pandas.io.data'

出错原因:pandas.io.data模块已经迁移到pandas-datareader模块,将原始代码改为:

    import pandas_datareader.data as web

data.iteritems()调用出错

    price = DataFrame({tic:data['Adj Close'] for tic, data in all_data.iteritems()})

代码报错:

    AttributeError: 'dict' object has no attribute 'iteritems'

出错原因:
python3中data没有iteritems属性,改为items,将原始代码改为:

    price = DataFrame({tic:data['Adj Close'] for tic, data in all_data.items()})

其他有关pandas的话题

整数索引

使用Series的iget_value方法报错
In [293]:

    ser3.iget_value(2)

代码报错:

    AttributeError: 'Series' object has no attribute 'iget_value'

出错原因:iget_value()函数已被iat[]函数替代,将原始代码改为:

    ser3.iat[2]

使用DataFrame的irow方法报错
In [295]:

    frame.irow(0)

代码报错:

    'DataFrame' object has no attribute 'irow'

出错原因:irow方法和icol方法已经被淘汰,可以使用iloc[:, i]选取列,使用iloc[i, :]选取行,将原始代码改为:

    frame.iloc[0,:]

面板数据

使用get_data_yahoo方法报错
pdata = pd.Panel(dict((stk,web.get_data_yahoo(stk,‘1/1/2009’,‘6/1/2012’))
for stk in [‘AAPL’,‘GOOG’,‘MSFT’,‘DELL’]))
代码报错:
KeyError: ‘Date’
出错原因: 自己没有找到原因,修改了起止日期仍然无法读取数据,看了别的博主说是网络问题,暂未发现解决方法(有知道的大神可以在评论区留言)

在这里插入图片描述

posted @ 2021-06-28 14:43  老酱  阅读(1100)  评论(0编辑  收藏  举报