from pathlib import Path
import pandas as pd
= Path("assets", "kargin_internal.xlsx") # os.path.join("assets", "kargin.xlsx")
XLSX_PATH XLSX_PATH
WindowsPath('assets/kargin_internal.xlsx')
լուսանկարի հղումը, Հեղինակ՝ չգիտեմ ով ա սարքել, բայց շատ շնորհակալ եմ իրան
Song reference - ToDo
Էլ ինչ դատա վերլուծել եթե ոչ կարգին դատա։ ՄԵՄ-ի օգնությամբ (ToDo - անուններով նշել մարդկանց, նաև ՄԵՄ-ից դուրս) կա հավաքած տվյալներ որտեղ 600+ կարգինի տեքստերն են, ու որոշ metadata` վայր, լուսավորություն, դերասաններ, լեզուներ և այլն։
Էսօրվա դասին թեթև վերլուծում ենք էդ տվյալները ու մինի search սարքում։ Կրկնում ենք pandas
-ով Excel կարդալը, նախնական տվյալների մաքրման քայլերը, plotly
-ի barplot, histogram, density plot-երը, ու նայում ենք ոնց կարանք օգտագործենք ամենալավ անուններից մեկը ունեցող գրադարանը՝ fuzzywuzzy
-ն տվյալ տեքստին մոտ տեքստ պարունակող կարգին գտնելու համար։
from pathlib import Path
import pandas as pd
= Path("assets", "kargin_internal.xlsx") # os.path.join("assets", "kargin.xlsx")
XLSX_PATH XLSX_PATH
WindowsPath('assets/kargin_internal.xlsx')
= pd.read_excel(XLSX_PATH)
df1 = pd.read_excel(XLSX_PATH, sheet_name=1) df2
df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 779 entries, 0 to 778
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 164 non-null object
1 titles 164 non-null object
2 links 164 non-null object
3 Շատ տարածված արտահայտություն 120 non-null object
4 Տեքստ 139 non-null object
5 Հիմնական դերասաններ 148 non-null object
6 հիմնական դերասանների քանակ 137 non-null object
7 Դերերի անուններ 151 non-null object
8 Վայր 158 non-null object
9 Լուսավորվածություն 158 non-null object
10 Լեզուներ 155 non-null object
11 Արված է 779 non-null bool
12 Unnamed: 12 779 non-null bool
13 Ստուգված է 779 non-null bool
14 Unnamed: 14 11 non-null object
15 Unnamed: 15 3 non-null object
16 Unnamed: 16 2 non-null object
dtypes: bool(3), object(14)
memory usage: 87.6+ KB
df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 990 entries, 0 to 989
Data columns (total 30 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 506 non-null object
1 titles 532 non-null object
2 links 531 non-null object
3 Շատ տարածված արտահայտություն 435 non-null object
4 Տեքստ 461 non-null object
5 Հիմնական դերասաններ 458 non-null object
6 հիմնական դերասանների քանակ 449 non-null object
7 Դերերի անուններ 453 non-null object
8 Unnamed: 8 453 non-null object
9 Լուսավորվածություն 459 non-null object
10 Լեզուներ 458 non-null object
11 Արված է 989 non-null float64
12 Ստուգված է 990 non-null bool
13 Unnamed: 13 176 non-null object
14 Unnamed: 14 124 non-null object
15 Unnamed: 15 2 non-null object
16 Unnamed: 16 0 non-null float64
17 Unnamed: 17 0 non-null float64
18 Unnamed: 18 0 non-null float64
19 Unnamed: 19 0 non-null float64
20 Unnamed: 20 0 non-null float64
21 Unnamed: 21 0 non-null float64
22 Unnamed: 22 0 non-null float64
23 Unnamed: 23 0 non-null float64
24 Unnamed: 24 0 non-null float64
25 Unnamed: 25 0 non-null float64
26 Unnamed: 26 0 non-null float64
27 Unnamed: 27 0 non-null float64
28 Unnamed: 28 2 non-null object
29 Unnamed: 29 2 non-null float64
dtypes: bool(1), float64(14), object(15)
memory usage: 225.4+ KB
= ['titles', 'links', 'Շատ տարածված արտահայտություն',
cols 'Տեքստ', 'Հիմնական դերասաններ', 'հիմնական դերասանների քանակ',
'Դերերի անուններ', 'Վայր', 'Լուսավորվածություն', 'Լեզուներ', 'Արված է']
= df1[cols]
df1
df1# df2 = df2[cols]
titles | links | Շատ տարածված արտահայտություն | Տեքստ | Հիմնական դերասաններ | հիմնական դերասանների քանակ | Դերերի անուններ | Վայր | Լուսավորվածություն | Լեզուներ | Արված է | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Kargin Haghordum sketch 401 (Hayko Mko) | https://www.youtube.com/watch?v=2311QdBFp4o&li... | NaN | Աայ; Գագ ջան այ տենց դանդաղ; Գագ ջան մի քիչ դա... | Մկո, ոստիկան | 1 | Գագ | Տուն | լուսավոր | հայերեն | True |
1 | Kargin Haghordum sketch 402 (Hayko Mko) | https://www.youtube.com/watch?v=4SBSBGc4dcc&li... | սպասի ազիզ ջան հլը մի հաշվի էս էլի ես եմ | Աաաախ; ուրեմն նաի ազիզ ջան հեսա էդ պատուհանից ... | Մկո, փոքր երեխա | 2 | Ոչ մի | Տուն | լուսավոր | հայերեն | True |
2 | Kargin Haghordum sketch 403 (Hayko Mko) | https://www.youtube.com/watch?v=pi2au8rx0XQ&li... | NaN | ահա վերջ գնաաց; էէհ; արա ես ինչ անձրև սկսեց սա... | Մկո, Հայկո, Մկո | 3 | Ոչ մի | Բնության գիրկ | լուսավոր հետո մութ | հայերեն | True |
3 | Kargin Haghordum sketch 419 (Hayko Mko) | https://www.youtube.com/watch?v=YxcS2fTHrII&li... | Թու արա էլի մտքերով ընգա | Չէ Վարսիկ ջան էսօր չգնացի ասի մնամ տանը մի քիչ... | Հայկո, Մկո | 2 | Վաչիկ | Տուն | լուսավոր | հայերեն | True |
4 | Kargin Haghordum sketch 421 (Hayko Mko) | https://www.youtube.com/watch?v=DvZ-qwJ9C0Y&li... | Ընչի հըմար | Հիմա ի՞նչ, միտինգ են անու՞մ; Ուզածները ի՞նչ ա;... | Հայկո, Մկո | 2 | Ոչ մի | Ավտոմեքենա | լուսավոր | հայերեն | True |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
774 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | False |
775 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | False |
776 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | False |
777 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | False |
778 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | False |
779 rows × 11 columns
={"Unnamed: 8": "Վայր"}, inplace=True) df2.rename(columns
= df2[cols] df2
= pd.concat([df1, df2], axis=0) df
df.shape
(1769, 11)
sum() / len(df) * 100 df.isna().
titles 60.655738
links 60.712267
Շատ տարածված արտահայտություն 68.626343
Տեքստ 66.082533
Հիմնական դերասաններ 65.743358
հիմնական դերասանների քանակ 66.873940
Դերերի անուններ 65.856416
Վայր 65.460712
Լուսավորվածություն 65.121538
Լեզուներ 65.347654
Արված է 0.056529
dtype: float64
df.tail()
titles | links | Շատ տարածված արտահայտություն | Տեքստ | Հիմնական դերասաններ | հիմնական դերասանների քանակ | Դերերի անուններ | Վայր | Լուսավորվածություն | Լեզուներ | Արված է | |
---|---|---|---|---|---|---|---|---|---|---|---|
985 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 |
986 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 |
987 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 |
988 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 |
989 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 |
= df[df.titles.notna()] df
sum() / len(df) * 100 df.isna().
titles 0.000000
links 0.143678
Շատ տարածված արտահայտություն 20.258621
Տեքստ 13.793103
Հիմնական դերասաններ 12.931034
հիմնական դերասանների քանակ 15.804598
Դերերի անուններ 13.218391
Վայր 12.212644
Լուսավորվածություն 11.350575
Լեզուներ 11.925287
Արված է 0.143678
dtype: float64
={
df.rename(columns"Շատ տարածված արտահայտություն": "text_common",
"Տեքստ": "text",
"Հիմնական դերասաններ": "main_actors",
"հիմնական դերասանների քանակ": "main_actors_count",
"Դերերի անուններ": "roles_names",
"Վայր": "location",
"Լուսավորվածություն": "lighting",
"Լեզուներ": "languages",
"Արված է": "done"
=True) }, inplace
"assets", "kargin.csv")) df.to_csv(Path(
import plotly.express as px
# Data Cleaning
"location"] = df["location"].str.capitalize() df[
= df.value_counts("location", normalize=True)
place_df
="Այլ(գրեք ավելացնենք)", inplace=True)
place_df.drop(index
px.bar(place_df)
Unable to display output for mime type(s): application/vnd.plotly.v1+json
"main_actors_count"].dtype df[
dtype('O')
def fix_main_actor(x) -> int:
try:
return int(x)
except Exception:
return 0
"main_actors_count_int"] = df["main_actors_count"].apply(fix_main_actor)#.value_counts() # masking df[
"main_actors_count_int"].describe() df[
count 696.000000
mean 2.280172
std 1.488743
min 0.000000
25% 2.000000
50% 2.000000
75% 3.000000
max 13.000000
Name: main_actors_count_int, dtype: float64
= df[df["location"].isin(["Տուն", "Դուրս"])] df_only_2_locations
"main_actors_count_int", color="languages", barmode="stack",
px.histogram(df_only_2_locations, ="location") facet_row
Unable to display output for mime type(s): application/vnd.plotly.v1+json
= "պանիր" search_text
"text"].fillna("", inplace=True) df[
C:\Users\hayk_\AppData\Local\Temp\ipykernel_30016\2582040697.py:1: FutureWarning:
A value is trying to be set on a copy of a DataFrame or Series through chained assignment using an inplace method.
The behavior will change in pandas 3.0. This inplace method will never work because the intermediate object on which we are setting values always behaves as a copy.
For example, when doing 'df[col].method(value, inplace=True)', try using 'df.method({col: value}, inplace=True)' or df[col] = df[col].method(value) instead, to perform the operation inplace on the original object.
"text"].str.contains(search_text)] df[df[
titles | links | text_common | text | main_actors | main_actors_count | roles_names | location | lighting | languages | done | main_actors_count_int | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
112 | Kargin Haghordum sketch 258 (Hayko Mko) | https://www.youtube.com/watch?v=PU3ourr4rKA&li... | իրեքը չորսի վրա | Ուշադրությունը այստեղ դոնչիկը բարձր բարձր այ է... | Հայկո, Մկո... | NaN | NaN | Այլ(գրեք ավելացնենք) | լուսավոր | հայերեն | 1.0 | 0 |
151 | Kargin Haghordum sketch 330 | https://www.youtube.com/watch?v=KoKuzghICis&li... | NaN | Էրեխեքի կենացը; ձեր բոլորի էրեխեքի կենացը; դե ... | Հայկո, Մկո ․․․․ | 5 | ոչ մի | Տուն | լուսավոր | այլ | 0.0 | 5 |
235 | Kargin Haghordum sketch 577 (Hayko Mko) | https://www.youtube.com/watch?v=PyjE3Bg7VPQ&li... | Արա Գևորիկ դու էնքան հաց ու պանիր պտի ուտես, ո... | ֊Հմի էդ սեղանի համար 4 հատ ոտա հա պետք տաշել։ ... | Հայկո, Մկո | 2 | Ուստա Վազգեն, Գևորիկ | Արհեստանոց | լուսավոր | հայերեն | 1.0 | 2 |
247 | Kargin Haghordum sketch 234 (Hayko Mko) | https://www.youtube.com/watch?v=J8d87i6o5Sw&li... | ձմերուկու կեսը | Բարի օր ապեր; բարի օր ապեր; ձմերուկ ունեքն հե... | Հայկո,Մկո.. | NaN | NaN | Խանութ | լուսավոր | հայերեն | 1.0 | 0 |
265 | Kargin Haghordum sketch 418 (Hayko Mko) | https://www.youtube.com/watch?v=Xl9mFRcvF6Y&li... | բա ես հինգը մասնագիտության տեր տղա արա մոզգ ար... | Բութուլ ջան էս 2 մեշոքը էս կողմ դիր,էս յաշիկնե... | Հայկո, Մկո | 2 | Բութուլ | Այլ(գրեք ավելացնենք) | մութ | հայերեն | 1.0 | 2 |
520 | Kargin Haghordum sketch 186 (Hayko Mko) | https://www.youtube.com/watch?v=spddQrkdohk&li... | նայում եմ էս ձեր ռեստորանը պրեստիժնի ռեստորանա... | ֊Բալես հլը մի հատ պամիդոր խիարը բացա։ Կնիկ դու... | Հայկո, Մկո, Աշոտ | 3 | Ոչ մի | Ռեստորան | լուսավոր | հայերեն | 1.0 | 3 |
!uv pip install fuzzywuzzy
from fuzzywuzzy import fuzz
def get_similarity(text_kargin, search_text):
return fuzz.token_sort_ratio(search_text.lower(), text_kargin)
'similaratiy'] = df["text"].apply(lambda x: get_similarity(x, search_text)) df[
"similaratiy", ascending=False) df.sort_values(
titles | links | text_common | text | main_actors | main_actors_count | roles_names | location | lighting | languages | done | main_actors_count_int | similaratiy | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
95 | Kargin Haghordum sketch 679 (Hayko Mko) | https://www.youtube.com/watch?v=4TDBR2IniV8&li... | աաաաա | աաաաա; կարգին առանց բառ | Հայկո, Մկո | 2 | Ոչ մի | Բնության գիրկ | լուսավոր | այլ | 1.0 | 2 | 22 |
101 | Kargin Haghordum sketch 247 (Hayko Mko) | https://www.youtube.com/watch?v=NLoJXXo_cSw&li... | ես իմ կնգա հետ ամեն օր քնում եմ հմի տուն չէթամ | Էս էլ խմենք մեր ծնողների | Հայկո, Մկո | NaN | Վչո | Բնության գիրկ | լուսավոր | հայերեն | 1.0 | 0 | 21 |
126 | Kargin Haghordum sketch 272 (Hayko Mko) | https://www.youtube.com/watch?v=y1yeDFDTxy4&li... | Եվ այդ իջոցառումները կազմակերպվում են | Պարոն նախարար,իսկ տանկերի հարցը ոնցա լուծվելու: | Պարոն նախարար Պարոն գեներալի աղջկան եմ սիրահարված | Հայկո,Մկո | Նախարար,սերժանտ | Բանակ | լուսավոր | հայերեն | 1.0 | 0 | 16 |
120 | Kargin Haghordum sketch 266 (Hayko Mko) | https://www.youtube.com/watch?v=82r9vHp8k0Y&li... | Այ ախպեր էս ինչ ես անում, | Ինչ եմ անում որ։Արա հընգեի ջանվերևից ընենց արա | ինչ շումախր ցավտ տա | Հայկո,Մկո | Ոստիկան,վարորդ | Դուրս | լուսավոր | հայերեն | 1.0 | 0 | 16 |
122 | Kargin Haghordum sketch 268 (Hayko Mko) | https://www.youtube.com/watch?v=UhyVa3nczbg&li... | Սերժանտ։Բարև ձեզ։ Մի հատ շատ | Իմ հոգին անարատ է,իմ մոտ ամեն ինչ կարգին սարքին է | ինձ թվումա դա քեզ թվումա | Հայկո Մկո | Սերժանտ | Դուրս | լուսավոր | հայերեն | 1.0 | 0 | 15 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
13 | Kargin Haghordum sketch 430 (Hayko Mko) | https://www.youtube.com/watch?v=sSIXTq8KlTw&li... | NaN | Հայկո, Մկո, Նազենի | 3 | Այծեմիկ, Սուլեյման | Անապատ | լուսավոր | հայերեն | 0.0 | 3 | 0 | |
12 | Kargin Haghordum sketch 429 (Hayko Mko) | https://www.youtube.com/watch?v=RcTQt_nnpbA&li... | NaN | Հայկո, Մկո | 2 | Ոչ մի | Այլ(գրեք ավելացնենք) | լուսավոր | հայերեն | 0.0 | 2 | 0 | |
11 | Kargin Haghordum sketch 428 (Hayko Mko) | https://www.youtube.com/watch?v=7-ecmDcVc08&li... | NaN | Հայկո, Մկո | 2 | Ոչ մի | Տուն | լուսավոր | հայերեն | 0.0 | 2 | 0 | |
530 | Kargin Haghordum sketch 199 (Hayko Mko) | https://www.youtube.com/watch?v=BJnORz1WFMo&li... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0 | 0 | |
531 | Kargin Haghordum sketch 200 (Hayko Mko) | https://www.youtube.com/watch?v=8U7grHLj-uY&li... | Ախր էս բուժման ձևը որ շուտ իմանայի 5 տարի առաջ... | -Ալո, ալո հա ես հենց հիմա իջնում եմ, իջնում, վ... | Հայկո, Մկո | 2 | Բժիշկ, Հայկանուշ, Պարգև | Հիվանդանոց | լուսավոր | հայերեն+ռուսերեն | 1.0 | 2 | 0 |
696 rows × 13 columns
# եթե ցիկլ պետք ա ֆռալ երբևէ, այ սենց արեք՝
for ind, val in df.iterrows():
print(ind, val)
break
0 titles Kargin Haghordum sketch 401 (Hayko Mko)
links https://www.youtube.com/watch?v=2311QdBFp4o&li...
text_common NaN
text Աայ; Գագ ջան այ տենց դանդաղ; Գագ ջան մի քիչ դա...
main_actors Մկո, ոստիկան
main_actors_count 1
roles_names Գագ
location Տուն
lighting լուսավոր
languages հայերեն
done 1.0
main_actors_count_int 1
Name: 0, dtype: object
from pytubefix import YouTube
def get_video_info(video_id):
= YouTube(video_id)
yt return {
"title": yt.title,
"views": yt.views,
"length": yt.length,
"author": yt.author,
"published_at": yt.publish_date
}
= df.head() df_small
"youtube_info"] = df_small["links"].apply(get_video_info) df_small[
"youtube_info"] df_small[
0 {'title': 'Kargin Haghordum sketch 401 (Hayko ...
1 {'title': 'Kargin Haghordum sketch 402 (Hayko ...
2 {'title': 'Kargin Haghordum sketch 403 (Hayko ...
3 {'title': 'Kargin Haghordum sketch 419 (Hayko ...
4 {'title': 'Kargin Haghordum sketch 421 (Hayko ...
Name: youtube_info, dtype: object
= df.groupby(["lighting", "languages"]).size().reset_index()
lang_light ={0:"count"}, inplace=True) lang_light.rename(columns
"lighting", "languages", "count") px.density_heatmap(lang_light,
Unable to display output for mime type(s): application/vnd.plotly.v1+json