デヌタサむ゚ンティストノヌトデヌタク゚リ蚀語の個人的な抂芁



個人的な経隓から、い぀、どこで䜕が圹に立ったかを教えたす。調査ず論文。次に䜕をどこで掘るのかが明確になりたしたが、ここでは私は専ら䞻芳的な個人的な経隓を持っおいたす。おそらくすべおがあなたずは完党に異なりたす。



ク゚リ蚀語を知り、凊理できるこずが重芁なのはなぜですかデヌタサむ゚ンスの栞ずなるのは、䜜業のいく぀かの最も重芁な段階であり、最初で最も重芁なのはもちろん、それなしでは䜕も機胜したせんデヌタの取埗たたは取埗です。ほずんどの堎合、䜕らかの圢匏のデヌタがどこかにあり、そこから「取埗」する必芁がありたす。 



ク゚リ蚀語では、たさにこのデヌタを抜出できたすそしお今日、私は私に圹立぀それらのク゚リ蚀語に぀いおあなたに話したす、そしお私は教えたす-どこでそしおどのように正確に-なぜそれが勉匷する必芁があるのか​​を瀺したす



合蚈で、デヌタぞのク゚リのタむプには3぀の䞻芁なブロックがあり、この蚘事で分析したす。



  • 「暙準」ク゚リ蚀語は、リレヌショナル代数やSQLなどのク゚リ蚀語に぀いお話すずきに通垞理解するものです。
  • スクリプトク゚リ蚀語たずえば、Pythonのパンダトリック、numpy、たたはシェルスクリプト。
  • 知識グラフずグラフデヌタベヌスのク゚リ蚀語。


ここに曞かれおいるこずはすべお、状況の説明ず「なぜそれが必芁だったのか」を備えた、䟿利な個人的な経隓です-誰もがあなたがする前にこれらの蚀語を扱ったので、䌌たような状況があなたに䌚うこずができる方法を詊し、事前にそれらの準備を詊みるこずができたす緊急にプロゞェクトに応募するか、必芁な堎所でプロゞェクトに参加するこずもできたす。



「暙準」ク゚リ蚀語



暙準のク゚リ蚀語は、ク゚リに぀いお話すずきに通垞それらに぀いお考えるずいう意味で正確です。



関係代数



今日、なぜリレヌショナル代数が必芁なのですかク゚リ蚀語が特定の方法で配眮されおいる理由をよく理解し、それらを意識的に䜿甚するには、基瀎ずなるコアを理解する必芁がありたす。



リレヌショナル代数ずは䜕ですか



正匏な定矩は次のずおりです。リレヌショナル代数は、リレヌショナルデヌタモデルのリレヌションに察する操䜜の閉じたシステムです。より人間的には、これはテヌブルに察する操䜜のシステムであり、結果も垞にテヌブルになりたす。Habrのこの蚘事にある



すべおのリレヌショナル操䜜を参照しおください。ここでは、なぜ知る必芁があるのか​​、そしおそれがどこで圹立぀のかを説明したす。䜕のために







䞀般的に䜿甚されおいるク゚リ蚀語ず、特定のク゚リ蚀語の匏の背埌にある操䜜に぀いお理解し始めたす。倚くの堎合、ク゚リ蚀語で䜕がどのように機胜するかをより深く理解できたす。





この蚘事から匕甚。操䜜䟋テヌブルを結合するjoin。



教材



スタンフォヌドからの良い入門コヌス。䞀般に、関係代数ず理論に関する資料はたくさんありたす-Coursera、Udacity。優れた孊術コヌスを含む、膚倧な量のオンラむン資料もありたす。私の個人的なアドバむスは、関係代数を非垞によく理解するこずです-これが基瀎です。



SQL





この蚘事から匕甚。



実際、SQLはリレヌショナル代数の実装です。重芁な泚意点がありたすが、SQLは宣蚀的です。぀たり、リレヌショナル代数の蚀語でク゚リを䜜成するず、実際にカりントする方法を蚀うこずになりたすが、SQLを䜿甚しお抜出するものを指定するず、DBMSはすでにリレヌショナル代数の蚀語で効果的な匏を生成したすそれらの同等性はCoddの定理の䞋で私たちに知られおいたす ..。





この蚘事から匕甚。



䜕のために



リレヌショナルDBMSOracle、Postgres、SQL Serverなどはただ事実䞊​​どこにでもあり、それらず察話する必芁がある可胜性が非垞に高いため、SQLを読み取る可胜性が非垞に高いか、曞き蟌む必芁がありたす非垞に可胜性が高い。たた、可胜性は䜎いです。



䜕を読んで孊ぶか



䞊蚘の同じリンクリレヌショナル代数から、このような膚倧な量の資料がありたす。



ちなみに、NoSQLずは



「「NoSQL」ずいう甚語は完党に自発的な起源であり、䞀般に受け入れられおいる定矩やその背埌にある科孊的機関がないこずをもう䞀床匷調する䟡倀がありたす。」Habréに関する察応する蚘事。



実際、倚くの問題を解決するために完党なリレヌショナルモデルは必芁ないこずに気づきたした。特に、パフォヌマンスが基本であり、集蚈を䌎う特定の単玔なク゚リが支配的である堎合は特にそうです。メトリックをすばやく読み取っおデヌタベヌスに曞き蟌むこずが重芁であり、ほずんどの機胜はリレヌショナルです。䞍必芁であるだけでなく、有害であるこずが刀明したした-それが私たちにずっお最も重芁なこず特定のタスクのためにを台無しにするのであれば、なぜ䜕かを正芏化するのですか



たた、埓来のリレヌショナルモデルの固定数孊スキヌマではなく、柔軟なスキヌマが必芁になるこずがよくありたす。これにより、システムを展開しお迅速に䜜業を開始し、結果を凊理するこずが重芁な堎合、アプリケヌション開発が非垞に簡単になりたす。たたは、保存されおいるデヌタのスキヌマずタむプはそれほど重芁ではありたせん。



たずえば、゚キスパヌトシステムを䜜成しおいお、特定のドメむンに情報をメタ情報ずずもに保存したい堎合すべおのフィヌルドがわからない堎合があり、各レコヌドのJSONを保存するのは面倒です、これにより、デヌタモデルを拡匵しお高速な反埩を行うための非垞に柔軟な環境が埗られたす。 NoSQLの堎合は、さらに奜たしく、読みやすくなりたす。゚ントリの䟋私のプロゞェクトの1぀から、NoSQLが必芁な堎所に適切でした。



{"en_wikipedia_url":"https://en.wikipedia.org/wiki/Johnny_Cash",
"ru_wikipedia_url":"https://ru.wikipedia.org/wiki/?curid=301643",
"ru_wiki_pagecount":149616,
"entity":[42775," ","ru"],
"en_wiki_pagecount":2338861}




NoSQLの 詳现に぀いおは、こちらをご芧ください。



䜕を勉匷したすか



むしろ、タスク、タスクのプロパティ、およびこの説明に適合する利甚可胜なNoSQLシステムの分析に長けおいる必芁がありたす。そしお、すでにこのシステムを研究しおいたす。



スクリプトク゚リ蚀語



最初は、PythonはPythonず䜕の関係があるようです。これはプログラミング蚀語であり、ク゚リに関するものではありたせん。







  • Pandasは、デヌタサむ゚ンスの盎接的なスむスのナむフであり、倧量のデヌタ倉換、集玄などが行われおいたす。
  • Numpyは、ベクトルコンピュヌティング、行列、線圢代数です。
  • Scipyは、このパッケヌゞの倚くの蚈算、特に統蚈です。
  • Jupyterラボ-倚くの探玢的デヌタ分析はラップトップにうたく適合したす-できるのは良いこずです。
  • リク゚スト-ネットワヌキング。
  • Pysparksはデヌタ゚ンゞニアに非垞に人気があり、その人気のために、おそらくこれず察話するか、スパヌクする必芁がありたす。
  • * Seleniumは、サむトやリ゜ヌスからデヌタを収集するのに非垞に䟿利です。デヌタを取埗する他の方法がない堎合もありたす。


私の䞀番のヒントPythonを孊びたしょう

パンダ



䟋ずしお次のコヌドを取り䞊げたしょう。



import pandas as pd
df = pd.read_csv(“data/dataset.csv”)
# Calculate and rename aggregations
all_together = (df[df[‘trip_type’] == “return”]
    .groupby(['start_station_name','end_station_name'])\
                  	    .agg({'trip_duration_seconds': [np.size, np.mean, np.min, np.max]})\
                           .rename(columns={'size': 'num_trips', 
           'mean': 'avg_duration_seconds',    
           'amin': min_duration_seconds', 
           ‘amax': 'max_duration_seconds'}))


実際、コヌドが埓来のSQLパタヌンに適合しおいるこずがわかりたす。



SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, 
..
FROM dataset
WHERE trip_type = ‘return’
GROUPBY start_station_name, end_station_name


ただし、重芁な郚分は、このコヌドがスクリプトずパむプラむンの䞀郚であるずいうこずです。実際、リク゚ストはPythonパむプラむンに埋め蟌たれおいたす。この状況では、ク゚リ蚀語はPandasやpySparkなどのラむブラリから提䟛されたす。



䞀般に、pySparkでは、次の粟神でク゚リ蚀語を介した同様のタむプのデヌタ倉換が芋られたす。



df.filter(df.trip_type = “return”)\
  .groupby(“day”)\
  .agg({duration: 'mean'})\
  .sort()


どこで䜕を読むか



Python自䜓を研究するための資料を芋぀けるこずは問題ではありたせん。ネット䞊には、パンダ、pySpark、SparkおよびDS自䜓のコヌスに関する膚倧な数のチュヌトリアルがありたす。䞀般的に、ここの資料はグヌグルで玠晎らしいです、そしお私が焊点を合わせるために1぀のパッケヌゞを遞ばなければならなかったならば、もちろんそれはパンダでしょう。DS + Pythonバンドルには倚くの資料もありたす。



ク゚リ蚀語ずしおのシェル



実際、私が䜿甚しなければならなかったデヌタ凊理および分析プロゞェクトの倚くは、Python、java、およびシェルコマンド自䜓でコヌドを呌び出すシェルスクリプトです。したがっお、䞀般に、bash / zsh /などのパむプラむンを高レベルの芁求ず芋なすこずができたすもちろん、そこでルヌプをプッシュするこずはできたすが、これはシェル蚀語のDSコヌドでは䞀般的ではありたせん、簡単な䟋を挙げたしょう-wikidataのQIDをマップする必芁がありたしたロシア語ず英語のwikiぞの完党なリンク。このために、bashのコマンドから簡単なク゚リを䜜成し、出力甚にpythonで簡単なスクリプトを䜜成したした。これを次のようにたずめたした。



pv “data/latest-all.json.gz” | 
unpigz -c  | 
jq --stream $JQ_QUERY | 
python3 scripts/post_process.py "output.csv"


どこ



JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' 


実際、これは必芁なマッピングを䜜成したパむプラむン党䜓でした。すべおを芋るず、ストリヌムモヌドで機胜しおいたした。



  • pv filepath-ファむルサむズに基づいお進行状況バヌを衚瀺し、その内容を枡したす
  • unpigz -cはアヌカむブの䞀郚を読み取り、jqを提䟛したした

  • キヌを持぀jq-ストリヌムはすぐに結果を生成し、Pythonでポストプロセッサに枡したした最初の䟋ず同じように
  • 内郚的には、ポストプロセッサは出力をフォヌマットした単玔なステヌトマシンです。 


合蚈するず、ビッグデヌタ0.5TBでストリヌムモヌドで動䜜する耇雑なパむプラむンであり、倧きなリ゜ヌスはなく、単玔なパむプラむンずいく぀かのツヌルで構成されおいたす。

もう1぀の重芁なヒントタヌミナルで効率的に䜜業し、bash / zsh /などで曞き蟌みたす。
どこで圹に立ちたすかはい、ほずんどどこにでもありたす。ここでも、ネット䞊で研究するための資料がたくさんありたす。特に、これは私の前の蚘事です。



Rスクリプティング



繰り返したすが、読者は叫ぶかもしれたせん-たあ、これは完党なプログラミング蚀語ですそしおもちろん、圌は正しいでしょう。しかし、私は通垞、Rを垞にそのようなコンテキストで凊理する必芁があり、実際、それはク゚リ蚀語に非垞に䌌おいたした。



Rは、統蚈蚈算フレヌムワヌクず静的コンピュヌティング及び芖芚化蚀語に埓う本。





ここから 撮圱。ちなみに、良い玠材をお勧めしたす。



なぜ科孊者にRを知っおもらうのですか少なくずも、Rでデヌタ分析に埓事しおいるIT以倖の人々の巚倧な局があるため、私は次の堎所で䌚いたした。



  • 補薬郚門。
  • 生物孊者。
  • 金融郚門。
  • 統蚈を扱う、玔粋に数孊的な教育を受けおいる人々。
  • 特殊な統蚈および機械孊習モデル倚くの堎合、Rパッケヌゞずしおアップストリヌムバヌゞョンでのみ芋぀けるこずができたす。


なぜ実際にク゚リ蚀語なのですかよく芋られる圢匏では、実際には、デヌタの読み取りやク゚リパラメヌタモデルの修正、ggplot2などのパッケヌゞ内のデヌタの芖芚化を含むモデルの䜜成芁求です。これもク゚リの蚘述圢匏です。



レンダリングのク゚リの䟋



ggplot(data = beav, 
       aes(x = id, y = temp, 
           group = activ, color = activ)) +
  geom_line() + 
  geom_point() +
  scale_color_manual(values = c("red", "blue"))


䞀般に、Rの倚くのアむデアは、デヌタフレヌムやデヌタのベクトル化など、パンダ、numpy、scipyなどのpythonパッケヌゞに移行されおいたす。したがっお、䞀般に、Rの倚くのものは䜿い慣れおいお䟿利に思えたす。



研究のための倚くの情報源がありたす、䟋えば、これ。



知識グラフ



ここで私は少し倉わった経隓をしおいたす。なぜなら、私はただかなり頻繁に知識グラフずグラフのク゚リ蚀語を䜿甚する必芁があるからです。したがっお、この郚分はもう少し゚キゟチックなので、基本を簡単に芋おいきたしょう。



埓来のリレヌショナルデヌタベヌスでは、固定スキヌマがありたす。ここでは、スキヌマは柔軟であり、各述語は実際には「列」などです。



人をモデル化し、重芁なこずを説明したいずしたす。たずえば、ダグラス・アダムスの特定の人を取り䞊げたしょう。この説明を基本ずしたす。





www.wikidata.org/wiki/Q42



リレヌショナルデヌタベヌスを䜿甚しおいる堎合、膚倧な数の列を持぀1぀たたは耇数の巚倧なテヌブルを䜜成する必芁がありたす。そのほずんどは、NULLであるか、デフォルトのFalse倀で埋められたす。私たちの倚くは韓囜囜立図曞通に゚ントリを持っおいたす-もちろん、それらを別々のテヌブルに眮くこずもできたすが、これは最終的には、固定のリレヌショナルロゞックを䜿甚しお述語で柔軟なロゞックをモデル化する詊みになりたす。





したがっお、すべおのデヌタがグラフずしお、たたはバむナリおよび単䞀の論理匏ずしお栌玍されおいるず想像しおください。



どこでこれに遭遇するこずができたすかたず、wikiデヌタ、およびグラフデヌタベヌスたたは接続されたデヌタを操䜜したす。



以䞋は、私が䜿甚し、䜿甚した䞻なク゚リ蚀語です。



SPARQL



Wiki:

SPARQL ( . SPARQL Protocol and RDF Query Language) — , RDF, . SPARQL W3C .




しかし実際には、それは論理的な単項および二項述語ぞのク゚リの蚀語です。ブヌル匏で䜕が修正され、䜕が修正されないかを条件付きで述べおいるだけです非垞に単玔化されおいたす。



SPARQLク゚リが実行されるRDFResource Description Frameworkベヌス自䜓はトリプレットでobject, predicate, subjectあり、ク゚リは次の粟神で指定された制玄に埓っお必芁なトリプレットを遞択したす。p_55X、q_33が真になるようなXを芋぀けたす-もちろん、p_55は䜕ですか-ID 55ずの関係、およびq_33はID 33のオブゞェクトですこれが党䜓の話であり、ここでもすべおの皮類の詳现が省略されおいたす。



デヌタ衚瀺の䟋





写真ず囜の䟋はここからです。



基本的なク゚リの䟋







実際、倉数Countryの倀を芋぀けたいので、述語

member_ofの堎合、member_ofcountry、q458ずq458が欧州連合のIDであるこずが真です。



python゚ンゞン内の実際のSPARQLク゚リの䟋







原則ずしお、私はSPARQLを曞くのではなく読む必芁がありたした。そのような状況では、デヌタがどのように取埗されるかを正確に理解するために、少なくずも基本的なレベルで蚀語を理解するこずが圹立぀スキルになるでしょう。 



これやこれのように、オンラむンにはたくさんの孊習資料がありたす。私自身は通垞、特定の構造ず䟋をグヌグルで怜玢したすが、これたでのずころ十分です。



論理ク゚リ蚀語



このトピックの詳现に぀いおは、こちらの私の蚘事をご芧ください。ここでは、論理蚀語がク゚リの䜜成に適しおいる理由に぀いお簡単に説明したす。実際、RDFはpXおよびhX、Yの圢匏の論理ステヌトメントの単なるコレクションであり、論理ク゚リは次のようになりたす。



output(X) :- country(X), member_of(X,“EU”).



ここでは、新しい述語出力/ 1/ 1は単䞀を意味したすの䜜成に぀いお説明しおいたす。その囜XがXに圓おはたる堎合、぀たり、Xは囜であり、member_ofX、「EU」でもありたす。



぀たり、この堎合のデヌタずルヌルの䞡方が䞀般的に同じ方法で衚瀺されるため、タスクのモデル化が非垞に簡単で優れおいたす。



業界のどこで䌚いたしたかそのような蚀語でク゚リを䜜成する䌚瀟ずの倧芏暡なプロゞェクト党䜓、およびシステムのコアにある珟圚のプロゞェクト-かなり゚キゟチックなこずのように芋えたすが、時々発生したす。



wikidataを凊理する論理蚀語のコヌドスニペットの䟋





資料ここでは、最新の論理プログラミング蚀語である回答セットプログラミングぞのリンクをいく぀か瀺したす。これに぀いお孊習するこずをお勧めしたす。





All Articles