python_data_analysis12

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# pylint: disable=W1401
"""
Created on Mon Nov  6 21:04:24 2017

@author: lu
"""

import numpy as np

import pandas as pd
from sqlalchemy import create_engine


"""
这部分代码主要是用Python连接数据库,提取数据进行分析。
所j以在运行代码之前需要讲sql语句运行一遍将数据插入到mysql数据库中
注意这里需要提前创建一个database,并且在开头增加使用database的语句
mysql -uroot -p < 7law.sql
需要等待一会

此部分代码没有运行,存在一定问题

count107-->统计107类别情况
programmer_1-->大概了解了处理数据意图
programmer_2-->提取所需数据,并且保存到数据库中
programmer_3-->进行数据筛选,保存到数据库中
programmer_4-->合并某些特征为一个特征,保存到数据库
programmer_5-->推荐矩阵
"""


def count107(i):
    j = i[["fullURL"]][i["fullURLId"].str.contains("107")].copy()
    # 添加空列
    j["type"] = None
    #  利用正则进行匹配,并重命名
    j["type"][j["fullURL"].str.contains("info/.+?/")] = u"知识首页"
    j["type"][j["fullURL"].str.contains("info/.+?/.+?")] = u"知识列表页"
    j["type"][j["fullURL"].str.contains("/\d+?_*\d+?\.html")] = u"知识内容页"
    return j["type"].value_counts()


def programmer_1():
    """
    用pymysql连接本地数据库
    按个人情况进行更改连接语句
    engine表示连接数据的引擎,chunksize表示每次读取数据量
    此时‘sql’只是一个容器
    """
    engine = create_engine(
        "mysql+pymysql://root:password@host:port/database_name?charset=utf8")
    sql = pd.read_sql("all_gzdata", engine, chunksize=10000)

    # 分别统计,并且合并相同项(按index分组求和)
    counts = [i["fullURLId"].value_counts() for i in sql]
    counts = pd.concat(counts).groupby(level=0).sum()
    # 自动重新设置index并将原来的index作为columns
    counts = counts.reset_index()
    counts.columns = ["index", "num"]
    # 修改列名,提取每个列名前三个数字,用到了正则表达式
    counts["type"] = counts["index"].str.extract("(\d{3})")
    counts_ = counts[["type", "num"]].groupby("type").sum()
    # 按类别排序
    counts_.sort_values("num", ascending=False)

    # 同counts1
    sql = pd.read_sql("all_gzdata", engine, chunksize=10000)
    counts2 = [count107(i) for i in sql]
    counts2 = pd.concat(counts2).groupby(level=0).sum()

    # 统计次数,同上分块统计结果并合并t
    c = [i["realIP"].value_counts() for i in sql]
    counts3 = pd.concat(counts2).groupby(level=0).sum()
    counts3 = pd.DataFrame(counts3)
    # 添加新列,全为1,统计某特征分别出现的次数
    counts3[1] = 1
    counts3.groupby(0).sum()
    return c

def programmer_2():
    engine = create_engine(
        "mysql+pymysql://root:password@host:port/database_name?charset=utf8")
    sql = pd.read_sql("sql_gzdata", engine, chunksize=10000)

    for i in sql:
        d = i[["realIP", "fullURL"]]
        d = d[d["fullURL"].str.contains("\.html")].copy()
        d.to_sql("cleaned_gzdata", engine, index=False, if_exists="append")


def programmer_3():
    engine = create_engine(
        "mysql_pymysql://root:password@host:port/database_name?charset=utf8")
    sql = pd.read_sql("cleaned_gzdata", engine, chunksize=10000)

    for i in sql:
        d = i.copy()
        # 替换关键词
        d["fullURL"] = d["fullURL"].str.replace("_\d{0,2}.html", ".html")
        # 去除重复数据
        d = d.drop_duplicates()
        d.to_sql("changed_gzdata", engine, index=False, if_exists="append")


def programmer_4():
    engine = create_engine(
        "mysql+pymysql://root:password@host:port/database_name?charset=utf8")
    sql = pd.read_sql("changed_gzdata", engine, chunksize=10000)

    for i in sql:
        d = i.copy()
        d["type_1"] = d["fullURL"]
        d["type_1"][d["fullURL"].str.contains("(ask)|(askzt)")] = "zixun"
        d.to_sql("splited_gzdata", engine, index=False, if_exists="append")


def Jaccard(a, b):
    return 1.0 * (a * b).sum() / (a + b - a * b).sum()


def programmer_5():
    class Recommender():

        sim = None

        # 判断距离(相似性)
        def similarity(self, x, distance):
            y = np.ones((len(x), len(x)))
            for i in range(len(x)):
                for j in range(len(x)):
                    y[i, j] = distance(x[i], x[j])

            return y

        def fit(self, x, distance=Jaccard):
            self.sim = self.similarity(x, distance)
        
        # 推荐矩阵
        def recommend(self, a):
            return np.dot(self.sim, a) * (1 - a)

    Recommender()

if __name__ == "__main__":
    programmer_1()
    programmer_2()
    programmer_3()
    programmer_4()
    programmer_5()
    pass

#携程暑期实习#
Python 文章被收录于专栏

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发

全部评论
这么长的代码居然有些看不懂了
点赞 回复 分享
发布于 2022-08-03 23:27
楼主厉害,我现在都不能静下心写这么长的代码
点赞 回复 分享
发布于 2022-07-29 19:28

相关推荐

想干测开的tomca...:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
明天不下雨了:这个项目 这个简历 这个模板 莫不是一个开源的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务