数据分析

1.数据分析能干什么

商场根据数据,采购商品;根据数据来预测比赛;根据数据来预测哪种物质能制成有效药物;推送新闻;恋爱匹配;发布研究论文…

2.数据分析过程

  • 提出想要解决的问题
  • 采集相关数据,研究数据
  • 数据探索,找出数据模式
  • 对结果进行总结或者预测
  • 分享、讨论
2.1采集数据方法

下载数据、从网页中抓取、访问一些数据api,最后组合各种方式的数据
读取csv文档,

方法:1
import unicodecsv
with open(filename, 'rb') as f:
    reader = unicodecsv.DictReader(f)
    file_list = list(reader)
方法:2
import pandas as pd
file_list = pd.read_csv('filename')
2.2 numpy数组

一维数据结构:pandas是series类型,numpy是array类型

  • numpy数组和python的list类似,可以a[0]这种访问,可以切片访问,可以for in循环;多维numpy数组和python中列表中的列表类似。
  • 不同在于,numpy数组定义必须使用np.array([1,2,3]),而列表就直接[1,2,3]。
  • numpy数组内部数据类型相同,而list内部可以包含多种类型;numpy数组可以使用mean()、medium()、max()、sum()、argmax()等统计函数.比如:数组.max() 取得最大值;数组.argmax() 取得最大值所在的index索引值。
  • numpy可以使用数组.shape 、数组.ndim 、数组.dtype 、数组.itemsize ,这些属性来获得数组的维度、维数、类型、元素字节。
  • numpy支持向量+、-、*、/、**、运算。[1,2,3]+[1,2,3],列表和列表相加,得到[1,2,3,1,2,3]。numpy中,([1,2,3])+([1,2,3]),得到([2,4,6])。
  • numpy数组还可以支持布尔值向量的and、or、not,对应运算符号:& | ~ 。以及大小比较。
  • numpy数组,在使用+=,和=的时候不一样,如果a=b=np.array()。a+=运算之后,b的值也会改变。当a作切片之后,改变切片的值,也会改变原来的数组,比如a=np.array([1,2,3,4,5,6]),slice = a[0:3],slice[0] = 5,那么a也被改变。
2.3 pandas类型
  • 和numpy数组相比,pandas更加强大。定义时,使用pd.Series(),定义后print输出可以发现,比numpy数组多了索引值,如同列表和字典的合集。可以在定义的时候,pd.Series([1,1,2,g],index=[a,b,c,d]),指定索引值。
  • pandas的series类型,进行索引时,使用loc(),iloc()
  • pandas的向量相加,相同索引的相加,找不到索引的,结果用NaN代替。可以使用dropna()方法将NaN的结果删除掉。也可以使用,s1.add(s2, fill_value=0).
  • pandas中额apply(函数名),可以代替一些循环调用函数;自动将series中的每一项去调用这个函数
2.4 numpy 分析二维数组
  • numpy定义二位数组,可以使用a[0][:],a[:][0],a.sum(),a.sum(axis=0)计算列的和,返回一个一维数组;axis=1,计算行的和。
a = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ])
2.5 pandas分析二维数组
  • 和numpy不同的是,numpy二维数组的每一列行的数据类型都必须一样,当出现字符串和数字时,就需要pandas的dataframe表格框。每一列的类型相同。
  • dataframe和series类似,每一行都有个索引,每一列还有个名称。可以整体计算平均值,自动忽略无法计算的列。也可以用axis单独计算每一列的,但是行的类型不同,不适用。
  • 定义类似为:
ridership_df = pd.DataFrame(
    data=[[   0,    0,    2,    5,    0],
          [1478, 3877, 3674, 2328, 2539],
          [1613, 4088, 3991, 6461, 2691],
          [1560, 3392, 3826, 4787, 2613],
          [1608, 4802, 3932, 4477, 2705],
          [1576, 3933, 3909, 4979, 2685],
          [  95,  229,  255,  496,  201],
          [   2,    0,    1,   27,    0],
          [1438, 3785, 3589, 4174, 2215],
          [1342, 4043, 4009, 4665, 3033]],
    index=['05-01-11', '05-02-11', '05-03-11', '05-04-11', '05-05-11',
           '05-06-11', '05-07-11', '05-08-11', '05-09-11', '05-10-11'],
    columns=['R003', 'R004', 'R005', 'R006', 'R007']
)
print ridership_df,就得到:

          R003  R004  R005  R006  R007
05-01-11     0     0     2     5     0
05-02-11  1478  3877  3674  2328  2539
05-03-11  1613  4088  3991  6461  2691
05-04-11  1560  3392  3826  4787  2613
05-05-11  1608  4802  3932  4477  2705
05-06-11  1576  3933  3909  4979  2685
05-07-11    95   229   255   496   201
05-08-11     2     0     1    27     0
05-09-11  1438  3785  3589  4174  2215
05-10-11  1342  4043  4009  4665  3033
  • 获取二维数组的值,ridership_df[‘R003’],获取这一列,ridership_df.loc[‘05-05-11’]获取行,print ridership_df.iloc[0]获取行,当觉得index太长,ridership_df.loc[‘05-05-11’]太长,可以用print ridership_df.iloc[0]获取行号,没有index,会默认给一组的,这里也可以这样用。
  • 可以使用.describe()函数,获取统计信息的描述。df.values变回numpy数组,可以使用df.values.max(),求取最大值
  • 没有内置函数时,使用.applymap(),对每一个元素使用。
  • dataframe,也有apply函数,单独每列调用。比如,df.apply(np.max),使用apply将numpy的max函数传过去,获取df每一列的最大值,返回一个一维的数组。
  • dataframe的group函数,merge合并函数。matpoltlib画图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值