• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
草卆鱼
博客园    首页    新随笔    联系   管理    订阅  订阅

三剑客小回顾

王者荣耀皮肤图片爬取

import requests
import os
from lxml import etree
import time

if not os.path.exists(r'王者skin'):
    os.mkdir(r'王者skin')  # 创文件夹

res = requests.get('https://pvp.qq.com/web201605/herolist.shtml') 
res.encoding = 'gbk' 
tree = etree.HTML(res.text)  
li_list = tree.xpath('//*[@class="herolist-box"]/div[2]/ul[1]/li') 

for li in li_list:  
    desc_link = li.xpath('./a/@href')[0].split('.')[0].split('/')[1]
    res1 = requests.get('https://pvp.qq.com/web201605/' + li.xpath('./a/@href')[0]) 
    res1.encoding = 'gbk'  
    tree1 = etree.HTML(res1.text)  

    skin_num = tree1.xpath('.//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0].count(
        '&')  
    print(skin_num)  
    for num in range(1, skin_num + 1):  
        url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + '%s/%s-bigskin-%s.jpg' % (
            desc_link, desc_link, num)  
        skin_name = tree1.xpath('.//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0].split('|')[num - 1] 
        print(skin_name)  
        res2 = requests.get(url) 
        img = res2.content  
        file_path = os.path.join(r'王者skin', '%s.jpg' % skin_name) 
        with open(file_path, 'wb') as f:  
            f.write(img)
        time.sleep(0.5)  

数据分析概念

需求分析>>>数据采集>>>数据清洗>>>数据分析>>>数据可视化和报告
数据分析三剑客
numpy 科学计算
pandas 表格处理
matplotlib 可视化

数据分析三剑客软件anaconda

创建出的文件为notebook
# 常用快捷键
运行当前单元格
	ctrl+enter
运行当前单元格,选中下方单元格
	shift+enter
大标题
	编辑模式写文本 之后命令行模式按数字来控制几级标题
下方/上方新建单元格
	命令行模式按b/a
删除单元格
	命令行模式连按两下d
撤销对于单元格的操作
	命令行下按z

Numpy

python编程环境中对于数字并不敏感 所以会出现一些将数字精确度降低的情况
同时仅用python自带的方式计算会消耗大量的时间 在数据量巨大的时候时间会成倍上涨
numpy模块可以有效的解决以上两个问题 同时他也是诸多运算模块的基础
numpy一般import之后会起别名np

numpy数组

np.array() 里面写所需数组一个中括号是一维数组最多3维
数组可以直接参与计算 计算过程中每个元素会一一进行计算
一维数组取值与列表的取值同理  
在多维(二维)数组取值的时候可以将行列都看成列表进行取值
如果要选取全部行用:指代即可行列取值之间逗号隔开

numpy常用操作

arrange()  # 强化版range支持小数
linspace()  # 等分
zeros()  # 给形状创建全0数组
ones()  # 给形状创建全1数组
empyt()  # 给形状创建随机数组
eye()  # 给一个边长创建方形数组
greater()  # 大于
greater_equal()  #大于等于
less()  # 小于
not_equal  # 不等于
round()  # 四舍五入
sqrt()  # 开根号
square()  # 平方
exp()  # e为底指数
power(,x)  # x次方
log2()  # 2为底对数
log10()  # 10为底对数
log()  # e为底对数
min(,axis)  # 最小值
# axis 表示轴方向1是行 0是列
max()  # 最大
mean()  # 平均
median()  #中位数
sum()  # 求和
std()  # 标准差
var()  # 方差
.random.  # 随机数系列

pandas模块

pandas基于numpy
pandas让python变成了数据分析最强语言
pandas针对大规模的表格文件操作有非常大的优势

Series

Series可以看成是一个可以自己制作标签来索引的一维数组
# 创建
pd.Series([1,2,3],index=['a','b','c'])
pd.Series({"a":1,"b":2})
# 数据缺失
当原索引被替换之后新加出来的索引没有对应的值会出现NaN
NaNcy这个数据是个浮点型
针对缺失数据可以通过
修改之后的Series.dropna()  # 去掉
修改之后的Series.fillna()  # 填入指定值
# 布尔值索引
通过另一个Series对应的布尔值取出True的部分
# 索引
s.iloc[]  # 根据默认的位置取
s.loc[] # 根据自己定义的那个取

Series基本操作

s = pd.Series([1,2,3])
# 增
	s['a'] = 4
# 删
	del s[0]9
# 改
	s[1] = 1
# 查
	s.loc[1]

DataFrame外部文件使用

pd.read_csv()  # 读取文本文件和.csv(苹果的表格文件)文件数据
pd.read_excel()  # 读excel表格文件数据
pd.read_sql()  # 读MySQL表格数据
pd.read_html()  # 读页面上table标签内所有的数据 不是table标签读不了

文本读取

最前面直接是放文件路径
header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称 
        如果原始数据没有表头需要将该参数设置为None 然后会给你一个数字做参数
names:如果原数据没有表头字段,可以通过该参数在数据读取时给数据框添加具体的表头 肯定要配合header = None使用
usecols:指定需要读取原数据集中的哪些变量名 
skiprows:数据读取时,指定需要跳过原数据集开头的行数
         有一些表格开头是有几行文字说明的,读取的时候应该跳过
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数 
converters:用于数据类型的转换(以字典的形式指定) 
    比如有些数字作为编号不希望开头的0被去掉就要指定一下类型为str
encoding:如果文件中含有中文,有时需要指定字符编码

excel读取

最前面指定电子表格的具体路径,直接写文件路径就行 
sheet—name:指定需要读取电子表格中的第几个Sheet,既可以传数字也可以直接指定Sheet名称 
header:是否需要将数据集的第一行用作表头,默认为是需要的 
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数 
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值 
thousands:指定原始数据集中的千分位符 
convert_float:默认将所有的数值型字段转换为浮点型字段 
converters:通过字典的形式,指定某些列需要转换的形式

读取SQL

import pymysql
conn = pymysql.connect(host,port,user,password, database, charset)

host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为 “utf8”或“gbk”
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名
pd.read_sql('select * from user', con = conn)
conn.close() 
posted @ 2021-10-17 22:23  草卆鱼  阅读(68)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3