三剑客小回顾
王者荣耀皮肤图片爬取
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()
浙公网安备 33010602011771号