【第七周:Python(一)】7周成为数据分析师

本课程共七个章节,课程地址:7周成为数据分析师(完结)_哔哩哔哩_bilibili

  1. 数据分析思维
  2. 业务知识
  3. Excel
  4. 数据可视化
  5. SQL
  6. 统计学
  7. Python

第七周:Python(P86-P143) 

  1. Python的数据科学环境(P86)
  2. Python基础(P87-P97)
  3. 数据分析常用包:Numpy和Pandas(P98-P112)
  4. Python连接数据库(P113-P114)
  5. 数据分析案例(P115-P124)
  6. 数据可视化:Matplotlib和Seaborn(P125-P138)
  7. 数据分析平台(P139-P143)

目录

第七周:Python(P86-P143) 

一、Python的数据科学环境(P86)

二、Python基础(P87-P97)

(一)基础数据类型(整数、浮点数、字符串、布尔型、None) 

(二)变量

(三)数据结构(列表list、元组tuple、字典dict)

(四)控制流(if、for、while)

(五)函数 

三、数据分析常用包:Numpy和Pandas(P98-P112)

(一)第三方库

(二)numpy基础

(三)pandas基础 


一、Python的数据科学环境(P86)

下载anaconda

Jupyter里同时按住 Shift+Tab 可以查看函数的帮助 


二、Python基础(P87-P97)

(一)基础数据类型(整数、浮点数、字符串、布尔型、None) 

type():告诉输入是什么数据类型,如 str 是字符串类型,bool 是布尔类型

  • 当一个字符里有单引号(双引号)时,在字符外用双引号(单引号)括起
  • 当一个字符里既有单引号又有双引号,在字符外用三引号括起
  • 字符里有换行时,用三引号括起,输出的格式也会换行
  • 转义字符 \,如 \" 输出为 " ,此时引号不再表示边界

布尔类型(注意要大写):

  • True(默认为1)
  • False(默认为0)

None、空值、0的区别:

  • None表示值是缺失的,而不是为0,故不能进行加减乘除运算
  • ' '表示值为空,但不缺失

(二)变量

要多次使用某一个值(可以是字符串,可以是数据)时,可以使用变量

可以同时给多个变量赋值

a,b = 1,2

(三)数据结构(列表list、元组tuple、字典dict)

1. 列表list:一串有序的集合,数据量大时查找速度慢    [ ]

  • sum():把列表中的值求和
  • len():列表中有多少个元素
  • 索引:从左往右是从0开始的,从右往左是从-1开始的
  • 切片
  • 增加:.insert(插入的索引位置,插入的值)   或   .append(插入的值):直接在列表最后插入值,不需要返回一个新的值,是在原列表上插入  或  [ ] + [ ]:如果想在列表后面插入多个值,直接加上一个新列表,需要返回一个新的值
  • 删除:.pop(索引),返回被删索引位置的值,若没有给索引值,默认删除最后一个
  • 更改

二维列表:[[ ], [ ]]

进阶用法:

  • 两个 list 直接 + ,是不会去除重复元素的
  • set(a) 会将列表 a 集合化,即去掉其中的重复元素
  • 集合化后的交集&、并集|、差集-、判断是否为子集<

生成一个1-100的列表:

# 写法1
list = []
for i in range(1,101):
    list.append(i)

# 写法2
list = [i for i in range(1,101)]

生成1-100之间偶数的列表:

# 写法1
list = []
for i in range(1,101):
    if i%2 == 0:
        list.append(i)

# 写法2
list = [i for i in range(1,101) if i%2 == 0]

2. 元组tuple:( ) 

  • 不能被修改
  • 索引也是 a[0] 的方式  

3. 字典dict:无序,键key 值value 对,索引时是拿键来索引(根据唯一的哈希值来查找)。数据量大时查找速度不变      { }

进阶用法:

  • 提取字典a里的所有key:list(a.keys())
  • 提取字典a里的所有value:list(a.values())
  • 同时提取字典a里所有的键值对:list(a.items()),输出的值是由一个个元组组成的列表
  • a.get():更好的容错机制,如 a.get('name', None),若字典里查到了name,则返回其值;若没有,则返回None(也可以是其他默认值)
  • a.setdefault('sex', 'female'):查找有无sex,若没有,新增sex,且值为female
  • set(a) 会将字典 a 集合化,元素为字典的 key
  • 集合化后的交集&、并集|、差集-、判断是否为子集<

  

(四)控制流(if、for、while)

1. if:if - elif - else,有一个为True就会直接跳出

2. 循环:一类while,一类for

  • break(直接终止循环)、continue(跳出本次循环)
  • for i in range(start, stop, step)    从 start 开始,到 stop 前为止(不包含stop),step为步长

(五)函数 

  • 函数的复用/封装/调用
  • 参数,如下图中的 method 即为参数

参数可以给默认值,若调用函数时未给参数值,则使用默认值

def arith(x,y,method='plus'):
    if method == 'plus':
        return x+y
    elif method == 'minus':
        return x-y
    elif method == 'time':
        return x*y
    elif method == 'divide':
        return x/y
    else:
        print('error method!')

arith(1,2)   # 未给method值,默认为plus,故结果为3
def desc(list):
    size = len(list)
    avg = sum(list)/size
    # 计算中位数
    list.sort()   # 排序
    if size%2 == 0:  # 偶数个
        mid = (list[size//2-1]+list[size//2])/2
    else:   # 奇数个
        mid = list[(size-1)//2]
    print('max is:',max(list))
    print('min is:',min(list))
    print('avg is:',avg)
    print('mid is:',mid)

desc([1,2,3,4,5,1])

desc([i for i in range(1,100,4)])

map()函数:全匹配,把某种特性或功能赋予所有的值

# 使用内置函数,如str
list(map(str,[1,2,3,4,5]))    # ['1', '2', '3', '4', '5']

匿名函数(免去定义函数的复杂,更简洁):lambda 输入:输出 

# 匿名函数
list(map(lambda x:x*x, [1,2,3,4,5]))   # [1, 4, 9, 16, 25]

三、数据分析常用包:Numpy和Pandas(P98-P112)

(一)第三方库

统计列表里每个元素出现的次数

  • 转化成字典,key是元素,value是出现次数
a = [1,2,3,4,1,2,3.1]

d = {}

for i in a:
    if i in d.keys():
        d[i] = d[i]+1
    else:
        d[i] = 1

d

  • 借助第三方库 

按 Tab 可以自动补全

import collections

a = [1,2,3,4,1,2,3.1]
collections.Counter(a)

  

读取csv:import csv

时间运算:import datetime

数学运算:import math,如开根号是math.sqrt()

数据分析:pandas和numpy

装饰器

迭代器

(二)numpy基础

导入:import numpy as np

转化成数组:np.array(list)   

  • type() 后显示其数据类型为 numpy.ndarray
  • 索引、切片、更改值与 list 一样
  • 加减乘除都是针对数组中的每个元素按位计算

(三)pandas基础

导入:import pandas as pd

pandas里主要有两个数据结构:

  • Series(一维)
  • DataFrame(二维)

Series 和 DataFrame 里面的数据类型是统一的,要么全是数值(int64),要么全是对象(object,即字符串)

故在全是数值的 Series 里添加上一个对象,所有的数据类型都会更改为 object(即字符串)

1. Series

(1)list 转 Series

  

(2)dict 转 Series

2. DataFrame

(1)dict 转 DataFrame

(2)list 转 DataFrame 

(3)基本操作

  • 查看基本信息:
d = {
    'name':['qinlu','lulu','qinqin'],
    'sex':['male','male','female'],
    'age':[18,18,20]
}

df = pd.DataFrame(d)

df.info()

  • 切片(按列):
# 单一切片(只取某一列)时,数据类型会从DataFrame变为Series
df['age']
# 写法2:df.age

# 同时切多列
df[['age','name']]

  

  • 切片(按行): 
# 按行切片
df.iloc[0]
# 写法2:df.loc[0]

df.iloc[0:2]   # 等同于df[0:2]

  • 切片(行列同时): 
df[['age','name']][0:2]

  • 更改行索引: 
df.index = list('abc')

  • 筛选出某个特定值的数据:索引时有True和False,只会返回为True的数据

筛选出age为18的数据: 

或写法2:

df.query('age==18')
  • 对 True 和 False 结果进行反转:

筛选出 age≤18 的数据:  

  • 多条件查找:与&、或| 

找出 age为18且为 male的数据:

# 写法1
df[(df.age==18)&(df.sex=='male')]

# 写法2
df.query('(age==18)&(sex=="male")')
  • iloc:根据所在行的数字位置为索引(不管有没有行标签) 
df.iloc[1]

可以同时对行、列切片:

df.iloc[1:2,1]  # 行列都是从0开始,1:2是左闭右开
  • loc:根据行标签
df.loc['a']

可以同时对行、列切片:

df.loc['a',['age','name']]

把年龄为18岁的都改为19岁:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheer-ego

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值