精华内容
参与话题
问答
  • python 处理大数据之数据读取发布时间:2018-09-17 23:00,浏览次数:451, 标签:python1 参考1:python读取GB级的文本数据,防止memoryErrorhttps://blog.csdn.net/accumulate_zhang/article/details/65920652...

    python 处理大数据之数据读取

    发布时间:2018-09-17 23:00,

    浏览次数:451

    , 标签:

    python

    1 参考1:python读取GB级的文本数据,防止memoryError

    https://blog.csdn.net/accumulate_zhang/article/details/65920652

    Preliminary

    我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法:

    .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read()

    每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read()

    生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。下面是read()方法示例:

    try:

    f = open('/path/to/file', 'r')

    print f.read()

    finally:

    if f:

    f.close()

    调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

    如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

    for line in f.readlines():

    process(line) #

    Read In Chunks

    处理大文件是很容易想到的就是将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里用了iter & yield:

    def read_in_chunks(filePath, chunk_size=1024*1024):

    """

    Lazy function (generator) to read a file piece by piece.

    Default chunk size: 1M

    You can set your own chunk size

    """

    file_object = open(filePath)

    while True:

    chunk_data = file_object.read(chunk_size)

    if not chunk_data:

    break

    yield chunk_data

    if __name__ == "__main__":

    filePath = './path/filename'

    for chunk in read_in_chunks(filePath):

    process(chunk) #

    Using with open()

    with语句打开和关闭文件,包括抛出一个内部块异常。for line in

    f文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理,所以你不必担心大文件。

    #If the file is line based

    with open(...) as f:

    for line in f:

    process(line) #

    Conclusion

    在使用python进行大文件读取时,应该让系统来处理,使用最简单的方式,交给解释器,就管好自己的工作就行了。

    参考2:利用python处理两千万条数据的一些经验

    https://blog.csdn.net/ZHANGJING199402/article/details/80269632

    先打开目标文件,写入列名,再打开原始文件,按行读取,按照条件判断这一行是否为“脏”数据,不是的话再按照上面表格里的要求进行处理,之后按行写入目标文件,这样一来,电脑内存占用率下降,电脑也就不会卡了,最后再将初步处理过的文件利用pandas打开,利用其中的DataFrame数据结构的方法进行去重,两千万条的数据五分钟之内处理完成,以下为源代码:

    import csv rows=[] with

    open(r'C:\Users\Hanju\Desktop\uploadPortal(5).csv',"w", newline='') as

    _csvfile: writer = csv.writer(_csvfile) #先写入columns_name

    writer.writerow(["Dev_mac","Action","User_mac","User_mac_head","Bssid","WiFi","Time","Date"])

    i=0 with open(r'D:\UploadPortalData\uploadPortal (5).csv',encoding='UTF-8') as

    csvfile: readCSV=csv.reader(csvfile,delimiter=',') for row in readCSV:

    if(len(row)!=8): continue row1=[] i+=1 row1.append(row[0].replace(':','')[-5:])

    if row[2]=='auth': row1.append('1') elif row[2]=='deauth': row1.append('2')

    elif row[2]=='portal': row1.append('3') elif row[2]=='portalauth':

    row1.append('4') row1.append(str(row[3].replace(':','')))

    row1.append(str(row[3].replace(':','')[0:6])) if row[0]==row[4]:

    row1.append('2') else: row1.append('5') if 'City-WiFi-5G' in row[5]:

    row1.append('2') elif 'City-WiFi' in row[5]: row1.append('1') else:

    row1.append('0') row1.append(float(row[6])/86400.0-2.0/3.0+719530.0)

    row1.append(row[7]) writer.writerow(row1) print('Done') print(i) import pandas

    as pd df=pd.read_csv(r'C:\Users\Hanju\Desktop\uploadPortal(5).csv')

    #print(df.head()) #print(df.tail()) print(df.shape)

    New_df=df.drop_duplicates(['Action','User_mac','Time']) print(New_df.shape)

    #print(New_df.head()) #print(New_df.tail())

    New_df.to_csv(r'C:\Users\Hanju\Desktop\uploadPortal(5)_Final.csv') print('Done')

    参考3:

    解决的方法:

    1)使用SSCursor(流式游标),避免客户端占用大量内存。(这个cursor实际上没有缓存下来任何数据,它不会读取所有所有到内存中,它的做法是从储存块中读取记录,并且一条一条返回给你。)

    2)使用迭代器而不用fetchall,即省内存又能很快拿到数据。

    import MySQLdb.cursors conn = MySQLdb.connect(host='ip地址', user='用户名',

    passwd='密码', db='数据库名', port=3306, charset='utf8', cursorclass =

    MySQLdb.cursors.SSCursor) cur = conn.cursor() cur.execute("SELECT * FROM

    bigtable"); row = cur.fetchone() while row is not None: do something row =

    cur.fetchone() cur.close() conn.close()

    需要注意的是,

    1.因为SSCursor是没有缓存的游标,结果集只要没取完,这个conn是不能再处理别的sql,包括另外生成一个cursor也不行的。

    如果需要干别的,请另外再生成一个连接对象。

    2. 每次读取后处理数据要快,不能超过60s,否则mysql将会断开这次连接,也可以修改 SET NET_WRITE_TIMEOUT = xx

    来增加超时间隔。

    展开全文
  • 在数据分析领域,最热门...这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python处理数据:硬件环境CPU:3.5 GHz Intel Core i7内存:3...

    在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Hadoop才是一个合理的技术选择。这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python来处理数据:

    硬件环境

    CPU:3.5 GHz Intel Core i7

    内存:32 GB HDDR 3 1600 MHz

    硬盘:3 TB Fusion Drive

    数据分析工具

    Python:2.7.6

    Pandas:0.15.0

    IPython notebook:2.0.0

    源数据如下表所示:

    201547112037189.jpg?201537112054

    数据读取

    启动IPython notebook,加载pylab环境:

    ipython notebook --pylab=inline

    Pandas提供了IO工具可以将大文件分块读取,测试了一下性能,完整加载9800万条数据也只需要263秒左右,还是相当不错了。

    import pandas as pd

    reader = pd.read_csv('data/servicelogs', iterator=True)

    try:

    df = reader.get_chunk(100000000)

    except StopIteration:

    print "Iteration is stopped."

    201547111747735.jpg?20153711185

    使用不同分块大小来读取再调用 pandas.concat 连接DataFrame,chunkSize设置在1000万条左右速度优化比较明显。

    loop = True

    chunkSize = 100000

    chunks = []

    while loop:

    try:

    chunk = reader.get_chunk(chunkSize)

    chunks.append(chunk)

    except StopIteration:

    loop = False

    print "Iteration is stopped."

    df = pd.concat(chunks, ignore_index=True)

    下面是统计数据,Read Time是数据读取时间,Total Time是读取和Pandas进行concat操作的时间,根据数据总量来看,对5~50个DataFrame对象进行合并,性能表现比较好。

    201547112140168.jpg?201537112158

    201547112209982.png?20153711235

    如果使用Spark提供的Python Shell,同样编写Pandas加载数据,时间会短25秒左右,看来Spark对Python的内存使用都有优化。

    数据清洗

    Pandas提供了 DataFrame.describe 方法查看数据摘要,包括数据查看(默认共输出首尾60行数据)和行列统计。由于源数据通常包含一些空值甚至空列,会影响数据分析的时间和效率,在预览了数据摘要后,需要对这些无效数据进行处理。

    首先调用 DataFrame.isnull() 方法查看数据表中哪些为空值,与它相反的方法是 DataFrame.notnull() ,Pandas会将表中所有数据进行null计算,以True/False作为结果进行填充,如下图所示:

    201547112321824.png?201537112344

    Pandas的非空计算速度很快,9800万数据也只需要28.7秒。得到初步信息之后,可以对表中空列进行移除操作。尝试了按列名依次计算获取非空列,和 DataFrame.dropna() 两种方式,时间分别为367.0秒和345.3秒,但检查时发现 dropna() 之后所有的行都没有了,查了Pandas手册,原来不加参数的情况下, dropna() 会移除所有包含空值的行。如果只想移除全部为空值的列,需要加上 axis 和 how 两个参数:

    df.dropna(axis=1, how='all')

    共移除了14列中的6列,时间也只消耗了85.9秒。

    接下来是处理剩余行中的空值,经过测试,在 DataFrame.replace() 中使用空字符串,要比默认的空值NaN节省一些空间;但对整个CSV文件来说,空列只是多存了一个",”,所以移除的9800万 x 6列也只省下了200M的空间。进一步的数据清洗还是在移除无用数据和合并上。

    对数据列的丢弃,除无效值和需求规定之外,一些表自身的冗余列也需要在这个环节清理,比如说表中的流水号是某两个字段拼接、类型描述等,通过对这些数据的丢弃,新的数据文件大小为4.73GB,足足减少了4.04G!

    数据处理

    使用 DataFrame.dtypes 可以查看每列的数据类型,Pandas默认可以读出int和float64,其它的都处理为object,需要转换格式的一般为日期时间。DataFrame.astype() 方法可对整个DataFrame或某一列进行数据格式转换,支持Python和NumPy的数据类型。

    df['Name'] = df['Name'].astype(np.datetime64)

    对数据聚合,我测试了 DataFrame.groupby 和 DataFrame.pivot_table 以及 pandas.merge ,groupby 9800万行 x 3列的时间为99秒,连接表为26秒,生成透视表的速度更快,仅需5秒。

    df.groupby(['NO','TIME','SVID']).count() # 分组

    fullData = pd.merge(df, trancodeData)[['NO','SVID','TIME','CLASS','TYPE']] # 连接

    actions = fullData.pivot_table('SVID', columns='TYPE', aggfunc='count') # 透视表

    根据透视表生成的交易/查询比例饼图:

    201547112401511.png?201537112415

    将日志时间加入透视表并输出每天的交易/查询比例图:

    total_actions = fullData.pivot_table('SVID', index='TIME', columns='TYPE', aggfunc='count')

    total_actions.plot(subplots=False, figsize=(18,6), kind='area')

    201547112436789.png?201537112449

    除此之外,Pandas提供的DataFrame查询统计功能速度表现也非常优秀,7秒以内就可以查询生成所有类型为交易的数据子表:

    tranData = fullData[fullData['Type'] == 'Transaction']

    该子表的大小为 [10250666 rows x 5 columns]。在此已经完成了数据处理的一些基本场景。实验结果足以说明,在非">5TB”数据的情况下,Python的表现已经能让擅长使用统计分析语言的数据分析师游刃有余。

    展开全文
  • 参考链接: 使用Python的SQL 3(处理大数据) 实践课题报告: 大数据文本分析与应用 学 校:xxx 学 院:大数据与智能工程学院 专 业:信息工程(数据科学与大数据技术) 年 级:2017级 学 号:xxx 姓 名:xxx ...

    参考链接: 使用Python的SQL 3(处理大数据)

    实践课题报告: 大数据文本分析与应用 

    学 校:xxx 

    学 院:大数据与智能工程学院 

    专 业:信息工程(数据科学与大数据技术) 

    年 级:2017级 

    学 号:xxx 

    姓 名:xxx 

    指导老师:xxx 

    日 期:2019 年 6 月 27 日 至 29 日 

    实习要求: 

    使用Python,实现对英文小说的词频解析,并将每章的词频结果存入到Mysql数据库中。 开发简易信息系统,实现对某篇小说的词频查询。 

    环境配置 

    1.Python3.7 (数据处理及对数据库的操作) 2.MySQL5.7(存储分析结果) 3.Tomcat9(部署前端代码,实现客户端访问) 

    第一步:读取数据,并进行预处理 

    #获取数据并对其进行去空行,空白处理

    def get_data( filename):

        data = ''

        with open(filename, "r") as f:

            for line in f.readlines():

                line = line.rstrip() #去掉列表右边的空白

                line = line.lstrip() #去掉列表左边的空白

                #全变为小写

                #line = line.lower()

                #将特殊字符替换为空格

                for ch in '!"#$%@~`^&*\'\“”’。,()_-+=/{\\}[|]?.><,/;':

                    line = line.replace(ch, " ") 

                if line is not '':

                    data = data+line+' '

        return data

     

    ```python

     

    第二步:按章节进行分词和统计 

    #获取章节单词 ,key="CHAPTER",章节分割词

    def get_chapter_word(key ,data):

        #分词

        words = data.split()

        chapters ={}

        j=0

        for word in words:

            if(word == key):

                    j+=1

            if j == 0:

                chapters['book'] = chapters.get('book','')+word+" "

            else:

                keys = key+str(j)

                chapters[keys] = chapters.get(keys,'')+word+" "

        chapter_words = list(chapters.items())

        return chapter_words

     

    #按按章节进行词频统计

    def word_count(chapter_word):

         #全变为小写

        chapter_word = chapter_word.lower()

        words = chapter_word.split()

        #字典存储单词和数量

        counts ={}

        for word in words:

            counts[word] = counts.get(word,0) + 1

        items = list(counts.items())

        #大到小快速排序

        items.sort(key=lambda x:x[1], reverse=True)

        return items

     

    第三步:数据库操作 

    import pymysql

    #连接数据库

    def connectdb():

        localhost = " localhost"

        username = "root"

        password = "123456"

        DBname = "test"

        #print('连接到mysql服务器...')

        # 打开数据库连接

        db = pymysql.connect(localhost,username,password,DBname)

        #print('连接上了!')

        return db

        

    #存入数据库,书名,章节,单词,词频

    def insert(db,bookname,chapter,word, counts):

        # 使用cursor()方法获取操作游标 

        cursor = db.cursor()

        # SQL 插入语句

        sql = "INSERT INTO txtdata(bookname, \

           chapter, word, counts) \

           VALUES ('%s', '%s', '%s',  %s)" % \

           (bookname, chapter,word, counts)

        try:

            # 执行sql语句

            cursor.execute(sql)

            # 执行sql语句

            db.commit()

        except:

            # 发生错误时回滚

            db.rollback()

     

    #查询数据库

    def select(sql):

        #连接数据库

        db= connectdb()

        # 使用cursor()方法获取操作游标 

        cursor = db.cursor()

        try:

            #记录总的次数

            count = 0

            # 执行SQL语句

            cursor.execute(sql)

            # 获取所有记录列表

            results = cursor.fetchall()

            for row in results:

                bookname = row[0]

                chapter = row[1]

                counts = row[2]

                count += counts

                # 打印结果

                print ("书名:%s \t 章节:%s \t 词频:%d" %(bookname,chapter,counts))

            print("总的出现频率为:%d"%(count))

        except:

            print ("词库无此单词!!!")

        # 关闭数据库连接

        db.close()  

        

    #按单词查询所有的词频记录

    def select_by_word(word):

        # SQL 查询语句

        sql = "SELECT bookname, chapter,counts FROM txtdata WHERE trim(replace(word,' ','')) = trim(replace('%s',' ',''))" % (word)

        #调用查询函数

        select(sql)

        

    #查询指定书的查询指定单词的词频

    def select_by_bookname(bookname,word):

        # SQL 查询语句

        sql = "SELECT bookname, chapter,counts FROM txtdata WHERE trim(replace(bookname,' ','')) =\

        trim(replace('%s',' ','')) and trim(replace(word,' ','')) = trim(replace('%s',' ',''))" % (bookname,word)

        #调用查询函数

        select(sql)

     

    第四步:存储数据,查询词频 

    #存入数据库主函数

    def insert_main(filename):

        #filename = 'Jane_Eyre.txt'

        #读取数据

        data=get_data(filename)

        #获取章节单词 ,key="CHAPTER",章节分割词库

        key="CHAPTER"

        #录入信息条数

        count = 0

        

         #连接数据库

        db= connectdb()

     

        chapter_words = get_chapter_word(key ,data)

        for i in range(len(chapter_words)):

            if i == 0:

                continue

            else:

                chapter,chapter_word = chapter_words[i]

                chapter_word = chapter_word.rstrip().lstrip()

                #按按章节进行词频统计

                items = word_count(chapter_word)

                for j in range(len(items)):

                    word, counts= items[j]

                    #print("{0:<10}{1:>5}".format(word, count))

                    try:

                        #存入数据库,书名,章节,单词,词频

                        insert(db,chapter_words[0][1],chapter,word, counts)

                    except:

                        continue

                    count+=1

            print("已录入%d章节的数据》》》"%(i))

        # 关闭数据库连接

        db.close()  

        print("本次总共录入%d条数据"%(count))

     

    #按单词查询主函数

    def select_main():

        word = input("请输入你要查询的单词:")

        word = word.lower()

        print("\n查询结果:\n")

        select_by_word(word)

     

    ##查询指定书的查询指定单词的词频主函数

    def select_by_bookname_main():

        bookname = input("请输入书名:")

        word = input("\n请输入你要查询的单词:")

        word = word.lower()

        print("\n查询结果:\n")

        select_by_bookname(bookname,word)

     

    第五步:测试 

    存入数据库 

    # txt文件和当前脚本在同一目录下,所以不用写具体路径

    filename_path = ['Two_Cities.txt','Jane_Eyre.txt']

    for filename in filename_path:

        #存入数据库

       # insert_main(filename)

     

    已录入1章节的数据》》》

    已录入2章节的数据》》》

    已录入3章节的数据》》》

    已录入4章节的数据》》》

    已录入5章节的数据》》》

    已录入6章节的数据》》》

    已录入7章节的数据》》》

    已录入8章节的数据》》》

    已录入9章节的数据》》》

    已录入10章节的数据》》》

    已录入11章节的数据》》》

    已录入12章节的数据》》》

    已录入13章节的数据》》》

    已录入14章节的数据》》》

    已录入15章节的数据》》》

    已录入16章节的数据》》》

    已录入17章节的数据》》》

    已录入18章节的数据》》》

    已录入19章节的数据》》》

    已录入20章节的数据》》》

    已录入21章节的数据》》》

    已录入22章节的数据》》》

    已录入23章节的数据》》》

    已录入24章节的数据》》》

    已录入25章节的数据》》》

    已录入26章节的数据》》》

    已录入27章节的数据》》》

    已录入28章节的数据》》》

    已录入29章节的数据》》》

    已录入30章节的数据》》》

    已录入31章节的数据》》》

    已录入32章节的数据》》》

    已录入33章节的数据》》》

    已录入34章节的数据》》》

    已录入35章节的数据》》》

    已录入36章节的数据》》》

    已录入37章节的数据》》》

    已录入38章节的数据》》》

    已录入39章节的数据》》》

    已录入40章节的数据》》》

    已录入41章节的数据》》》

    已录入42章节的数据》》》

    已录入43章节的数据》》》

    已录入44章节的数据》》》

    本次总共录入%d条数据

    已录入1章节的数据》》》

    已录入2章节的数据》》》

    已录入3章节的数据》》》

    已录入4章节的数据》》》

    已录入5章节的数据》》》

    已录入6章节的数据》》》

    已录入7章节的数据》》》

    已录入8章节的数据》》》

    已录入9章节的数据》》》

    已录入10章节的数据》》》

    已录入11章节的数据》》》

    已录入12章节的数据》》》

    已录入13章节的数据》》》

    本次总共录入%d条数据

     

    数据库表 

     

    按单词查询所有 

     #查询1

    select_main()

     

    请输入你要查询的单词:the

     

    查询结果:

     

    书名: Two Cities      章节:CHAPTER1      词频:79

    书名: Two Cities      章节:CHAPTER2      词频:194

    书名: Two Cities      章节:CHAPTER3      词频:123

    书名: Two Cities      章节:CHAPTER4      词频:203

    书名: Two Cities      章节:CHAPTER5      词频:284

    书名: Two Cities      章节:CHAPTER6      词频:331

    书名: Two Cities      章节:CHAPTER7      词频:171

    书名: Two Cities      章节:CHAPTER8      词频:298

    书名: Two Cities      章节:CHAPTER9      词频:89

    书名: Two Cities      章节:CHAPTER10      词频:137

    书名: Two Cities      章节:CHAPTER11      词频:228

    书名: Two Cities      章节:CHAPTER12      词频:263

    书名: Two Cities      章节:CHAPTER13      词频:166

    书名: Two Cities      章节:CHAPTER14      词频:348

    书名: Two Cities      章节:CHAPTER15      词频:94

    书名: Two Cities      章节:CHAPTER16      词频:41

    书名: Two Cities      章节:CHAPTER17      词频:102

    书名: Two Cities      章节:CHAPTER18      词频:56

    书名: Two Cities      章节:CHAPTER19      词频:212

    书名: Two Cities      章节:CHAPTER20      词频:87

    书名: Two Cities      章节:CHAPTER21      词频:284

    书名: Two Cities      章节:CHAPTER22      词频:208

    书名: Two Cities      章节:CHAPTER23      词频:118

    书名: Two Cities      章节:CHAPTER24      词频:152

    书名: Two Cities      章节:CHAPTER25      词频:34

    书名: Two Cities      章节:CHAPTER26      词频:264

    书名: Two Cities      章节:CHAPTER27      词频:145

    书名: Two Cities      章节:CHAPTER28      词频:232

    书名: Two Cities      章节:CHAPTER29      词频:252

    书名: Two Cities      章节:CHAPTER30      词频:296

    书名: Two Cities      章节:CHAPTER31      词频:167

    书名: Two Cities      章节:CHAPTER32      词频:78

    书名: Two Cities      章节:CHAPTER33      词频:178

    书名: Two Cities      章节:CHAPTER34      词频:121

    书名: Two Cities      章节:CHAPTER35      词频:191

    书名: Two Cities      章节:CHAPTER36      词频:106

    书名: Two Cities      章节:CHAPTER37      词频:227

    书名: Two Cities      章节:CHAPTER38      词频:270

    书名: Two Cities      章节:CHAPTER39      词频:352

    书名: Two Cities      章节:CHAPTER40      词频:53

    书名: Two Cities      章节:CHAPTER41      词频:146

    书名: Two Cities      章节:CHAPTER42      词频:252

    书名: Two Cities      章节:CHAPTER43      词频:204

    书名: Two Cities      章节:CHAPTER44      词频:150

    书名: Jane Eyre      章节:CHAPTER1      词频:86

    书名: Jane Eyre      章节:CHAPTER2      词频:104

    书名: Jane Eyre      章节:CHAPTER3      词频:118

    书名: Jane Eyre      章节:CHAPTER4      词频:203

    书名: Jane Eyre      章节:CHAPTER5      词频:264

    书名: Jane Eyre      章节:CHAPTER6      词频:110

    书名: Jane Eyre      章节:CHAPTER7      词频:178

    书名: Jane Eyre      章节:CHAPTER8      词频:90

    书名: Jane Eyre      章节:CHAPTER9      词频:128

    书名: Jane Eyre      章节:CHAPTER10      词频:179

    书名: Jane Eyre      章节:CHAPTER11      词频:250

    书名: Jane Eyre      章节:CHAPTER12      词频:164

    书名: Jane Eyre      章节:CHAPTER13      词频:160

    总的出现频率为:10020

     

    按指定书名查询指定单词的词频 

     #查询2

    select_by_bookname_main()

     

    请输入书名:Jane Eyre

     

    请输入你要查询的单词:the

     

    查询结果:

     

    书名: Jane Eyre      章节:CHAPTER1      词频:86

    书名: Jane Eyre      章节:CHAPTER2      词频:104

    书名: Jane Eyre      章节:CHAPTER3      词频:118

    书名: Jane Eyre      章节:CHAPTER4      词频:203

    书名: Jane Eyre      章节:CHAPTER5      词频:264

    书名: Jane Eyre      章节:CHAPTER6      词频:110

    书名: Jane Eyre      章节:CHAPTER7      词频:178

    书名: Jane Eyre      章节:CHAPTER8      词频:90

    书名: Jane Eyre      章节:CHAPTER9      词频:128

    书名: Jane Eyre      章节:CHAPTER10      词频:179

    书名: Jane Eyre      章节:CHAPTER11      词频:250

    书名: Jane Eyre      章节:CHAPTER12      词频:164

    书名: Jane Eyre      章节:CHAPTER13      词频:160

    总的出现频率为:2034

     

    六、前端页面效果 

    index.jsp 

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

        <% request.setCharacterEncoding("UTF-8"); %> 

    <%@ page import="java.sql.*"%> 

    <html>

    <head>

    <title>Python大数据文本分析</title>

    <body >   

     

    <div align="center"style="width: 80%;">

    <br/><br/><br/>

    <h1>Python大数据文本分析</h1><br/>

    <p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/>

    <a href="word.jsp"><h3>按单词查询所有书本的词频</h3></a> <br><br>

    <a href="book.jsp"><h3>查询指定书本中的指定单词词频</h3></a>

    </div>

    </body>   

    </html> 

     

     

    word.jsp 

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

        <% request.setCharacterEncoding("UTF-8"); %>

    <%@ page import="java.sql.*"%> 

    <html>

    <head>

    <title>查询</title>

    <body >   

    <div align="center"style="width: 80%;">

    <br/><br/><br/>

    <h3>查询指定书本中的指定单词词频</h3><br/><br/>

    <p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/><br/>

    <form  action="select_word.jsp" method="post">

    <p>请输入单词:<input type="text" name="word" /><br/>

    <p><input type="submit" value="查询"/>

    <p><a href="index.jsp">返回首页</a>

    <div>

    </body>   

    </html> 

     

     

    select_word.jsp 

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

        <% request.setCharacterEncoding("UTF-8"); %>

    <%@ page import="java.sql.*"%>

     

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

     

    <html>   

    <body > 

    <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

         url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8"

         user="root"  password="123456"/>

     

     <sql:query dataSource="${snapshot}" var="result">

     SELECT bookname,chapter,word,counts FROM txtdata WHERE trim(replace(word,' ','')) = trim(replace('${param.word}',' ',''))

     

    </sql:query>

    <div align="center" style="width: 80%;">

     <h1>Python大数据文本分析<h1><br/><br/>

    <table align="center" border="1" width="70%">

    <tr>

       <th>书名</th>

       <th>章节</th>

       <th>单词</th>

       <th>词频</th>

    </tr>

    <c:forEach var="row" items="${result.rows}">

    <tr>

       <td><c:out value="${row.bookname}"/></td>

       <td><c:out value="${row.chapter}"/></td>

       <td><c:out value="${row.word}"/></td>

       <td><c:out value="${row.counts}"/></td>

    </tr>

    </c:forEach>

    </table>

    <p><a href="index.jsp">返回首页</a>

    </div>

    </body>   

    </html> 

     

     

    book.jsp 

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

        <% request.setCharacterEncoding("UTF-8"); %>

    <%@ page import="java.sql.*"%> 

    <html>

    <head>

    <title>查询</title>

    <body >   

    <div align="center"style="width: 80%;">

    <br/><br/><br/>

    <h3>查询指定书本中的指定单词词频</h3><br/><br/>

    <p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/><br/>

    <form  action="select_book.jsp" method="post">

    <p>请输入书名:<input type="text" name="book" /><br/>

    <p>请输入单词:<input type="text" name="word" /><br/>

    <p><input type="submit" value="查询"/>

    <p><a href="index.jsp">返回首页</a>

    <div>

    </body>   

    </html> 

     

     

    select_book.jsp 

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

        <% request.setCharacterEncoding("UTF-8"); %>

    <%@ page import="java.sql.*"%>

     

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

     

    <html>   

    <body > 

     

    <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

         url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8"

         user="root"  password="123456"/>

     

     <sql:query dataSource="${snapshot}" var="result">

     SELECT bookname, chapter, word,counts FROM txtdata WHERE trim(replace(bookname,' ','')) =trim(replace('${param.book}',' ','')) and trim(replace(word,' ','')) = trim(replace('${param.word}',' ',''))

     

    </sql:query>

    <div align="center" style="width: 80%;">

     <h1>Python大数据文本分析<h1><br/><br/>

    <table align="center" border="1" width="70%">

    <tr>

       <th>书名</th>

       <th>章节</th>

       <th>单词</th>

       <th>词频</th>

    </tr>

    <c:forEach var="row" items="${result.rows}">

    <tr>

       <td><c:out value="${row.bookname}"/></td>

       <td><c:out value="${row.chapter}"/></td>

       <td><c:out value="${row.word}"/></td>

       <td><c:out value="${row.counts}"/></td>

    </tr>

    </c:forEach>

    </table>

    <p><a href="index.jsp">返回首页</a>

    </div>

    </body>   

    </html> 

     

     

    数据集及源码

    展开全文
  • 通常在获得大量数据集(一般超过GB量级)身边又没有基础设施处理时,我们只能对大文件进行分割处理。 关于在python环境下分割文件的操作,我参考了这篇博主的文章: 版权声明:本文为CSDN博主「IBoyMan」的原创文章...

    该文的实验环境:

    • OS:Ubuntu 18.04
    • CPU::AMD R5 1600X
    • 内存:16GB

    对于做大数据以及机器学习的小伙伴来说,扎实的硬件基础是做良好实验的前提。通常在获得大量数据集(一般超过GB量级)身边又没有基础设施处理时,我们只能对大文件进行分割处理。

    关于在python环境下分割文件的操作,我参考了这篇博主的文章:

    版权声明:本文为CSDN博主「IBoyMan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/IBoyMan/article/details/79419347

    其代码如下:

    # -*- coding:utf-8 -*-
    from datetime import datetime
     
    def Main():
        source_dir = '/jz_yuanshi_list0206.txt'
        target_dir = '/split/'
     
        # 计数器
        flag = 0
     
        # 文件名
        name = 1
     
        # 存放数据
        dataList = []
     
        print("开始。。。。。")
        print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
     
        with open(source_dir,'r') as f_source:
            for line in f_source:
              flag+=1
              dataList.append(line)
              if flag == 2000000:
                  with open(target_dir+"jz_yuanshi_list_"+str(name)+".txt",'w+') as f_target:
                      for data in dataList:
                          f_target.write(data)
                  name+=1
                  flag = 0
                  dataList = []
                    
        # 处理最后一批行数少于200万行的
        with open(target_dir+"jz_yuanshi_list_"+str(name)+".txt",'w+') as f_target:
            for data in dataList:
                f_target.write(data)
     
        print("完成。。。。。")
        print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
     
    if __name__ == "__main__":
        Main()
     
    

    思路十分详细,基本是运用迭代的思想,从原文件中分割预定的行数。
    我运用以上程序在机器分割1.7G数据集的前100000行数据用了差不多4S:
    在这里插入图片描述
    除了上述方法外,我找到了另外一种更加简洁的方法。这个方法是Linux中自带的文件命令:split。

    split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。

    方法参数有以下几种:

    -b:值为每一输出档案的大小,单位为 byte。
    -C:每一输出档中,单行的最大 byte 数。
    -d:使用数字作为后缀。
    -l:选择行数
    -d: 文件前缀按数字递增输出
    -a: 控制前缀长度

    具体的示例学习可以参考:

    https://man.linuxde.net/split

    使用Linux命令一行就可以实现文件分割操作,在python环境中可以这样操作:

    import os
    os.system("split -b 10485760 filename -d -a 3 splitfilename")
    

    同样对同一个数据集进行100000行的分割操作,该命令用了大约7s。对比可得,Linux命令行效率较低。但两者对于切分大数据集文件都适用。
    在这里插入图片描述

    展开全文
  • 这次拿到近亿条日志数据,千万级数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python处理数据:  硬件环境  CPU:3.5 GHz Intel Core i7  内存:32 GB HDDR 3 1600...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,...社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。","link1":...
  • 其实这就是想告诉你的大数据的三个发展方向,平台搭建/优化/运维/监控、大数据开发/设计/架构、数据分析/挖掘。请不要问我哪个容易,哪个前景好,哪个钱多。...处理时效性高,海量数据的处理需求不再局限在离...
  • 光环大数据--大数据培训&人工智能培训 Python 网页爬虫 文本处理科学计算机器学习_光环大数据 Python 培训 曾经因为NLTK 的缘故开始学习Python之后渐渐成为我工作中的第一辅助 脚本语言虽然开发语言是 C/C++但平时的...
  • 在数据分析领域,较热门...这次拿到近亿条日志数据,千万 数据已经是关系型数据库的查询分析瓶颈,之前使用过Hadoop对大量文本进行分类,这次决定采用Python处理数据:硬件环境CPU:3.5 GHz Intel Core i7内存:3...
  • 中国通信工业协会通信和信息技术创新人才培养工程项目办公室通人办〔2017〕 第45号“R语言机器学习与大数据可视化”暨“Python文本挖掘与自然语言处理”核心技术高级研修班的通知各有关单位:为了响应国家大数据战略...
  • 置身于大数据时代,组织和企业的不同系统、流程和交易会产生的大量的数据,在管理这些数据时碰到了不少困难。而且,由于大数据对3V一词(volume、variety、velocity)的模糊定义,大数据一词也经常错误使用。有时候很...
  • 中国通信工业协会通信和信息技术创新人才培养工程项目办公室通人办〔2017〕 第45号“R语言机器学习与大数据可视化”暨“Python文本挖掘与自然语言处理”核心技术高级研修班的通知各有关单位:为了响应国家大数据战略...
  • 作者|GUEST编译|VK来源|Analytics Vidhya概述在AWS电子病历上建立John Snow实验室的Spark NLP,并使用该库对BBC文章进行简单的文本分类。...这些平台不仅能够处理大数据,使组织能够对非结构化数据(如...
  • 随着我们进入大数据时代,数据的格式非常多样化,包括图像、文本、图形等等。因为格式非常多样,从一个数据到另一个数据,所以将这些数据预处理为计算机可读的格式是非常必要的。在本文中,将展示如何使用Python...
  • 1.Python处理的各种类型的数据,通过内置数据结构如列表、字典等在计算机内存中进行处理加工,最后必须要存入外部存储器中永久保存。 2.文件是一个存储在辅助存储器上的数据序列; 文件是常用的存储形式; 文件可以...
  • 那你最好找一个专业的老师带带你,这样突破比较的快,python的库比较多,我将自然语言处理(NLP)库分享出来,希望能帮助到你今天,自然语言处理(NLP)变得非常流行,在深度学习发展的背景下,自然语言处理(NLP)变得...

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

python 处理大数据文本

python 订阅