作业5
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:102011@localhost/test?charset=utf8')
sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)
'''
用create_engine建立连接,连接地址的意思依次为“数据库格式(mysql)+程序名(pymysql)+账号密码@地址端口/数据库名(test)”,最后指定编码为utf8;
all_gzdata是表名,engine是连接数据的引擎,chunksize指定每次读取1万条记录。这时候sql是一个容器,未真正读取数据。
'''
代码2
counts = [ i['fullURLId'].value_counts() for i in sql] #按次10000存取,逐块统计
counts = counts.copy()
counts = pd.concat(counts).groupby(level=0).sum() #合并统计结果,把相同的统计项合并(即按index分组并求和)
counts = counts.reset_index() #重新设置index,将原来的index作为counts的一列。
counts.columns = ['index', 'num'] #重新设置列名,主要是第二列,默认为0
counts['type'] = counts['index'].str.extract('(\d{3})') #提取前三个数字作为类别id
counts_ = counts[['type', 'num']].groupby('type').sum() #按类别合并
counts_.sort_values('num', ascending = False) #降序排列
counts_['percentage'] = (counts_['num']/counts_['num'].sum())*100
print(counts_)
type num percentage 101 411665 49.156965 102 17357 2.072601 103 1715 0.204788 106 3957 0.472506 107 182900 21.840110 199 201426 24.052302 301 18430 2.200728
