1. Trang chủ
  2. » Giáo Dục - Đào Tạo

MÔN xử lí dữ LIỆU lớn GIỮA kì viết code cào dữ liệu từ trang web, lưu kết quả vào 1 file tương ứng và mô tả ngắn gọn về cấu trúc của trang web trên

29 38 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 287,16 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Missing data là dữ liệu bị thiếu, được hiển thị như NaN, Nat, Null, N/A,… Missing Data xuất hiện do nhiều nguyên nhân như:  Người dùng quên điền  Dữ liệu bị mất trong quá trình chuyển

Trang 4

LỜI CẢM ƠN

Để hoàn thành tiểu luận này, em xin gửi lời cảm ơn chân thành đến:

Các thầy cô trong khoa Công nghệ thông tin đã cung cấp các kiến thức nền tảng để ápdụng và nghiên cứu thông tin trong bài tiểu luận

Em xin bày tỏ lòng biết ơn sâu sắc đến thầy Bùi Thanh Hùng người đã trực tiếp giảngdạy và hướng dẫn tạo mọi điều kiện thuận lợi giúp đỡ em trong quá trình thực hiện đềtài

Tuy đã có nhiều cố gắng, nhưng chắc chắn tiểu luận của em còn có vài điểm sai sót.Rất mong nhận được sự nhận xét, ý kiến đóng góp, phê bình từ phía Thầy để bài tiểuluận được hoàn thiện hơn

Xin chân thành cám ơn!

Trang 5

LỜI CAM ĐOAN

Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi và được sự hướng dẫn củaBui Thanh Hung Các kết quả trong đề tài này là trung thực và chưa công bố dưới bất

kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phântích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõtrong phần tài liệu tham khảo

Ngoài ra, trong tiểu luận còn sử dụng một số nhận xét, đánh giá cũng như sốliệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồngốc

Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm

về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến

những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)

TP Hồ Chí Minh, ngày 31 tháng 03 năm 2022

Tác giả (ký tên và ghi rõ họ tên)

Nguyễn Văn Tài

Trang 6

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Phần xác nhận của GV hướng dẫn

_ _ _ _ _ _ _

Tp Hồ Chí Minh, ngày tháng năm

(kí và ghi họ tên)

Phần đánh giá của GV chấm bài

_ _ _ _ _ _ _

Tp Hồ Chí Minh, ngày tháng năm

(kí và ghi họ tên)

Trang 8

TÓM TẮT

Trang 9

MỤC LỤC

LỜI CẢM ƠN i

LỜI CAM ĐOAN ii

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN iii

TÓM TẮT iv

MỤC LỤC 1

DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT 2

DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ 3

CHƯƠNG I - THU THẬP DỮ LIỆU 4

1 Viết code cào dữ liệu từ trang Web, lưu kết quả vào 1 file tương ứng và mô tả ngắn gọn về cấu trúc của trang Web trên 4

1.1 Code cào dữ liệu 4

1.2 Cấu trúc trang Web 5

2 Với dữ liệu bạn vừa cào về, bạn hãy thực hiện các yêu cầu sau: 5

2.1 Hãy đọc tất cả các thẻ html (div) với lớp là "quote" và lưu nó trong biến 'result’, hiển thị giá trị biến 'result’ ra màn hình? 5

2.2 Hãy tìm trong biến 'result’ vừa rồi các dữ liệu có chứa nhãn "small" với class là "author" và in kết quả ra màn hình? 6

2.3 Hãy viết hàm tacgiaLink() để lấy nội dung của mỗi tác giả Với mỗi tác giả in ra màn hình các nội dung 6

2.4 Hãy lưu kết quả ở câu c vào file Quote.csv tương ứng, với mỗi tác giả là 1 dòng dữ liệu Bạn được yêu cầu thu thập ít nhất 40 câu nói nổi tiếng từ trang web trên một cách tự động theo code của các ý trên? 7

CHƯƠNG II - KHAI PHÁ DỮ LIỆU 8

1 Xử lý dữ liệu- Data Imputation 8

Trang 10

1.1 Giới thiệu: 8

1.2 Một số giá trị của dữ liệu Trường ngày sinh chưa có, bạn hãy đề xuất cách điền? 8

1.3 Bạn hãy thêm vào Trường Tuoi (Tuổi) và đề xuất cách điền tuổi của các tác giả? 10

2 Khám phá dữ liệu- Data Exploration 10

2.1 Giới thiệu 10

2.2 Thống kê về tác giả và câu nói nổi tiếng có trong bộ dữ liệu 13

2.3 Thống kê về năm sinh và độ tuổi của các tác giả 14

2.4 Thống kê về các câu nói nổi tiếng như: câu dài nhất, ngắn nhất, số từ .14

2.5 Thống kê về các từ được sử dụng trong các câu nói 14

2.6 Phân tích, trực quan mối quan hệ giữa giữa tác giả và câu nói nổi tiếng 14

2.7 Phân tích, trực quan mối quan hệ giữa các tác giả với nhau 15

3 Suy luận 16

3.1 Bạn được yêu cầu phân loại câu nói theo tên người nổi tiếng và tính độ tương đồng phong cách nói giữa các tác giả theo 2 yêu cầu sau: 16

3.2 Hãy dự đoán tên của người nổi tiếng theo câu nói dựa trên các đặc trưng bạn trích xuất ở trên và đánh giá trên bộ dữ liệu đã cho với tỉ lệ Train/Test và các độ đo phù hợp? 16

Trang 11

DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT

Trang 12

DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ

Trang 13

CHƯƠNG I - THU THẬP DỮ LIỆU

1 Viết code cào dữ liệu từ trang Web, lưu kết quả vào 1 file tương ứng

và mô tả ngắn gọn về cấu trúc của trang Web trên

1.1 Code cào dữ liệu

from bs4 import BeautifulSoup

import urllib request

import pandas as pd

import numpy as np

url = 'https://quotes.toscrape.com/'

page = urllib request urlopen ( url )

soup = BeautifulSoup ( page , 'html.parser' )

def crawlingData ( soup , tag , attrs , getText , isLink , isTag ):

datas = []; dictionary = {}; i = 0

for data in soup find_all( tag , attrs = attrs ):

if getText == True :

datas append ( data text.strip())

elif isLink == True :

if data find( 'a' ) != None and data find( 'a' ).text == '(about)' : datas append ( 'https://quotes.toscrape.com' +

data find( 'a' ).get( 'href' ))

elif isTag == True :

dictionary setdefault ( , [])

for tag in ( data find_all( 'a' )):

dictionary [ ].append( tag text.strip())

#lưu vào file kết quả

structure = crawlingData ( soup , 'html' , {}, False , False , False )

with open ( 'kq.txt' , 'w' , encoding = 'utf-8' ) as :

f write ( str ( structure ) replace ( '[' , '' ) replace ( ']' , '' ))

Trang 14

1.2 Cấu trúc trang Web

2 Với dữ liệu bạn vừa cào về, bạn hãy thực hiện các yêu cầu sau:

2.1 Hãy đọc tất cả các thẻ html (div) với lớp là "quote" và lưu nó trong biến 'result’, hiển thị giá trị biến 'result’ ra màn hình?

result = crawlingData ( soup , 'div' , { 'class' : 'quote' }, True , False , False )

print ( 'result: ' , result )

Trang 15

2.2 Hãy tìm trong biến 'result’ vừa rồi các dữ liệu có chứa nhãn "small" với class là "author" và in kết quả ra màn hình?

def execute ( result ):

authors = []; links = []; quotes = []; tags = []

for in range ( int ( 40 / len ( result ))):

page = urllib request urlopen ( url + 'page/' + str ( + ) + '/' )

soup = BeautifulSoup ( page , 'html.parser' )

authors += crawlingData ( soup , 'small' , { 'class' : 'author' }, True ,

False , False )

links += crawlingData ( soup , 'span' , {}, False , True , False )

quotes += crawlingData ( soup , 'span' , { 'class' : 'text' }, True , False ,

False )

tags += crawlingData ( soup , 'div' , { 'class' : 'tags' }, False , False ,

True )

return authors , links , quotes , tags

authors , links , quotes , tags = execute ( result )

print ( 'author: ' , authors )

2.3 Hãy viết hàm tacgiaLink() để lấy nội dung của mỗi tác giả Với mỗi tác giả in ra màn hình các nội dung

def tacgiaLink ( link ):

page = urllib request urlopen ( link + '/' )

soup = BeautifulSoup ( page , 'html.parser' )

datas = crawlingData ( soup , 'span' , { 'class' : 'author-born-date' }, True ,

False , False )

return datas [ ]

def redirect ( links ):

datas = []

for link in links :

datas append ( tacgiaLink ( link ))

return datas

bDate = redirect ( links )

Trang 16

for in range ( len ( authors )):

print ( '+++++++++++++++++++++++' )

print ( 'Tên tác giả: ' , authors [ ])

print ( 'Đường link của tác giả: ' , links [ ])

print ( 'Ngày tháng năm sinh: ' , bDate [ ])

print ( 'Câu nói nổi tiếng: ' , quotes [ ])

2.4 Hãy lưu kết quả ở câu c vào file Quote.csv tương ứng, với mỗi tác giả là

1 dòng dữ liệu Bạn được yêu cầu thu thập ít nhất 40 câu nói nổi tiếng từ trang web trên một cách tự động theo code của các ý trên?

data = { 'Tacgia' : authors , 'Link' : links , 'Namsinh' : bDate , 'Quote' : quotes }

df = pd DataFrame ( data )

df to_csv ( 'Quote.csv' , index = False )

Trang 17

CHƯƠNG II - KHAI PHÁ DỮ LIỆU

1 Xử lý dữ liệu- Data Imputation

1.1 Giới thiệu:

Missing Data là gì?

Missing data là dữ liệu bị thiếu, được hiển thị như NaN, Nat, Null, N/A,… Missing

Data xuất hiện do nhiều nguyên nhân như:

 Người dùng quên điền

 Dữ liệu bị mất trong quá trình chuyển thủ công từ cơ sở dữ liệu cũ

 Lỗi của chương trình

 Thiếu dữ liệu do trùng hợp

Missing Data có thể được phân thành 3 loại:

 Missing at Random (dữ liệu khuyết ngẫu nhiên)

 Missing Completely at Random (dữ liệu thiếu hoàn toàn ngẫu nhiên)

 Missing Not at Random (dữ liệu khuyết không ngẫu nhiên)

1.2 Một số giá trị của dữ liệu Trường ngày sinh chưa có, bạn hãy đề xuất cách điền?

Thực tế trong bộ dữ liệu cào về trong trường năm sinh không có dữ liệu nào mất Nhưng giả định một vài trường hợp bị null sẽ xử lý như sau:

Bước 1 : Khởi tạo dữ liệu null

# initialize null df

df_null = df copy ()

df_null loc [ df_null Tacgia == 'Albert Einstein' , 'Namsinh' ] = np nan

df_null

Bước 2 : Xử lý dữ liệu null bằng cách giảm số lượng cột trong dataframe sẽ xảy

ra việc mất dữ liệu => không phù hợp

Trang 18

# handle

# dropna(): missing datas aren't neccessary or taking up a smail part of the dataframe

df_null dropna () reset_index ( drop = True )

# reduce the number of rows in dataframe => Lost other datas => unsuitable

Bước 3 : Trong trường hợp chúng ta không sử dụng cột “Namsinh”, giải pháp là chúng ta bỏ cột “Namsinh” Nhưng sẽ không tính được tuổi nếu không có dữ kiện năm sinh => không phù hợp

# incase we don't need to use column "Namsinh", the solution is to drop this column

df_null drop ( 'Namsinh' , axis = ) # can't calculate age without birthdate => unsuitable

Bước 4 : Loại bỏ các dữ liệu không liên quan nhưng có ảnh hưởng đến các dữ liệu khác Nhưng cũng không tính được tuổi của tác giả => không phù hợp

# fillna(): missing datas aren't necessary, but effect other datas

df_null fillna ( ) # can't calculate age too => unsuitable

Bước 5 : Dùng phương pháp ffill : lấy giá trị dòng trên chèn xuống dòng dưới Nếu dòng trên bị null thì không thể thay thế => không phù hợp

df_null fillna ( method = 'ffill' ) # the first value is still null => unsuitable

Bước 6 : Dùng phương pháp bfill : lấy giá trị dòng dưới chèn lên dòng trên Nếu dòng dưới bị null thì không thể thay thế => không phù hợp

df_null fillna ( method = 'bfill' ) # if the last value is null, it will be null forever => unsuitable

Trang 19

Bước 7 : Lấy giá trị xuất hiện nhiều nhất trong mảng sẽ thay những chỗ còn lại.

Do đó sẽ điền được tất cả trường trong dataframe mà không bị bỏ sót ô nào => phù hợp

df_null.fillna(df_null.mode().iloc[ 0 ]) # fill missing value with the most frequent value => suitable

1.3 Bạn hãy thêm vào Trường Tuoi (Tuổi) và đề xuất cách điền tuổi của các tác giả?

from datetime import date, datetime

def calculateAge ( birthDate ):

Pandas là một thư viện Python cung cấp các cấu trúc dữ liệu nhanh, mạnh mẽ, linh hoạt

và mang hàm ý Tên thư viện được bắt nguồn từ panel data (bảng dữ liệu) Pandas được thiết kế để làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều, có tiềm năng không đồng nhất) và dữ liệu chuỗi thời gian

Trang 20

Mục tiêu của pandas là trở thành khối căn bản (building block) cấp cao cơ bản cho công việc thực tế, phân tích dữ liệu thế giới thực trong Python, và rộng hơn là trở thànhcông cụ thao tác / phân tích mã nguồn mở mạnh mẽ và linh hoạt nhất có sẵn trong bất

kỳ loại ngôn ngữ lập trình nào

Pandas rất phù hợp với nhiều loại dữ liệu khác nhau:

 Dữ liệu dạng bảng với các cột được nhập không đồng nhất, như trong bảng SQLhoặc bảng tính Excel

 Dữ liệu chuỗi thời gian theo thứ tự và không có thứ tự (không nhất thiết phải có tần số cố định)

 Dữ liệu ma trận tùy ý (được nhập đồng nhất hoặc không đồng nhất) với nhãn hàng và cột

 Bất kỳ hình thức khác của các bộ dữ liệu quan sát / thống kê Dữ liệu thực sự không cần phải được dán nhãn vào cấu trúc dữ liệu pandas

 Pandas được xây dựng dựa trên NumPy Hai cấu trúc dữ liệu chính của pandas

là Series (1 chiều) và DataFrame (2 chiều) xử lý được phần lớn các trường hợp điển hình trong tài chính, thống kê, khoa học xã hội và nhiều lĩnh vực kỹ thuật.Dưới đây là một số chức năng của pandas sẽ sử dụng phổ biến :

1 reset_index

2 sort_values

3 groupBy

Trang 21

Khi bạn lần đầu tiên nhận được một bộ dữ liệu mới, bạn muốn nhanh chóng khám phá

nó và có được cảm giác về nội dung của nó Pandas có một số phương pháp cho việc này Đầu tiên là đầu, trả về vài hàng đầu tiên của DataFrame Chức năng đầu được sử dụng để xem vài hàng đầu tiên của bộ dữ liệu

sort_values()

Điều đầu tiên bạn có thể làm là thay đổi thứ tự của các hàng bằng cách sắp xếp chúng sao cho dữ liệu thú vị nhất nằm ở đầu DataFrame Bạn có thể sắp xếp hàng bằng phương pháp sort_values, đi qua trong tên cột mà bạn muốn sắp xếp theo

reset_index()

Nếu bạn muốn chuyển đổi bất kỳ cột nào của bộ dữ liệu làm chỉ mục của nó, nó có thể được thực hiện thông qua set_index Trong ví dụ dưới đây, id hành khách được đặt làmcột chỉ mục Điều này rất hữu ích khi bạn muốn đặt một trong các cột làm chỉ mục

loc & iloc

Với loc và iloc, bạn có thể thực hiện hầu hết mọi thao tác lựa chọn dữ liệu trên

DataFrames loc dựa trên nhãn, có nghĩa là bạn phải chỉ định hàng và cột dựa trên nhãnhàng và cột của chúng iloc dựa trên chỉ số số nguyên, vì vậy bạn phải chỉ định các

Trang 22

hàng và cột theo chỉ số số nguyên của chúng loc và iloc cũng cho phép bạn chọn cả hàng và cột từ DataFrame

groupBy()

Pandas groupBy() hàm được sử dụng để chia dữ liệu thành các nhóm bằng cách sử dụng một số tiêu chí được xác định trước Trong ví dụ dưới đây, chúng tôi sẽ tính thu nhập trung bình của các ứng cử viên bằng cách nhóm nó theo độ tuổi

replace()

Hàm replace() trả về một bản sao của chuỗi ban đầu sau khi đã thay thế các chuỗi con

cũ bằng chuỗi con mới

Trang 23

2.2 Thống kê về tác giả và câu nói nổi tiếng có trong bộ dữ liệu

Cách tiếp cận:

 Nhóm dataframe theo tác giả

 Đếm số lần xuất hiện của từng tác giả (tương ứng với số câu nói của tácgiả đó)

df groupby ( 'Tacgia' ) size () reset_index ( name = 'So cau noi' )

2.3 Thống kê về năm sinh và độ tuổi của các tác giả

Cách tiếp cận:

 Nhóm dataframe theo tác giả

 Hiển thị trường tuổi và năm sinh theo tác giả

 Sắp xếp theo thứ tự tăng dần tuổi

df groupby ( 'Tacgia' ) first ()[[ 'Namsinh' , 'Tuoi' ]] sort_values ( 'Tuoi' ,

 Lấy câu có số từ nhiều nhất và số từ ít nhất

df [ 'Length' ] = [ len ( quote split()) for quote in df Quote]

quoteByLength = df [[ 'Quote' , 'Length' ]] sort_values ( 'Length' ,

ascending = False ) reset_index ( drop = True )

Ngày đăng: 25/04/2022, 17:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w